2012-06-21 17 views
8

generuje kod źródłowy bez sparametryzowanych konstruktorów. Dlatego też, jeśli fasola ma wiele właściwości, trzeba powołać wszystkie ustawiające ręcznie:Jak sprawić, aby program wsimport generował konstruktory?

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

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

person.setAddress(address); 

To znacznie bardziej czytelne i wygodne, aby po prostu napisać kod jak poniżej:

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

Tak, czy istnieje jakikolwiek sposób na wykonanie tej pracy wsimport? (Używam wtyczki maven wsimport)

Odpowiedz

5

Użyj narzędzia JAXB Value Constructor Plugin dla narzędzia xjc. Można go używać z maven-xjc-plugin tak:

<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

Czy możesz mi powiedzieć, gdzie mogę znaleźć repozytorium z tym artefaktem? Dzięki. – Alex

+0

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

+0

Każdy pomysł, jak to zrobić z wiersza poleceń? – pathikrit

0

wsimport wykorzystuje xjc do tworzenia klas Java. Obsługuje wtyczki, niektóre z nich można znaleźć pod adresem jaxb2-commons. Istnieje również wtyczka konstruktora, która tworzy konstruktor z parametrami dla wszystkich elementów potomnych.

Strona jax-ws-commons zawiera instrukcje dotyczące korzystania z wtyczek XJC z wtyczką JAX-WS Maven.

8

Aby korzystać wsimport z XJC to zrobić:

<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> 

Krytycznym elementem jest -B który przejdzie ... -x na wartości.

...

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

...

To generuje wartość contructor równy i metody hashcode. Równe i hashcode są dostarczane przez wtyczkę jaxb2-basics.

+1

Każdy pomysł, jak to zrobić z wiersza poleceń? Tak jak ja nie mam projektu, ale chcę tylko wsimportować. – pathikrit

Powiązane problemy