我有一个 Maven 项目,我需要从多个 wsdl 文件生成 java 类。我已经使用 maven 插件进行了分析axistools-maven-plugin
,cxf-codegen-plugin
但我面临的问题是来自不同 wsdl 的 Java 文件应该转到不同的包。
我已经检查了这个链接:http ://decimalsolutions.blogspot.in/2011/10/wsdl2java-maven2.html但它并没有解决我的问题。
如何做到这一点?
文档说明您可以使用该元素<extraarg>
将参数传递给wdsl to java 进程。因此,您可以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>
您是否查看过 XJC 绑定, Oracle 站点上有一些注释,如果您对 CXF 插件感到满意,您可以使用插件站点上的示例中的代码为每个 WSDL 传递一个单独的绑定文件。
插件配置的示例片段:
...
<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>
现在您可以配置所有方式的翻译和映射。
使用 jaxb 绑定文件,您可以更改包(请参阅此文档)。
如果您使用 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>