当请求Mule不可用时,将请求有效负载映射到变量会引发异常

时间:2017-05-17 09:10:58

标签: json mule runtime-error mule-component

在使用MULE时,我将从HTTP请求接收的有效负载转换为json对象并将其映射到变量。如果我没有传递其中一个变量,我在评估表达式时会遇到异常。

 <flow name="test">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
    <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>
    <set-variable variableName="a"              value="#[message.payload.a]"
    <set-variable variableName="b"              value="#[message.payload.b]"
    <logger message="a:  #[a]" level="INFO" doc:name="Logger"></logger>
</flow>

当有效载荷

{
    "a": "val1",
    "b": "val2"
}

应用程序运行正常。

但如果有效载荷是

{
   "b": "val2"
}

我得到以下异常:

 ERROR [].HTTP_Listener_Configuration.worker.01] org.mule.exception.DefaultMessagingExceptionStrategy:
********************************************************************************
Message               : Execution of the expression "a" failed. (org.mule.api.expression.ExpressionRuntimeException).
Payload               : {b="val2"}
Payload Type          : java.util.LinkedHashMap
Element               : /test/processors/10 @ test:test.xml:47 (Logger)
Element XML           : <logger message="a:  #[a]" level="INFO" doc:name="Logger"></logger>
--------------------------------------------------------------------------------
Root Exception stack trace:
[Error: unresolvable property or identifier: a]
[Near : {... a ....}]

我可以检查并将变量'a'的值附加为NULL吗?

P.S。我想使用此变量作为其他一些http请求的有效负载中的参数之一进行发送。

2 个答案:

答案 0 :(得分:1)

使用#[flowVars.a]代替#[a]将导致null而不是例外。

答案 1 :(得分:1)

您的实施有些不对劲。在http监听器之后,有效负载是一个原始响应(JSON),它以任何方式都不能被#[payload.a]或#[payload [&#39; a&#39;]]访问。您应该将一个json添加到Object(将json转换为map)。从这里你可以像这样#[有效载荷[&#39; a&#39;]]或#[payload.a]