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"

また、 には役に立たないoperationand属性を削除しました。プロパティも追加する必要がありました。そうしないと、使用しているテスト Web サービスがリクエストでチョークします。wsdlLocationproxy-clientSOAPActionContent-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();

でクレイジーな NPE を避けるため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 に答える