MuleESB:无法使用映射负载在中路由消息

MuleESB:无法使用映射负载在中路由消息,mule,esb,Mule,Esb,当我尝试基于map负载进行过滤时,我发现它总是命中othewise子句&而不是when子句,即使map负载包含SFO作为目的地。我的表情怎么了 这是你可以看到的日志,它总是在日志中出现,否则永远不会出现 <jdbc-ee:inbound-endpoint queryTimeout="-1" doc:name="Database" connector-ref="jdbcConnector" queryKey="selectAll" pollingFrequency="10000">

当我尝试基于map负载进行过滤时,我发现它总是命中othewise子句&而不是when子句,即使map负载包含SFO作为目的地。我的表情怎么了

这是你可以看到的日志,它总是在日志中出现,否则永远不会出现

<jdbc-ee:inbound-endpoint   queryTimeout="-1" doc:name="Database" connector-ref="jdbcConnector" queryKey="selectAll" pollingFrequency="10000">
            <jdbc-ee:transaction action="NONE"/>
    </jdbc-ee:inbound-endpoint>
   <foreach doc:name="Foreach">
<choice doc:name="Choice">
<when expression="#[map-payload:destination] == SFO" >
      <processor-chain doc:name="Processor Chain"> 

    <logger level="INFO" message="Print 1"/>
            </when> 
<otherwise>
    <logger level="INFO" message="Print 2"/> 
       </otherwise> 
  </choice>

</foreach>
信息2013-11-23 14:51:33966[[ConfluexDemo].ExpreFlow2.stage1.02]org.mule.api.processor.LoggerMessageProcessor:打印2 信息2013-11-23 14:51:33967[[ConfluexDemo].ExpreFlow2.stage1.02]org.mule.api.processor.LoggerMessageProcessor:打印2 INFO 2013-11-23 14:51:43955[[ConfluexDemo].ExpreFlow2.stage1.02]org.mule.api.processor.LoggerMessageProcessor:有效负载为{DESTINATION=LAX,PRICE=5,ID=3} INFO 2013-11-23 14:51:43955[[ConfluexDemo].ExpreFlow2.stage1.03]org.mule.api.processor.LoggerMessageProcessor:有效负载为{DESTINATION=SFO,PRICE=10,ID=2} INFO 2013-11-23 14:51:43956[[ConfluexDemo].ExpreFlow2.stage1.02]org.mule.api.processor.LoggerMessageProcessor:目标是MLT 信息2013-11-23 14:51:43957[[ConfluexDemo].ExpreFlow2.stage1.02]org.mule.api.processor.LoggerMessageProcessor:价格是1200 INFO 2013-11-23 14:51:43957[[ConfluexDemo].ExpreFlow2.stage1.03]org.mule.api.processor.LoggerMessageProcessor:目的地是SFO 信息2013-11-23 14:51:43958[[ConfluexDemo].ExpreFlow2.stage1.03]org.mule.api.processor.LoggerMessageProcessor:价格是500 信息2013-11-23 14:51:43959[[ConfluexDemo].ExpreFlow2.stage1.03]org.mule.api.processor.LoggerMessageProcessor:打印2 信息2013-11-23 14:51:43961[[ConfluexDemo].ExpreFlow2.stage1.02]org.mule.api.processor.LoggerMessageProcessor:打印2 信息2013-11-23 14:51:43962[[ConfluexDemo].ExpreFlow2.stage1.02]org.mule.api.processor.LoggerMessageProcessor:打印2 信息2013-11-23 14:51:43963[[ConfluexDemo].ExpreFlow2.stage1.02]org.mule.api.processor.LoggerMessageProcessor:打印2 信息2013-11-23 14:51:43965[[ConfluexDemo].ExpreFlow2.stage1.03]org.mule.api.processor.LoggerMessageProcessor:打印2 信息2013-11-23 14:51:43966[[ConfluexDemo].ExpreFlow2.stage1.03]org.mule.api.processor.LoggerMessageProcessor:打印2
映射有效负载
不推荐使用:如果有效负载是映射,则可以直接使用MEL获取其值

因此,假设您有一个名为
destination
text
列,下面的操作应该可以:

INFO 2013-11-23 14:51:33,966 [[ConfluexDemo].ExpreFlow2.stage1.02] org.mule.api.processor.LoggerMessageProcessor: Print 2 INFO 2013-11-23 14:51:33,967 [[ConfluexDemo].ExpreFlow2.stage1.02] org.mule.api.processor.LoggerMessageProcessor: Print 2 INFO 2013-11-23 14:51:43,955 [[ConfluexDemo].ExpreFlow2.stage1.02] org.mule.api.processor.LoggerMessageProcessor: Payload is {DESTINATION=LAX, PRICE=5, ID=3} INFO 2013-11-23 14:51:43,955 [[ConfluexDemo].ExpreFlow2.stage1.03] org.mule.api.processor.LoggerMessageProcessor: Payload is {DESTINATION=SFO, PRICE=10, ID=2} INFO 2013-11-23 14:51:43,956 [[ConfluexDemo].ExpreFlow2.stage1.02] org.mule.api.processor.LoggerMessageProcessor: Destination is MLT INFO 2013-11-23 14:51:43,957 [[ConfluexDemo].ExpreFlow2.stage1.02] org.mule.api.processor.LoggerMessageProcessor: Price is 1200 INFO 2013-11-23 14:51:43,957 [[ConfluexDemo].ExpreFlow2.stage1.03] org.mule.api.processor.LoggerMessageProcessor: Destination is SFO INFO 2013-11-23 14:51:43,958 [[ConfluexDemo].ExpreFlow2.stage1.03] org.mule.api.processor.LoggerMessageProcessor: Price is 500 INFO 2013-11-23 14:51:43,959 [[ConfluexDemo].ExpreFlow2.stage1.03] org.mule.api.processor.LoggerMessageProcessor: Print 2 INFO 2013-11-23 14:51:43,961 [[ConfluexDemo].ExpreFlow2.stage1.02] org.mule.api.processor.LoggerMessageProcessor: Print 2 INFO 2013-11-23 14:51:43,962 [[ConfluexDemo].ExpreFlow2.stage1.02] org.mule.api.processor.LoggerMessageProcessor: Print 2 INFO 2013-11-23 14:51:43,963 [[ConfluexDemo].ExpreFlow2.stage1.02] org.mule.api.processor.LoggerMessageProcessor: Print 2 INFO 2013-11-23 14:51:43,965 [[ConfluexDemo].ExpreFlow2.stage1.03] org.mule.api.processor.LoggerMessageProcessor: Print 2 INFO 2013-11-23 14:51:43,966 [[ConfluexDemo].ExpreFlow2.stage1.03] org.mule.api.processor.LoggerMessageProcessor: Print 2


这是因为您使用
foreach

对该表达式周围的行进行迭代,这是一种多么奇怪的XML格式:)为什么有时是
DESTINATION
,有时是
DESTINATION
,记录这些不同行的记录器在哪里?当我将日志与上面的配置进行比较时,我无法理解这些日志。请重新格式化您的XML,如果您不尽最小努力以干净的方式呈现您的信息,将很难为您提供帮助。David,这是添加更改后得到的结果:根异常堆栈跟踪:[错误:无法访问:目标;在类中:java.lang.String][Near:{…message.payload.destination==…}]^尽管我可以看到上面打印的目的地:16:02:42023[[ConfluexDemo].ExpreFlow2.stage1.03]org.mule.api.processor.LoggerMessageProcessor:目的地是SFO,这没有意义:这意味着当前有效负载是一个
字符串,而不是
映射
,尽管当您迭代来自
selectAll
列表时,它应该是一个
映射
<when expression="#[message.payload.destination == 'SFO']" >