将请求负载映射到变量会在 Mule 不可用时抛出异常
Mapping request payload to variable throws exception when not available for Mule
在使用 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 请求的有效负载中的参数之一进行发送。
使用 #[flowVars.a]
而不是 #[a]
将导致 null
而不是异常。
您的实施有问题。在 http 侦听器之后,有效负载是原始响应 (JSON),它无法通过 #[payload.a] 或 #[payload['a']] 以任何方式访问。您应该将 json 添加到对象(将 json 转换为地图)。从这里您可以像这样引用它 #[payload['a']] 或 #[payload.a]
在使用 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 请求的有效负载中的参数之一进行发送。
使用 #[flowVars.a]
而不是 #[a]
将导致 null
而不是异常。
您的实施有问题。在 http 侦听器之后,有效负载是原始响应 (JSON),它无法通过 #[payload.a] 或 #[payload['a']] 以任何方式访问。您应该将 json 添加到对象(将 json 转换为地图)。从这里您可以像这样引用它 #[payload['a']] 或 #[payload.a]