1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.email.transformers;
12
13 import org.mule.api.transformer.TransformerException;
14 import org.mule.api.transport.Connector;
15 import org.mule.config.i18n.CoreMessages;
16 import org.mule.transformer.AbstractTransformer;
17 import org.mule.transformer.types.DataTypeFactory;
18 import org.mule.transport.email.AbstractMailConnector;
19
20 import java.io.ByteArrayInputStream;
21 import java.io.InputStream;
22 import java.io.UnsupportedEncodingException;
23
24 import javax.mail.MessagingException;
25 import javax.mail.Session;
26 import javax.mail.internet.MimeMessage;
27
28 public class Rfc822ByteArraytoMimeMessage extends AbstractTransformer
29 {
30
31 public Rfc822ByteArraytoMimeMessage()
32 {
33 registerSourceType(DataTypeFactory.BYTE_ARRAY);
34 registerSourceType(DataTypeFactory.INPUT_STREAM);
35 setReturnDataType(DataTypeFactory.create(MimeMessage.class));
36 }
37
38 @Override
39 protected Object doTransform(Object src, String encoding) throws TransformerException
40 {
41 try
42 {
43 if (src instanceof byte[])
44 {
45 byte[] bytes = (byte[]) src;
46 return new MimeMessage(getSession(), new ByteArrayInputStream(bytes));
47 }
48 else if (src instanceof InputStream)
49 {
50 return new MimeMessage(getSession(), (InputStream)src);
51 }
52 else
53 {
54 throw new TransformerException(
55 CoreMessages.transformOnObjectUnsupportedTypeOfEndpoint(this.getName(), src.getClass(), endpoint));
56 }
57 }
58 catch (MessagingException e)
59 {
60 throw new TransformerException(this, e);
61 }
62 }
63
64 protected Session getSession() throws TransformerException
65 {
66 if (null == endpoint)
67 {
68 throw new TransformerException(this,
69 new IllegalStateException("The transformer is no associated with an endpoint."));
70 }
71 Connector connector = endpoint.getConnector();
72 if (!(connector instanceof AbstractMailConnector))
73 {
74 throw new TransformerException(this,
75 new IllegalStateException("The transformer is not associated with an email endpoint."));
76 }
77 try
78 {
79 return ((AbstractMailConnector) connector).getSessionDetails(endpoint).getSession();
80 }
81 catch (UnsupportedEncodingException e)
82 {
83 throw new TransformerException(this, e);
84 }
85 }
86
87 }