2014-02-07 6 views
1

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]] 

가 다시 정리해 보면 내 요구 사항은 목록에서 이메일을 얻을 쉼표로 구분 된 문자열로 포맷하는 것입니다, 그래서 SQL 서버에서 결과를 얻을 JDBC 쿼리에 전달할 수 있습니다, 다음은 출력됩니다. 쿼리는 다음과 같아야합니다.

SELECT Id, Email FROM tbl_sfcontact WHERE Email IN ('[email protected]', '[email protected]', '[email protected]') 

여기서 'WHERE'섹션의 이메일 목록은 JSON 데이터 세트에서 추출됩니다.

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

답변

2

당신은 배열 내부의 이메일 목록을 래핑하여 enricher 소스에 추가 중괄호를 다음과 같이 내가 사용하는 JDBC 쿼리는 이제 보인다. #[(Details.Email in payload.People)]이어야합니다.

UPDATE :

시도는 분할 매개 변수로에 누락 된 작은 따옴표를 추가하고 이전과 발현 후. 이처럼 : 로거 출력에서 ​​브래킷을 제거 않았다 여분의 중괄호 제거

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

그러나, 나는 그것이 '[email protected]', '[email protected]'과 같은 문자열을 생성하지 않는 것 같아요 throws SQL Exception '너무 많은 매개 변수 : expected 0, was 1'. 내 질문에 내가 원하는 것에 대한 예제를 포함하도록 업데이트했습니다. –

+0

내 대답은 업데이트되었지만 JDBC 관련 내용은 테스트하지 않았습니다. 어쨌든 Logger와 함께 작동합니다. –

+0

첫 번째 전자 메일의 시작 인용문과 마지막 전자 메일의 마지막 인용구가 누락 되어도 따옴표가 추가됩니다. 그러나, 그것은 jdbc 쿼리와 함께 작동하지 않으며 동일한 오류를 던지고있다. 다른 게시물 (https://stackoverflow.com/questions/11434619/how-to-pass-comma-delimited-string-to-jdbc-query-in-mule)을 가로 질러 왔는데, 이것은 뮬에서 선언적 기능을 사용하여 가능합니다.이를 수행하기 위해 자바 컴포넌트를 사용해야 할 수도 있습니다. –