如何覆盖mule中的有效负载

如何覆盖mule中的有效负载,mule,Mule,我有一个Soap请求进入mule flow。Am的任务是从负载中获取信息,并根据结果将原始请求推送到不同的jms队列 为了从有效负载中获取所需的信息,我使用XSLT Transformer(不是XPath,因为我需要从元素中获取IDREF属性,基于IDREF,从IDREF对象中获取元素,然后获取子元素) 基于XSLT转换的结果,我使用choice元素推送原始负载。Am在会话中存储原始有效负载(也可以在入站中存储)。XSLT转换后,应用choice router找出合适的队列,然后将原始负载推入队

我有一个Soap请求进入mule flow。Am的任务是从负载中获取信息,并根据结果将原始请求推送到不同的jms队列

为了从有效负载中获取所需的信息,我使用XSLT Transformer(不是XPath,因为我需要从元素中获取IDREF属性,基于IDREF,从IDREF对象中获取元素,然后获取子元素)

基于XSLT转换的结果,我使用choice元素推送原始负载。Am在会话中存储原始有效负载(也可以在入站中存储)。XSLT转换后,应用choice router找出合适的队列,然后将原始负载推入队列(原始负载存储在会话变量中)。我正在使用
元素。下面是mule flow的片段:

<flow name="ProcessXML121Order">
    <jms:inbound-endpoint queue="mviq.121.order" exchange-pattern="one-way" />
    <logger message="121 order payload is #[payload]" level="INFO" />
    <message-properties-transformer scope="session">
        <add-message-property key="mviPayload" value="#[payload]"/>
    </message-properties-transformer>
    <xm:xslt-transformer xsl-file="chooseVendor.xslt" />
    <logger message="After xsl file payload is #[payload]" level="INFO" />      
    <choice>
        <when expression="'EMSI'">
            <logger message="Vendor is EMSI" level="INFO" />
            <expression-component>payload=#[header:SESSION:mviPayload]</expression-component>
            <jms:outbound-endpoint queue="mviq.121.order.emsi" />
        </when>
        <when expression="'PRMD'">
            <logger message="Vendor is PRMD" level="INFO" />
            <jms:outbound-endpoint queue="mviq.121.order.prmd" />
        </when>
        <when expression="'RSA'">
            <logger message="Vendor is RSA" level="INFO" />
            <logger message="RSA payload is #[payload]" level="INFO" />
            <jms:outbound-endpoint queue="mviq.121.order.rsa" />
        </when>
        <otherwise>
            <logger message="Vendor is Error" level="INFO" />
            <logger message="Vendor error payload is #[payload]" level="INFO" />
            <jms:outbound-endpoint queue="mviq.error" />
        </otherwise>
    </choice>
</flow>
我有两个问题:

  • 如何覆盖原始有效负载?(并不是说这是最好的方式)
  • 在这种情况下,更好的方法是什么?建议保持原始有效负载不变(在本例中)并将XSLT输出存储在其他变量中吗?我该怎么做?我可以使用什么路径(mule组件)来实现这一点?我对骡子和寻求社区建议很陌生
    谢谢你花时间来研究这个问题。

    在回答你的问题之前,让我们重写这个破碎的表达:

    <expression-component>payload=#[header:SESSION:mviPayload]</expression-component>
    
    要存储原始有效负载,请执行以下操作以重新建立:

    <set-payload value="#[mviPayload]" />
    
    
    
    使用设置有效负载并提供要覆盖的数据。

    您可以通过多种方法来实现这一点

  • 使用设置有效载荷
  • 使用表达式#[payload='']
  • 使用变压器/组件

  • 您可以保持有效负载不变,并使用message enricher将xslt转换的值存储在变量中。使用选项中的变量确定要转到哪个队列。下面是一段代码片段

     <enricher doc:name="Message Enricher" target="#[flowVars.transformResultVar]">
                   <!--perform transformation logic here-->
     </enricher>
    
    
    

    参考资料:

    请提供一个示例和/或一些背景信息。
    <expression-component>payload=sessionVars.mviPayload</expression-component>
    
    <message-properties-transformer scope="session">
        <add-message-property key="mviPayload" value="#[payload]"/>
    </message-properties-transformer>
    
    <set-session-variable variableName="mviPayload" value="#[message.payload]" />
    
    <set-variable variableName="mviPayload" value="#[message.payload]" />
    
    <set-payload value="#[mviPayload]" />
    
     <enricher doc:name="Message Enricher" target="#[flowVars.transformResultVar]">
                   <!--perform transformation logic here-->
     </enricher>