1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.xmpp;
12
13 import org.mule.DefaultMuleMessage;
14 import org.mule.api.MuleEvent;
15 import org.mule.api.MuleMessage;
16 import org.mule.api.endpoint.OutboundEndpoint;
17 import org.mule.transformer.types.DataTypeFactory;
18 import org.mule.transport.AbstractMessageDispatcher;
19 import org.mule.transport.NullPayload;
20
21 import org.jivesoftware.smack.packet.Message;
22
23
24
25
26 public class XmppMessageDispatcher extends AbstractMessageDispatcher
27 {
28 private final XmppConnector connector;
29 private XmppConversation conversation;
30
31 public XmppMessageDispatcher(OutboundEndpoint endpoint)
32 {
33 super(endpoint);
34 connector = (XmppConnector) endpoint.getConnector();
35 conversation = connector.getConversationFactory().create(endpoint);
36 }
37
38 @Override
39 protected void doConnect() throws Exception
40 {
41 conversation.connect();
42 }
43
44 @Override
45 protected void doDisconnect() throws Exception
46 {
47 conversation.disconnect();
48 }
49
50 @Override
51 protected void doDispose()
52 {
53 conversation = null;
54 }
55
56 @Override
57 protected void doDispatch(MuleEvent event) throws Exception
58 {
59 sendMessage(event);
60 }
61
62 @Override
63 protected MuleMessage doSend(MuleEvent event) throws Exception
64 {
65 sendMessage(event);
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 return new DefaultMuleMessage(NullPayload.getInstance(), connector.getMuleContext());
83 }
84
85 protected void sendMessage(MuleEvent event) throws Exception
86 {
87 Object payload = event.getMessage().getPayload();
88
89 Message jabberMessage = (Message) event.getMessage().getPayload(DataTypeFactory.create(Message.class));
90
91 conversation.dispatch(jabberMessage);
92
93 if (logger.isDebugEnabled())
94 {
95 String recipient = XmppConnector.getRecipient(endpoint);
96 logger.debug("Message \"" + jabberMessage.getBody()
97 + "\" successfully sent to " + recipient);
98 }
99 }
100 }