2013-06-04 7 views
0

나는 이것에 상당한 금액을 봤는데, JBoss ESB와 Camel에 상당히 편합니다.JBoss ESB - Camel 메일 메시지 첨부 파일 (인바운드)

나는 Camel Mail 엔드 포인트를 정의했으며, 목표는 컨텐츠 기반 라우팅을 위해 첨부 파일을 전자 메일에서 추출하는 것입니다.

JB ESB의 Camel 통합은 약간의 블랙 박스이지만 기본적으로 전자 메일의 본문 내용은 기본 위치의 메시지 본문에 String으로 끝납니다. 그것이 일반 텍스트 또는 HTML 이메일이라면 괜찮습니다. 나는 그걸로 작업 할 수 있습니다. 그러나 첨부 파일이 여러 개있는 경우 Camel은 javax.mail.internet.MimeMultiPart를 제공합니다. (괜찮습니다)

문제는 JBoss ESB가이를 문자열에 "강제 적용"하려고했기 때문입니다. 메시지 본문 기본 위치는 입니다. 즉, 값이있는 문자열 개체 [email protected] javax.mail.internet.MimeMultipart mime = (MimeMultipart) message.getBody(). get();을 통해 본문을 mimeMultipart로 캐스팅하려고하면 예측 가능한 예외 java가 발생합니다. .lang.ClassCastException : java.lang.String을 javax.mail.internet.MimeMultipart로 캐스트 할 수 없음

낙타 메일을 사용하여 JBoss ESB에 인보운드 된 MIME Multipart 메시지의 다른 부분에 어떻게 액세스합니까?

많은 감사, AGM

낙타 메일 2.10

제이 보스 ESB 5.3.1

Windows 환경

동료의 컴퓨터

10:39:54,808 INFO [STDOUT] Body Name is org.jboss.soa.esb.message.defaultEntry 
10:39:54,809 INFO [STDOUT] Body Class is class java.lang.String 
10:39:54,809 INFO [STDOUT] Attempting to display body contents via toString 
10:39:54,809 INFO [STDOUT] body value is [email protected] 
10:39:54,809 INFO [STDOUT] [email protected] 
10:39:54,809 INFO [STDOUT] class java.lang.String 
10:39:54,809 INFO [STDOUT] class java.lang.String 
10:39:54,810 ERROR [STDERR] java.lang.ClassCastException: java.lang.String cannot be cast to javax.mail.internet.MimeMultipart 
10:39:54,810 ERROR [STDERR]  at com.XXX.integration.actions.GetAttachment.process(GetAttachment.java:23) 
10:39:54,810 ERROR [STDERR]  at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.processPipeline(ActionProcessingPipeline.java:667) 
10:39:54,810 ERROR [STDERR]  at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.processPipeline(ActionProcessingPipeline.java:614) 
10:39:54,811 ERROR [STDERR]  at org.jboss.soa.esb.listeners.message.ActionProcessingPipeline.process(ActionProcessingPipeline.java:442) 
10:39:54,811 ERROR [STDERR]  at org.jboss.soa.esb.listeners.message.MessageAwareListener$TransactionalRunner.run(MessageAwareListener.java:587) 
10:39:54,811 ERROR [STDERR]  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
10:39:54,811 ERROR [STDERR]  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
10:39:54,812 ERROR [STDERR]  at java.lang.Thread.run(Thread.java:662) 
10:39:54,812 INFO [STDOUT] FULL SPOOL: 
+0

항상 자사의 중요한 정보로 사용하는 다양한 프로젝트의 버전을 말한다. –

+0

나는 또한 CamelMessageComposer를 확장하고 속성 "composer-class"를 사용하여 주입하려고 시도했지만 ESB가 주사 시도를 존중하지 않는 것 같습니다 (첫 번째 printlns를 보지 못함) – user2453070

답변

1

구성 mapMailMessage에 복제 = 거짓, 그럼 요 u는 JavaMail API에서 소스 MailMessage API에 액세스 할 수 있으며 직접 데이터를 가져올 수 있습니다.

는 낙타 문서에서 자세한 내용을 참조하십시오 http://camel.apache.org/mail.html

+0

조언을 주셔서 감사합니다. 나는 이것을 시도했지만 아무것도 변경하지 않는 것 같습니다. Body는 여전히 클래스 유형과 메모리 참조를 문자열로 포함하는 실제 문자열입니다 ... – user2453070

+0

아니요, JDK에서 원래의 MailMessage API를 가져올 수 있습니다. 거기서 당신은 당신이 데이터의 파싱을 할 수 있습니다, 예를 들어 그 옵션을 설정할 때 - 카멜은 메일 메시지를 전혀 건드리지 않습니다. –

+0

javax.mail.Message msg = exchange.getIn (MailMessage.class) .getMessage(); –