Mule 3.2 flow和cxf:jaxws-service

时间:2012-06-30 14:43:44

标签: mule

我对mule相对较新,并尝试定义一个通过基于SOAP的Web服务获取请求XML的mule流。 XML基于复杂的模式,我使用WSDL2Java

生成了类

收到请求后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。

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

1 个答案:

答案 0 :(得分:0)

我认为有两种优雅的方法可以做到这一点(不包括涉及更改网络服务界面的方法)

将请求存储到会话变量中,然后将其恢复。 以下是您的流程的样子:

<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>

使用组件周围的richher将返回的值存储到变量中,这样它就不会成为流的有效负载。下面是一个如何实现这个的例子

<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>

您可以在richher here

上找到更多信息