Дублирование того же веб-сервиса 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&amp;matchOnUriPrefix=true&amp;continuationTimeout=900000&amp;httpClient.timeout=120000"/>
        <to uri="jetty:http://{{app-server.host}}:{{app-server.http.port}}/service/?bridgeEndpoint=true&amp;throwExceptionOnFailure=false&amp;continuationTimeout=120000&amp;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. Ответ отправляется обратно в обратном направлении.

Другие вопросы по тегам