【问题标题】:How do I make wsimport generate constructors?如何让 wsimport 生成构造函数?
【发布时间】:2012-06-21 14:23:09
【问题描述】:

wsimport 生成没有参数化构造函数的源代码。因此,如果 bean 有很多属性,就需要手动调用所有的 setter:

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

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

person.setAddress(address);

这样写代码更易读也更方便:

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

那么,有什么方法可以让wsimport 完成这项工作吗? (我正在使用 maven wsimport 插件)

【问题讨论】:

    标签: java web-services maven wsimport


    【解决方案1】:

    要将 wsimport 与 xjc 一起使用,请执行以下操作:

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

    关键部分是 -B,它将传递 -X... 值。

    ...

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

    ...

    这会生成一个值构造函数、equals 和 hashcode 方法。 equals 和 hashcode 由 jaxb2-basics 插件提供。

    【讨论】:

    • 知道如何从命令行执行此操作吗?就像我没有 maven 项目,但只想 wsimport ..
    【解决方案2】:

    JAXB Value Constructor Plugin 用于xjc 工具。 您可以将它与maven-xjc-plugin 一起使用,如下所示:

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

    【讨论】:

    • 你能告诉我在哪里可以找到这个工件的存储库吗?谢谢。
    【解决方案3】:

    wsimport 使用 xjc 创建 Java 类。它支持插件,您可以在jaxb2-commons 找到其中一些插件。还有一个构造函数插件,它为所有子元素创建一个带有参数的构造函数。

    jax-ws-commons 页面包含有关如何将 XJC 插件与 JAX-WS Maven 插件一起使用的说明。

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      相关资源
      最近更新 更多