Казалось бы, такая простая задача для интеграционной системы как вызов внешнего webservice, для Apache Camel вызывает затруднения. Прольем немного света. Вызов внешнего webservice на Apache Camel реально занимает одну строчку! Возьмем доступный всем открытый сервис погоды:
http://www.webservicex.com/globalweather.asmx?WSDL
Вот как вызвать этот сервис на Camel:
Подготовим spring-config.xml, в нем нам необходимо зарегистрировать cxf-endpoint для вызываемого webservice
В режиме MESSAGE сообщение представляет из себя полный SOAP-запрос.
В режиме PAYLOAD сообщение из body SOAP-запроса.
Запрос в PAYLOAD-режиме
http://www.webservicex.com/globalweather.asmx?WSDL
Вот как вызвать этот сервис на Camel:
from("file:c:/data/inbox3").to("cxf:bean:calculatorWSEndpoint?defaultOperationName=GetWeather").to("file:c:/data/outbox");
Подробности под катом!
Подготовим spring-config.xml, в нем нам необходимо зарегистрировать cxf-endpoint для вызываемого webservice
<?xml version="1.0" encoding="UTF-8"?>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
license agreements. See the NOTICE file distributed with this work for additional
information regarding copyright ownership. The ASF licenses this file to
You under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of
the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
by applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY KIND, either express or implied. See the License for the specific
language governing permissions and limitations under the License. -->
<!-- Configures the Camel Context -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://camel.apache.org/schema/cxf"
xsi:schemaLocation="
http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<cxf:cxfEndpoint xmlns:tns="http://www.webserviceX.NET"
id="calculatorWSEndpoint"
endpointName="tns:GlobalWeatherSoap"
address="http://www.webservicex.com/globalweather.asmx"
wsdlURL="http://www.webservicex.com/globalweather.asmx?WSDL">
<cxf:properties>
<entry key="dataFormat" value="PAYLOAD" />
</cxf:properties>
</cxf:cxfEndpoint>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<package>com.bssys.fileid</package>
</camelContext>
</beans>
Напомню что взамодествие с webservice может происходить в двух режимах
- MESSAGE
- PAYLOAD
В режиме MESSAGE сообщение представляет из себя полный SOAP-запрос.
В режиме PAYLOAD сообщение из body SOAP-запроса.
Запрос в PAYLOAD-режиме
<ns1:GetWeather xmlns:ns1="http://www.webserviceX.NET">
<ns1:CityName>Moscow</ns1:CityName>
<ns1:CountryName/>
</ns1:GetWeather>
Запрос в MESSAGE-режиме
<s11:Envelope xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/">
<s11:Body>
<ns1:GetWeather xmlns:ns1="http://www.webserviceX.NET">
<ns1:CityName>Moscow</ns1:CityName>
<ns1:CountryName/>
</ns1:GetWeather>
</s11:Body>
</s11:Envelope>
Запустив наш маршрут увидим в папке ответ от webservice:
<GetWeatherResponse xmlns="http://www.webserviceX.NET" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><GetWeatherResult><?xml version="1.0" encoding="utf-16"?>
<CurrentWeather>
<Location>Moscow / Vnukovo , Russia (UUWW) 55-39N 037-16E</Location>
<Time>Aug 08, 2012 - 04:00 AM EDT / 2012.08.08 0800 UTC</Time>
<Wind> from the W (270 degrees) at 9 MPH (8 KT):0</Wind>
<Visibility> greater than 7 mile(s):0</Visibility>
<SkyConditions> mostly clear</SkyConditions>
<Temperature> 73 F (23 C)</Temperature>
<DewPoint> 50 F (10 C)</DewPoint>
<RelativeHumidity> 43%</RelativeHumidity>
<Pressure> 29.94 in. Hg (1014 hPa)</Pressure>
<Status>Success</Status>
</CurrentWeather></GetWeatherResult></GetWeatherResponse>
Комментариев нет:
Отправить комментарий