通过带有Mule的Java Bean调用CXF客户端

时间:2013-04-19 13:55:34

标签: cxf mule flow

我试图从另一个wsdl使用这个web服务:http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl ...不要担心,我只是尝试使用某种桥来测试web服务调用而不是逻辑,所以,流程我需要的是那样的

cxf:jaxws-service ---> Java bean ----> externalWebservice

问题是我无法找到如何通过我的java impl类调用外部web服务,我需要在我的bean中注入它,但我无法找到如何做到这一点。 ACtualy我的流程是这样的:

    <flow name="soapservice" doc:name="soapservice">
        <http:inbound-endpoint exchange-pattern="request-response"
            address="http://localhost:60603/Hello" doc:name="HTTP" />
        <cxf:jaxws-service serviceClass="org.example.HelloWorld"
            doc:name="SOAP" />
        <component class="org.example.HelloWorldImpl" doc:name="Java" />
    </flow>

一切正常,服务返回entry参数,但我需要从Weather Webservice中检索一些数据。 有人可以帮我用CXF来使用那个web服务吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

为此,最好是创建另一个flow,其中request-response虚拟机入站,使用CXF客户端来使用远程Web服务。以下说明如何生成CXF客户端:http://www.mulesoft.org/documentation/display/current/Consuming+Web+Services+with+CXF

然后,您可以通过组件绑定在flow中注入其他component(请参阅:http://www.mulesoft.org/documentation/display/current/Component+Bindings)。这样org.example.HelloWorldImpl就可以通过界面调用调用远程Web服务,该调用在场景后面调用执行CXF客户端交互的流。

所以在你的情况下,假设:

  • CXF生成的服务接口为com.cdyne.wsf.WeatherWS
  • 您感兴趣的方法是getCityWeatherByZip
  • CXF生成服务客户端为com.cdyne.wsf.WeatherWS_Service
  • org.example.HelloWorld类可以通过注入
  • 接收com.cdyne.wsf.WeatherWS的实例

你会有类似的

<flow name="soapservice">
    <http:inbound-endpoint exchange-pattern="request-response"
        address="http://localhost:60603/Hello" />
    <cxf:jaxws-service serviceClass="org.example.HelloWorld" />
    <component class="org.example.HelloWorldImpl">
        <binding interface="com.cdyne.wsf.WeatherWS"
            method="getCityWeatherByZip">
            <vm:outbound-endpoint path="callGetCityWeatherByZip"
                exchange-pattern="request-response" />
        </binding>
    </component>
</flow>

<flow name="getCityWeatherByZip">
    <vm:inbound-endpoint path="callGetCityWeatherByZip"
        exchange-pattern="request-response" />

    <cxf:jaxws-client
        clientClass="com.cdyne.wsf.WeatherWS_Service"
        port="WeatherSoap" operation="GetCityWeatherByZip" />

    <http:outbound-endpoint
        address="http://wsf.cdyne.com/WeatherWS/Weather.asmx"
        exchange-pattern="request-response" />
</flow>