首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当json数组的表达式失败时包含“Mule4”时,请检查

当json数组的表达式失败时包含“Mule4”时,请检查
EN

Stack Overflow用户
提问于 2019-04-03 13:45:00
回答 1查看 2.8K关注 0票数 0

在Mule 3.9到Mule 4.x迁移工作中,API接收json输入有效载荷,如下所示,我试图检查这个数组DFU中是否存在payload.sec_entities字符串值。注意到在日志语句条件下,检查工作非常好,请参见下面的日志语句显示调试-8、调试-9、调试-10的错误日志。的问题是,当表达的时候,有人能提出什么问题,什么时候表达出来呢?

当表达式失败时,尝试使用此方法:

代码语言:javascript
复制
<when expression="#[payload.sec_entities != null and payload.sec_entities contains 'DFU']">

尝试使用此方法,即使在表达式失败时也是如此:

代码语言:javascript
复制
<when expression="#[%dw 2.0 output application/java --- payload.sec_entities != null and payload.sec_entities contains 'DFU' as String]">

输入有效载荷:

代码语言:javascript
复制
{
  "primary_entities": [
    "DMDUNIT",
    "LOC"
  ],
  "sec_entities": [
    "DFU",
    "STOCK"
  ]
}

代码:

代码语言:javascript
复制
<flow name="Orchestrator-DFU-Flow">
        <logger message="debug-8 expression check: payload.sec_entities: #[payload.sec_entities]"/>
        <logger message="debug-9 expression check: payload.sec_entities not null check: #[payload.sec_entities != null]"/>
        <logger message="debug-10 expression check: payload.sec_entities contains: #[payload.sec_entities contains 'DFU']"/>
        <choice doc:name="Choice">
            <when expression="#[%dw 2.0 output application/java --- payload.sec_entities != null and payload.sec_entities contains 'DFU' as String]">
                <set-payload value="DFU" doc:name="Set Payload" />
                <set-variable variableName="filterJson" value="#[%dw 2.0 
import java!com::jda::cd::util::StringUtil
output application/json 
--- 
StringUtil::getFilterExpression(vars.modifiedJsonInPayload, payload)]" doc:name="Set dfuFilterJson Session Variable" doc:id="8f20824e-b4eb-431c-a2e3-bdaf155f3367"/>
                <set-variable variableName="entityMapForBatch" value='#[{"sec_entities":[payload]}]' doc:name="Variable - entityMapForBatch" doc:id="928fa7d9-b620-4e9f-9a30-caea11dd5d04"/>
                <logger message="#['Posting Filter $(payload)']" level="INFO" doc:name="Log_DFU_Filter" />
                <flow-ref name="Create_Batch" doc:name="Create_Batch" />
                <flow-ref name="post_masterdata_to_messaging_system" doc:name="post_masterdata_to_messaging_system" />
            </when>
            <otherwise>
                <logger level="INFO" doc:name="Logger" message="DFU flows will not be triggered." />
            </otherwise>
        </choice>

        <error-handler ref="Global_Errorflow_Choice_Exception_Strategy" doc:name="Reference Exception Strategy" />
    </flow>

错误日志:

代码语言:javascript
复制
INFO  2019-04-03 18:47:20,113 [[MuleRuntime].cpuLight.11: [jda-demand-adapter].Orchestrator-DFU-Flow.CPU_LITE @5011b8c6] [event: 0-cd4e4691-5612-11e9-ae40-0a0027000005] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: debug-8 expression check: payload.sec_entities: ["DFU","STOCK"]
INFO  2019-04-03 18:53:30,181 [[MuleRuntime].cpuLight.09: [jda-demand-adapter].Orchestrator-DFU-Flow.CPU_LITE @36218376] [event: 0-aaaca7c1-5613-11e9-ae40-0a0027000005] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: debug-9 expression check: payload.sec_entities not null check: true
INFO  2019-04-03 18:53:30,183 [[MuleRuntime].cpuLight.09: [jda-demand-adapter].Orchestrator-DFU-Flow.CPU_LITE @36218376] [event: 0-aaaca7c1-5613-11e9-ae40-0a0027000005] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: debug-10 expression check: payload.sec_entities contains: true
ERROR 2019-04-03 18:53:30,187 [[MuleRuntime].cpuLight.09: [jda-demand-adapter].Orchestrator-DFU-Flow.CPU_LITE @36218376] [event: 0-aaaca7c1-5613-11e9-ae40-0a0027000005] org.mule.runtime.core.internal.exception.OnErrorContinueHandler: 
********************************************************************************
Message               : "Cannot coerce Array (["DFU", "STOCK"]) to Boolean
Trace:
  at main (line: 1, column: 91)" evaluating expression: "%dw 2.0 output application/java --- payload.sec_entities != null and payload.sec_entities contains 'DFU' as String".
Error type            : MULE:EXPRESSION
Element               : Orchestrator-DFU-Flow/processors/3 @ jda-demand-adapter:orchestrator-flow.xml:125 (Choice)
Element XML           : <choice doc:name="Choice">
<when expression="#[%dw 2.0 output application/java --- payload.sec_entities != null and payload.sec_entities contains 'DFU' as String]">
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-03 14:05:49

找到了上述问题的解决方案:

代码语言:javascript
复制
<when expression="#[output application/json
--- 
((payload.sec_entities != null) and (payload.sec_entities contains 'DFU'))]">
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55496707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档