Ошибка в потоке мула - полезная нагрузка сообщения имеет тип: byte[]

Я могу получить в подпоток именованный метод (см. Фрагмент ниже), используя локальный URL-адрес с допустимой полезной нагрузкой. Если бы я должен был точно определить, что следующая оценка выражения xpath не удалась

#[xpath://Envelope/Body/add] с ошибкой, сообщающей, что полезная нагрузка сообщения имеет тип: byte[]

Я пытался использовать преобразователи (байтовый массив в строку, байтовый массив в объект, объектный в xml и т. Д.), Но, кажется, ничто не решает эту проблему.

<flow name="version1" >
    <http:inbound-endpoint ........ />
    <set-variable variableName="req" value="#[payload:java.lang.String]"/>
    <flow-ref name="method"/>
    <catch-exception-strategy>
        <logger level="ERROR" message="Exception occurred when invoking add/update operation. The payload submitted was: #[flowVars['req']]"/>      
    </catch-exception-strategy>
</flow>

<sub-flow name="method" >   
    <choice doc:name="Choice" >
        <when expression="#[xpath://Envelope/Body/add]">
            <flow-ref name="add_v1"/>
        </when>
        <when expression="#[xpath://Envelope/Body/update]" >
            <flow-ref name="update_v1"/>
        </when>
        <otherwise>
            <scripting:component>
                <scripting:script engine="Groovy">
                    <![CDATA[throw new Exception("Operation not found!");]]>
                </scripting:script>
            </scripting:component>
        </otherwise>
    </choice>
</sub-flow>

**ERROR**

Message : Failed to invoke ScriptComponent{method.component.568157096}. Component that caused exception is: ScriptComponent{method.component.568157096}. Message payload is of type: byte[]
Code : MULE_ERROR--2

2 ответа

В потоке version1

после входящей конечной точки http добавьте преобразователь объекта в строку. Выражение xpath оценивается без ошибки.

С этим:

<set-variable variableName="req" value="#[payload:java.lang.String]"/>

Вы используете входящий поток ввода, чтобы отобразить его как строку.

КСТАТИ Предполагая, что вы используете Mule 3.3 или выше, вы должны использовать MEL, а не супер-старую среду оценки выражений, т.е. #[message.payloadAs(java.lang.String)] То же относится и к старому json: оценщик (см. поддержку JSON в MEL).

Поэтому вам нужно установить полезную нагрузку сообщения на строку, которую вы только что создали set-variable, заменив теперь потребляемый входной поток его фактическим содержимым:

<set-payload value="#[req]" />
Другие вопросы по тегам