我在.Net中定义了一个Web服务,我想用java来使用它。 当我想在NetBeans中从WSDL创建Web服务客户端时,我收到以下错误。
JAXWS无法创建Web服务客户端:wsimport实用程序。
[错误]属性“任何”已定义。使用< jaxb:property>解决这个冲突。
以下是我的WSDL文件的一部分:
<s:element name="Select_Normal_Response">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Select_Normal_Result">
<s:complexType>
<s:sequence>
<s:any minOccurs="0" maxOccurs="unbounded" namespace="..."/>
<s:any minOccurs="1" namespace="" processContents="lax" />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="Select_Normal_With_LastIDResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Select_Normal_With_LastIDResult">
<s:complexType>
<s:sequence>
<s:any minOccurs="0" maxOccurs="unbounded" namespace="..."/>
<s:any minOccurs="1" namespace="..." processContents="lax" />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
我认为因为我有两个s:任何标签,我都会收到此错误。 我该如何解决这个问题?
答案 0 :(得分:1)
第二个“s:any”标记具有Microsoft特定命名空间“urn:schemas-microsoft-com:xml-diffgram-v1”,这是非标准的。您可以从wsdl中删除标记,然后重试生成Web服务客户端。
答案 1 :(得分:1)
您需要使用绑定文件为第二个文件提供唯一的名称。 创建例如bindings.xjb文件:
<jaxws:bindings
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
jxb:version="2.0"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:extensionBindingPrefixes="xjc"
>
<jaxws:bindings>
<jxb:bindings node="/s:element/.../s:any[@namespace='...']">
<jxb:property name="any2" />
</jxb:bindings>
</jaxws:bindings>
</jaxws:bindings>
然后,您可以使用
构建类 wsimport "http://www.yourwsdl.com/path?wsdl" -b bindings.xjb
如果你使用maven,你可以使用jaxws-maven-plugin。使用它将在构建项目时自动构建客户端类。
e.g。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.9</version>
<executions>
<execution>
<id>webservice</id>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<packageName>com.company.app.wsclient</packageName>
<wsdlUrls>
<wsdlUrl>http://www.yourwsdl.com/path?wsdl</wsdlUrl>
</wsdlUrls>
<bindingFiles>
<string>${basedir}/src/main/resources/bindings.xjb</string>
</bindingFiles>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-tools</artifactId>
<version>2.2.5</version>
</dependency>
</dependencies>
</plugin>