1
2
3
4
5
6
7 package org.mule.transport.jms.transformers;
8
9 import org.mule.api.MuleMessage;
10 import org.mule.api.transformer.TransformerException;
11 import org.mule.transformer.types.DataTypeFactory;
12 import org.mule.util.ClassUtils;
13
14 import javax.jms.BytesMessage;
15 import javax.jms.MapMessage;
16 import javax.jms.Message;
17 import javax.jms.ObjectMessage;
18 import javax.jms.StreamMessage;
19 import javax.jms.TextMessage;
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class JMSMessageToObject extends AbstractJmsTransformer
37 {
38 public JMSMessageToObject()
39 {
40 super();
41 }
42
43 @Override
44 protected void declareInputOutputClasses()
45 {
46 registerSourceType(DataTypeFactory.create(Message.class));
47 registerSourceType(DataTypeFactory.create(TextMessage.class));
48 registerSourceType(DataTypeFactory.create(ObjectMessage.class));
49 registerSourceType(DataTypeFactory.create(BytesMessage.class));
50 registerSourceType(DataTypeFactory.create(MapMessage.class));
51 registerSourceType(DataTypeFactory.create(StreamMessage.class));
52 }
53
54 @Override
55 public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException
56 {
57 try
58 {
59 if (logger.isDebugEnabled())
60 {
61 logger.debug("Source object is " + ClassUtils.getSimpleName(message.getPayload().getClass()));
62 }
63
64 Object result = transformFromMessage((Message) message.getPayload(), outputEncoding);
65
66
67
68 if (returnType.getType().equals(byte[].class) && result instanceof String)
69 {
70 result = result.toString().getBytes(outputEncoding);
71 }
72 else if (returnType.getType().equals(String.class) && result instanceof byte[])
73 {
74 result = new String((byte[]) result, outputEncoding);
75 }
76
77
78 if (logger.isDebugEnabled())
79 {
80 logger.debug("Resulting object is " + ClassUtils.getSimpleName(result.getClass()));
81 }
82
83 return result;
84 }
85 catch (Exception e)
86 {
87 throw new TransformerException(this, e);
88 }
89 }
90 }