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 2014/12/26 08:46:15 UTC

tomee git commit: fixing servlet component routing when we use jetty

Repository: tomee
Updated Branches:
  refs/heads/develop cd98a4275 -> 0b87f105e


fixing servlet component routing when we use jetty


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/0b87f105
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/0b87f105
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/0b87f105

Branch: refs/heads/develop
Commit: 0b87f105e0d6d075bd2e84ec292eb41856103dbb
Parents: cd98a42
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Fri Dec 26 08:46:02 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Fri Dec 26 08:46:02 2014 +0100

----------------------------------------------------------------------
 .../openejb/server/httpd/FilterListener.java    |  5 +++-
 .../server/httpd/HttpListenerRegistry.java      | 24 ++++++++++++++++----
 .../openejb/server/httpd/HttpRequestImpl.java   |  2 +-
 .../server/httpd/FilterRegistrationTest.java    |  5 ++--
 4 files changed, 28 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/0b87f105/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/FilterListener.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/FilterListener.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/FilterListener.java
index b28f3c4..bede414 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/FilterListener.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/FilterListener.java
@@ -24,6 +24,7 @@ import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
 public class FilterListener implements HttpListener {
@@ -68,7 +69,9 @@ public class FilterListener implements HttpListener {
             final HttpListenerRegistry registry = SystemInstance.get().getComponent(HttpListenerRegistry.class);
             registry.setOrigin(origin);
             try {
-                registry.onMessage((HttpRequest) request, (HttpResponse) response);
+                registry.onMessage(
+                        HttpRequest.class.isInstance(request) ? HttpRequest.class.cast(request) : new ServletRequestAdapter(HttpServletRequest.class.cast(request)),
+                        HttpResponse.class.isInstance(response) ? HttpResponse.class.cast(response) : new ServletResponseAdapter(HttpServletResponse.class.cast(response)));
             } catch (final RuntimeException re) {
                 throw re;
             } catch (final ServletException e) {

http://git-wip-us.apache.org/repos/asf/tomee/blob/0b87f105/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
index 497ed93..414c8e7 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
@@ -64,8 +64,14 @@ public class HttpListenerRegistry implements HttpListener {
 
     @Override
     public void onMessage(final HttpRequest request, final HttpResponse response) throws Exception {
-        final String servletPath = request.getServletPath();
-        final String path = request.getContextPath() + (!servletPath.startsWith("/") ? "/" : "") + servletPath;
+        final HttpRequest registered = this.request.get();
+        final String path;
+        if (!HttpRequestImpl.class.isInstance(request)) {
+            path = request.getRequestURI();
+        } else {
+            path = getRequestHandledPath(request);
+        }
+
         final FilterListener currentFL = currentFilterListener.get();
 
         // first look filters
@@ -74,8 +80,11 @@ public class HttpListenerRegistry implements HttpListener {
             filters = new HashMap<>(filterRegistry);
         }
 
+        final boolean reset = registered == null;
         try {
-            this.request.set(request);
+            if (reset) {
+                this.request.set(request);
+            }
             boolean lastWasCurrent = false;
             for (Map.Entry<String, Collection<HttpListener>> entry : filters.entrySet()) {
                 String pattern = entry.getKey();
@@ -106,10 +115,17 @@ public class HttpListenerRegistry implements HttpListener {
             if (currentFL == null) {
                 currentFilterListener.set(null);
             }
-            this.request.set(null);
+            if (reset) {
+                this.request.set(null);
+            }
         }
     }
 
+    private String getRequestHandledPath(final HttpRequest request) {
+        final String servletPath = request.getServletPath();
+        return request.getContextPath() + (!servletPath.startsWith("/") ? "/" : "") + servletPath;
+    }
+
     public void addHttpListener(HttpListener listener, String regex) {
         synchronized (registry) {
             registry.put(regex, listener);

http://git-wip-us.apache.org/repos/asf/tomee/blob/0b87f105/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
index 1e9365b..c04cb61 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
@@ -286,7 +286,7 @@ public class HttpRequestImpl implements HttpRequest {
             }
             return path;
         }
-        if ("/".equals(path)) { // not initialized, contextpath = "" so let use it for our router (HttpListenerRegistry)
+        if ("/".equals(path) && uri != null) { // not initialized, contextpath = "" so let use it for our router (HttpListenerRegistry)
             return uri.getPath();
         }
         return getPathInfo();

http://git-wip-us.apache.org/repos/asf/tomee/blob/0b87f105/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/FilterRegistrationTest.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/FilterRegistrationTest.java b/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/FilterRegistrationTest.java
index c4733b7..30d2367 100644
--- a/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/FilterRegistrationTest.java
+++ b/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/FilterRegistrationTest.java
@@ -36,6 +36,7 @@ import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.net.URI;
@@ -99,7 +100,7 @@ public class FilterRegistrationTest {
         public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
             ok = true;
             try {
-                chain.doFilter(new HttpRequestImpl(new URI("http://ok/filter/touch")) {
+                chain.doFilter(new HttpServletRequestWrapper(new HttpRequestImpl(new URI("http://ok/filter/touch")) {
                     @Override
                     public java.net.URI getURI() {
                         return super.getSocketURI();
@@ -110,7 +111,7 @@ public class FilterRegistrationTest {
                         return "GET";
                     }
 
-                }, response);
+                }), response);
             } catch (URISyntaxException e) {
                 throw new ServletException(e);
             }