Выражение MVEL: java.lang.ClassCastException: [B не может быть приведено к java.lang.Object - PullRequest
0 голосов
/ 03 июля 2018

Я пишу несколько выражений MVEL "$input.get('RESULT').array()[1]", где $input.get('RESULT') возвращает ByteBuffer, поэтому я преобразовываю его в массив, используя array(), а затем пытаюсь получить значение индекса 1. где массив имеет 16 атрибутов. * * 1005

Но когда 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 голосов
/ 03 июля 2018

Вам не нужно конвертировать в byte[] с помощью array(), этого должно быть достаточно для

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

согласно ByteBuffer.get() документация по методу:

открытый абстрактный байт get (int index)

Абсолютный метод получения. Читает байт по указанному индексу.

...