You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2007/12/20 01:53:22 UTC

svn commit: r605765 [2/2] - in /openejb/trunk/openejb3: examples/ examples/simple-webservice/ examples/simple-webservice/src/ examples/simple-webservice/src/main/ examples/simple-webservice/src/main/java/ examples/simple-webservice/src/main/java/org/ e...

Added: openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/OpenEJBHttpWsRegistry.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/OpenEJBHttpWsRegistry.java?rev=605765&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/OpenEJBHttpWsRegistry.java (added)
+++ openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/OpenEJBHttpWsRegistry.java Wed Dec 19 16:53:19 2007
@@ -0,0 +1,119 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.openejb.server.webservices;
+
+import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
+import org.apache.openejb.assembler.classic.ServiceInfo;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.httpd.HttpEjbServer;
+import org.apache.openejb.server.httpd.HttpListener;
+import org.apache.openejb.server.httpd.HttpListenerRegistry;
+import org.apache.openejb.server.httpd.HttpRequest;
+import org.apache.openejb.server.httpd.HttpResponse;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
+import org.apache.xerces.util.URI;
+
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.List;
+
+public class OpenEJBHttpWsRegistry implements WsRegistry {
+    public static final Logger log = Logger.getInstance(LogCategory.OPENEJB_WS, WsService.class);
+    private final HttpListenerRegistry registry;
+    private final List<URI> baseUris = new ArrayList<URI>();
+
+    public OpenEJBHttpWsRegistry() {
+        try {
+            OpenEjbConfiguration configuration = SystemInstance.get().getComponent(OpenEjbConfiguration.class);
+            for (ServiceInfo service : configuration.facilities.services) {
+                if (service.className.equals(HttpEjbServer.class.getName())) {
+                    int port = Integer.parseInt(service.properties.getProperty("port"));
+                    String ip = service.properties.getProperty("bind");
+                    if ("0.0.0.0".equals(ip)) {
+                        InetAddress[] addresses = InetAddress.getAllByName(ip);
+                        for (InetAddress address : addresses) {
+                            baseUris.add(new URI("http", null, address.getHostAddress(), port, null, null, null));
+                        }
+                    } else {
+                        baseUris.add(new URI("http", null, ip, port, null, null, null));
+                    }
+                    break;
+                }
+            }
+        } catch (Exception e) {
+            log.error("Webservices Disabled: Unable to build base URIs for WebService registry", e);
+        }
+        registry = SystemInstance.get().getComponent(HttpListenerRegistry.class);
+    }
+
+    public List<String> setWsContainer(String virtualHost, String contextRoot, String servletName, HttpListener wsContainer) throws Exception {
+        throw new UnsupportedOperationException("OpenEJB http server does not support POJO webservices");
+    }
+
+    public void clearWsContainer(String virtualHost, String contextRoot, String servletName) {
+    }
+
+    public List<String> addWsContainer(String path, HttpListener httpListener, String virtualHost, // ignored
+            String realmName, // ignored
+            String transportGuarantee, // ignored
+            String authMethod, // ignored
+            ClassLoader classLoader) throws Exception {
+
+        if (path == null) throw new NullPointerException("contextRoot is null");
+        if (httpListener == null) throw new NullPointerException("httpListener is null");
+
+        // assure context root with a leading slash
+        if (!path.startsWith("/")) path = "/" + path;
+
+        httpListener = new ClassLoaderHttpListener(httpListener, classLoader);
+        registry.addHttpListener(httpListener, path);
+
+        // register wsdl locations for service-ref resolution
+        List<String> addresses = new ArrayList<String>();
+        for (URI baseUri : baseUris) {
+            URI address = new URI(baseUri, path);
+            addresses.add(address.toString());
+        }
+        return addresses;
+    }
+
+    public void removeWsContainer(String path) {
+        registry.removeHttpListener(path);
+    }
+
+    private static class ClassLoaderHttpListener implements HttpListener {
+        private final HttpListener delegate;
+        private final ClassLoader classLoader;
+
+        private ClassLoaderHttpListener(HttpListener delegate, ClassLoader classLoader) {
+            this.delegate = delegate;
+            this.classLoader = classLoader;
+        }
+
+        public void onMessage(HttpRequest request, HttpResponse response) throws Exception {
+            ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
+            Thread.currentThread().setContextClassLoader(classLoader);
+            try {
+                delegate.onMessage(request, response);
+            } finally {
+                Thread.currentThread().setContextClassLoader(oldCl);
+            }
+        }
+    }
+}

Modified: openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsConstants.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsConstants.java?rev=605765&r1=605764&r2=605765&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsConstants.java (original)
+++ openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsConstants.java Wed Dec 19 16:53:19 2007
@@ -32,21 +32,6 @@
     public static final String MESSAGE_CONTEXT = WsConstants.class.getName() + "@MessageContext";
 
     /**
-     * Used for JAX-WS MessageContext. MessageContext must expose HttpServletRequest.
-     */
-    public static final String SERVLET_REQUEST = WsConstants.class.getName() + "@ServletRequest";
-
-    /**
-     * Used for JAX-WS MessageContext. MessageContext must expose HttpServletResponse.
-     */
-    public static final String SERVLET_RESPONSE = WsConstants.class.getName() + "@ServletResponse";
-
-    /**
-     * Used for JAX-WS MessageContext. MessageContext must expose ServletContext.
-     */
-    public static final String SERVLET_CONTEXT = WsConstants.class.getName() + "@ServletContext";
-
-    /**
      * Token inserted into wsdl where location should be replaced with the real location
      */
     public static final String LOCATION_REPLACEMENT_TOKEN = "LOCATIONREPLACEMENTTOKEN";

Modified: openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java?rev=605765&r1=605764&r2=605765&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java (original)
+++ openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java Wed Dec 19 16:53:19 2007
@@ -21,6 +21,7 @@
 import org.apache.openejb.server.SelfManaging;
 import org.apache.openejb.server.ServiceException;
 import org.apache.openejb.server.httpd.HttpListener;
+import org.apache.openejb.server.httpd.HttpListenerRegistry;
 import org.apache.openejb.assembler.classic.DeploymentListener;
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.AppInfo;
@@ -149,6 +150,10 @@
 
     public void start() throws ServiceException {
         wsRegistry = SystemInstance.get().getComponent(WsRegistry.class);
+        if (wsRegistry == null && SystemInstance.get().getComponent(HttpListenerRegistry.class) != null) {
+            wsRegistry = new OpenEJBHttpWsRegistry();
+        }
+
         if (portAddressRegistry == null) {
             portAddressRegistry = new PortAddressRegistryImpl();
             SystemInstance.get().setComponent(PortAddressRegistry.class, portAddressRegistry);

Modified: openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsServlet.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsServlet.java?rev=605765&r1=605764&r2=605765&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsServlet.java (original)
+++ openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsServlet.java Wed Dec 19 16:53:19 2007
@@ -16,9 +16,11 @@
  */
 package org.apache.openejb.server.webservices;
 
+import org.apache.openejb.server.httpd.HttpListener;
 import org.apache.openejb.server.httpd.HttpRequest;
 import org.apache.openejb.server.httpd.HttpResponse;
-import org.apache.openejb.server.httpd.HttpListener;
+import org.apache.openejb.server.httpd.ServletRequestAdapter;
+import org.apache.openejb.server.httpd.ServletResponseAdapter;
 
 import javax.servlet.Servlet;
 import javax.servlet.ServletConfig;
@@ -34,13 +36,7 @@
 import javax.xml.rpc.server.ServiceLifecycle;
 import javax.xml.rpc.server.ServletEndpointContext;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.net.URISyntaxException;
 import java.security.Principal;
-import java.util.Map;
-import java.util.TreeMap;
 
 public class WsServlet implements Servlet {
     public static final String POJO_CLASS = WsServlet.class.getName() + "@pojoClassName";
@@ -91,18 +87,15 @@
         endpointContext.set(new InvocationContext((HttpServletRequest) req));
         try {
             res.setContentType("text/xml");
-            RequestAdapter request = new RequestAdapter((HttpServletRequest) req);
-            ResponseAdapter response = new ResponseAdapter((HttpServletResponse) res);
+            HttpRequest httpRequest = new ServletRequestAdapter((HttpServletRequest) req, (HttpServletResponse) res, config.getServletContext());
+            HttpResponse httpResponse = new ServletResponseAdapter((HttpServletResponse) res);
 
-            req.setAttribute(WsConstants.SERVLET_REQUEST, req);
-            req.setAttribute(WsConstants.SERVLET_RESPONSE, res);
-            req.setAttribute(WsConstants.SERVLET_CONTEXT, config.getServletContext());
             if (pojo != null) {
                 req.setAttribute(WsConstants.POJO_INSTANCE, pojo);
             }
 
             try {
-                service.onMessage(request, response);
+                service.onMessage(httpRequest, httpResponse);
             } catch (IOException e) {
                 throw e;
             } catch (ServletException e) {
@@ -147,176 +140,6 @@
             }
         }
         return service;
-    }
-
-    private static class RequestAdapter implements HttpRequest {
-        private final HttpServletRequest request;
-
-        public RequestAdapter(HttpServletRequest request) {
-            this.request = request;
-        }
-
-        public org.apache.openejb.server.httpd.HttpSession getSession(boolean create) {
-            javax.servlet.http.HttpSession session = request.getSession(create);
-            if (session != null) {
-                return new HttpSessionAdapter(session);
-            } else {
-                return null;
-            }
-        }
-
-        public org.apache.openejb.server.httpd.HttpSession getSession() {
-            javax.servlet.http.HttpSession session = request.getSession();
-            if (session != null) {
-                return new HttpSessionAdapter(session);
-            } else {
-                return null;
-            }
-        }
-
-        public String getHeader(String name) {
-            return request.getHeader(name);
-        }
-
-        public java.net.URI getURI() {
-            try {
-                return new java.net.URI(request.getScheme(), null, request.getServerName(), request.getServerPort(), request.getRequestURI(), request.getQueryString(), null);
-            } catch (URISyntaxException e) {
-                throw new IllegalStateException(e.getMessage(), e);
-            }
-        }
-
-        public int getContentLength() {
-            return request.getContentLength();
-        }
-
-        public String getContentType() {
-            return request.getContentType();
-        }
-
-        public String getContextPath() {
-            return request.getContextPath();
-        }
-
-        public InputStream getInputStream() throws IOException {
-            return request.getInputStream();
-        }
-
-        public int getMethod() {
-            Integer method = methods.get(request.getMethod());
-            return method == null ? UNSUPPORTED : method.intValue();
-        }
-
-        public String getParameter(String name) {
-            return request.getParameter(name);
-        }
-
-        public Map getParameters() {
-            return request.getParameterMap();
-        }
-
-        private static final Map<String, Integer> methods = new TreeMap<String, Integer>();
-
-        static {
-            methods.put("OPTIONS", new Integer(OPTIONS));
-            methods.put("GET", new Integer(GET));
-            methods.put("HEAD", new Integer(HEAD));
-            methods.put("POST", new Integer(POST));
-            methods.put("PUT", new Integer(PUT));
-            methods.put("DELETE", new Integer(DELETE));
-            methods.put("TRACE", new Integer(TRACE));
-            methods.put("CONNECT", new Integer(CONNECT));
-        }
-
-        public Object getAttribute(String s) {
-            return request.getAttribute(s);
-        }
-
-        public void setAttribute(String s, Object o) {
-            request.setAttribute(s, o);
-        }
-
-        public String getRemoteAddr() {
-            return request.getRemoteAddr();
-        }
-
-    }
-
-    private static class HttpSessionAdapter implements org.apache.openejb.server.httpd.HttpSession {
-        private final javax.servlet.http.HttpSession session;
-
-        public HttpSessionAdapter(javax.servlet.http.HttpSession session) {
-            this.session = session;
-        }
-
-        public String getId() {
-            return session.getId();
-        }
-
-        public Object getAttribute(String name) {
-            return getAttribute(name);
-        }
-
-        public void setAttribute(String name, Object value) {
-            session.setAttribute(name, value);
-        }
-
-        public void removeAttribute(String name) {
-            session.removeAttribute(name);
-        }
-    }
-
-    private static class ResponseAdapter implements HttpResponse {
-        private final HttpServletResponse response;
-
-        public ResponseAdapter(HttpServletResponse response) {
-            this.response = response;
-        }
-
-        public PrintWriter getPrintWriter() throws IOException {
-            return response.getWriter();
-        }
-
-        public void setHeader(String name, String value) {
-            response.setHeader(name, value);
-        }
-
-        public String getHeader(String name) {
-            throw new UnsupportedOperationException("Not possible to implement");
-        }
-
-        public OutputStream getOutputStream() {
-            try {
-                return response.getOutputStream();
-            } catch (IOException e) {
-                throw (IllegalStateException) new IllegalStateException().initCause(e);
-            }
-        }
-
-        public void setStatusCode(int code) {
-            response.setStatus(code);
-        }
-
-        public int getStatusCode() {
-            throw new UnsupportedOperationException("Not possible to implement");
-        }
-
-        public void setContentType(String type) {
-            response.setContentType(type);
-        }
-
-        public String getContentType() {
-            return response.getContentType();
-        }
-
-        @SuppressWarnings({"deprecation"})
-        public void setStatusMessage(String responseString) {
-            response.setStatus(getStatusCode(), responseString);
-        }
-
-        public void flushBuffer() throws java.io.IOException {
-            response.flushBuffer();
-        }
     }
 
     private static ServletEndpointContext getContext() {