我正在尝试使用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网址,因此我无法控制在服务器端进行更改,我只需要根据命令进行更改即可成功生成代理类。在这个问题上有人可以帮助我吗?
答案 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
。