1

我正在尝试在 Mule ESB 3.3 中使用 cfx:proxy-client 使用 wsdl 服务,但不断收到此错误

org.apache.cxf.service.factory.ServiceConstructionException:找不到服务 {http://support.cxf.module.mule.org/}ProxyService 的定义。
    在 org.apache.cxf.wsdl11.WSDLServiceFactory.create(WSDLServiceFactory.java:139)
    在 org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:383)
    在 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"
                      有效载荷=“正文”
                      wsdlLocation="http://localhost:4546/eplus-ws-fake/services/EplusCustomer/v1?wsdl"
                      enableMuleSoapHeaders="true"
                      doc:name="SOAP"/>
</流>

该服务被硬编码为返回一个客户 getCustomerByID(1)。请阐明我如何解决这个问题?谢谢。

4

1 回答 1

3

我让它工作,但只是通过提供一个完整的 SOAP 信封而不仅仅是身体,即。使用payload="envelope".

我还删除了operationandwsdlLocation属性,这对proxy-client. 我还必须添加SOAPActionContent-Type属性,否则我在请求中使用的测试 Web 服务会阻塞。

这给出(使用来自 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>

XMLStreamReader注意我使用了一个 VM端点,它允许我处理cxf:proxy-client.

特别是,我需要执行以下操作:

    final XMLStreamReader xsr = (XMLStreamReader) result.getPayload();
    xsr.nextTag();

避免在org.mule.module.xml.stax.ReversibleXMLStreamReader.

总而言之,这非常激烈......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

于 2012-09-06T18:21:24.473 回答