2014-02-07 25 views
1

我正在使用一个richter中的MVEL从JSON格式的数据中提取电子邮件,该列表将我作为列表返回。我想用这些电子邮件创建逗号分隔的字符串,以便我可以将它传递给JDBC。我尝试以下,在骡子的列表中创建逗号分隔的字符串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事件探查器,我看不出有任何的参数得到传递给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]') 

其中从JSON数据集中提取的“WHERE”部分的电子邮件列表。该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异常'太多的参数:期望0,被赋予1'。我已经更新了我的问题以包含我想要的示例。 –

+0

更新了我的答案,但未使用JDBC测试。无论如何,与记录器一起工作。 –

+0

它确实会添加引号,尽管第一封电子邮件的开头引用和最后一封电子邮件的结束引用都没有。但是,它不能使用jdbc查询并引发相同的错误。我遇到了另一篇文章(https://stackoverflow.com/questions/11434619/how-to-pass-comma-delimited-string-to-jdbc-query-in-mule),并阅读后,我不知道如果这在mule中使用声明性功能是可能的 - 我可能不得不使用java组件来实现这一点。 –