0

我对 mule 比较陌生,并试图定义一个 mule 流,该流通过基于肥皂的 Web 服务获取请求 XML。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。

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

4

1 回答 1

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>

您可以在此处找到有关浓缩器的更多信息

于 2012-07-01T09:40:25.457 回答