我正在尝试在https://api.sendwordnow.com/webservices/v3/users.svc?wsdl上使用wsimport。这是我正在使用的wsimport。
wsimport -B-XautoNameResolution -d C:\temp -extension -J-Djavax.xml.accessExternalSchema=all -J-Djavax.xml.accessExternalDTD=all -keep -verbose -XadditionalHeaders -Xnocompile https://api.sendwordnow.com/webservices/v3/users.svc?wsdl
这是错误。
解析WSDL ...
[WARNING] unknown extensibility element or attribute "EndpointReference"
(in namespace "http://www.w3.org/2005/08/addressing") line 1 of
https://api.sendwordnow.com/webservices/v3/users.svc?wsdl
[ERROR] Two declarations cause a collision in the ObjectFactory class.
line 1 of https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd3
[ERROR] (Related to above error) This is the other declaration.
line 1 of https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd3
[ERROR] Two declarations cause a collision in the ObjectFactory class.
line 1 of https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd2
[ERROR] (Related to above error) This is the other declaration.
line 1 of https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd2
Exception in thread "main" com.sun.tools.internal.ws.wscompile.AbortException
at com.sun.tools.internal.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:129)at
com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2283)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:183)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:126)
at com.sun.tools.internal.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:429)
at com.sun.tools.internal.ws.wscompile.WsimportTool.run(WsimportTool.java:190)
at com.sun.tools.internal.ws.wscompile.WsimportTool.run(WsimportTool.java:168)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498) at
com.sun.tools.internal.ws.Invoker.invoke(Invoker.java:159) at
com.sun.tools.internal.ws.WsImport.main(WsImport.java:42)
我在StackOverflow上搜索并找到了wsimport - Two declarations cause a collision, same line given,但这是从4年前开始的,我不知道该解决方案是否仍然适用。建议是删除我做的-p但我仍然收到上面的错误。关于我做错了什么的任何想法?我可以将wsdl插入SoapUI并生成测试存根,但我似乎无法克服wsimport驼峰。
更新1 我也尝试过使用模式绑定。
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="1.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd0">
<jxb:schemaBindings>
<jxb:package name="com.users" />
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd1">
<jxb:schemaBindings>
<jxb:package name="com.serialization"/>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd2">
<jxb:schemaBindings>
<jxb:package name="com.datacontractsv2"/>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd3">
<jxb:schemaBindings>
<jxb:package name="com.datacontractsv1"/>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd4">
<jxb:schemaBindings>
<jxb:package name="com.arrays"/>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd5">
<jxb:schemaBindings>
<jxb:package name="com.location"/>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd6">
<jxb:schemaBindings>
<jxb:package name="com.datacontractsv3"/>
</jxb:schemaBindings>
</jxb:bindings>
</jxb:bindings>
这是更新的wsimport。
wsimport -b "C:\temp\Customization.xml" -B-XautoNameResolution -d C:\temp -extension -J-Djavax.xml.accessExternalSchema=all -J-Djavax.xml.accessExternalDTD=all -keep -verbose -XadditionalHeaders -Xnocompile https://api.sendwordnow.com/webservices/v3/users.svc?wsdl
我仍然收到与上述相同的错误消息。
更新2 最后通过以下更新解决了。
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd2">
<jxb:schemaBindings>
<jxb:package name="com.datacontractsv2"/>
<jxb:nameXmlTransform>
<jxb:typeName suffix="Type" />
<jxb:elementName suffix="Element"/>
</jxb:nameXmlTransform>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd3">
<jxb:schemaBindings>
<jxb:package name="com.datacontractsv1"/>
<jxb:nameXmlTransform>
<jxb:typeName suffix="Type" />
<jxb:elementName suffix="Element"/>
</jxb:nameXmlTransform>
</jxb:schemaBindings>
</jxb:bindings>
我不是100%确定这是最好的甚至是正确的解决方案,但错误消失了并且代码生成了。
答案 0 :(得分:3)
这是我使用的最终wsimport。
wsimport -b "C:\temp\Customization.xml" -B-XautoNameResolution -d C:\temp -extension -J-Djavax.xml.accessExternalSchema=all -J-Djavax.xml.accessExternalDTD=all -keep -verbose -XadditionalHeaders -Xnocompile https://api.sendwordnow.com/webservices/v3/users.svc?wsdl
这是自定义绑定xml。我希望这有助于其他人。这真是一个难以解决的问题!
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="1.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd0">
<jxb:schemaBindings>
<jxb:package name="com.users" />
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd1">
<jxb:schemaBindings>
<jxb:package name="com.serialization"/>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd2">
<jxb:schemaBindings>
<jxb:package name="com.datacontractsv2"/>
<jxb:nameXmlTransform>
<jxb:typeName suffix="Type" />
<jxb:elementName suffix="Element"/>
</jxb:nameXmlTransform>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd3">
<jxb:schemaBindings>
<jxb:package name="com.datacontractsv1"/>
<jxb:nameXmlTransform>
<jxb:typeName suffix="Type" />
<jxb:elementName suffix="Element"/>
</jxb:nameXmlTransform>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd4">
<jxb:schemaBindings>
<jxb:package name="com.arrays"/>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd5">
<jxb:schemaBindings>
<jxb:package name="com.location"/>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="https://api.sendwordnow.com/webservices/v3/Users.svc?xsd=xsd6">
<jxb:schemaBindings>
<jxb:package name="com.datacontractsv3"/>
</jxb:schemaBindings>
</jxb:bindings>
</jxb:bindings>