如何在Mule变量中设置String值

时间:2014-12-28 14:43:47

标签: xpath mule

我想在flow变量中存储一个表达式,并希望将其检索为与我存储的相同.... 例如: -

<set-variable doc:name="Variable" value="#[xpath('//v1:insertDataRequest/v1:Id').text]" variableName="cacheKey"/> 

这里在名为 cacheKey 的流变量中,我希望将表达式#[xpath('//v1:insertDataRequest/v1:Id').text]存储为String,这样如果我想检索它,如下面的

<logger message="#[flowVars['cacheKey']" level="INFO" doc:name="Logger"/>

它应该将#[flowVars['cacheKey']的值#[xpath('//v1:insertDataRequest/v1:Id').text]检索为字符串

但在我的情况下,每当我试图存储

 <set-variable doc:name="Variable" value="#[xpath('//v1:insertDataRequest/v1:Id').text]" variableName="cacheKey"/>

使用当前消息有效负载提取 xpath 值,我从有效负载中获取xpath的提取值,而不是获取#[xpath('//v1:insertDataRequest/v1:Id').text]

所以,我的问题是如何将值#[xpath('//v1:insertDataRequest/v1:Id').text]存储为flowVars中的String,以便我得到#[xpath('//v1:insertDataRequest/v1:Id').text]作为flowVars值,而不是提取值 的xpath 请帮忙

4 个答案:

答案 0 :(得分:1)

这应该有效:

 <set-variable doc:name="Variable" value="#['#[xpath('//v1:insertDataRequest/v1:Id').text]']" variableName="cacheKey"/>

编辑:

应该逃脱撇号

<set-variable doc:name="Variable" value="#['#[xpath(\'//v1:insertDataRequest/v1:Id\').text]']" variableName="cacheKey"/>

答案 1 :(得分:1)

没有eval可以重用MVEL中的当前上下文,因此即使你按照~nuno存储值(或者只是以某种方式将#与[,或许与字符串appenders]分开)无法执行它。

我无法看到问题的大局,但我可以猜到,我会使用property placeholder来表达您需要能够自定义的表达式。

对于部分问题,如果您指出不想丢失有效负载,只需使用enritcher,它的设计完全适用于那个人和任何人阅读它会很快理解你想要做的事情。

答案 2 :(得分:0)

最后Nuno建议,工作解决方案是: -

<motto>Hello Everyone</motto>

答案 3 :(得分:-1)

您可以通过以下方式替换set-variable标记:

<expression-component>
    flowVars.cacheKey = "#[xpath('//v1:insertDataRequest/v1:Id').text]";
</expression-component>