使用Java 6中,CXF 2.3.1和Maven 2CXF的WSDL2Java導致BINDING_MISSING_TYPE
當通過Maven插件運行CXF WSDL2Java工具,我遇到 了以下問題:
的WSDL2Java - d c:\ devel \ adpoint_callback \ target \ generated-sources \ cxf -impl -validate -verbose file:/ C:/devel/adpoint_callback/src/main/resources/wsdl/foobar.wsdl wsdl2java - Apache CXF 2.3。 1
WSIBP Validator found <結合>不是 SOAP綁定[DEBUG]
org.apache.cxf.tools.common.ToolException: org.apache.cxf.wsdl11.WSDLRuntimeException: BINDING_MISSING_TYPE 在org.apache.cxf.tools .wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:279)
...〜20行
所致:org.apache.cxf.wsdl11.WSDLRuntimeException:在org.apache.cxf.wsdl11 BINDING_MISSING_TYPE .WSDLServiceBuilder.buildServices(WSDLServiceBuilder.java:306) 在org.apache.cxf.wsdl11.WSDLServiceBuilder.buildServices(WSDLServiceBuilder.java:181)
使用適於從http://www.w3schools.com/WSDL/wsdl_binding.asp以下最低WSDL文件:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="notification"
targetNamespace="http://example.com/mynamespace"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://example.com/mynamespace/xsd" >
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://example.com/mynamespace/xsd"
targetNamespace="http://example.com/mynamespace/xsd" >
<xs:element name="RequestType" type="xsd:content"/>
<xs:element name="ResponseType" type="xsd:content"/>
<xs:complexType name="content">
<xs:sequence>
<xs:element name="text" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="getTermRequest">
<wsdl:part name="body" element="xsd:RequestType"/>
</wsdl:message>
<wsdl:message name="getTermResponse">
<wsdl:part name="body" element="xsd:ResponseType"/>
</wsdl:message>
<wsdl:portType name="glossaryTerms">
<wsdl:operation name="getTerm">
<wsdl:input message="getTermRequest"/>
<wsdl:output message="getTermResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="binding" type="glossaryTerms">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="getTerm">
<soap:operation soapAction="http://example.com/getTerm" />
<wsdl:input><soap:body use="literal"/></wsdl:input>
<wsdl:output><soap:body use="literal"/></wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="testService" >
<wsdl:port name="testPort" binding="binding">
<soap:address location="http://example.com/mynamespace"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
服務/結合使用是完全正如WSDL 1.1規範文檔中的示例http://www.w3.org/TR/wsdl
如果沒有-validate標誌,代碼生成將不起作用 - 驗證警告只是不顯示。
問題是 - 爲什麼< soap:binding >元素沒有被接受爲綁定元素的綁定類型,因爲它應該如此。
[編輯:修正]
如果我設置默認的命名空間爲相同的值作爲我的目標名稱,錯誤消失。 不知怎的,CXF能夠處理這樣一個事實,即我不會設置默認名稱空間,直到它應該處理綁定爲止。在那一點上,它拋出了一個關於缺少綁定類型的誤導性例外。
因此,固定,這是因爲改變了WSDL的屬性一樣容易:當您使用targetNamespace="http://example.com/mynamespace"
<wsdl:definitions name="notification"
targetNamespace="http://example.com/mynamespace"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://example.com/mynamespace/xsd"
xmlns="http://example.com/mynamespace" >
我也有過類似的問題。但是它與我沒有在_wsdl:definitions_中放置_targetNamespace_的事實相關。修復只是把它放在那裏。 –