属性已在wsdl2java中定义错误

时间:2015-05-15 13:49:57

标签: java web-services wsdl cxf wsdl2java

我正在尝试使用cxf从wsdl2java生成代理类,但每当我尝试时我都会继续收到以下错误:

  

WSDLToJava错误:http://webservices.sabre.com/wsdl/sabreXML1.0.00/shopping/Grou   pedItineraryResponse_v1-0-2.xsd [0,0]:Property" ValidatingCarrier"已经d了   efined。使用< jaxb:property>解决这个冲突。   http://webservices.sabre.com/wsdl/sabreXML1.0.00/shopping/GroupedItineraryRespon   se_v1-0-2.xsd [0,0]:以下位置与上述错误相关

我尝试将绑定文件添加到wsdl2java.bat,因为我从其中一个网址获取了这样的信息:

<jaxws:bindings wsdlLocation="http://webservices.sabre.com/wsdl/sabreXML1.0.00/shopping/BargainFinderMaxRQ_v1-8-2.wsdl" 
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
jaxb:extensionBindingPrefixes="xjc" 
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"> 


<jaxws:bindings node="wsdl:definitions/wsdl:types/xsd:schema"> 
    <jaxb:globalBindings 
            jaxb:version="2.0"> 
        <xjc:simple />  
    </jaxb:globalBindings> 
</jaxws:bindings> 

我正在使用第三方wsdl网址,因此我无法控制在服务器端进行更改,我只需要根据命令进行更改即可成功生成代理类。在这个问题上有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

问题是FareType包含名为ValidatingCarrier的子元素和具有相同名称的属性。

要解决此问题,您应该按错误消息的建议添加字段绑定。示例绑定:

<jaxb:bindings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
jaxb:version="2.1"
schemaLocation="http://webservices.sabre.com/wsdl/sabreXML1.0.00/shopping/GroupedItineraryResponse_v1-0-2.xsd">
    <jaxb:bindings node="//xs:complexType[@name='FareType']/xs:sequence/xs:element[@name='ValidatingCarrier']">
        <jaxb:property name="validatingCarrierInfo"></jaxb:property>
    </jaxb:bindings>
</jaxb:bindings>

通过此绑定,我将ValidatingCarrier重命名为ValidatingCarrierInfo