从Mule ESB中的列表创建逗号分隔的字符串

时间:2014-02-07 18:12:27

标签: mule mule-studio mule-el

我正在使用MVEL中的{{3}}从JSON格式的数据中提取电子邮件,并将其作为列表返回。我想用这些电子邮件创建逗号分隔的字符串,以便我可以将它传递给JDBC。我尝试了以下内容,

<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事件探查器时,我没有看到任何参数传递给SQL查询。当我尝试它时会打印出电子邮件,但是作为列表。这是输出:

INFO  2014-02-07 10:01:41,699 [[UserManagement].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: $$$: output = [abc@mail.com, def@mail.com, ghi@mail.com]

回顾一下,我的要求是从列表中获取电子邮件并将其格式化为逗号分隔字符串,因此我可以将其传递给JDBC查询以从SQL Server获取结果。查询应如下所示:

SELECT Id, Email FROM tbl_sfcontact WHERE Email IN ('abc@gmail.com', 'def@mail.com', 'ghi@mail.com')

从“JERE”数据集中提取“WHERE”部分中的电子邮件列表。我现在使用的JDBC查询如下所示:

<jdbc:query key="getContactByEmail" value="SELECT Id FROM tbl_sfContact WHERE Email IN (#[StringUtils.join(flowVars['strEmails'], ', ')])"/>

1 个答案:

答案 0 :(得分:2)

您的richher源中有额外的花括号,它将电子邮件列表包装在数组中。它应该是#[(Details.Email in payload.People)]

更新:

尝试将缺少的单引号添加到作为要拆分的参数以及表达式之前和之后。像这样:

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