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