如何提取从 JDBC 响应返回的结果集的值(通过 MEL)Mule ESB

How to Extract the value of resultSet returned from JDBC response (Via MEL) Mule ESB

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

请查找数据库的回复

{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)],它有 return 如下所示的结果集,但不完全是所需的值。我需要取 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

数据库连接器为您提供地图列表。映射键将是列的名称。因此,如果你想获得 updateCount1,你可以使用这样的东西:

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

Thump 规则 - 你的数据库连接器给你地图列表,不确定它是什么格式,如果你想要 XML_F5RYI.. 值然后做下面的

[message.payload.get(0)] 将其转换为 json 或从中映射 #[message.payload.get("XML_F5RYI-11YTR")]

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

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

您也可以省略 "message",因为有效载荷可以直接解析:

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

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

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

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

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

编辑

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

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