1 17 package org.apache.geronimo.webservices; 18 19 import java.io.IOException ; 20 import java.io.InputStream ; 21 import java.io.OutputStream ; 22 import java.net.URISyntaxException ; 23 import java.util.HashMap ; 24 import java.util.Map ; 25 import javax.servlet.Servlet ; 26 import javax.servlet.ServletConfig ; 27 import javax.servlet.ServletContext ; 28 import javax.servlet.ServletException ; 29 import javax.servlet.ServletRequest ; 30 import javax.servlet.ServletResponse ; 31 import javax.servlet.http.HttpServletRequest ; 32 import javax.servlet.http.HttpServletResponse ; 33 34 37 public class WebServiceContainerInvoker implements Servlet { 38 39 public static final String WEBSERVICE_CONTAINER = WebServiceContainerInvoker.class.getName()+"@WebServiceContainer"; 40 41 private final Object pojo; 42 private WebServiceContainer service; 43 44 public WebServiceContainerInvoker(Object pojo) { 45 this.pojo = pojo; 46 } 47 48 public void init(ServletConfig config) throws ServletException { 49 ServletContext context = config.getServletContext(); 50 String webServiceContainerID = config.getInitParameter(WEBSERVICE_CONTAINER); 51 service = (WebServiceContainer) context.getAttribute(webServiceContainerID); 52 } 53 54 public ServletConfig getServletConfig() { 55 return null; 56 } 57 58 public void service(ServletRequest req, ServletResponse res) throws ServletException , IOException { 59 res.setContentType("text/xml"); 60 RequestAdapter request = new RequestAdapter((HttpServletRequest ) req); 61 ResponseAdapter response = new ResponseAdapter((HttpServletResponse ) res); 62 63 req.setAttribute(WebServiceContainer.POJO_INSTANCE, pojo); 65 66 if (req.getParameter("wsdl") != null || req.getParameter("WSDL") != null) { 67 try { 68 service.getWsdl(request, response); 69 } catch (IOException e) { 70 throw e; 71 } catch (ServletException e) { 72 throw e; 73 } catch (Exception e) { 74 throw new ServletException ("Could not fetch wsdl!", e); 75 } 76 } else { 77 try { 78 service.invoke(request, response); 79 } catch (IOException e) { 80 throw e; 81 } catch (ServletException e) { 82 throw e; 83 } catch (Exception e) { 84 throw new ServletException ("Could not process message!", e); 85 } 86 } 87 } 88 89 public String getServletInfo() { 90 return null; 91 } 92 93 public void destroy() { 94 } 95 96 private static class RequestAdapter implements WebServiceContainer.Request { 97 private final HttpServletRequest request; 98 99 public RequestAdapter(HttpServletRequest request) { 100 this.request = request; 101 } 102 103 public String getHeader(String name) { 104 return request.getHeader(name); 105 } 106 107 public java.net.URI getURI() { 108 try { 109 return new java.net.URI (request.getScheme(), null, request.getServerName(), request.getServerPort(), request.getRequestURI(), request.getQueryString(), null); 110 } catch (URISyntaxException e) { 111 throw new IllegalStateException (e.getMessage()); 112 } 113 } 114 115 public int getContentLength() { 116 return request.getContentLength(); 117 } 118 119 public String getContentType() { 120 return request.getContentType(); 121 } 122 123 public InputStream getInputStream() throws IOException { 124 return request.getInputStream(); 125 } 126 127 public int getMethod() { 128 Integer method = (Integer ) methods.get(request.getMethod()); 129 return method == null ? UNSUPPORTED : method.intValue(); 130 } 131 132 public String getParameter(String name) { 133 return request.getParameter(name); 134 } 135 136 public Map getParameters() { 137 return request.getParameterMap(); 138 } 139 140 141 private static final Map methods = new HashMap (); 142 143 static { 144 methods.put("OPTIONS", new Integer (OPTIONS)); 145 methods.put("GET", new Integer (GET)); 146 methods.put("HEAD", new Integer (HEAD)); 147 methods.put("POST", new Integer (POST)); 148 methods.put("PUT", new Integer (PUT)); 149 methods.put("DELETE", new Integer (DELETE)); 150 methods.put("TRACE", new Integer (TRACE)); 151 methods.put("CONNECT", new Integer (CONNECT)); 152 } 153 154 public Object getAttribute(String s) { 155 return request.getAttribute(s); 156 } 157 158 public void setAttribute(String s, Object o) { 159 request.setAttribute(s, o); 160 } 161 162 } 163 164 private static class ResponseAdapter implements WebServiceContainer.Response { 165 private final HttpServletResponse response; 166 167 public ResponseAdapter(HttpServletResponse response) { 168 this.response = response; 169 } 170 171 public void setHeader(String name, String value) { 172 response.setHeader(name, value); 173 } 174 175 public String getHeader(String name) { 176 throw new UnsupportedOperationException ("Not possible to implement"); 177 } 178 179 public OutputStream getOutputStream() { 180 try { 181 return response.getOutputStream(); 182 } catch (IOException e) { 183 throw (IllegalStateException ) new IllegalStateException ().initCause(e); 184 } 185 } 186 187 public void setStatusCode(int code) { 188 response.setStatus(code); 189 } 190 191 public int getStatusCode() { 192 throw new UnsupportedOperationException ("Not possible to implement"); 193 } 194 195 public void setContentType(String type) { 196 response.setContentType(type); 197 } 198 199 public String getContentType() { 200 return response.getContentType(); 201 } 202 203 public void setStatusMessage(String responseString) { 204 response.setStatus(getStatusCode(), responseString); 205 } 206 } 207 } 208 | Popular Tags |