Mule ExpressionRuntimeException 消息有效负载的类型为:LinkedList

Posted

技术标签:

【中文标题】Mule ExpressionRuntimeException 消息有效负载的类型为:LinkedList【英文标题】:Mule ExpressionRuntimeException Message payload is of type: LinkedList 【发布时间】:2015-07-14 14:11:56 【问题描述】:

错误信息:

Message               : Execution of the expression "payload.get(0).get('ACCESS_TOKEN')" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: LinkedList
Code                  : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. Index: 0, Size: 0 (java.lang.IndexOutOfBoundsException)
  java.util.LinkedList:553 (null)
2. null (java.lang.reflect.InvocationTargetException)
  sun.reflect.GeneratedMethodAccessor323:-1 (null)
3. cannot invoke method: get (java.lang.RuntimeException)
  org.mule.mvel2.optimizers.impl.refl.nodes.MethodAccessor:63 (null)
4. Execution of the expression "payload.get(0).get('ACCESS_TOKEN')" failed. (org.mule.api.expression.ExpressionRuntimeException)
  org.mule.el.mvel.MVELExpressionLanguage:202 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/expression/ExpressionRuntimeException.html)
5. Execution of the expression "payload.get(0).get('ACCESS_TOKEN')" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: LinkedList (org.mule.api.transformer.TransformerMessagingException)

代码:

<db:select config-ref="QB_Oracle_Configuration" doc:name="Access">
     <db:parameterized-query><![CDATA[select access_token, access_token_secret from sias_access where EMPLID=#[message.inboundProperties['p_emplId']] AND TRINET_COMPANY=#[message.inboundProperties['p_company']]]]></db:parameterized-query>
</db:select> 
<set-session-variable variableName="accessToken" value="#[payload.get(0).get('ACCESS_TOKEN')]" doc:name="Access token"/>

问题有时来自选择查询的值不止一个,我该如何过滤。我可以通过 WHERE ROWNUM = 1 过滤查询来做到这一点,但是如何在 Mule 中处理而不是在查询中处理呢?

【问题讨论】:

【参考方案1】:

你可以试试:

#[message.payload[0]['ACCESS_TOKEN']]

如果这仍然引发异常,请分享完整的错误,而不仅仅是第一行,以便我改进我的答案。

【讨论】:

payload[0]['Key']] 和 payload.get(0).get('K') 的区别是什么? 没有,只是它更短 :) 但主要区别是使用message.payload 而不仅仅是payload 我试过#[payload[0]['ACCESS_TOKEN']],它工作正常。 #[message.payload['key']] 和 #[payload['key']] 不一样吗? 理论上是相同的,但在许多随机情况下不是并且失败了。最好改用message.payload。搜索 *** 以了解人们被此问题困扰的频率:-)

以上是关于Mule ExpressionRuntimeException 消息有效负载的类型为:LinkedList的主要内容,如果未能解决你的问题,请参考以下文章

Mule 入门之:环境搭建

mule学习笔记

Mule 组件交互 - 基于消息?

如何在 Mule 4 中通过 ActiveMQ 传递属性

Mule ESB 连接到 RabbitMQ

EnjoyingSoft之Mule ESB基础系列第二篇:Mule ESB基本概念