如何提取从JDBC响应(Via MEL)Mule ESB返回的resultSet的值

时间:2015-02-15 12:32:10

标签: mule mule-studio mule-el

我有JDBC,我在调用存储过程,它返回响应如下,但我不确定如何提取结果集的值

请查看DB的回复

{updateCount1=4,resultSet1=[{XML_F5RYI-11YTR=<Customers><Customer1>John<Customer1><Customer2>Ganesh<Customer2><Customers>}],resultSet2[{SequenceNumber=94}],updateCount2=1, updateCount3=4}

我使用了这个表达式#[message.payload.get(0)],它返回了如下所示的ResultSet,但不完全是必需的值。我需要获取XML_F5RYI-11YTR的xml值。

{XML_F5RYI-11YTR=<Customers><Customer1>John<Customer1><Customer2>Ganesh<Customer2><Customers>}

也尝试如下     #[message.payload.get(0).XML_F5RYI-11YTR]但是收到错误,无法提取xml。

您能否建议我如何从ResultSet1中提取xml

3 个答案:

答案 0 :(得分:2)

在大多数情况下,你的方式应该有效。我认为这里发生的是列名称中的连字符被MEL解析器解释为减法。所以你可以改变你的语法,它应该工作:

#[message.payload.get(0)['XML_F5RYI-11YTR']]

此外,您可以省略&#34; message&#34;,因为有效负载可以直接解析:

#[payload.get(0)['XML_F5RYI-11YTR']]

您可以使用数组括号语法来访问结果集中的第一行,而不是get方法:

#[payload[0]['XML_F5RYI-11YTR']]

最后,您可能希望为从数据库返回的每一行执行某些操作。如果使用集合拆分器或f​​or-each,则有效负载将是表示行的映射,而不是表示整个结果集的映射列表:

<collection-splitter />
<logger message="#[payload['XML_F5RYI-11YTR']]" />

修改

要访问问题中显示的有效负载中的结果集,您需要像这样访问它:

#[payload.resultSet1[0]['XML_F5RYI-11YTR']]

答案 1 :(得分:0)

数据库连接器为您提供了一个地图列表。地图键将是列的名称。因此,如果您想获得updateCount1,可以使用以下内容:

#[payload.get('updateCount1')]"

答案 2 :(得分:0)

Thump规则 - 您的数据库连接器为您提供了地图列表,不确定它的格式是什么,如果您想要XML_F5RYI ..值,请执行以下操作

[message.payload.get(0)]将其转换为json或map#[message.payload.get(&#34; XML_F5RYI-11YTR&#34;)]