Author: markt
Date: Tue Jun 25 10:19:54 2013
New Revision: 1496400

URL: http://svn.apache.org/r1496400
Log:
WebSocket 1.0. Section 4.1.1
Deployment to duplicate paths is not permitted

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
    tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java
    
tomcat/trunk/test/org/apache/tomcat/websocket/server/TestWsServerContainer.java

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties?rev=1496400&r1=1496399&r2=1496400&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties 
Tue Jun 25 10:19:54 2013
@@ -15,6 +15,7 @@
 sci.newInstance.fail=Failed to create an Endpoint instance of type [{0}]
 
 serverContainer.configuratorFail=Failed to create configurator of type [{0}] 
for POJO of type [{1}]
+serverContainer.duplicatePaths=Multiple Endpoints may not be deployed to using 
the same path [{0}]
 serverContainer.endpointDeploy=Endpoint class [{0}] deploying to path [{1}] in 
ServletContext [{2}]
 serverContainer.missingAnnotation=Cannot deploy POJO class [{0}] as it is not 
annotated with @ServerEndpoint
 serverContainer.missingEndpoint=An Endpoint instance has been request for path 
[{0}] but no matching Endpoint class was found

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=1496400&r1=1496399&r2=1496400&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java 
Tue Jun 25 10:19:54 2013
@@ -148,10 +148,19 @@ public class WsServerContainer extends W
                         TemplatePathMatchComparator.getInstance());
                 configTemplateMatchMap.put(key, templateMatches);
             }
-            templateMatches.add(new TemplatePathMatch(sec, uriTemplate));
+            if (!templateMatches.add(new TemplatePathMatch(sec, uriTemplate))) 
{
+                // Duplicate uriTemplate;
+                throw new DeploymentException(
+                        sm.getString("serverContainer.duplicatePaths", path));
+            }
         } else {
             // Exact match
-            configExactMatchMap.put(path, sec);
+            ServerEndpointConfig old = configExactMatchMap.put(path, sec);
+            if (old != null) {
+                // Duplicate path mappings
+                throw new DeploymentException(
+                        sm.getString("serverContainer.duplicatePaths", path));
+            }
         }
     }
 

Modified: 
tomcat/trunk/test/org/apache/tomcat/websocket/server/TestWsServerContainer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/server/TestWsServerContainer.java?rev=1496400&r1=1496399&r2=1496400&view=diff
==============================================================================
--- 
tomcat/trunk/test/org/apache/tomcat/websocket/server/TestWsServerContainer.java 
(original)
+++ 
tomcat/trunk/test/org/apache/tomcat/websocket/server/TestWsServerContainer.java 
Tue Jun 25 10:19:54 2013
@@ -112,4 +112,67 @@ public class TestWsServerContainer exten
 
         Assert.assertEquals(configB, sc.findMapping("/b/d").getConfig());
     }
+
+
+    @Test(expected = javax.websocket.DeploymentException.class)
+    public void testDuplicatePaths_01() throws Exception {
+        WsServerContainer sc = WsServerContainer.getServerContainer();
+        sc.setServletContext(new TesterServletContext());
+
+        ServerEndpointConfig configA = ServerEndpointConfig.Builder.create(
+                Object.class, "/a/b/c").build();
+        ServerEndpointConfig configB = ServerEndpointConfig.Builder.create(
+                Object.class, "/a/b/c").build();
+
+        sc.addEndpoint(configA);
+        sc.addEndpoint(configB);
+    }
+
+
+    @Test(expected = javax.websocket.DeploymentException.class)
+    public void testDuplicatePaths_02() throws Exception {
+        WsServerContainer sc = WsServerContainer.getServerContainer();
+        sc.setServletContext(new TesterServletContext());
+
+        ServerEndpointConfig configA = ServerEndpointConfig.Builder.create(
+                Object.class, "/a/b/{var}").build();
+        ServerEndpointConfig configB = ServerEndpointConfig.Builder.create(
+                Object.class, "/a/b/{var}").build();
+
+        sc.addEndpoint(configA);
+        sc.addEndpoint(configB);
+    }
+
+
+    @Test(expected = javax.websocket.DeploymentException.class)
+    public void testDuplicatePaths_03() throws Exception {
+        WsServerContainer sc = WsServerContainer.getServerContainer();
+        sc.setServletContext(new TesterServletContext());
+
+        ServerEndpointConfig configA = ServerEndpointConfig.Builder.create(
+                Object.class, "/a/b/{var1}").build();
+        ServerEndpointConfig configB = ServerEndpointConfig.Builder.create(
+                Object.class, "/a/b/{var2}").build();
+
+        sc.addEndpoint(configA);
+        sc.addEndpoint(configB);
+    }
+
+
+    @Test
+    public void testDuplicatePaths_04() throws Exception {
+        WsServerContainer sc = WsServerContainer.getServerContainer();
+        sc.setServletContext(new TesterServletContext());
+
+        ServerEndpointConfig configA = ServerEndpointConfig.Builder.create(
+                Object.class, "/a/{var1}/{var2}").build();
+        ServerEndpointConfig configB = ServerEndpointConfig.Builder.create(
+                Object.class, "/a/b/{var2}").build();
+
+        sc.addEndpoint(configA);
+        sc.addEndpoint(configB);
+
+        Assert.assertEquals(configA, sc.findMapping("/a/x/y").getConfig());
+        Assert.assertEquals(configB, sc.findMapping("/a/b/y").getConfig());
+    }
 }



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

Reply via email to