MVEL表达式:java.lang.ClassCastException:[B不能转换为java.lang.Object

时间:2018-07-03 08:24:00

标签: java mvel

我正在编写一些MVEL表达式"$input.get('RESULT').array()[1]",其中$input.get('RESULT')返回一个ByteBuffer,所以我正在使用array()将其转换为数组,然后尝试获取索引1的值。其中,数组具有16个属性。

但是当Mvel执行此表达式时,我得到

 java.lang.ClassCastException: [B cannot be cast to java.lang.Object

我正在使用以下代码

MVEL.executeExpression(statement, fieldContext.getContext(), fieldContext.getVariables());

我还编写了其他表达式,效果很好,我遇到了第一个字节的错误。

这里的任何帮助将不胜感激。

更新: 当我使用ByteBuffer get方法时,出现以下错误,因此我想尝试一下array

java.lang.IllegalAccessError: tried to access class java.nio.HeapByteBuffer from class ASMAccessorImpl_2330495751530608772190
    at ASMAccessorImpl_2330495751530608772190.getValue(Unknown Source)
    at org.mvel2.optimizers.dynamic.DynamicGetAccessor.getValue(DynamicGetAccessor.java:79)
    at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:108)
    at org.mvel2.MVELRuntime.execute(MVELRuntime.java:86)
    at org.mvel2.compiler.CompiledExpression.getDirectValue(CompiledExpression.java:123)
    at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:119)
    at org.mvel2.MVEL.executeExpression(MVEL.java:922)`

1 个答案:

答案 0 :(得分:0)

您不必使用byte[]转换为array(),就足够了

$input.get('RESULT').get(1)

根据ByteBuffer.get()方法文档:

  

公共抽象字节get(int索引)

     

绝对获取方法。读取给定索引处的字节。