Ошибка в потоке мула - полезная нагрузка сообщения имеет тип: 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]" />