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