我试图学习一些Apache Camel和Apache CXF,当然我遇到了一些问题。
将定时SOAP消息从ESB发送到某个Web服务,等待来自Web服务的响应并进行处理。我正在使用Apache ServiceMix!。
实现了一个WSDL文件,其中包含两个操作PingOutput
(我发送的内容)和PingInput
(我希望从WS接收的内容)。
实现了一个CXF端点(http://127.0.0.1:8090/ping_ws
是一个用SoapUI模拟的WS):
<cxf:cxfEndpoint address="http://127.0.0.1:8090/ping_ws"
id="Ping_Mocked_WS" wsdlURL="ping.wsdl">
<cxf:properties>
<entry key="dataFormat" value="PAYLOAD" />
</cxf:properties>
</cxf:cxfEndpoint>
实施了Camel路线:
<camelContext xmlns="http://camel.apache.org/schema/spring" streamCache="true">
<route id="ping-ws">
<from uri="timer://ping_timer?fixedRate=true&period=10000"/>
<bean ref="PingBean" method="createPingRequest" />
<to uri="cxf:bean:Ping_Mocked_WS"/>
<bean ref="PingBean" method="processPingResponse" />
</route>
</camelContext>
<bean ref="PingBean" method="processPingResponse" />
从SoapUI(WSDL中定义的PingOutput
操作)获得正确的响应?代码工作正常,我可能在这里有一些拼写错误,请不要介意。
答案 0 :(得分:1)
广告1)
可能因为processPingResponse方法的方法签名中定义的类型。 Camel使用bean参数绑定,并根据类型,使用其类型转换器转换为给定的类型。
由于有效负载是XML中的SOAP响应,因此可以使用JAXB将XML从方法签名转换为类型。
为此,它使用了ServiceMix开箱即用的camel-jaxb。
Ad2的) 路线有效。你想以不同的方式做什么?