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

在Mule ESB中从列表创建逗号分隔的字符串,mule,mule-studio,mule-el,Mule,Mule Studio,Mule El,我使用enricher从JSON格式的数据中提取电子邮件,enricher以列表的形式返回我。我想用这些电子邮件创建逗号分隔的字符串,以便将其传递给JDBC。我试了以下方法 <enricher target="#[flowVars.listEmails]" source="#[{(Details.Email in payload.People)}]" doc:name="Message Enricher"> <json:json-to-object-transforme

我使用enricher从JSON格式的数据中提取电子邮件,enricher以列表的形式返回我。我想用这些电子邮件创建逗号分隔的字符串,以便将其传递给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'], ',')]"/>
总而言之,我的要求是从列表中获取电子邮件,并将其格式化为逗号分隔的字符串,这样我就可以将其传递给JDBC查询以从SQL Server获取结果。查询应该如下所示:

SELECT Id, Email FROM tbl_sfcontact WHERE Email IN ('abc@gmail.com', 'def@mail.com', 'ghi@mail.com')
其中“where”部分中的电子邮件列表是从JSON数据集提取的。我现在使用的JDBC查询如下所示:

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

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

更新:

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

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

删除额外的花括号确实从记录器输出中删除了括号,但是,我猜它并没有创建类似abc@gmail.com', 'def@gmail.com'并引发SQL异常'参数太多:应为0,但为1'。我已经更新了我的问题,加入了一个关于我想要什么的例子。更新了我的答案,但没有使用JDBC的东西进行测试。不管怎样,它都可以与记录器一起工作。它确实添加了引号,尽管在第一封电子邮件中缺少开头引号,在最后一封电子邮件中缺少结尾引号。但是,它不能处理jdbc查询并抛出相同的错误。我遇到了另一篇帖子(),在阅读之后,我不确定在mule中使用声明性功能是否可行——我可能必须使用java组件来实现这一点。您可以考虑为JDBC实现自定义策略以使其生效。我曾经这样做是为了能够执行Mule JDBC不支持的一些查询。我不知道我的类是否适用于当前的Mule版本,但您可以查看我的GitHub以了解我的想法:
'#[StringUtils.join(flowVars['listEmails'], '\',\'')]'