2014-02-07 2 views
1

Я извлекаю письма из форматированных данных 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'], ', ')])"/> 

ответ

2

У вас есть дополнительные фигурные скобки в вашем обогатителе источника, который оборачивает список адресов электронной почты внутри массива. Он должен быть #[(Details.Email in payload.People)].

UPDATE:

Попробуйте добавить недостающие одинарные кавычки в качестве параметра расколоть, а также до и после выражения. Как это:

'#[StringUtils.join(flowVars['listEmails'], '\',\'')]' 
+0

Снятие дополнительного фигурную скобку было снять скобки с выхода регистратора, однако, я предполагаю, что это не создает строку как «[email protected]», «[email protected]», и это выбрасывает SQL Exception 'Слишком много параметров: ожидается 0, дано 1'. Я обновил свой вопрос, чтобы включить пример того, что я хочу. –

+0

Обновил мой ответ, но не тестировал материал JDBC. Так или иначе работает с Logger. –

+0

Он добавляет кавычки, хотя и не содержит начальную котировку по первому электронному письму и окончательную цитату по последнему электронному письму. Однако он не работает с запросом jdbc и бросает ту же ошибку. Я столкнулся с другим сообщением (https://stackoverflow.com/questions/11434619/how-to-pass-comma-delimited-string-to-jdbc-query-in-mule), и после прочтения я не уверен, что это возможно с использованием декларативной функциональности в mule - мне, возможно, придется использовать компонент java для этого. –