mule流出错 - 消息有效负载的类型为:byte []

时间:2015-02-26 20:05:07

标签: mule esb mule-studio

我可以使用带有效负载的localhost url访问名为 method 的子流程(请参阅下面的代码段)。 如果我必须精确定位,则跟踪xpat​​h表达式评估失败

#[xpath:// Envelope / Body / add] ,错误提示消息有效内容的类型为:byte []

我尝试过使用变换器(byte-array-to-string,byte-array-to-object,object-to-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 个答案:

答案 0 :(得分:1)

有了这个:

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

使用入站输入流将其呈现为String。

  

BTW假设您使用的是Mule 3.3或更高版本,您应该使用MEL而不是超级旧表达式评估框架,即:#[message.payloadAs(java.lang.String)]同样适用于旧json:评估者(请参阅{{ 3}})。

因此,您需要将消息有效负载设置为您刚刚在set-variable中创建的字符串,将现在消耗的输入流替换为其实际内容:

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

答案 1 :(得分:1)

在流版本1

在http入站端点之后,添加object-to-string转换器。 xpath表达式evalautes没有错误。