骡子在选择中比较地图键
Mule comparing map keys in choice
我有一个 Map 负载,我正在使用 foreach 获取 key/value 对以在流程中进一步处理。
示例地图负载:
{key1=[org.myorg.domain.MyObj@7d9bae39,org.myorg.domain.MyObj@2a23741b],
key2=[org.myorg.domain.MyObj@7d9abd39, org.myorg.domain.MyObj@23de741b]}
并在其中选择将其定向到适当的子流,如下所示:
<foreach doc:name="For Each">
<choice doc:name="Choice">
<when expression="#[message.payload.key1 == 'key1']">
<flow-ref name="subflow_1" doc:name="one"/>
</when>
<when expression="#[message.payload.key2 == 'key2']">
<flow-ref name="subflow_2" doc:name="two"/>
<when expression="#[message.payload.key3 == 'key3']">
<flow-ref name="subflow_3" doc:name="three"/>
</when>
<otherwise>
<logger message="no match, default #[message.payload]" level="INFO" doc:name="payload"/>
</otherwise>
</choice>
</foreach>
我的问题
如何匹配密钥以转到正确的子流程。我一直收到 default/otherwise 选项,因为它与密钥不匹配。
你的表达式是根据映射条目值而不是键本身计算的。如果你想检查地图是否包含特定键,你可以使用 keySet 或者你可以只使用简单的空检查:
<when expression="#[payload.keySet().contains('key1')]">
或
<when expression="#[message.payload['key1'] != null]">
实际上有一个更优雅的解决方案,无需使用选择。 Flow-ref 接受 mule 表达式作为流名称,即:
<flow-ref name="#[payload.key]" />
您可以根据键匹配流程名称,它会重定向它而无需添加选择。
我有一个 Map 负载,我正在使用 foreach 获取 key/value 对以在流程中进一步处理。
示例地图负载:
{key1=[org.myorg.domain.MyObj@7d9bae39,org.myorg.domain.MyObj@2a23741b],
key2=[org.myorg.domain.MyObj@7d9abd39, org.myorg.domain.MyObj@23de741b]}
并在其中选择将其定向到适当的子流,如下所示:
<foreach doc:name="For Each">
<choice doc:name="Choice">
<when expression="#[message.payload.key1 == 'key1']">
<flow-ref name="subflow_1" doc:name="one"/>
</when>
<when expression="#[message.payload.key2 == 'key2']">
<flow-ref name="subflow_2" doc:name="two"/>
<when expression="#[message.payload.key3 == 'key3']">
<flow-ref name="subflow_3" doc:name="three"/>
</when>
<otherwise>
<logger message="no match, default #[message.payload]" level="INFO" doc:name="payload"/>
</otherwise>
</choice>
</foreach>
我的问题
如何匹配密钥以转到正确的子流程。我一直收到 default/otherwise 选项,因为它与密钥不匹配。
你的表达式是根据映射条目值而不是键本身计算的。如果你想检查地图是否包含特定键,你可以使用 keySet 或者你可以只使用简单的空检查:
<when expression="#[payload.keySet().contains('key1')]">
或
<when expression="#[message.payload['key1'] != null]">
实际上有一个更优雅的解决方案,无需使用选择。 Flow-ref 接受 mule 表达式作为流名称,即:
<flow-ref name="#[payload.key]" />
您可以根据键匹配流程名称,它会重定向它而无需添加选择。