You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/09/20 09:24:17 UTC

svn commit: r1387893 - in /openejb/trunk/openejb: container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ container/openejb-core/src/main/java/org/apache/openejb/config/ container/openejb-core/src/main/java/org/apache/openejb/rest/ s...

Author: rmannibucau
Date: Thu Sep 20 07:24:16 2012
New Revision: 1387893

URL: http://svn.apache.org/viewvc?rev=1387893&view=rev
Log:
TOMEE-422 HttpServletResponse and ServletConfig for JAXRS @Context injections

Added:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpServletResponse.java
      - copied, changed from r1387468, openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpServletRequest.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalServletConfig.java
Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalContextManager.java
    openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java
    openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInjectionTest.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?rev=1387893&r1=1387892&r2=1387893&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java Thu Sep 20 07:24:16 2012
@@ -58,8 +58,10 @@ import javax.naming.LinkRef;
 import javax.naming.Name;
 import javax.naming.NamingException;
 import javax.persistence.EntityManagerFactory;
+import javax.servlet.ServletConfig;
 import javax.servlet.ServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.transaction.TransactionManager;
 import javax.transaction.UserTransaction;
 import javax.validation.Validator;
@@ -300,6 +302,10 @@ public class JndiEncBuilder {
                 reference = new ObjectReference(ThreadLocalContextManager.CONTEXT_RESOLVER);
             } else if (Providers.class.equals(type)) {
                 reference = new ObjectReference(ThreadLocalContextManager.PROVIDERS);
+            } else if (ServletConfig.class.equals(type)) {
+                reference = new ObjectReference(ThreadLocalContextManager.SERVLET_CONFIG);
+            } else if (HttpServletResponse.class.equals(type)) {
+                reference = new ObjectReference(ThreadLocalContextManager.HTTP_SERVLET_RESPONSE);
             } else if (referenceInfo.resourceID != null) {
                 String jndiName = "openejb/Resource/" + referenceInfo.resourceID;
                 reference = new IntraVmJndiReference(jndiName);

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=1387893&r1=1387892&r2=1387893&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java Thu Sep 20 07:24:16 2012
@@ -62,8 +62,10 @@ import javax.ejb.TimerService;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.jms.Queue;
 import javax.jms.Topic;
+import javax.servlet.ServletConfig;
 import javax.servlet.ServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
 import javax.transaction.TransactionSynchronizationRegistry;
@@ -137,6 +139,8 @@ public class AutoConfig implements Dynam
         ignoredReferenceTypes.add(Providers.class.getName());
         ignoredReferenceTypes.add(ServletRequest.class.getName());
         ignoredReferenceTypes.add(HttpServletRequest.class.getName());
+        ignoredReferenceTypes.add(ServletConfig.class.getName());
+        ignoredReferenceTypes.add(HttpServletResponse.class.getName());
     }
 
     private final ConfigurationFactory configFactory;

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalContextManager.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalContextManager.java?rev=1387893&r1=1387892&r2=1387893&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalContextManager.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalContextManager.java Thu Sep 20 07:24:16 2012
@@ -21,8 +21,10 @@ import javax.ws.rs.core.Application;
 
 public class ThreadLocalContextManager {
     public static final ThreadLocalRequest REQUEST = new ThreadLocalRequest();
+    public static final ThreadLocalServletConfig SERVLET_CONFIG = new ThreadLocalServletConfig();
     public static final ThreadLocalServletRequest SERVLET_REQUEST = new ThreadLocalServletRequest();
     public static final ThreadLocalHttpServletRequest HTTP_SERVLET_REQUEST = new ThreadLocalHttpServletRequest();
+    public static final ThreadLocalHttpServletResponse HTTP_SERVLET_RESPONSE = new ThreadLocalHttpServletResponse();
     public static final ThreadLocalUriInfo URI_INFO = new ThreadLocalUriInfo();
     public static final ThreadLocalHttpHeaders HTTP_HEADERS = new ThreadLocalHttpHeaders();
     public static final ThreadLocalSecurityContext SECURITY_CONTEXT = new ThreadLocalSecurityContext();
@@ -33,7 +35,9 @@ public class ThreadLocalContextManager {
     public static void reset() {
         REQUEST.remove();
         SERVLET_REQUEST.remove();
+        SERVLET_CONFIG.remove();
         HTTP_SERVLET_REQUEST.remove();
+        HTTP_SERVLET_RESPONSE.remove();
         URI_INFO.remove();
         HTTP_HEADERS.remove();
         SECURITY_CONTEXT.remove();

Copied: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpServletResponse.java (from r1387468, openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpServletRequest.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpServletResponse.java?p2=openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpServletResponse.java&p1=openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpServletRequest.java&r1=1387468&r2=1387893&rev=1387893&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpServletRequest.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalHttpServletResponse.java Thu Sep 20 07:24:16 2012
@@ -17,171 +17,201 @@
 
 package org.apache.openejb.rest;
 
+import org.apache.openejb.core.ivm.naming.AbstractThreadLocalProxy;
+
 import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 import javax.servlet.http.Part;
+import javax.ws.rs.ext.Providers;
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.security.Principal;
 import java.util.Collection;
 import java.util.Enumeration;
+import java.util.Locale;
+
+public class ThreadLocalHttpServletResponse extends AbstractThreadLocalProxy<HttpServletResponse>  implements HttpServletResponse {
+    @Override
+    public void addCookie(final Cookie cookie) {
+        get().addCookie(cookie);
+    }
+
+    @Override
+    public void addDateHeader(final String name, final long date) {
+        get().addDateHeader(name, date);
+    }
+
+    @Override
+    public void addHeader(final String name, final String value) {
+        get().addHeader(name, value);
+    }
+
+    @Override
+    public void addIntHeader(final String name, final int value) {
+        get().addIntHeader(name, value);
+    }
 
-public class ThreadLocalHttpServletRequest extends ThreadLocalServletRequest
-    implements HttpServletRequest {
+    @Override
+    public boolean containsHeader(final String name) {
+        return get().containsHeader(name);
+    }
 
-    private HttpServletRequest request() {
-        return (HttpServletRequest) super.get();
+    @Override
+    public String encodeURL(final String url) {
+        return get().encodeURL(url);
     }
 
     @Override
-    public boolean authenticate(HttpServletResponse httpServletResponse) throws IOException, ServletException {
-        return request().authenticate(httpServletResponse);
+    public String encodeRedirectURL(final String url) {
+        return get().encodeRedirectURL(url);
     }
 
     @Override
-    public String getAuthType() {
-        return request().getAuthType();
+    public String encodeUrl(final String url) {
+        return get().encodeUrl(url);
     }
 
     @Override
-    public String getContextPath() {
-        return request().getContextPath();
+    public String encodeRedirectUrl(final String url) {
+        return get().encodeRedirectUrl(url);
     }
 
     @Override
-    public Cookie[] getCookies() {
-        return request().getCookies();
+    public String getHeader(final String name) {
+        return get().getHeader(name);
     }
 
     @Override
-    public long getDateHeader(String s) {
-        return request().getDateHeader(s);
+    public Collection<String> getHeaderNames() {
+        return get().getHeaderNames();
     }
 
     @Override
-    public String getHeader(String s) {
-        return request().getHeader(s);
+    public Collection<String> getHeaders(final String headerName) {
+        return get().getHeaders(headerName);
     }
 
     @Override
-    public Enumeration<String> getHeaderNames() {
-        return request().getHeaderNames();
+    public int getStatus() {
+        return get().getStatus();
     }
 
     @Override
-    public Enumeration<String> getHeaders(String s) {
-        return request().getHeaders(s);
+    public void sendError(final int sc) throws IOException {
+        get().sendError(sc);
     }
 
     @Override
-    public int getIntHeader(String s) {
-        return request().getIntHeader(s);
+    public void sendError(final int sc, final String msg) throws IOException {
+        get().sendError(sc, msg);
     }
 
     @Override
-    public String getMethod() {
-        return request().getMethod();
+    public void sendRedirect(final String location) throws IOException {
+        get().sendRedirect(location);
     }
 
     @Override
-    public Part getPart(String s) throws IOException, ServletException {
-        return request().getPart(s);
+    public void setDateHeader(final String name, final long date) {
+        get().setDateHeader(name, date);
     }
 
     @Override
-    public Collection<Part> getParts() throws IOException, ServletException {
-        return request().getParts();
+    public void setHeader(final String name, final String value) {
+        get().setHeader(name, value);
     }
 
     @Override
-    public String getPathInfo() {
-        return request().getPathInfo();
+    public void setIntHeader(final String name, final int value) {
+        get().setIntHeader(name, value);
     }
 
     @Override
-    public String getPathTranslated() {
-        return request().getPathTranslated();
+    public void setStatus(final int sc) {
+        get().setStatus(sc);
     }
 
     @Override
-    public String getQueryString() {
-        return request().getQueryString();
+    public void setStatus(final int sc, final String sm) {
+        get().setStatus(sc, sm);
     }
 
     @Override
-    public String getRemoteUser() {
-        return request().getRemoteUser();
+    public void flushBuffer() throws IOException {
+        get().flushBuffer();
     }
 
     @Override
-    public String getRequestedSessionId() {
-        return request().getRequestedSessionId();
+    public int getBufferSize() {
+        return get().getBufferSize();
     }
 
     @Override
-    public String getRequestURI() {
-        return request().getRequestURI();
+    public String getCharacterEncoding() {
+        return get().getCharacterEncoding();
     }
 
     @Override
-    public StringBuffer getRequestURL() {
-        return request().getRequestURL();
+    public String getContentType() {
+        return get().getContentType();
     }
 
     @Override
-    public String getServletPath() {
-        return request().getServletPath();
+    public Locale getLocale() {
+        return get().getLocale();
     }
 
     @Override
-    public HttpSession getSession() {
-        return request().getSession();
+    public ServletOutputStream getOutputStream() throws IOException {
+        return get().getOutputStream();
     }
 
     @Override
-    public HttpSession getSession(boolean b) {
-        return request().getSession(b);
+    public PrintWriter getWriter() throws IOException {
+        return get().getWriter();
     }
 
     @Override
-    public Principal getUserPrincipal() {
-        return request().getUserPrincipal();
+    public boolean isCommitted() {
+        return get().isCommitted();
     }
 
     @Override
-    public boolean isRequestedSessionIdFromCookie() {
-        return request().isRequestedSessionIdFromCookie();
+    public void reset() {
+        get().reset();
     }
 
     @Override
-    public boolean isRequestedSessionIdFromUrl() {
-        return request().isRequestedSessionIdFromUrl();
+    public void resetBuffer() {
+        get().resetBuffer();
     }
 
     @Override
-    public boolean isRequestedSessionIdFromURL() {
-        return request().isRequestedSessionIdFromURL();
+    public void setBufferSize(final int size) {
+        get().setBufferSize(size);
     }
 
     @Override
-    public boolean isRequestedSessionIdValid() {
-        return request().isRequestedSessionIdValid();
+    public void setCharacterEncoding(final String charset) {
+        get().setCharacterEncoding(charset);
     }
 
     @Override
-    public boolean isUserInRole(String s) {
-        return request().isUserInRole(s);
+    public void setContentLength(final int len) {
+        get().setContentLength(len);
     }
 
     @Override
-    public void login(String s, String s1) throws ServletException {
-        request().login(s, s1);
+    public void setContentType(final String type) {
+        get().setContentType(type);
     }
 
     @Override
-    public void logout() throws ServletException {
-        request().logout();
+    public void setLocale(final Locale loc) {
+        get().setLocale(loc);
     }
 }

Added: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalServletConfig.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalServletConfig.java?rev=1387893&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalServletConfig.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/rest/ThreadLocalServletConfig.java Thu Sep 20 07:24:16 2012
@@ -0,0 +1,46 @@
+/*
+ * 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.rest;
+
+import org.apache.openejb.core.ivm.naming.AbstractThreadLocalProxy;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import java.util.Enumeration;
+
+public class ThreadLocalServletConfig extends AbstractThreadLocalProxy<ServletConfig>  implements ServletConfig {
+    @Override
+    public String getServletName() {
+        return get().getServletName();
+    }
+
+    @Override
+    public ServletContext getServletContext() {
+        return get().getServletContext();
+    }
+
+    @Override
+    public String getInitParameter(final String name) {
+        return get().getInitParameter(name);
+    }
+
+    @Override
+    public Enumeration<String> getInitParameterNames() {
+        return get().getInitParameterNames();
+    }
+}

Modified: openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java?rev=1387893&r1=1387892&r2=1387893&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java (original)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java Thu Sep 20 07:24:16 2012
@@ -24,8 +24,10 @@ import org.apache.cxf.message.Exchange;
 import org.apache.openejb.InvalidateReferenceException;
 import org.apache.openejb.rest.ThreadLocalContextManager;
 
+import javax.servlet.ServletConfig;
 import javax.servlet.ServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.Request;
 import javax.ws.rs.core.SecurityContext;
@@ -69,6 +71,12 @@ public class OpenEJBEJBInvoker extends J
             } else if (HttpServletRequest.class.equals(type)) {
                 HttpServletRequest httpServletRequest = JAXRSUtils.createContextValue(exchange.getInMessage(), null, HttpServletRequest.class);
                 ThreadLocalContextManager.HTTP_SERVLET_REQUEST.set(httpServletRequest);
+            } else if (HttpServletResponse.class.equals(type)) {
+                HttpServletResponse httpServletResponse = JAXRSUtils.createContextValue(exchange.getInMessage(), null, HttpServletResponse.class);
+                ThreadLocalContextManager.HTTP_SERVLET_RESPONSE.set(httpServletResponse);
+            } else if (ServletConfig.class.equals(type)) {
+                ServletConfig servletConfig = JAXRSUtils.createContextValue(exchange.getInMessage(), null, ServletConfig.class);
+                ThreadLocalContextManager.SERVLET_CONFIG.set(servletConfig);
             }
         }
 

Modified: openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInjectionTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInjectionTest.java?rev=1387893&r1=1387892&r2=1387893&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInjectionTest.java (original)
+++ openejb/trunk/openejb/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RsInjectionTest.java Thu Sep 20 07:24:16 2012
@@ -27,6 +27,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import javax.ejb.Singleton;
+import javax.servlet.http.HttpServletResponse;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.core.Context;
@@ -65,10 +66,13 @@ public class RsInjectionTest {
         @Context
         private Providers providers;
 
+        @Context
+        private HttpServletResponse response;
+
         @GET
         @Path("/check")
         public boolean check() {
-            return providers != null;
+            return providers != null && response != null;
         }
     }
 }