【问题标题】:Getting java classes from multiple wsdls从多个 wsdls 获取 java 类
【发布时间】:2013-09-03 14:46:48
【问题描述】:

我有一个 Maven 项目,我需要从多个 wsdl 文件生成 java 类。 我已经使用 maven 插件 axistools-maven-plugincxf-codegen-plugin 进行了分析,但我面临的问题是来自不同 wsdl 的 Java 文件应该转到不同的包。

我已经检查了这个链接:http://decimalsolutions.blogspot.in/2011/10/wsdl2java-maven2.html,但它并没有解决我的问题。

如何做到这一点?

【问题讨论】:

  • 你知道如何在 中配置动态 WSDL

标签: java maven wsdl


【解决方案1】:

documentation 表明您可以使用<extraarg> 元素将参数传递给wdsl to java process。因此,您可以通过以下方式配置您的cxf-codegen-plugin

<configuration>
    <sourceRoot>${project.build.directory}/generated-code/mywebservice</sourceRoot>
    <wsdlOptions>
        <wsdlOption>
            <wsdl>${basedir}/src/main/resources/wsdl/serviceOne.wsdl</wsdl>
            <extraargs>
                <extraarg>-p</extraarg>
                <extraarg>first.packagename</extraarg>
            </extraargs>
        </wsdlOption>
        <wsdlOption>
            <wsdl>${basedir}/src/main/resources/wsdl/serviceTwo.wsdl</wsdl>
                <extraargs>
                <extraarg>-p</extraarg>
                <extraarg>another.packagename</extraarg>
            </extraargs>
        </wsdlOption>
    </wsdlOptions>
</configuration>

【讨论】:

    【解决方案2】:

    使用 jaxb 绑定文件,您可以更改包(参见 this 文档)。

    如果您使用 maven 和 cxf 插件,您可以将其添加到您的 pom.xml:

          <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>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl><path_to_wsdl</wsdl>
                                    <frontEnd>jaxws21</frontEnd>
                                    <faultSerialVersionUID>1</faultSerialVersionUID>
                                    <bindingFiles>
                                        <bindingFile>src/main/resources/binding.xml</bindingFile>
                                    </bindingFiles>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-fluent-api</artifactId>
                        <version>3.0</version>
                    </dependency>
                    <dependency>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics</artifactId>
                        <version>0.6.4</version>
                    </dependency>
                </dependencies>
            </plugin>
    

    【讨论】:

      【解决方案3】:

      您是否查看过 XJC 绑定,Oracle site 上有一些注释,如果您对 CXF 插件感到满意,您可以使用您在 @ 示例一中看到的代码为每个 WSDL 传递一个单独的绑定文件987654322@.

      插件配置的示例片段:

      ...
      <configuration>
         <wsdlOptions>
            <wsdlOption>
                <wsdl>${basedir}/src/main/resources/wsdl/first.wsdl</wsdl>
                <bindingFiles>
                    <bindingFile>${basedir}/src/main/resources/first.xjb</bindingFile>
                </bindingFiles>
            </wsdlOption>
            <wsdlOption>
                <wsdl>${basedir}/src/main/resources/wsdl/second.wsdl</wsdl>
                <bindingFiles>
                    <bindingFile>${basedir}/src/main/resources/second.xjb</bindingFile>
                </bindingFiles>
            </wsdlOption>
         </wsdlOptions>
      </configuration>
      ...
      

      first.xjb 将包含的位置:

      <jaxws:bindings wsdlLocation="path/to//serviceOne.wsdl"
            xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
            xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
      <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema">
          <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
              ...
          </jxb:globalBindings>
      
          <jxb:schemaBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb">
              <jxb:package name="your.first.package"/>
          </jxb:schemaBindings>
        </jaxws:bindings>
      </jaxws:bindings>
      

      现在您可以配置各种翻译和映射方式。

      【讨论】:

      • 感谢您的建议,但不热衷于添加其他文件
      • TBH 如果您只对包名称感兴趣,那么这可能是矫枉过正。当您开始需要更复杂的类型映射、类名映射和其他自定义时,请记住这一点!
      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多