KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > bus > transports > http > HTTPTransportFactory


1 package org.objectweb.celtix.bus.transports.http;
2
3 import java.io.IOException JavaDoc;
4 import java.lang.ref.WeakReference JavaDoc;
5 import java.lang.reflect.Field JavaDoc;
6 import java.net.URL JavaDoc;
7 import java.util.Map JavaDoc;
8
9 import javax.wsdl.WSDLException;
10 import javax.xml.bind.JAXBException;
11
12 import org.objectweb.celtix.Bus;
13 import org.objectweb.celtix.bindings.ClientBinding;
14 import org.objectweb.celtix.bus.transports.http.protocol.pipe.Handler;
15 import org.objectweb.celtix.bus.transports.http.protocol.pipe.PipeHTTPServerTransport;
16 import org.objectweb.celtix.buslifecycle.BusLifeCycleListener;
17 import org.objectweb.celtix.transports.ClientTransport;
18 import org.objectweb.celtix.transports.ServerTransport;
19 import org.objectweb.celtix.transports.TransportFactory;
20 import org.objectweb.celtix.transports.http.configuration.HTTPClientPolicy;
21 import org.objectweb.celtix.transports.http.configuration.HTTPServerPolicy;
22 import org.objectweb.celtix.ws.addressing.EndpointReferenceType;
23 import org.objectweb.celtix.wsdl.EndpointReferenceUtils;
24 import org.objectweb.celtix.wsdl.JAXBExtensionHelper;
25 import org.xmlsoap.schemas.wsdl.http.AddressType;
26
27 public class HTTPTransportFactory implements TransportFactory {
28     protected Bus bus;
29     /* surefire runs in a classloader that won't allow the URL
30      * class to load the Handler. We'll need to manually add
31      * it to the list.
32      */

33     static {
34         addHandler();
35     }
36     @SuppressWarnings JavaDoc("unchecked")
37     static void addHandler() {
38         try {
39             Field JavaDoc field = URL JavaDoc.class.getDeclaredField("handlers");
40             field.setAccessible(true);
41             Map JavaDoc handlers = (Map JavaDoc)field.get(null);
42             handlers.put("pipe", new Handler());
43         } catch (Exception JavaDoc e) {
44             //ignore
45
}
46     }
47     
48     public void init(Bus b) {
49         bus = b;
50         try {
51             JAXBExtensionHelper.addExtensions(bus.getWSDLManager().getExtenstionRegistry(),
52                                               javax.wsdl.Port.class,
53                                               HTTPClientPolicy.class);
54             JAXBExtensionHelper.addExtensions(bus.getWSDLManager().getExtenstionRegistry(),
55                                               javax.wsdl.Port.class,
56                                               HTTPServerPolicy.class);
57             JAXBExtensionHelper.addExtensions(bus.getWSDLManager().getExtenstionRegistry(),
58                                               javax.wsdl.Port.class,
59                                               AddressType.class);
60
61         } catch (JAXBException e) {
62             //ignore, we can continue without the extension registered
63
}
64         String JavaDoc val = System.getProperty("java.protocol.handler.pkgs");
65         if (val == null) {
66             System.setProperty("java.protocol.handler.pkgs",
67                                "org.objectweb.celtix.bus.transports.http.protocol");
68         } else if (val.indexOf("org.objectweb.celtix.bus.transports.http.protocol") == -1) {
69             val += "|org.objectweb.celtix.bus.transports.http.protocol";
70             System.setProperty("java.protocol.handler.pkgs", val);
71         }
72         bus.getLifeCycleManager().registerLifeCycleListener(new ShutdownListener(this));
73     }
74         
75     public ServerTransport createServerTransport(EndpointReferenceType address)
76         throws WSDLException, IOException JavaDoc {
77         URL JavaDoc url = new URL JavaDoc(EndpointReferenceUtils.getAddress(address));
78         if ("pipe".equals(url.getProtocol())) {
79             return new PipeHTTPServerTransport(bus, address);
80         }
81         return new JettyHTTPServerTransport(bus, address);
82     }
83
84     public ServerTransport createTransientServerTransport(EndpointReferenceType address)
85         throws WSDLException {
86         
87         // TODO Auto-generated method stub
88
return null;
89     }
90
91     public ClientTransport createClientTransport(EndpointReferenceType ref,
92                                                  ClientBinding binding)
93         throws WSDLException, IOException JavaDoc {
94         return new HTTPClientTransport(bus, ref, binding, this);
95     }
96
97     protected Bus getBus() {
98         return bus;
99     }
100     
101     
102     private void shutdown() {
103     }
104         
105     private static class ShutdownListener
106         extends WeakReference JavaDoc<HTTPTransportFactory>
107         implements BusLifeCycleListener {
108     
109         ShutdownListener(HTTPTransportFactory factory) {
110             super(factory);
111         }
112
113         public void initComplete() {
114             //nothing
115
}
116
117         public void preShutdown() {
118             if (get() != null) {
119                 HTTPTransportFactory factory = get();
120                 factory.shutdown();
121                 clear();
122             }
123         }
124
125         public void postShutdown() {
126             //nothing
127
}
128     }
129 }
130
Popular Tags