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