【问题标题】:Mule ESB: Evaluating Integers in Mule expressionMule ESB:评估 Mule 表达式中的整数
【发布时间】:2013-11-24 13:47:05
【问题描述】:

我有一个数据库表,我使用数据库适配器从这里提取我的有效负载是定义:

CREATE TABLE PriceTickets(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 0)  NOT NULL PRIMARY KEY, PRICE INTEGER,DESTINATION VARCHAR(255))"); 

现在我在我的配置中启动我的数据库入站端点并尝试在有效负载上应用逻辑,如果价格值大于 750 则转发到队列,逻辑如下:

<flow name="ExpreFlow2" doc:name="ExpreFlow2"> 
    <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>
   doc:name="Expression"></expression-transformer>-->  
    <!-- <logger level="INFO" message="Payload is #[message:payload]" doc:name="Logger1"></logger> -->
    <foreach doc:name="Foreach">
    <choice doc:name="Choice">
    <when expression="#[message.payload[0]['price'] > 750]" > 
       <processor-chain doc:name="Processor Chain"> 
            <request-reply timeout="5000"> 
               <jms:outbound-endpoint connector-ref="jmsConnector" queue="Queue1"></jms:outbound-endpoint> 
               <jms:inbound-endpoint connector-ref="jmsConnector" queue="Queue2"></jms:inbound-endpoint>  
             </request-reply>  
       </processor-chain>
    </when> 

但是我发现在尝试运行此流程时出现以下错误:

java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.Class
    at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getCollectionPropertyAO(

尝试了其他指定整数比较的组合,但没有奏效,任何建议都非常感谢。

【问题讨论】:

  • 我猜这是因为当我从数据库中获取地图时,我没有使用#[map-payload:price]。有人可以确认吗?
  • 您正在混合旧式表达式和 MEL:使用 #[message.payload] 而不是 #[message:payload]

标签: mule esb


【解决方案1】:

您有一个 foreach 来遍历行,因此您的表达式中的 [0] 可能是多余的。

您应该能够直接通过以下方式访问列值:

#[message.payload.price > 750]

【讨论】:

  • 750]” > 得到:异常堆栈为:1。 [错误:无法访问:价格;在课堂上:org.mule.el.context.MessageContext] [Near : {... message.price > 750 ....}] ^
  • 大卫也有同样的问题,即使我可以在上面几行打印价格,它也无法访问地图外的价格
  • 对不起,我的意思是message.payload.price
  • @DavidDosset 最后我尝试了code @987654326 @got 'code' 异常堆栈是:[错误:无法访问:PRICE;在课堂上:java.lang.String] [Near : {... message.payload.PRICE > 750 ....}] code
猜你喜欢
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多