1

我在一个丰富器中使用MVEL从 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 Profiler 时,我没有看到任何参数被传递给 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')

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

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

1 回答 1

2

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

更新:

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

'#[StringUtils.join(flowVars['listEmails'], '\',\'')]'
于 2014-02-07T19:47:22.227 回答