2017-07-12 2 views
0

J'ai un WSDL avec plusieurs schémas et j'essaie d'obtenir wsimport pour générer du code dans les paquets de mon choix par schéma. En utilisant l'option -b avec un fichier de liaison JAX-WS/JAX-B, j'ai réussi à le faire.Génération de paquets par schéma avec les liaisons wsimport et JAX ignore les classes de service

Seules deux classes sont toujours générées dans le chemin par défaut: l'interface de service et l'implémentation du service. En revanche, avec l'option -p, toutes les classes sont générées en un seul paquet, mais lorsque j'utilise toutes les liaisons définies dans le fichier externe, elles sont ignorées.

Quel est le XPath pour le service afin que wsimport génère ces fichiers dans mes paquets? J'ai essayé des choses comme

<jaxws:bindings node="wsdl:definitions/wsdl:service"> ... 
<jaxws:bindings node="wsdl:definitions/wsdl:binding"> ... 
<jaxws:bindings node="wsdl:definitions/wsdl:portType"> ... 

mais ni eu aucun effet.

Exemple:

<jaxws:bindings 
    xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    wsdlLocation="myService.wsdl" 
> 

    <!-- this works for schemas --> 
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://org.com/service/1.0']" > 
     <jaxb:schemaBindings> 
      <jaxb:package name="com.myorg.service.v1" /> 
     </jaxb:schemaBindings> 
    </jaxws:bindings> 

    <!-- the following does nothing --> 
    <jaxws:bindings node="wsdl:definitions/wsdl:service"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="com.myorg.service.v1" /> 
     </jaxb:schemaBindings> 
    </jaxws:bindings> 

</jaxws:bindings> 
+0

Qu'entendez-vous par "par schéma"? L'interface de service et son implémentation ne sont-elles pas indépendantes des schémas XML? – VGR

+0

Le service est, mais les objets requête/réponse utilisés sont répartis sur différents schémas. – Stroboskop

Répondre

1

Selon le JAX-WS specification, l'article 8.4.1, vous n'avez pas besoin d'un XPath pour spécifier un package pour les classes JAX-WS comme les classes de service et le port:

<jaxws:bindings wsdlLocation="http://example.org/foo.wsdl"> 
    <jaxws:package name="com.acme.foo"/>