Mule - java.lang.ClassCastException:java.util.LinkedHashMap无法强制转换为java.util.List

时间:2014-04-08 07:15:33

标签: mule mule-studio mule-el

我正在使用将xml文件映射到地图数组的数据映射器。记录时,我得到下面给出的结果:

[{Name=xyz, Salary=30000, Tax=1000}, {Name=BOS, Salary=200, Tax=75}]

从上面得到的映射我试图根据where子句向数据库插入值。我的查询看起来像这样:

UPDATE employee SET Salary =#[message.payload[0]['Salary']]  WHERE name = #[message.payload[0]['Name']]

这里我得到的异常看起来像是:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.util.List
at org.mvel2.optimizers.impl.refl.nodes.ListAccessor.getValue(ListAccessor.java:40)
at org.mvel2.optimizers.impl.refl.nodes.GetterAccessor.getValue(GetterAccessor.java:40)
at org.mvel2.optimizers.impl.refl.nodes.VariableAccessor.getValue(VariableAccessor.java:37)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)

使用#[message.payload [0] ['Salary']] 进行记录时,我正确地获得与之关联的值。但查询中的相同表达式对我不起作用。

等待你的回复。

感谢。

1 个答案:

答案 0 :(得分:1)

在使用查询之前取第一项(或拆分数组):

<set-payload value="#[payload[0]]" />

然后在查询中仅使用地图有效负载:

#[message.payload['Salary']]