2013-04-19 3 views
0

Я пытаюсь использовать этот веб-сервис: http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl из другого wsdl ... Не волнуйтесь об этом, я просто попытаюсь сделать какой-то мост для тестирования вызова webservice, а не логики на все, поэтому, поток, что мне нужно что-то вроде этогоПозвоните клиенту CXF через Java-компонент с Mule

CXF: JAXWS-сервис ---> Java боб ----> externalWebservice

проблема заключается в том, что я не могу найти, как звонить через мой java impl классифицирует внешний webservice, мне нужно ввести это в свой 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> 

Все отлично работает, служба возвращает параметр ввода, но мне нужно, чтобы получить некоторые данные из погоды Webservice. Кто-нибудь может помочь мне использовать этот веб-сервис с CXF?

Спасибо!

ответ

1

Для этого лучше всего создать еще flow с входящим VM VM и клиентом CXF для использования удаленного веб-сервиса. Ниже объясняется, как создать клиент 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 будет иметь возможность вызывать удаленный веб-сервис через вызов интерфейса, который за сценой вызывает поток, который выполняет взаимодействие с клиентом 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> 
+0

Thaks для ответа! Очень полезно понять немного больше, моя проблема в том, что я не могу найти, как сделать привязку с этим новым клиентом cxf, который вы назвали. Если вы можете помочь мне показать какой-то код, было бы здорово. Спасибо заранее =) – Nicolas

+0

Я продлил свой ответ. –

+0

Удивительный ответ! Большое спасибо! =) – Nicolas