Использование пользовательских объектов в инструкции вставки JDBC

#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 к вашим услугам.