我试图从另一个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服务吗?
谢谢!
答案 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客户端交互的流。
所以在你的情况下,假设:
com.cdyne.wsf.WeatherWS
,getCityWeatherByZip
,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>