我有一个Maven项目,我需要从多个wsdl文件生成java类。
我已经使用maven插件axistools-maven-plugin
和cxf-codegen-plugin
进行了分析,但我遇到的问题是来自不同wsdl的Java文件应该转到不同的包。
我已查看此链接:http://decimalsolutions.blogspot.in/2011/10/wsdl2java-maven2.html但它无法解决我的问题。
如何实现这一目标?
答案 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>
现在您可以配置所有方式的翻译和映射。