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