2011-10-30 30 views
1

我过去的一部分复制从骡网站指南:使用自定义对象

<jdbc:query key="outboundInsertStatement" 
       value="INSERT INTO TEST (ID, TYPE, DATA, ACK) VALUES (#[map-payload:ID], 
        #[map-payload:TYPE],#[map-payload:DATA], #[map-payload:ACK])"/> 

我试图做一些事情非常接近,这只是我想用一个自定义的对象,而不是我明白的java.util.map是预期的。

我可以解释一下#[map-payload:ACK]究竟意味着什么?我不明白的语法。

map-payload某种默认类型?

我可以使用该语法来使用我创建的自定义对象吗? (有些MesssageObj类具有某​​些字段)

回答

1

的语法:

#[evaluator:expression] 

使用由Mule Expression Evaluation framework

如果你看看table that lists all evaluators,你会发现地图有效载荷之间可能其他评估。

所以,你有上面的例子中是指:

  • 预期在飞行中的消息将具有java.util.Map类型的有效载荷,
  • 用于ID,TYPE值,插入查询中的DATA和ACK列将从同名密钥下的地图有效载荷中提取。

当然,您可以随意使用任何其他更好的匹配您的机上消息有效载荷的评估程序。

+0

是的,我读过,但我couldent找到我在找什么。我希望能找到某种[#obj:datamember]语法我可以使用,但我似乎无法使它工作。我如何使用这些表达式来与我创建的自定义对象进行交互?用一个标题字符串来说一个消息对象,一个日期时间obj的正文字符串,我会认为会有类似[#msgInstance:title]等等。但我没有看到任何地方。什么是正确的方法来做到这一点?我现在做的方式是使用变压器将对象变成地图,但这只是浪费和错误,我认为。 – Menyh

+0

如果您的自定义对象符合JavaBean,则使用:#[bean:title]。这将调用有效负载上的getTitle(),该负载被假定为您的目标对象。否则,您可以使用#[groovy:expression]并获得Groovy的全部功能。 –

+0

是的,非常感谢(再次)! – Menyh