KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > bus > jaxws > servlet > CeltixServlet


1 package org.objectweb.celtix.bus.jaxws.servlet;
2
3 import java.io.IOException JavaDoc;
4 import java.io.InputStream JavaDoc;
5 import java.lang.ref.WeakReference JavaDoc;
6 import java.net.MalformedURLException JavaDoc;
7 import java.net.URL JavaDoc;
8 import java.util.ArrayList JavaDoc;
9 import java.util.HashMap JavaDoc;
10 import java.util.Hashtable JavaDoc;
11 import java.util.List JavaDoc;
12 import java.util.Map JavaDoc;
13
14 import javax.servlet.ServletConfig JavaDoc;
15 import javax.servlet.ServletException JavaDoc;
16 import javax.servlet.http.HttpServlet JavaDoc;
17 import javax.servlet.http.HttpServletRequest JavaDoc;
18 import javax.servlet.http.HttpServletResponse JavaDoc;
19 import javax.xml.namespace.QName JavaDoc;
20 import javax.xml.parsers.DocumentBuilderFactory JavaDoc;
21 import javax.xml.parsers.ParserConfigurationException JavaDoc;
22
23 import org.w3c.dom.Document JavaDoc;
24 import org.w3c.dom.Element JavaDoc;
25 import org.w3c.dom.Node JavaDoc;
26
27 import org.xml.sax.SAXException JavaDoc;
28
29 import org.objectweb.celtix.Bus;
30 import org.objectweb.celtix.BusException;
31 import org.objectweb.celtix.bus.jaxws.EndpointImpl;
32 import org.objectweb.celtix.transports.TransportFactory;
33 import org.objectweb.celtix.ws.addressing.EndpointReferenceType;
34 import org.objectweb.celtix.wsdl.EndpointReferenceUtils;
35
36 public class CeltixServlet extends HttpServlet JavaDoc {
37     static final String JavaDoc HTTP_REQUEST =
38         CeltixServlet.class.getName() + ".REQUEST";
39     static final String JavaDoc HTTP_RESPONSE =
40         CeltixServlet.class.getName() + ".RESPONSE";
41     
42     static final Map JavaDoc<String JavaDoc, WeakReference JavaDoc<Bus>> BUS_MAP = new Hashtable JavaDoc<String JavaDoc, WeakReference JavaDoc<Bus>>();
43     
44     protected Bus bus;
45     protected Map JavaDoc<String JavaDoc, ServletServerTransport> servantMap
46         = new HashMap JavaDoc<String JavaDoc, ServletServerTransport>();
47
48     public void init(ServletConfig JavaDoc servletConfig) throws ServletException JavaDoc {
49         super.init(servletConfig);
50         
51         List JavaDoc<String JavaDoc> list = new ArrayList JavaDoc<String JavaDoc>();
52         String JavaDoc busid = servletConfig.getInitParameter("bus.id");
53         if (null != busid) {
54             list.add("-BUSid");
55             list.add(busid);
56             WeakReference JavaDoc<Bus> ref = BUS_MAP.get(busid);
57             if (null != ref) {
58                 bus = ref.get();
59             }
60         }
61         try {
62             if (null == bus) {
63                 bus = Bus.init(list.toArray(new String JavaDoc[list.size()]));
64
65                 TransportFactory factory = createServletTransportFactory();
66                 factory.init(bus);
67                 registerTransport(factory, "http://schemas.xmlsoap.org/wsdl/soap/");
68                 registerTransport(factory, "http://schemas.xmlsoap.org/wsdl/soap/http");
69                 registerTransport(factory, "http://schemas.xmlsoap.org/wsdl/http/");
70                 registerTransport(factory, "http://celtix.objectweb.org/bindings/xmlformat");
71                 registerTransport(factory, "http://celtix.objectweb.org/transports/http/configuration");
72             }
73         } catch (BusException ex) {
74             // TODO Auto-generated catch block
75
ex.printStackTrace();
76         }
77         if (null != busid) {
78             BUS_MAP.put(busid, new WeakReference JavaDoc<Bus>(bus));
79         }
80
81         InputStream JavaDoc ins = servletConfig.getServletContext()
82             .getResourceAsStream("/WEB-INF/celtix-servlet.xml");
83         if (ins != null) {
84             DocumentBuilderFactory JavaDoc builderFactory = DocumentBuilderFactory.newInstance();
85             builderFactory.setNamespaceAware(true);
86             builderFactory.setValidating(false);
87             
88             
89             try {
90                 Document JavaDoc doc = builderFactory.newDocumentBuilder().parse(ins);
91                 Node JavaDoc nd = doc.getDocumentElement().getFirstChild();
92                 while (nd != null) {
93                     if ("endpoint".equals(nd.getLocalName())) {
94                         loadEndpoint(servletConfig, nd);
95                     }
96                     nd = nd.getNextSibling();
97                 }
98             } catch (SAXException JavaDoc ex) {
99                 // TODO Auto-generated catch block
100
ex.printStackTrace();
101             } catch (IOException JavaDoc ex) {
102                 // TODO Auto-generated catch block
103
ex.printStackTrace();
104             } catch (ParserConfigurationException JavaDoc ex) {
105                 // TODO Auto-generated catch block
106
ex.printStackTrace();
107             }
108         }
109     }
110
111     /**
112      * @return
113      */

114     protected TransportFactory createServletTransportFactory() {
115         return new ServletTransportFactory(this);
116     }
117
118     private void registerTransport(TransportFactory factory, String JavaDoc namespace) throws BusException {
119         this.bus.getTransportFactoryManager().registerTransportFactory(namespace,
120                                                                   factory);
121     }
122
123     public void loadEndpoint(String JavaDoc implName,
124                              String JavaDoc serviceName,
125                              String JavaDoc wsdlName,
126                              String JavaDoc portName,
127                              String JavaDoc urlPat) {
128
129         try {
130             URL JavaDoc url = null;
131             if (wsdlName != null) {
132                 try {
133                     url = getServletConfig().getServletContext().getResource(wsdlName);
134                 } catch (MalformedURLException JavaDoc ex) {
135                     try {
136                         url = new URL JavaDoc(wsdlName);
137                     } catch (MalformedURLException JavaDoc ex2) {
138                         try {
139                             url = getServletConfig().getServletContext().getResource("/" + wsdlName);
140                         } catch (MalformedURLException JavaDoc ex3) {
141                             url = null;
142                         }
143                     }
144                 }
145             }
146             Class JavaDoc cls = Class.forName(implName, false, Thread.currentThread().getContextClassLoader());
147             Object JavaDoc impl = cls.newInstance();
148             EndpointReferenceType ref;
149             if (url != null) {
150                 ref = EndpointReferenceUtils
151                     .getEndpointReference(url,
152                                       QName.valueOf(serviceName),
153                                       portName);
154             } else {
155                 ref =
156                     EndpointReferenceUtils.getEndpointReference(bus.getWSDLManager(),
157                                                             impl);
158             }
159             EndpointImpl ep = new EndpointImpl(bus, impl, null, ref);
160             
161             //doesn't really matter what URL is used here
162
ep.publish("http://localhost" + (urlPat.charAt(0) == '/' ? "" : "/") + urlPat);
163         } catch (ClassNotFoundException JavaDoc ex) {
164             // TODO Auto-generated catch block
165
ex.printStackTrace();
166         } catch (InstantiationException JavaDoc ex) {
167             // TODO Auto-generated catch block
168
ex.printStackTrace();
169         } catch (IllegalAccessException JavaDoc ex) {
170             // TODO Auto-generated catch block
171
ex.printStackTrace();
172         }
173     }
174
175     public void loadEndpoint(ServletConfig JavaDoc servletConfig, Node JavaDoc node) {
176         Element JavaDoc el = (Element JavaDoc)node;
177         String JavaDoc implName = el.getAttribute("implementation");
178         String JavaDoc serviceName = el.getAttribute("service");
179         String JavaDoc wsdlName = el.getAttribute("wsdl");
180         String JavaDoc portName = el.getAttribute("port");
181         String JavaDoc urlPat = el.getAttribute("url-pattern");
182         /*
183         String intfName = el.getAttribute("interface");
184         String name = el.getAttribute("name");
185         */

186
187         loadEndpoint(implName, serviceName, wsdlName, portName, urlPat);
188     }
189
190     public void destroy() {
191         try {
192             String JavaDoc s = bus.getBusID();
193             BUS_MAP.remove(s);
194             
195             bus.shutdown(true);
196         } catch (BusException ex) {
197             ex.printStackTrace();
198             //ignore
199
}
200     }
201     
202     void addServant(URL JavaDoc url, ServletServerTransport servant) {
203         servantMap.put(url.getPath(), servant);
204     }
205     void removeServant(URL JavaDoc url, ServletServerTransport servant) {
206         servantMap.remove(url.getPath());
207     }
208     
209     protected void doPost(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws ServletException JavaDoc {
210         ServletServerTransport tp = servantMap.get(request.getPathInfo());
211         if (tp == null) {
212             throw new ServletException JavaDoc("Unknown servlet mapping " + request.getPathInfo());
213         }
214         try {
215             tp.doPost(request, response);
216         } catch (IOException JavaDoc ex) {
217             throw new ServletException JavaDoc(ex.getMessage());
218         }
219     }
220
221     protected void doGet(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws ServletException JavaDoc {
222         ServletServerTransport tp = servantMap.get(request.getPathInfo());
223         if (tp == null) {
224             throw new ServletException JavaDoc("Unknown servlet mapping " + request.getPathInfo());
225         }
226         try {
227             tp.doGet(request, response);
228         } catch (IOException JavaDoc ex) {
229             throw new ServletException JavaDoc(ex.getMessage());
230         }
231     }
232
233 }
234
Popular Tags