如何覆盖mule中的有效负载
我有一个Soap请求进入mule flow。Am的任务是从负载中获取信息,并根据结果将原始请求推送到不同的jms队列 为了从有效负载中获取所需的信息,我使用XSLT Transformer(不是XPath,因为我需要从元素中获取IDREF属性,基于IDREF,从IDREF对象中获取元素,然后获取子元素) 基于XSLT转换的结果,我使用choice元素推送原始负载。Am在会话中存储原始有效负载(也可以在入站中存储)。XSLT转换后,应用choice router找出合适的队列,然后将原始负载推入队列(原始负载存储在会话变量中)。我正在使用如何覆盖mule中的有效负载,mule,Mule,我有一个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>
我有两个问题:
谢谢你花时间来研究这个问题。在回答你的问题之前,让我们重写这个破碎的表达:
<expression-component>payload=#[header:SESSION:mviPayload]</expression-component>
要存储原始有效负载,请执行以下操作以重新建立:
<set-payload value="#[mviPayload]" />
使用设置有效负载并提供要覆盖的数据。您可以通过多种方法来实现这一点
您可以保持有效负载不变,并使用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>