2012-06-21 16 views
8

wsimport tạo mã nguồn mà không cần các trình tạo tham số. Do đó, nếu đậu có nhiều tài sản, người ta cần để gọi tất cả các setters bằng tay:Làm cách nào để tôi tạo các công cụ tạo wsimport?

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

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

person.setAddress(address); 

Đó là nhiều hơn nữa có thể đọc được và thuận tiện để chỉ cần viết code như thế này:

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

Vì vậy, là có bất kỳ cách nào để thực hiện wsimport thực hiện công việc này? (Tôi đang sử dụng plugin maven wsimport)

Trả lời

5

Sử dụng JAXB Value Constructor Plugin cho công cụ xjc. Bạn có thể sử dụng nó với maven-xjc-plugin như thế này:

<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

Bạn có thể cho tôi biết nơi tôi có thể tìm kho lưu trữ với vật phẩm này không? Cảm ơn. – Alex

+0

Đó là trong [maven cetral] (http://search.maven.org/#artifactdetails?org.jvnet.jaxb2_commons|jaxb2-value-constructor|3.0|jar) – npe

+0

Bất kỳ ý tưởng làm thế nào để làm điều này từ dòng lệnh? – pathikrit

0

wsimport sử dụng xjc để tạo ra các lớp Java. Nó hỗ trợ các plugin, một số trong số đó bạn có thể tìm thấy tại jaxb2-commons. Ngoài ra còn có một plugin xây dựng, tạo ra một hàm tạo với các tham số cho tất cả các phần tử con.

Trang jax-ws-commons có hướng dẫn về cách sử dụng các plugin XJC với plugin Maven JAX-WS.

8

Để sử dụng wsimport với XJC làm điều này:

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

Phần quan trọng là -B mà sẽ vượt qua -X ... giá trị trên.

...

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

...

này tạo ra một contructor giá trị, tương đương và phương pháp hashcode. Bằng và hashcode được cung cấp bởi plugin jaxb2-basic.

+1

Bất kỳ ý tưởng làm thế nào để làm điều này từ dòng lệnh? Giống như tôi không có một dự án maven nhưng chỉ muốn wsimport .. – pathikrit