在Camel中复制相同的SOAP Web服务

时间:2015-07-08 06:53:31

标签: web-services soap wsdl apache-camel apache-servicemix

系统公开了SOAP Web服务。我有一个web服务的wsdl文件。我能够发送请求并从soap ui获得响应。我想在servicemix中部署的camel路由中复制这个wsdl SOAP webservice,从而使我的ESB公开一个类似于系统web服务的web服务。这是许多系统访问此Web服务以联系系统的方式。 如何使用系统的wsdl文件复制Web服务?

2 个答案:

答案 0 :(得分:0)

找到解决方案 - 概念是cxf-proxying

拥有系统的wsdl,创建一个类似的wsdl,其端点根据localhost和端口号定义。

将wsdl保存在本地项目中, 提供pom中wsdl的路径,通过在cxf-codegen-plugin中提及将wsdl转换为java。

使用本地wsdl文件的详细信息创建cxf使用者bean

<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>

使用远程wsdl文件的详细信息创建cxf生成器bean

<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>

代理路由可以如下所示

从(cxfEndpoint(&#34; consumerProxy&#34))     。为了(cxfEndpoint(&#34; producerRemote&#34));

向localhost发送请求将由cxf端点 - consumerProxy使用并发送到cxf端点 - producerRemote。 响应以相反的方式发回。

答案 1 :(得分:0)

要复制由系统公开的网络服务,您可以使用基于码头的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上编写相同的路由。