1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.xmpp.transformers;
12
13 import org.mule.api.MuleMessage;
14 import org.mule.api.transformer.DataType;
15 import org.mule.transformer.AbstractMessageTransformer;
16 import org.mule.transformer.types.DataTypeFactory;
17 import org.mule.transport.xmpp.XmppConnector;
18
19 import org.jivesoftware.smack.packet.Message;
20 import org.jivesoftware.smack.packet.XMPPError;
21
22
23
24
25 public class ObjectToXmppPacket extends AbstractMessageTransformer
26 {
27 public ObjectToXmppPacket()
28 {
29 DataType<Message> messageDataType = DataTypeFactory.create(Message.class);
30
31 registerSourceType(DataTypeFactory.STRING);
32 registerSourceType(messageDataType);
33 setReturnDataType(messageDataType);
34 }
35
36 @Override
37 public Object transformMessage(MuleMessage muleMessage, String outputEncoding)
38 {
39 Object src = muleMessage.getPayload();
40
41
42
43 if (src instanceof Message)
44 {
45 return src;
46 }
47
48 Message result = new Message();
49
50 if (muleMessage.getExceptionPayload() != null)
51 {
52 result.setError(
53 new XMPPError(XMPPError.Condition.service_unavailable,
54 muleMessage.getExceptionPayload().getMessage()));
55 }
56
57 for (String propertyName : muleMessage.getOutboundPropertyNames())
58 {
59 if (propertyName.equals(XmppConnector.XMPP_THREAD))
60 {
61 result.setThread((String) muleMessage.getOutboundProperty(propertyName));
62 }
63 else if (propertyName.equals(XmppConnector.XMPP_SUBJECT))
64 {
65 result.setSubject((String) muleMessage.getOutboundProperty(propertyName));
66 }
67 else if (propertyName.equals(XmppConnector.XMPP_FROM))
68 {
69 result.setFrom((String) muleMessage.getOutboundProperty(propertyName));
70 }
71 else if (propertyName.equals(XmppConnector.XMPP_TO))
72 {
73 result.setTo((String) muleMessage.getOutboundProperty(propertyName));
74 }
75 else
76 {
77 result.setProperty(propertyName, muleMessage.<Object>getOutboundProperty(propertyName));
78 }
79 }
80
81
82
83 result.setBody((String) src);
84
85 return result;
86 }
87 }