maq*_*jav 5 java wsdl spring-ws jaxb maven
我正在尝试从wsdl文件生成一个带有maven和jaxb的客户端,里面有两个模式,一些具有相同名称的元素来自不同的模式
当我尝试执行编译时,我收到下一个错误:
Two declarations cause a collision in the ObjectFactory class.
Run Code Online (Sandbox Code Playgroud)
WSDL模式:
<wsdl:types>
<schema targetNamespace="http://ws.services" xmlns="http://www.w3.org/2001/XMLSchema">...</schema>
<schema targetNamespace="http://ws.models" xmlns="http://www.w3.org/2001/XMLSchema">...</schema>
</wsdl:types>
Run Code Online (Sandbox Code Playgroud)
我尝试重命名产生错误的元素,但然后我的spring客户端收到正确的SOAP消息,但它没有正确填充响应对象(它的所有属性都为null).我想问题可能来自重命名响应类,所以这就是为什么我试图生成不同的包保留所有类的原始名称.
为了做到这一点,我编写了下一个绑定文件,但我不知道我做错了它不能正常工作.
bindings.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="2.1"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<jaxb:bindings schemaLocation="mywsdl.wsdl#types?schema1"
node="/xs:schema[@targetNamespace='http://ws.services']">
<jaxb:schemaBindings>
<jaxb:package name="package1" />
</jaxb:schemaBindings>
</jaxb:bindings>
<jaxb:bindings schemaLocation="mywsdl.wsdl#types?schema2"
node="/xs:schema[@targetNamespace='http://ws.models']">
<jaxb:schemaBindings>
<jaxb:package name="package2" />
</jaxb:schemaBindings>
</jaxb:bindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)
maven文件中的配置部分是下一个,以防它有用:
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
<configuration>
<wsdlLocation>wsdl/mywsdl.wsdl</wsdlLocation>
<wsdlDirectory>src/main/resources/wsdl</wsdlDirectory>
<wsdlFiles>
<wsdlFile>mywsdl.wsdl</wsdlFile>
</wsdlFiles>
<bindingDirectory>src/main/resources/wsdl</bindingDirectory>
<bindingFiles>
<bindingFile>bindings.xml</bindingFile>
</bindingFiles>
<packageName>original.package</packageName>
<sourceDestDir>${basedir}/src/main/java</sourceDestDir>
</configuration>
Run Code Online (Sandbox Code Playgroud)
当我使用此绑定文件进行编译时,会出现相同的错误.所以我想也许这是不对的.
你发现任何错误吗?
谢谢.
小智 8
根据我的经验,最好创建2个绑定文件(每个WSDL文件一个).相应地更新你的pom.xml并确保绑定文件的根元素是jaxws:bindings(而不是jaxb:bindings!)
一些提示:
"package1"的示例绑定文件:
<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
wsdlLocation="mywsdl.wsdl"
version="2.0">
<jaxws:package name="package1"/>
<jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
<jaxws:enableAsyncMapping>true</jaxws:enableAsyncMapping>
<jaxws:bindings node="//wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://ws.services']">
<jaxb:schemaBindings>
<jaxb:package name="package1"/>
</jaxb:schemaBindings>
</jaxws:bindings>
</jaxws:bindings>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18217 次 |
| 最近记录: |