Author: markt
Date: Tue Apr 23 19:58:34 2013
New Revision: 1471123

URL: http://svn.apache.org/r1471123
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54781
Fix NPE if no matching Endpoint is found.
Handle forwarded requests as well.

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java
    tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java?rev=1471123&r1=1471122&r2=1471123&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsFilter.java Tue Apr 
23 19:58:34 2013
@@ -78,7 +78,7 @@ public class WsFilter implements Filter 
                 !headerContainsToken((HttpServletRequest) request,
                         Constants.UPGRADE_HEADER_NAME,
                         Constants.UPGRADE_HEADER_VALUE)) {
-            // Note an HTTP request that includes a valid upgrade request to
+            // Not an HTTP request that includes a valid upgrade request to
             // web socket
             chain.doFilter(request, response);
             return;
@@ -122,6 +122,13 @@ public class WsFilter implements Filter 
         }
         WsMappingResult mappingResult = sc.findMapping(path);
 
+        if (mappingResult == null) {
+            // No endpoint registered for the requested path. Let the
+            // application handle it (it might redirect or forward for example)
+            chain.doFilter(request, response);
+            return;
+        }
+
         ServerEndpointConfig sec = mappingResult.getConfig();
 
         // Origin check

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java?rev=1471123&r1=1471122&r2=1471123&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java 
Tue Apr 23 19:58:34 2013
@@ -19,12 +19,14 @@ package org.apache.tomcat.websocket.serv
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.WeakHashMap;
 
+import javax.servlet.DispatcherType;
 import javax.servlet.FilterRegistration;
 import javax.servlet.ServletContext;
 import javax.websocket.DeploymentException;
@@ -111,7 +113,11 @@ public class WsServerContainer extends W
 
         FilterRegistration fr = servletContext.addFilter(
                 WsFilter.class.getName(), WsFilter.class);
-        fr.addMappingForUrlPatterns(null, false, "/*");
+
+        EnumSet<DispatcherType> types = EnumSet.of(DispatcherType.REQUEST,
+                DispatcherType.FORWARD);
+
+        fr.addMappingForUrlPatterns(types, false, "/*");
     }
 
 
@@ -233,6 +239,12 @@ public class WsServerContainer extends W
         SortedSet<TemplatePathMatch> templateMatches =
                 configTemplateMatchMap.get(key);
 
+        if (templateMatches == null) {
+            // No templates with an equal number of segments so there will be
+            // no matches
+            return null;
+        }
+
         // List is in alphabetical order of normalised templates.
         // Correct match is the first one that matches.
         Map<String,String> pathParams = null;



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to