2012-06-21 19 views
8

wsimport genera código fuente sin constructores parametrizados. Por lo tanto, si el grano tiene muchas propiedades, uno tiene que invocar a todos los emisores de forma manual:¿Cómo hago que wsimport genere constructores?

Person person = new Person(); 
person.setName("Alex"); 

Address address = new Address(); 
address.setCity("Rome"); 

person.setAddress(address); 

Es mucho más fácil de leer y conveniente acaba de escribir el código como el siguiente:

Person person = new Person("Alex", new Address("Rome")) 

Entonces, ¿hay cualquier forma de hacer wsimport hacer este trabajo? (Estoy usando maven wsimport plugin)

Respuesta

5

Utilice JAXB Value Constructor Plugin para la herramienta xjc. Se puede utilizar con maven-xjc-plugin así:

<project> 
    ... 
    <build> 
    ... 
    <plugins> 
     ... 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>xjc-maven-plugin</artifactId> 
     <version>1.0-beta-2-SNAPSHOT</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>xjc</goal> 
      </goals> 
      <configuration> 
       <task><![CDATA[ 
       <xjc schema="src/main/resources/com/acme/services.xsd" package="com.acme"> 
        <arg value="-Xvalue-constructor" /> 
       </xjc> 
       ]]></task> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
     ... 
    </plugins> 
    ... 
    </build> 
    ... 
</project>  
+0

¿Puede decirme dónde puedo encontrar el repositorio con este artefacto? Gracias. – Alex

+0

Está en [el maven cetral] (http://search.maven.org/#artifactdetails|org.jvnet.jaxb2_commons|jaxb2-value-constructor|3.0|jar) – npe

+0

¿Alguna idea de cómo hacer esto desde la línea de comandos? – pathikrit

0

wsimport utiliza xjc para crear las clases de Java. Admite plugins, algunos de los cuales se pueden encontrar en jaxb2-commons. También hay un complemento de constructor, que crea un constructor con parámetros para todos los elementos secundarios.

La página jax-ws-commons tiene instrucciones sobre cómo usar los complementos XJC con el complemento JAX-WS Maven.

8

Para utilizar wsimport con xjc hacer esto:

<plugin> 
      <groupId>org.jvnet.jax-ws-commons</groupId> 
      <artifactId>jaxws-maven-plugin</artifactId> 
      <version>2.3</version> 

      <dependencies> 
       <!-- put xjc-plugins on the jaxws-maven-plugin's classpath --> 
       <dependency> 
        <groupId>org.jvnet.jaxb2_commons</groupId> 
        <artifactId>jaxb2-basics</artifactId> 
        <version>0.6.4</version> 
       </dependency> 
       <dependency> 
        <groupId>org.jvnet.jaxb2_commons</groupId> 
        <artifactId>jaxb2-value-constructor</artifactId> 
        <version>3.0</version> 
       </dependency> 
      </dependencies> 
      <executions> 
          <execution> 
        <id>wsdl-gen</id> 
        <goals> 
         <goal>wsimport</goal> 
        </goals> 
        <configuration> 
         <wsdlDirectory>${project.basedir}/src/main/resources/wsdl/</wsdlDirectory> 
         <bindingDirectory>${project.basedir}/src/main/resources/wsdl</bindingDirectory> 
         <sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir> 
         <extension>true</extension> 
         <target>2.2</target> 
         <verbose>true</verbose> 
         <!-- tell JAXB to actually use xjc-plugins --> 
         <args> 
          <arg>-B-Xequals</arg> 
          <arg>-B-XhashCode</arg> 
          <arg>-B-Xvalue-constructor</arg> 
         </args> 
        </configuration> 
       </execution> 
    </executions> 
     </plugin> 

La parte fundamental es la -B que pasará el -X ... valores sucesivamente.

...

<args> 
     <arg>-B-Xequals</arg> 
     <arg>-B-XhashCode</arg> 
     <arg>-B-Xvalue-constructor</arg> 
    </args> 

...

Esto genera un contructor valor, es igual y métodos hashcode. Los iguales y el código hash son proporcionados por el complemento jaxb2-basics.

+1

¿Alguna idea de cómo hacer esto desde la línea de comandos? Al igual que yo no tengo un proyecto de maven pero solo quiero wsimport .. – pathikrit

Cuestiones relacionadas