2011-04-22 1 views
4

J'utilise la tâche Ant suivante pour générer le code côté client pour un point de terminaison de service Web:wsimport ne génère pas setters pour les collections

<wsimport wsdl="target/classes/META-INF/wsdl/MyService.wsdl" 
       sourcedestdir="target/wsimport" 
       verbose="true" 
       xnocompile="false" 
       xendorsed="true" 
       destdir="target/classes" 
       keep="true" 
       package="com.example.client.jaxws" 
       wsdlLocation="/META-INF/wsdl/MyService.wsdl" /> 

Cela génère des classes que les clients utilisent pour transmettre des données au service Web , par exemple

class Foo { 

    String name; 
    List<String> bars; 

    public void setName(String name) { 
    this.name = name; 
    } 

    public String getName() { 
    return name; 
    } 

    public List<String> getBars() { 
    return bars; 
    } 
} 

Notez que pour la propriété bars la classe générée ne comprend pas un poseur, de sorte que le client devrait y accéder via:

someFoo.getBars().add("val"); 

Cependant, l'absence d'un setter signifie que cette classe a gagné » t travailler avec divers outils qui s'appuient sur la convention JavaBeans (par exemple Dozer), donc je voudrais forcer wsimport à générer les setters. J'ai trouvé un thread que vous pouvez forcer la génération indique setter en ajoutant ce qui suit à la tâche Ant

<xjcarg value="-Xcollection-setter-injector"/> 

Cependant, ce fil est assez vieux, et ci-dessus ne semble pas fonctionner plus.

Répondre

1

cette fonctionnalité est fournie par un plugin, le plugin "jaxb2 commons collection setter injector". avez-vous inclus ce pot sur votre classpath xjc?

+0

Je présume que vous signifie un plugin Ant? –

+0

@Don - non, je veux dire un plugin jaxb – jtahlborn

2

Vous devez inclure une bibliothèque d'extension jaxb xjc dans votre chemin de classe de construction et utiliser le -Xsetters xjcArg. Cela entraînera vos stubs générés pour avoir des setters pour vos objets List.

Pour les utilisateurs Maven avec le jaxws-maven-plugin, il ressemble à ceci:

 <!-- generates webservice client stubs using wsimport --> 
     <plugin> 
      <groupId>org.jvnet.jax-ws-commons</groupId> 
      <artifactId>jaxws-maven-plugin</artifactId> 
      <version>${jaxws-maven-plugin.version}</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>wsimport</goal> 
        </goals> 
        <configuration> 
         <wsdlDirectory>${basedir}/src/main/resources/${resources-folder}/wsdl/v1</wsdlDirectory> 
         <wsdlFile>${wsdlFileName}</wsdlFile> 
         <bindingFiles> 
          <bindingFile>${basedir}/src/main/resources/jaxb-bindings.xml</bindingFile> 
         </bindingFiles> 
         <vmArgs> 
          <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg> <!-- necessary for JDK 8 --> 
         </vmArgs> 
         <xjcArgs> 
          <xjcArg>-Xsetters</xjcArg> 
         </xjcArgs> 
        </configuration> 
       </execution> 
      </executions> 
      <dependencies> 
       <!-- put xjc-plugins on the jaxws-maven-plugin's classpath --> 
       <dependency> 
        <groupId>org.jvnet.jaxb2_commons</groupId> 
        <artifactId>jaxb2-basics</artifactId> 
        <version>0.9.5</version> 
       </dependency> 
      </dependencies> 
     </plugin> 

Et pour les utilisateurs Maven avec le cxf-codegen-plugin il ressemble à ceci:

 <!-- generates webservice client stubs using CXF framework--> 
     <plugin> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-codegen-plugin</artifactId> 
      <version>${cxf.version}</version> 
      <executions> 
       <execution> 
        <id>generate-sources</id> 
        <phase>generate-sources</phase> 
        <configuration> 
         <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot> 
         <wsdlOptions> 
          <wsdlOption> 
           <wsdl>${adapter.api.wsdlFileName}</wsdl> 
           <bindingFiles> 
            <bindingFile>${basedir}/src/main/resources/jaxb-bindings.xml</bindingFile> 
           </bindingFiles> 
           <extraargs> 
            <extraarg>-xjc-Xsetters</extraarg><!-- needed so that setters for lists are generated --> 
           </extraargs> 
          </wsdlOption> 
         </wsdlOptions> 
        </configuration> 
        <goals> 
         <goal>wsdl2java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <dependencies> 
       <!-- plugin needed to customize cxf genrated classes --> 
       <dependency> 
        <groupId>org.jvnet.jaxb2_commons</groupId> 
        <artifactId>jaxb2-basics</artifactId> 
        <version>0.9.4</version> 
       </dependency> 
      </dependencies> 
     </plugin> 
Questions connexes