退出子流时负载 class 类型发生变化

Payload class type changes when exiting from sub-flow

我正在 mulesoft 门户网站上玩 example,在此示例中使用子流时我看到一些奇怪的行为。

Payload class 类型在退出子流程时发生变化。

下面是有趣的部分

 <sub-flow name="Samsung_SubFlow">
        <data-mapper:transform config-ref="OrderIrem_To_OrderRequest" doc:name="OrderItem To OrderRequest"/>
        <http:request config-ref="HTTP_Request_Configuration" path="samsung/orders" method="POST" port="9090" doc:name="samsung/orders"/> -->
        <flow-ref name="samsungWebServiceClient" doc:name="samsungWebServiceClient"/>
        <logger message="After just returning into the main flow #[payload]" level="INFO" doc:name="Main flow"/>
        <message-property-filter pattern="http.status=200" caseSensitive="true" scope="inbound" doc:name="Filter failures"/>
        <set-session-variable variableName="totalCost" value="#[totalCost+payload.price]" doc:name="totalCost=+price"/>
        <data-mapper:transform config-ref="OrderResponse_to_PurchaseReceipt" doc:name="OrderResponse to PurchaseReceipt"/>
    </sub-flow>
    <sub-flow name="samsungWebServiceClient">
      <cxf:jaxws-client clientClass="com.mulesoft.se.samsung.SamsungServiceService" doc:name="Samsung Webservice Client" operation="purchase" port="SamsungServicePort"/>
      <http:request config-ref="HTTP_Request_Configuration" doc:name="/samsung/orders" method="POST" path="samsung/orders" port="9090"/>
        <logger message="At the end of the subflow #[payload]" level="INFO" doc:name="Sub-flow exit"/>
   </sub-flow>

两个记录器给出了以下

INFO 2015-05-10 17:32:07,016 [[service-orchestration].Orders_HTTP_Listener_Configuration.worker.01] org.mule.api.processor.LoggerMessageProcessor: At the end of the subflow org.glassfish.grizzly.utils.BufferInputStream@1ba9d893 INFO 2015-05-10 17:32:15,219

[[service-orchestration].Orders_HTTP_Listener_Configuration.worker.01] org.mule.api.processor.LoggerMessageProcessor: After just returning into the main flow com.mulesoft.se.samsung.OrderResponse@70d5a09f

请注意负载类型如何从 BufferInputStream 更改为 OrderResponse !!

我不认为这是预期的行为,因为很明显,如果我将 MP 从子流嵌入到主流中,则流会失败,因为有效负载 class 类型不是 OrderResponse

CXF 处理器是一个拦截消息处理器,因此它会在处理器链执行后立即执行一些操作(在本例中为第二个子流)。为了改变这种行为,您可以用 <processor-chain> 标签包围 cxf 客户端。