我可以使用带有效负载的localhost url访问名为 method 的子流程(请参阅下面的代码段)。 如果我必须精确定位,则跟踪xpath表达式评估失败
#[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
答案 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没有错误。