Использование java 6, CXF 2.3.1 и Maven 2.
При запуске инструмента CXF wsdl2java через плагин Maven я сталкиваюсь со следующей проблемой:
wsdl2java -dC: \ devel \ adpoint_callback \ target \ generate-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 atg или.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute (WSDLToJavaContainer.java:279)
... ~ 20 строк
Вызывается: org.apache.cxf.wsdl11.WSDMSDINGв org.apache.cxf.wsdl11.WSDLServiceBuilder.buildServices (WSDLServiceBuilder.java:306) в org.apache.cxf.wsdl11.WSDLServiceBuilder.buildServices (WSDLServiceBuilder.buildServicesминимальный файл WSDL, адаптированный с http://www.w3schools.com/WSDL/wsdl_binding.asp:
<?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 либо - предупреждения о проверке просто не отображаются.
Вопрос, конечно, почемуэлемент не принимается в качестве типа привязки для элемента привязки, как и должно быть.
[EDIT: Fix]
Если я задаю для пространства имен по умолчанию значението же значение, что и мой targetNamespace, ошибка исчезает.Каким-то образом CXF может справиться с тем фактом, что я не устанавливаю пространство имен по умолчанию до того момента, когда оно должно было обрабатывать привязку.В этот момент он выдает ложное исключение об отсутствующем типе привязки.
Поэтому исправить это так же просто, как изменить атрибуты тега wsdl: Definition для определения пространства имен по умолчанию:
<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" >