Дублирование того же веб-сервиса SOAP в Camel
Веб-сервис SOAP предоставляется системой. У меня есть файл wsdl веб-службы. Я могу отправить запрос и получить ответ от мыла UI. Я хочу продублировать этот веб-сервис SOAP wsdl в моих верблюжьих маршрутах, развернутых в servicemix, тем самым заставляя мой ESB предоставлять такой же веб-сервис, что и системный веб-сервис. Таким образом, многие системы получают доступ к этому веб-сервису для связи с системой. Как мне дублировать веб-сервис, используя файл wsdl системы?
2 ответа
Для дублирования веб-службы, предоставляемой системой, вы можете использовать http-прокси-маршрут, основанный на пристани:
<route id="ServiceProxy">
<from uri="jetty:http://0.0.0.0:8186/service/?disableStreamCache=true&matchOnUriPrefix=true&continuationTimeout=900000&httpClient.timeout=120000"/>
<to uri="jetty:http://{{app-server.host}}:{{app-server.http.port}}/service/?bridgeEndpoint=true&throwExceptionOnFailure=false&continuationTimeout=120000&httpClient.timeout=900000"/>
</route>
Вы можете написать тот же маршрут на JavaDSL.
Найденное решение - концепция cxf-прокси
Имея wsdl системы, создайте аналогичный wsdl с конечными точками, определенными в соответствии с localhost и номером порта.
Сохраните wsdl в своем локальном проекте, укажите путь к wsdl в pom для преобразования wsdl в java, упомянув в плагине cxf-codegen-plugin.
создать потребительский бин cxf с подробной информацией о локальном файле wsdl
<cxf:cxfEndpoint id="consumerProxy" address="http://remote:port/service/"
serviceClass="com.remote.service.RemoteService" endpointName="c:RemoteService"
serviceName="c:RemoteService" xmlns:c="http://remote/namespace/">
<cxf:properties>
<entry key="dataFormat" value="MESSAGE" />
</cxf:properties>
</cxf:cxfEndpoint>
создать бин производителя cxf с подробностями удаленного файла wsdl
<cxf:cxfEndpoint id="producerRemote" address="http://localhost:9001/service/"
serviceClass="com.remote.service.RemoteService" endpointName="c:RemoteService"
serviceName="c:RemoteService" xmlns:c="http://remote/namespace/">
<cxf:properties>
<entry key="dataFormat" value="MESSAGE" />
</cxf:properties>
</cxf:cxfEndpoint>
Маршруты прокси могут быть как ниже
from(cxfEndpoint("consumerProxy")) .to(cxfEndpoint("providerRemote"));
Отправка запроса на локальный хост будет потребляться конечной точкой cxf - consumerProxy и отправляться конечной точке cxf --roductionRemote. Ответ отправляется обратно в обратном направлении.