我试图在Mule ESB 3.3中使用cfx:proxy-client来使用wsdl服务,但不断收到此错误
org.apache.cxf.service.factory.ServiceConstructionException: Could not find definition for service {http://support.cxf.module.mule.org/}ProxyService. at org.apache.cxf.wsdl11.WSDLServiceFactory.create(WSDLServiceFactory.java:139) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:383) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:506)
以下是我的简单流程:
<flow name="spider-middleware" doc:name="spider-middleware"> <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="salesforce" doc:name="HTTP"/> <cxf:proxy-client operation="getCustomerByID" payload="body" wsdlLocation="http://localhost:4546/eplus-ws-fake/services/EplusCustomer/v1?wsdl" enableMuleSoapHeaders="true" doc:name="SOAP"/> </flow>
该服务被硬编码为getCustomerByID(1)返回客户。 请详细说明如何解决这个问题? 感谢。
答案 0 :(得分:3)
我得到它的工作,但只提供一个完整的SOAP信封,而不仅仅是身体,即。使用payload="envelope"
。
此外,我删除了operation
和wsdlLocation
属性,这些属性对proxy-client
无用。我还必须添加SOAPAction
和Content-Type
属性,否则测试网络服务我正在使用请求中的扼流圈。
这给出了(使用来自WebServiceX.net的测试服务):
<flow name="pureCxfProxyClient">
<vm:inbound-endpoint path="test.in"
exchange-pattern="request-response" />
<set-property propertyName="SOAPAction"
value="http://www.webservicex.net/getACHByZipCode" />
<set-property propertyName="Content-Type" value="text/xml" />
<http:outbound-endpoint address="http://www.webservicex.net/FedACH.asmx"
exchange-pattern="request-response" >
<cxf:proxy-client payload="envelope" />
</http:outbound-endpoint>
</flow>
注意我使用了一个VM端点,它允许我处理XMLStreamReader
返回的cxf:proxy-client
。
特别是,我需要做以下事情:
final XMLStreamReader xsr = (XMLStreamReader) result.getPayload();
xsr.nextTag();
避免org.mule.module.xml.stax.ReversibleXMLStreamReader
中的疯狂NPE。
总而言之,这非常激烈......加上cxf:proxy-client
在独立使用时并没有带来太多价值。你实际上可以选择:
<flow name="pureCxfProxyClient">
<vm:inbound-endpoint path="test.in"
exchange-pattern="request-response" />
<set-property propertyName="SOAPAction"
value="http://www.webservicex.net/getACHByZipCode" />
<set-property propertyName="Content-Type" value="text/xml" />
<http:outbound-endpoint address="http://www.webservicex.net/FedACH.asmx"
exchange-pattern="request-response" />
</flow>
...并被XMLStreamReader
部分释放。