如何使用JMS队列在Mule中公开代理SOAP 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

我需要托管一个SOAP web服务,并将代理web服务托管到该主web服务。。。 因此,我有以下几点:-

  • 为执行CRUD操作而公开的SOAP web服务
  • 主web服务的代理web服务
  • 现在,我已经创建了SOAP web服务,该服务已公开并执行CRUD操作,并且运行良好。。现在的问题是代理web服务。。以下是我的代理web服务配置:-

    <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)]" />