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

如何提取JDBC响应(通过MEL)Mule ESB返回的resultSet值,mule,mule-studio,mule-el,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

我使用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.XML)\u F5RYI-11YTR]
但获取错误,无法提取XML


您能建议如何从结果中提取xml吗?数据库连接器为您提供了一个地图列表。映射键将是列的名称。因此,如果您想获取updateCount1,可以使用如下内容:

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

Thump rule-如果需要XML\u F5RYI,数据库连接器会提供地图列表,但不确定它的格式。。值,然后执行以下操作


[message.payload.get(0)]将其转换为json或映射,其中35;[message.payload.get(“XML_F5RYI-11YTR”)]在大多数情况下,您的操作方式应该有效。我认为这里发生的是,MEL解析器将列名中的连字符解释为减法。因此,您可以将您的语法更改为此语法,它应该可以工作:

#[message.payload.get(0)['XML_F5RYI-11YTR']]
此外,您还可以省略“消息”,因为有效负载可以直接解析:

#[payload.get(0)['XML_F5RYI-11YTR']]
可以使用数组括号语法访问结果集中的第一行,而不是get方法:

#[payload[0]['XML_F5RYI-11YTR']]
最后,您可能希望对从数据库返回的每一行执行一些操作。如果使用集合拆分器或for each,则有效负载将是表示行的映射,而不是表示整个结果集的映射列表:

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

感谢您的回复。我已经尝试了所有列出的3种方式,实际上来自DB的响应是以HashMap的形式出现的。即使在提取该值之后,它仍会引发异常,如执行表达式“payload[0]['XML\u F5RYI-11YTR']”失败。(org.mule.api.expression.ExpressionRuntimeException)。消息负载的类型为:HashMap。关于这个错误有什么建议吗?哦,你是对的,根据我在你的日志输出中看到的响应,负载是一个包含“resultSet1”项的映射。该项包含看起来像地图列表的内容。我会更新我的答案。非常感谢你的回复。能够提取它是正确的。在提取DB中的响应并通过MEL收集ResultSet1 Altogher时,我还面临其他问题。请建议。这是链接
<collection-splitter />
<logger message="#[payload['XML_F5RYI-11YTR']]" />
#[payload.resultSet1[0]['XML_F5RYI-11YTR']]