2012-08-09 67 views
12

尝试使用wsimport为SOAP端点生成客户端。 WSDL和所有使用的XSD文件都是本地副本。wsimport - 两个声明导致冲突,给出相同的行

这是正在执行的命令:

wsimport ./bwWsdl.xml -p com.generated -Xnocompile -d ../src -extension -keep -XadditionalHeaders -B-XautoNameResolution 

其中给出这个错误:

[ERROR] Two declarations cause a collision in the ObjectFactory class. 
    line 16 of file:/schemas/newSchema.xsd 

[ERROR] (Related to above error) This is the other declaration. 
    line 16 of file:/schemas/newSchema.xsd 

注意行号是报告的碰撞一样。

这里的模式:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" 
    version="2.004" id="OTA2003A2009A"> 

    <xs:complexType name="TPA_ExtensionsType"> 
    <xs:annotation> 
     <xs:documentation xml:lang="en">Description here. 
     </xs:documentation> 
    </xs:annotation> 
    <xs:sequence> 
     <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded" /> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:element name="TPA_Extensions" type="TPA_ExtensionsType"> 
    <xs:annotation> 
     <xs:documentation xml:lang="en">More description here.</xs:documentation> 
    </xs:annotation> 
    </xs:element> 
</xs:schema> 

我试图消除类型定义,但它在其他地方摆引用。

任何人都可以请提供任何建议如何让这个工作?

感谢

编辑:

这里的线在WSDL导入这些模式:

<definitions name='ResLookupGet' targetNamespace='http://org.jboss.ws/resLookupGet' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:http='http://schemas.xmlsoap.org/wsdl/http/' xmlns:mime='http://schemas.xmlsoap.org/wsdl/mime/' xmlns:ns='http://www.opentravel.org/OTA/2003/05/beta' xmlns:rq='http://www.opentravel.org/OTA/2003/05/betarq' xmlns:rs='http://www.opentravel.org/OTA/2003/05/betars' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:tns='http://org.jboss.ws/resLookupGet' xmlns:xsd='http://www.w3.org/2001/XMLSchema'> 
<types> 
    <xsd:schema targetNamespace='http://org.jboss.ws/resLookupGet' xmlns:tns='http://org.jboss.ws/resLookupGet' xmlns:xsd='http://www.w3.org/2001/XMLSchema'> 
    <xsd:import namespace='http://www.opentravel.org/OTA/2003/05/betarq' schemaLocation='./schemas/FooAffiliateHeaderRQ.xsd'/> 
    <xsd:import namespace='http://www.opentravel.org/OTA/2003/05/betarq' schemaLocation='./schemas/FooResLookupGetRQ.xsd'/> 
    <xsd:import namespace='http://www.opentravel.org/OTA/2003/05/betars' schemaLocation='./schemas/FooResLookupGetRS.xsd'/> 
    </xsd:schema> 
</types> 
<message name='ResLookupGetRQ'> 
    <part element='rq:FooResLookupGetRQ' name='FooResLookupGetRQ'></part> 
</message> 
<message name='ResLookupGetRS'> 
    <part element='rs:FooResLookupGetRS' name='FooResLookupGetRS'></part> 
</message> 
+0

任何机会,你可以发布一组相同的文件?此错误消息通常是由加载相同的定义两次或更多的方式导致加载程序与基本URI相混淆。 – 2012-08-09 13:21:09

+0

我不这么认为 - 总共有136个引用它的模式... – Cuga 2012-08-09 13:24:58

+0

我会尝试将引起问题的路径导入到XSD文件中。如果这是基于开放旅游联盟的话......我假设你构建了WSDL;您是否可以指出高级结构,即,是否从WSDL导入了OTA xsds,您是在WSDL中定义XSD内容,还是导入一个外部XSD,然后引用所有其他XSD? – 2012-08-09 13:31:45

回答

14

由于@Petru Gardea的帮助下,我才得以最终闯过这通过省略-p com.generated包规范到wsimport。所以这就是我最终能够运行闯过这个问题:

wsimport ./bwWsdl.xml -Xnocompile -d ../src -extension -keep -XadditionalHeaders -B-XautoNameResolution 

因为它是wsimport试图生成在同一个包中的类具有相同的名称和/或方法,推理,它明显不会。所以

通过省略强制包声明,wsimport是能够把任何包就是了,这原来是每WSDL中的<xsd:schema>定义3个不同的包中的类。

再次感谢@Petru!

+1

在JDK 1.8上,这也变得很有用:'wsimport wsdlName.xml -J-Djavax.xml.accessExternalDTD = all ... '以及'wsimport wsdlName.xml -J-Djavax.xml.accessExternalSchema = all ...' – Cuga 2016-07-29 15:26:34

相关问题