如何提取从 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']]
我有 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']]