1 package org.codehaus.xfire.xmpp;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5 import org.codehaus.xfire.XFire;
6 import org.codehaus.xfire.XFireRuntimeException;
7 import org.codehaus.xfire.service.Service;
8 import org.codehaus.xfire.transport.AbstractWSDLTransport;
9 import org.codehaus.xfire.transport.Channel;
10 import org.codehaus.xfire.transport.DefaultEndpoint;
11 import org.codehaus.xfire.transport.Transport;
12 import org.codehaus.xfire.wsdl11.WSDL11Transport;
13
14 /***
15 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
16 */
17 public class XMPPTransport
18 extends AbstractWSDLTransport
19 implements Transport, WSDL11Transport
20 {
21 private static final Log log = LogFactory.getLog(XMPPTransport.class);
22
23 public final static String NAME = "XMPP";
24 public final static String XMPP_TRANSPORT_NS = "http://jabber.org/protocol/soap";
25
26 private XFire xfire;
27 private String username;
28 private String password;
29 private String server;
30 private String id;
31
32 public XMPPTransport(XFire xfire, String server, String username, String password)
33 {
34 this.username = username;
35 this.password = password;
36 this.server = server;
37 this.xfire = xfire;
38
39 this.id = username + "@" + server;
40
41
42
43 new SoapIQProvider();
44
45 addFaultHandler(new XMPPFaultHandler());
46 }
47
48 /***
49 * Gets the transport name. @see NAME.
50 */
51 public String getName()
52 {
53 return NAME;
54 }
55
56 /***
57 * @param service
58 * @return
59 */
60 public String getServiceURL(Service service)
61 {
62 try
63 {
64 return id + "/" + service.getName();
65 }
66 catch (Exception e)
67 {
68 throw new XFireRuntimeException("Couldn't create the channel.", e);
69 }
70 }
71
72 /***
73 * @param service
74 * @return
75 */
76 public String getTransportURI(Service service)
77 {
78 return XMPP_TRANSPORT_NS;
79 }
80
81 protected Channel createNewChannel(String uri)
82 {
83 log.debug("Creating new channel for uri: " + uri);
84
85 XMPPChannel c = new XMPPChannel(uri, this);
86 c.setEndpoint(new DefaultEndpoint());
87
88 return c;
89 }
90
91 protected String getUriPrefix()
92 {
93 return id;
94 }
95
96 public String getPassword()
97 {
98 return password;
99 }
100
101 public XFire getXFire()
102 {
103 return xfire;
104 }
105
106 public String getServer()
107 {
108 return server;
109 }
110
111 public String getUsername()
112 {
113 return username;
114 }
115
116 public String[] getKnownUriSchemes()
117 {
118 return new String[] { "xmpp://" };
119 }
120
121 }