2012-06-30 39 views
0

我对mule比较陌生,试图定义一个通过基于soap的Web服务接受请求XML的mule流。 XML基于复杂的模式,我已经使用WSDL2Java生成类Mule 3.2 flow和cxf:jaxws-service

接收到请求后,cxf:jaxws-service执行submitOrder方法(SubmitOrderRequest参数)。在执行此方法后,我想将请求XML转换为稍微不同的格式。然后这个XML需要被转发到另一个Web服务。问题是来自ServiceImpl的mule消息包含SubmitOrderResponse,而我仍然想处理SubmitOrderRequest。

<flow name="testService"> 
    <http:inbound-endpoint address="http://localhost:62005/test" 
     exchange-pattern="request-response"> 
     <cxf:jaxws-service serviceClass="com.test.ServicePortType" /> 
    </http:inbound-endpoint> 
    <component class="com.test.ServiceImpl" /> 
    <!-- transformer ref="MVIRequestTransformer"/--> 
    <!-- xm:object-to-xml-transformer/--> 
    <!-- logger message="XML payload is #[payload]" level="INFO"/--> 
    <!-- SEND TRASNFORMED MESSAGE TO ANOTHER SERVICE --> 
</flow> 


@WebService(endpointInterface = "com.pennmutual.services.mvi.MVIServicePort") 
public class ServiceImpl implements ServicePortType { 
    ... 
    @Override 
    public SubmitOrderResponse submitOrder(SubmitOrderRequest parameters) { 
    ... 
    } 
... 
} 

我的选择是什么。我可以想到以下内容 - 1.将请求对象放在上下文中的某个地方,稍后再进行处理。 2.将submitOrder的返回类型更改为Object,并返回SubmitOrderRequest而不是SubmitOrderResponse。

请建议最好的方法来处理这种情况。我正在使用骡子3.2。

回答

0

我想有两个优雅的方式来做到这一点(不涉及更改Web服务接口的一个)

商店请求到一个会话变量,事后恢复。 这里是你的流量会是什么样子:

<flow name="testService"> 
<http:inbound-endpoint address="http://localhost:62005/test" exchange-pattern="request-response"> 
<cxf:jaxws-service serviceClass="com.test.ServicePortType" /> 
</http:inbound-endpoint> 
<message-properties-transformer scope="session"> 
<add-message-property value="payload" key="originalPayload" /> 
</message-properties-transformer> 
<component class="com.test.ServiceImpl" /> 
</flow> 

使用浓缩塔组件周围返回的值存储到一个变量,因此它不会成为你流的有效载荷。下面的如何实现一个例子这一

<flow name="Echo" doc:name="Echo"> 
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="6090" path="echo" encoding="UTF-8" /> 
<cxf:jaxws-service serviceClass="org.mule.example.echo.Echo" /> 
<enricher target="#[variable:echo]"> 
<component class="org.mule.example.echo.Echo" /> 
</enricher> 
<logger level="ERROR" message="#[variable:echo]"/> 
</flow> 

您可以找到富集更多的信息here