You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by HockeyDave <da...@yahoo.com> on 2008/10/12 01:52:55 UTC

Process Mail Attachment InvalidPayloadException Camel 1.4.0

How do I specify the mail payload format?
Thanks
Dave

<camelContext id="camel"
		xmlns="http://activemq.apache.org/camel/schema/spring">
		<route> <!--
&amp;deleteProcessedMessages=true&amp;contentType=multipart/mixed -->
			<from
			
uri="pop3://mymailbox@localhost:110?password=mypassword&amp;consumer.delay=60000"
/>
			<to uri="bean:MailReader" />
			<unmarshal>
				<csv />
			</unmarshal>
			<to uri="bean:DartCSVConverter" />
			<to uri="mock:finish" />
		</route>
	</camelContext>
	<bean id="MailReader" class="com.contextweb.mail.MailReader">
	</bean>

org.apache.camel.InvalidPayloadException: No in body available of type:
java.io.InputStream but has value: javax.mail.internet.MimeMultipart@1b071c0
of type: javax.mail.internet.MimeMultipart on: MailMessage:
messageNumber=[1], from=[David Peterson <dp...@contextweb.com>],
to=[reportdev <re...@contextweb.com>], subject=[FW: Doritos MTD],
sentDate=[Oct 11, 2008 7:44:02 PM] on the exchange: Exchange[MailMessage:
messageNumber=[1], from=[David Peterson <dp...@contextweb.com>],
to=[reportdev <re...@contextweb.com>], subject=[FW: Doritos MTD],
sentDate=[Oct 11, 2008 7:44:02 PM]]
	at
org.apache.camel.util.ExchangeHelper.getMandatoryInBody(ExchangeHelper.java:127)
	at
org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:41)
	at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:69)
	at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:155)
	at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:91)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:85)
	at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:57)
	at
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:39)
	at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
	at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
	at
org.apache.camel.component.mail.MailConsumer.processMessage(MailConsumer.java:169)
	at
org.apache.camel.component.mail.MailConsumer.processMessages(MailConsumer.java:151)
	at org.apache.camel.component.mail.MailConsumer.poll(MailConsumer.java:105)
	at
org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:65)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
	at
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
	at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
	at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
	at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:619)
[onent.mail.MailComponent@4ab2f] DeadLetterChannel              ERROR
Exchange[BodyType:javax.mail.internet.MimeMultipart, Body:
-- 
View this message in context: http://www.nabble.com/Process-Mail-Attachment-InvalidPayloadException-Camel-1.4.0-tp19937573s22882p19937573.html
Sent from the Camel - Users mailing list archive at Nabble.com.


RE: Process Mail Attachment InvalidPayloadException Camel 1.4.0

Posted by Claus Ibsen <ci...@silverbullet.dk>.
Hi

I think the issue is that you want to unmarshal the mail payload into CSV, and that the CSV unmarshal data format expects the payload to be readable as a java.io.InputStream but the mail message payload is: javax.mail.internet.MimeMultipart.

You can add a convertBodyTo -> String that is a type converter that is shipped out-of-the-box with camel-mail and string should be readable as a InputStream.

So insert this:
   <convertBodyTo type="java.lang.String"/>
Before the <unmarshal>

			<to uri="bean:MailReader" />
                  <convertBodyTo type="java.lang.String"/>
			<unmarshal>
				<csv />
			</unmarshal>

Maybe we should support this type converter out-of-the-box in Camel. I will create a ticket in our bug tracker for it.




Med venlig hilsen
 
Claus Ibsen
......................................
Silverbullet
Skovsgårdsvænget 21
8362 Hørning
Tlf. +45 2962 7576
Web: www.silverbullet.dk
-----Original Message-----
From: HockeyDave [mailto:david_peterson4146@yahoo.com] 
Sent: 12. oktober 2008 01:53
To: camel-user@activemq.apache.org
Subject: Process Mail Attachment InvalidPayloadException Camel 1.4.0


How do I specify the mail payload format?
Thanks
Dave

<camelContext id="camel"
		xmlns="http://activemq.apache.org/camel/schema/spring">
		<route> <!--
&amp;deleteProcessedMessages=true&amp;contentType=multipart/mixed -->
			<from
			
uri="pop3://mymailbox@localhost:110?password=mypassword&amp;consumer.delay=60000"
/>
			<to uri="bean:MailReader" />
			<unmarshal>
				<csv />
			</unmarshal>
			<to uri="bean:DartCSVConverter" />
			<to uri="mock:finish" />
		</route>
	</camelContext>
	<bean id="MailReader" class="com.contextweb.mail.MailReader">
	</bean>

org.apache.camel.InvalidPayloadException: No in body available of type:
java.io.InputStream but has value: javax.mail.internet.MimeMultipart@1b071c0
of type: javax.mail.internet.MimeMultipart on: MailMessage:
messageNumber=[1], from=[David Peterson <dp...@contextweb.com>],
to=[reportdev <re...@contextweb.com>], subject=[FW: Doritos MTD],
sentDate=[Oct 11, 2008 7:44:02 PM] on the exchange: Exchange[MailMessage:
messageNumber=[1], from=[David Peterson <dp...@contextweb.com>],
to=[reportdev <re...@contextweb.com>], subject=[FW: Doritos MTD],
sentDate=[Oct 11, 2008 7:44:02 PM]]
	at
org.apache.camel.util.ExchangeHelper.getMandatoryInBody(ExchangeHelper.java:127)
	at
org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:41)
	at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:69)
	at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:155)
	at
org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:91)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:85)
	at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:57)
	at
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:39)
	at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
	at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
	at
org.apache.camel.component.mail.MailConsumer.processMessage(MailConsumer.java:169)
	at
org.apache.camel.component.mail.MailConsumer.processMessages(MailConsumer.java:151)
	at org.apache.camel.component.mail.MailConsumer.poll(MailConsumer.java:105)
	at
org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:65)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
	at
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
	at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
	at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
	at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:619)
[onent.mail.MailComponent@4ab2f] DeadLetterChannel              ERROR
Exchange[BodyType:javax.mail.internet.MimeMultipart, Body:
-- 
View this message in context: http://www.nabble.com/Process-Mail-Attachment-InvalidPayloadException-Camel-1.4.0-tp19937573s22882p19937573.html
Sent from the Camel - Users mailing list archive at Nabble.com.