#esb #mule
#esb #mule
Вопрос:
Я скопирую часть из руководства по веб-сайту mule:
<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.
Если вы посмотрите в таблицу, в которой перечислены все оценщики, вы найдете map-payload среди других оценщиков.
Итак, приведенный выше пример означает, что:
- ожидается, что сообщение в полете будет иметь полезную нагрузку типа java.util.Map,
- значения для столбцов ID, TYPE, DATA и ACK в запросе insert будут извлечены из полезной нагрузки map под одноименными ключами.
Конечно, не стесняйтесь использовать любой другой оценщик, который лучше соответствует полезной нагрузке вашего сообщения в полете.
Комментарии:
1. Да, я читал это, но не смог найти то, что искал. Я надеялся, что смогу найти какой-нибудь синтаксис [#obj:datamember], который я мог бы использовать, но, похоже, я не могу заставить его работать. Как я могу использовать эти выражения для взаимодействия с созданным мной пользовательским объектом? Скажем, объект сообщения со строкой заголовка, строка тела — объект datetime, я бы подумал, что будет что-то вроде [#msgInstance:title] и так далее. Но я нигде этого не вижу. Каков был бы правильный способ сделать это? То, как я делаю это сейчас, — это использовать трансформатор для превращения объекта в карту, но я предполагаю, что это просто расточительно и неправильно.
2. Если ваш пользовательский объект совместим с JavaBean, используйте: #[bean:title] . Это вызовет функцию getTitle() для полезной нагрузки, которая предполагается вашим целевым объектом. В противном случае вы можете использовать #[groovy:expression] и получить полную мощность Groovy к вашим услугам.