使用JDK工具从.NET 2.0应用程序生成的WSDL生成Java SOAP Web服务客户端时出现问题
我正在尝试使用JDK 6工具wsimport
为某些SOAP Web服务生成客户端。 WSDL是由.NET 2.0应用程序生成的。 对于.NET 3.X应用程序,它工作正常。
当我跑步
wsimport -keep -p mypackage http://myservice?wsdl
它显示了几个像这样的错误消息:
[错误]具有相同名称的类/接口“mypackage.SomeClass”已被使用。 使用类定制来解决这个冲突。 线? 的http:// myservice?wsdl
当我使用Axis 1.4生成Web服务客户端时(使用Eclipse WebTools插件)。
有谁知道我能做些什么来使用wsimport
工具? 我真的不明白“class级定制”是什么。
我不知道这是否解决了,但我花了一些时间search解决这个问题。
我在这里find了一个修复 – https://jax-ws.dev.java.net/issues/show_bug.cgi?id=228
解决的办法是用-B-XautoNameResolution
运行wsimport(不能有空格)
对于任何使用maven阅读的人来说,这是如何将其添加到.pom文件。 请注意configuration部分中的参数。 这在文档中不是很容易find。 非常感谢艾萨克·斯蒂芬斯(Isaac Stephens)对此的帮助。
<!-- definition for ERPStandardWork service --> <execution> <id>ERPStandardWorkService</id> <goals> <goal>wsimport</goal> </goals> <configuration> <!-- this resolves naming conflicts within the wsdl - there are several copies of fault report objects which clash otherwise. --> <args> <arg>-B-XautoNameResolution</arg> </args> <wsdlDirectory>${basedir}/src/main/resources/META-INF/wsdl</wsdlDirectory> <wsdlFiles> <wsdlFile>ERPStandardWork.wsdl</wsdlFile> </wsdlFiles> <wsdlLocation>${basedir}/src/main/resources/META-INF/wsdl/ERPStandardWork.wsdl </wsdlLocation> <staleFile>${project.build.directory}/jaxws/ERPStandardWork/.staleFlag </staleFile> </configuration> </execution>
您可能会从同一个包中的WSDL文件生成所有类。 如果是这种情况,请尝试使用wsimport的-p选项为每个WSDL文件指定一个不同的目标包。
上面接受的答案将解决您的问题,但不会解决的根本原因。
发生问题是因为wsdl文件中的操作与xsd文件中的xsd:complexType具有相同的名称 – 如下面的示例所示。 所有types和操作都应该有唯一的名称。
<xsd:complexType name="SearchDocuments"> <xsd:sequence> <xsd:element name="document" type="ns0:SearchDocumentById" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <operation name="SearchDocuments"> <input wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsRequest" message="tns:searchDocumentsRequest"/> <output wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsResponse" message="tns:searchDocumentsResponse"/> </operation>
所以检查你的操作和types。 确保他们都没有相同的名字,即没有重复的名字。