1 package org.objectweb.celtix.bus.transports.http; 2 3 import java.io.IOException ; 4 import java.lang.ref.WeakReference ; 5 import java.lang.reflect.Field ; 6 import java.net.URL ; 7 import java.util.Map ; 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 33 static { 34 addHandler(); 35 } 36 @SuppressWarnings ("unchecked") 37 static void addHandler() { 38 try { 39 Field field = URL .class.getDeclaredField("handlers"); 40 field.setAccessible(true); 41 Map handlers = (Map )field.get(null); 42 handlers.put("pipe", new Handler()); 43 } catch (Exception e) { 44 } 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 } 64 String 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 { 77 URL url = new URL (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 return null; 89 } 90 91 public ClientTransport createClientTransport(EndpointReferenceType ref, 92 ClientBinding binding) 93 throws WSDLException, IOException { 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 <HTTPTransportFactory> 107 implements BusLifeCycleListener { 108 109 ShutdownListener(HTTPTransportFactory factory) { 110 super(factory); 111 } 112 113 public void initComplete() { 114 } 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 } 128 } 129 } 130 | Popular Tags |