从多个wsdls获取java类

时间:2013-09-03 14:46:49

标签: java maven wsdl

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

我已查看此链接:http://decimalsolutions.blogspot.in/2011/10/wsdl2java-maven2.html但它无法解决我的问题。

如何实现这一目标?

3 个答案:

答案 0 :(得分:15)

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>

答案 1 :(得分: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>

答案 2 :(得分:1)

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

插件配置中的示例片段:

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

现在您可以配置所有方式的翻译和映射。