I've already removed it in a fixed CS commit. Anyway the Print stack trace must be avoided. I'm pushing a commit for this.
-- Andrea Cosentino ---------------------------------- Apache Camel Committer Email: ancosen1...@yahoo.com Twitter: @oscerd2 Github: oscerd On Sunday, July 12, 2015 10:29 PM, Andrea Cosentino <ancosen1...@yahoo.com.INVALID> wrote: Hi Claus, Yes, you're right. I'm removing the TODO and remove the stack trace :-) -- Andrea Cosentino ---------------------------------- Apache Camel Committer Email: ancosen1...@yahoo.com Twitter: @oscerd2 Github: oscerd On Sunday, July 12, 2015 2:48 PM, Claus Ibsen <claus.ib...@gmail.com> wrote: Hi There is a TODO in this commit. Also we should not swallow exception and do a e.printStackTrace. Instead what we often do is either rethrow or wrap the caused exception in a runtime so it can be propagated up. On Sun, Jul 12, 2015 at 12:40 PM, <acosent...@apache.org> wrote: > Repository: camel > Updated Branches: > refs/heads/master 308529ff3 -> 88fca852f > > > CAMEL-6649: AWS Simple Email Service - add attachment support > > > Project: http://git-wip-us.apache.org/repos/asf/camel/repo > Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/52495d3c > Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/52495d3c > Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/52495d3c > > Branch: refs/heads/master > Commit: 52495d3cacb0f796c0f5c86abb915e5733b717a4 > Parents: 308529f > Author: Andrea Cosentino <anco...@gmail.com> > Authored: Sun Jul 12 12:05:52 2015 +0200 > Committer: Andrea Cosentino <anco...@gmail.com> > Committed: Sun Jul 12 12:38:43 2015 +0200 > > ---------------------------------------------------------------------- > .../camel/component/aws/ses/SesProducer.java | 67 +++++- > .../component/aws/ses/AmazonSESClientMock.java | 16 ++ > .../camel/component/aws/ses/MockMessage.java | 235 +++++++++++++++++++ > .../aws/ses/SesComponentSpringTest.java | 27 +++ > 4 files changed, 337 insertions(+), 8 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/camel/blob/52495d3c/components/camel-aws/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java > ---------------------------------------------------------------------- > diff --git > a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java > > b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java > index 78a0295..f5ecaf2 100644 > --- > a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java > +++ > b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java > @@ -16,14 +16,26 @@ > */ > package org.apache.camel.component.aws.ses; > > +import java.io.ByteArrayOutputStream; > +import java.io.IOException; > +import java.io.OutputStream; > +import java.nio.ByteBuffer; > import java.util.Collection; > import java.util.List; > +import java.util.Map; > + > +import javax.activation.DataHandler; > +import javax.mail.MessagingException; > +import javax.mail.internet.MimeMessage; > > import com.amazonaws.services.simpleemail.model.Body; > import com.amazonaws.services.simpleemail.model.Content; > import com.amazonaws.services.simpleemail.model.Destination; > import com.amazonaws.services.simpleemail.model.SendEmailRequest; > import com.amazonaws.services.simpleemail.model.SendEmailResult; > +import com.amazonaws.services.simpleemail.model.SendRawEmailRequest; > +import com.amazonaws.services.simpleemail.model.SendRawEmailResult; > + > import org.apache.camel.Endpoint; > import org.apache.camel.Exchange; > import org.apache.camel.Message; > @@ -41,14 +53,21 @@ public class SesProducer extends DefaultProducer { > } > > public void process(Exchange exchange) throws Exception { > - SendEmailRequest request = createMailRequest(exchange); > - log.trace("Sending request [{}] from exchange [{}]...", request, > exchange); > - > - SendEmailResult result = > getEndpoint().getSESClient().sendEmail(request); > - > - log.trace("Received result [{}]", result); > - Message message = getMessageForResponse(exchange); > - message.setHeader(SesConstants.MESSAGE_ID, result.getMessageId()); > + if (!(exchange.getIn().getBody() instanceof javax.mail.Message)) { > + SendEmailRequest request = createMailRequest(exchange); > + log.trace("Sending request [{}] from exchange [{}]...", request, > exchange); > + SendEmailResult result = > getEndpoint().getSESClient().sendEmail(request); > + log.trace("Received result [{}]", result); > + Message message = getMessageForResponse(exchange); > + message.setHeader(SesConstants.MESSAGE_ID, > result.getMessageId()); > + } else { > + SendRawEmailRequest request = createRawMailRequest(exchange); > + log.trace("Sending request [{}] from exchange [{}]...", request, > exchange); > + SendRawEmailResult result = > getEndpoint().getSESClient().sendRawEmail(request); > + log.trace("Received result [{}]", result); > + Message message = getMessageForResponse(exchange); > + message.setHeader(SesConstants.MESSAGE_ID, > result.getMessageId()); > + } > } > > private SendEmailRequest createMailRequest(Exchange exchange) { > @@ -61,6 +80,14 @@ public class SesProducer extends DefaultProducer { > > return request; > } > + > + private SendRawEmailRequest createRawMailRequest(Exchange exchange) { > + SendRawEmailRequest request = new SendRawEmailRequest(); > + request.setSource(determineFrom(exchange)); > + request.setDestinations(determineRawTo(exchange)); > + request.setRawMessage(createRawMessage(exchange)); > + return request; > + } > > private com.amazonaws.services.simpleemail.model.Message >createMessage(Exchange exchange) { > com.amazonaws.services.simpleemail.model.Message message = new >com.amazonaws.services.simpleemail.model.Message(); > @@ -75,6 +102,21 @@ public class SesProducer extends DefaultProducer { > return message; > } > > + private com.amazonaws.services.simpleemail.model.RawMessage > createRawMessage(Exchange exchange) { > + com.amazonaws.services.simpleemail.model.RawMessage message = new > com.amazonaws.services.simpleemail.model.RawMessage(); > + javax.mail.Message content = > exchange.getIn().getBody(javax.mail.Message.class); > + OutputStream byteOutput=new ByteArrayOutputStream(); > + try { > + content.writeTo(byteOutput); > + } catch (Exception e) { > + // TODO Auto-generated catch block > + e.printStackTrace(); > + } > + byte[] > messageByteArray=((ByteArrayOutputStream)byteOutput).toByteArray(); > + message.setData(ByteBuffer.wrap(messageByteArray)); > + return message; > + } > + > @SuppressWarnings("unchecked") > private Collection<String> determineReplyToAddresses(Exchange exchange) { > List<String> replyToAddresses = >exchange.getIn().getHeader(SesConstants.REPLY_TO_ADDRESSES, List.class); > @@ -100,6 +142,15 @@ public class SesProducer extends DefaultProducer { > } > return new Destination(to); > } > + > + @SuppressWarnings("unchecked") > + private List determineRawTo(Exchange exchange) { > + List<String> to = exchange.getIn().getHeader(SesConstants.TO, > List.class); > + if (to == null) { > + to = getConfiguration().getTo(); > + } > + return to; > + } > > private String determineFrom(Exchange exchange) { > String from = exchange.getIn().getHeader(SesConstants.FROM, >String.class); > > http://git-wip-us.apache.org/repos/asf/camel/blob/52495d3c/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/AmazonSESClientMock.java > ---------------------------------------------------------------------- > diff --git > a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/AmazonSESClientMock.java > > b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/AmazonSESClientMock.java > index 3ed184a..21669ee 100644 > --- > a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/AmazonSESClientMock.java > +++ > b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/AmazonSESClientMock.java > @@ -22,9 +22,12 @@ import com.amazonaws.auth.BasicAWSCredentials; > import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient; > import com.amazonaws.services.simpleemail.model.SendEmailRequest; > import com.amazonaws.services.simpleemail.model.SendEmailResult; > +import com.amazonaws.services.simpleemail.model.SendRawEmailRequest; > +import com.amazonaws.services.simpleemail.model.SendRawEmailResult; > > public class AmazonSESClientMock extends AmazonSimpleEmailServiceClient { > private SendEmailRequest sendEmailRequest; > + private SendRawEmailRequest sendRawEmailRequest; > > public AmazonSESClientMock() { > super(new BasicAWSCredentials("myAccessKey", "mySecretKey")); > @@ -38,8 +41,21 @@ public class AmazonSESClientMock extends > AmazonSimpleEmailServiceClient { > > return result; > } > + > + @Override > + public SendRawEmailResult sendRawEmail(SendRawEmailRequest > sendRawEmailRequest) throws AmazonServiceException, AmazonClientException { > + this.sendRawEmailRequest = sendRawEmailRequest; > + SendRawEmailResult result = new SendRawEmailResult(); > + result.setMessageId("1"); > + > + return result; > + } > > public SendEmailRequest getSendEmailRequest() { > return sendEmailRequest; > } > + > + public SendRawEmailRequest getSendRawEmailRequest() { > + return sendRawEmailRequest; > + } > } > > http://git-wip-us.apache.org/repos/asf/camel/blob/52495d3c/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/MockMessage.java > ---------------------------------------------------------------------- > diff --git > a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/MockMessage.java > > b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/MockMessage.java > new file mode 100644 > index 0000000..5e4e0db > --- /dev/null > +++ > b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/MockMessage.java > @@ -0,0 +1,235 @@ > +/** > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache License, Version 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > + * See the License for the specific language governing permissions and > + * limitations under the License. > + */ > +package org.apache.camel.component.aws.ses; > + > +import java.io.IOException; > +import java.io.InputStream; > +import java.io.OutputStream; > +import java.util.Date; > +import java.util.Enumeration; > + > +import javax.activation.DataHandler; > +import javax.mail.Address; > +import javax.mail.Flags; > +import javax.mail.Message; > +import javax.mail.MessagingException; > +import javax.mail.Multipart; > + > +public class MockMessage extends Message { > + > + @Override > + public int getSize() throws MessagingException { > + return 0; > + } > + > + @Override > + public int getLineCount() throws MessagingException { > + return 0; > + } > + > + @Override > + public String getContentType() throws MessagingException { > + return null; > + } > + > + @Override > + public boolean isMimeType(String mimeType) throws MessagingException { > + return false; > + } > + > + @Override > + public String getDisposition() throws MessagingException { > + return null; > + } > + > + @Override > + public void setDisposition(String disposition) throws > MessagingException { > + } > + > + @Override > + public String getDescription() throws MessagingException { > + return null; > + } > + > + @Override > + public void setDescription(String description) throws > MessagingException { > + } > + > + @Override > + public String getFileName() throws MessagingException { > + return null; > + } > + > + @Override > + public void setFileName(String filename) throws MessagingException { > + } > + > + @Override > + public InputStream getInputStream() throws IOException, > MessagingException { > + return null; > + } > + > + @Override > + public DataHandler getDataHandler() throws MessagingException { > + return null; > + } > + > + @Override > + public Object getContent() throws IOException, MessagingException { > + return null; > + } > + > + @Override > + public void setDataHandler(DataHandler dh) throws MessagingException { > + } > + > + @Override > + public void setContent(Object obj, String type) throws > MessagingException { > + } > + > + @Override > + public void setText(String text) throws MessagingException { > + } > + > + @Override > + public void setContent(Multipart mp) throws MessagingException { > + } > + > + @Override > + public void writeTo(OutputStream os) throws IOException, > MessagingException { > + } > + > + @Override > + public String[] getHeader(String header_name) throws > MessagingException { > + return null; > + } > + > + @Override > + public void setHeader(String header_name, String header_value) > + throws MessagingException { > + } > + > + @Override > + public void addHeader(String header_name, String header_value) > + throws MessagingException { > + // TODO Auto-generated method stub > + > + } > + > + @Override > + public void removeHeader(String header_name) throws MessagingException > { > + } > + > + @Override > + public Enumeration getAllHeaders() throws MessagingException { > + return null; > + } > + > + @Override > + public Enumeration getMatchingHeaders(String[] header_names) > + throws MessagingException { > + return null; > + } > + > + @Override > + public Enumeration getNonMatchingHeaders(String[] header_names) > + throws MessagingException { > + return null; > + } > + > + @Override > + public Address[] getFrom() throws MessagingException { > + return null; > + } > + > + @Override > + public void setFrom() throws MessagingException { > + // TODO Auto-generated method stub > + > + } > + > + @Override > + public void setFrom(Address address) throws MessagingException { > + } > + > + @Override > + public void addFrom(Address[] addresses) throws MessagingException { > + } > + > + @Override > + public Address[] getRecipients(RecipientType type) > + throws MessagingException { > + return null; > + } > + > + @Override > + public void setRecipients(RecipientType type, Address[] addresses) > + throws MessagingException { > + } > + > + @Override > + public void addRecipients(RecipientType type, Address[] addresses) > + throws MessagingException { > + // TODO Auto-generated method stub > + > + } > + > + @Override > + public String getSubject() throws MessagingException { > + return null; > + } > + > + @Override > + public void setSubject(String subject) throws MessagingException { > + // TODO Auto-generated method stub > + > + } > + > + @Override > + public Date getSentDate() throws MessagingException { > + // TODO Auto-generated method stub > + return null; > + } > + > + @Override > + public void setSentDate(Date date) throws MessagingException { > + } > + > + @Override > + public Date getReceivedDate() throws MessagingException { > + return null; > + } > + > + @Override > + public Flags getFlags() throws MessagingException { > + return null; > + } > + > + @Override > + public void setFlags(Flags flag, boolean set) throws > MessagingException { > + } > + > + @Override > + public Message reply(boolean replyToAll) throws MessagingException { > + return null; > + } > + > + @Override > + public void saveChanges() throws MessagingException { > + } > + > +} > > http://git-wip-us.apache.org/repos/asf/camel/blob/52495d3c/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java > ---------------------------------------------------------------------- > diff --git > a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java > > b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java > index 1fa7d12..4b736c6 100644 > --- > a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java > +++ > b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java > @@ -18,8 +18,13 @@ package org.apache.camel.component.aws.ses; > > import java.util.Arrays; > import java.util.List; > +import java.util.Properties; > + > +import javax.mail.Message; > > import com.amazonaws.services.simpleemail.model.SendEmailRequest; > +import com.amazonaws.services.simpleemail.model.SendRawEmailRequest; > + > import org.apache.camel.Exchange; > import org.apache.camel.Processor; > import org.apache.camel.test.spring.CamelSpringTestSupport; > @@ -75,6 +80,24 @@ public class SesComponentSpringTest extends > CamelSpringTestSupport { > > assertEquals("1", >exchange.getOut().getHeader(SesConstants.MESSAGE_ID)); > } > + > + @Test > + public void sendRawMessage() throws Exception { > + final MockMessage mess = new MockMessage(); > + > + Exchange exchange = template.request("direct:start", new Processor() > { > + @Override > + public void process(Exchange exchange) throws Exception { > + exchange.getIn().setBody(mess); > + } > + }); > + > + assertEquals("1", > exchange.getOut().getHeader(SesConstants.MESSAGE_ID)); > + > + SendRawEmailRequest sendRawEmailRequest = > sesClient.getSendRawEmailRequest(); > + assertEquals("f...@example.com", sendRawEmailRequest.getSource()); > + assertEquals(2, getTo(sendRawEmailRequest).size()); > + } > > @Test > public void sendMessageUsingMessageHeaders() throws Exception { > @@ -123,4 +146,8 @@ public class SesComponentSpringTest extends > CamelSpringTestSupport { > private List<String> getTo(SendEmailRequest sendEmailRequest) { > return sendEmailRequest.getDestination().getToAddresses(); > } > + > + private List<String> getTo(SendRawEmailRequest sendEmailRequest) { > + return sendEmailRequest.getDestinations(); > + } > } > \ No newline at end of file > -- Claus Ibsen ----------------- Red Hat, Inc. Email: cib...@redhat.com Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen hawtio: http://hawt.io/ fabric8: http://fabric8.io/