如何使用JMS队列在Mule中公开代理SOAP Web服务
我需要托管一个SOAP web服务,并将代理web服务托管到该主web服务。。。 因此,我有以下几点:-如何使用JMS队列在Mule中公开代理SOAP Web服务,mule,mule-studio,Mule,Mule Studio,我需要托管一个SOAP web服务,并将代理web服务托管到该主web服务。。。 因此,我有以下几点:- 为执行CRUD操作而公开的SOAP web服务 主web服务的代理web服务 现在,我已经创建了SOAP web服务,该服务已公开并执行CRUD操作,并且运行良好。。现在的问题是代理web服务。。以下是我的代理web服务配置:- <flow name="ProxyFlow" doc:name="ProxyFlow"> <http:inbound-endpoint exch
<flow name="ProxyFlow" doc:name="ProxyFlow">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8086" path="proxy/mainData" doc:name="HTTP" />
<cxf:proxy-service port="MainDataPort" namespace="http://services.test.com/schema/MainData/V1" service="MainDataService" payload="body" wsdlLocation="MainData.wsdl" doc:name="SOAP"/>
<mulexml:dom-to-xml-transformer doc:name="DOM to XML"/>
<jms:outbound-endpoint queue="ProxyQueue" connector-ref="Active_MQ" doc:name="JMS" exchange-pattern="request-response"/>
</flow>
<flow name="ClientProxy" doc:name="ClientProxy">
<jms:inbound-endpoint connector-ref="Active_MQ" address="jms://tcp:ProxyQueue" doc:name="JMS" exchange-pattern="request-response" disableTemporaryReplyToDestinations="true" responseTimeout="90000"/>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<cxf:proxy-client payload="body" doc:name="SOAP" />
<http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" path="mainData" method="POST" doc:name="HTTP" />
</flow>
现在我可以发现主Web服务是在内部调用的,数据是在DB中创建的。。但我猜它无法将响应转换回代理客户端。。任何建议。尝试以下方式使用代理客户端
<http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" path="mainData" method="POST" doc:name="HTTP" >
<cxf:proxy-client payload="body" doc:name="SOAP" />
</http:outbound-endpoint>
<logger level="INFO" message="#[message.payloadAs(java.lang.String)]" />
HTTP出站正在以DepthXMLStreamReader格式重新运行响应。上面的代理客户端格式应该会有所帮助。记录器将从StreamReader读取响应,因此响应为可序列化格式
希望这能有所帮助。我意识到Http出站后的有效负载是流,因此需要将其转换为字符串,否则将出现异常 因此,对我有效的解决方案是:-
<logger level="INFO" message="#[message.payloadAs(java.lang.String)]" />
或者,我意识到即使在添加记录器之后,放置
也会起作用?您是否尝试将Object添加到String或ByteArray添加到String transformer?是。。现在,它在添加记录器后工作。。这背后的原因是什么。。您能告诉我它在响应端需要字符串格式的确切原因吗???来自HTTP出站的响应是一个流。当对有效载荷(以流的形式)执行另一个操作时。流被完全读取,并作为适当的对象可用。在上一个案例中,当您从HTTP向JMS发布响应时,响应仍然是JMS无法接受的流。如果答案对您有用,请对其进行投票。这鼓励用户提供更多帮助。
<logger level="INFO" message="#[message.payloadAs(java.lang.String)]" />