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() {