Я извлекаю письма из форматированных данных JSON, используя MVEL в enricher, который возвращает меня как список. Я хочу создать строку с запятыми с этими письмами, чтобы я мог передать ее JDBC. Я попытался следующие,Создание разделенных запятыми строк из списка в Mule ESB
<enricher target="#[flowVars.listEmails]" source="#[{(Details.Email in payload.People)}]" doc:name="Message Enricher">
<json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
</enricher>
<set-variable value="#[StringUtils.join(flowVars['listEmails'], ', ')]" variableName="strEmails"></set-variable>
<logger level="INFO" doc:name="Logger" message="$$$: output = #[StringUtils.join(flowVars['listEmails'], ',')]"/>
но когда я побежал SQL Profiler, я не вижу какой-либо параметр был передан запрос SQL. Когда я попробовал, он распечатывает электронные письма, но как список. Вот результат:
INFO 2014-02-07 10:01:41,699 [[UserManagement].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: $$$: output = [[email protected], [email protected], [email protected]]
Напомним, что мое требование, чтобы получить электронную почту из списка и отформатировать его в виде строки, разделенные запятыми, так что я могу передать его в JDBC запроса, чтобы получить результаты от SQL Server. Запрос должен выглядеть следующим образом:
SELECT Id, Email FROM tbl_sfcontact WHERE Email IN ('[email protected]', '[email protected]', '[email protected]')
где список адресов электронной почты в разделе «WHERE» извлекается из набора данных JSON. JDBC запрос, который я использую в настоящее время выглядит следующим образом:
<jdbc:query key="getContactByEmail" value="SELECT Id FROM tbl_sfContact WHERE Email IN (#[StringUtils.join(flowVars['strEmails'], ', ')])"/>
Снятие дополнительного фигурную скобку было снять скобки с выхода регистратора, однако, я предполагаю, что это не создает строку как «[email protected]», «[email protected]», и это выбрасывает SQL Exception 'Слишком много параметров: ожидается 0, дано 1'. Я обновил свой вопрос, чтобы включить пример того, что я хочу. –
Обновил мой ответ, но не тестировал материал JDBC. Так или иначе работает с Logger. –
Он добавляет кавычки, хотя и не содержит начальную котировку по первому электронному письму и окончательную цитату по последнему электронному письму. Однако он не работает с запросом jdbc и бросает ту же ошибку. Я столкнулся с другим сообщением (https://stackoverflow.com/questions/11434619/how-to-pass-comma-delimited-string-to-jdbc-query-in-mule), и после прочтения я не уверен, что это возможно с использованием декларативной функциональности в mule - мне, возможно, придется использовать компонент java для этого. –