【问题标题】:Mule - java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.util.ListMule - java.lang.ClassCastException:java.util.LinkedHashMap 无法转换为 java.util.List
【发布时间】:2014-04-08 17:02:48
【问题描述】:

我正在使用将 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']] 进行记录时,我得到了正确的关联值。但是查询中的相同表达式对我不起作用。

等待您的回复。

谢谢。

【问题讨论】:

    标签: mule mule-studio mule-el


    【解决方案1】:

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

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

    然后在查询中只使用地图负载:

    #[message.payload['Salary']]
    

    【讨论】:

    • 好吧,但我仍然很困惑,为什么 #[message.payload[0]['Salary']] 不起作用。在记录器中,它为我提供了键“Salary”的正确值。
    猜你喜欢
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    相关资源
    最近更新 更多