Author: markt
Date: Mon Sep 9 12:47:31 2013
New Revision: 1521076
URL: http://svn.apache.org/r1521076
Log:
Update based on the WS EG discussions around some edge cases. Note that some of
these will never happen in practise as Tomcat will have normalized the URI.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/server/UriTemplate.java
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/websocket/server/TestUriTemplate.java
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1521073,1521075
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties?rev=1521076&r1=1521075&r2=1521076&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
(original)
+++
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
Mon Sep 9 12:47:31 2013
@@ -26,6 +26,7 @@ serverContainer.servletContextMismatch=A
serverContainer.servletContextMissing=No ServletContext was specified
uriTemplate.duplicateParameter=The parameter [{0}] appears more than once in
the path which is not permitted
+uriTemplate.emptySegment=The path [{0}] contains one or more empty segments
which are is not permitted
uriTemplate.invalidPath=The path [{0}] is not valid.
uriTemplate.invalidSegment=The segment [{0}] is not valid in the provided path
[{1}]
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/server/UriTemplate.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/server/UriTemplate.java?rev=1521076&r1=1521075&r2=1521076&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/server/UriTemplate.java
(original)
+++
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/websocket/server/UriTemplate.java
Mon Sep 9 12:47:31 2013
@@ -52,14 +52,24 @@ public class UriTemplate {
StringBuilder normalized = new StringBuilder(path.length());
Set<String> paramNames = new HashSet<String>();
- String[] segments = path.split("/");
+ // Include empty segments.
+ String[] segments = path.split("/", -1);
int paramCount = 0;
int segmentCount = 0;
for (int i = 0; i < segments.length; i++) {
String segment = segments[i];
if (segment.length() == 0) {
- continue;
+ if (i == 0) {
+ // Ignore the first empty segment as the path must always
+ // start with '/'
+ continue;
+ } else {
+ // As per EG discussion, all other empty segments are
+ // invalid
+ throw new IllegalArgumentException(sm.getString(
+ "uriTemplate.emptySegment", path));
+ }
}
normalized.append('/');
int index = -1;
Modified:
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/websocket/server/TestUriTemplate.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/tomcat/websocket/server/TestUriTemplate.java?rev=1521076&r1=1521075&r2=1521076&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/websocket/server/TestUriTemplate.java
(original)
+++
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/websocket/server/TestUriTemplate.java
Mon Sep 9 12:47:31 2013
@@ -169,4 +169,37 @@ public class TestUriTemplate {
Assert.assertEquals("x", result.get("a"));
Assert.assertEquals("x", result.get("b"));
}
+
+
+ @Test(expected=java.lang.IllegalArgumentException.class)
+ public void testEgMailingList01() throws Exception {
+ UriTemplate t = new UriTemplate("/a/{var}");
+ @SuppressWarnings("unused")
+ Map<String,String> result = t.match(new UriTemplate("/a/b/"));
+ }
+
+
+ @Test(expected=java.lang.IllegalArgumentException.class)
+ public void testEgMailingList02() throws Exception {
+ UriTemplate t = new UriTemplate("/a/{var}");
+ @SuppressWarnings("unused")
+ Map<String,String> result = t.match(new UriTemplate("/a/"));
+ }
+
+
+ @Test
+ public void testEgMailingList03() throws Exception {
+ UriTemplate t = new UriTemplate("/a/{var}");
+ Map<String,String> result = t.match(new UriTemplate("/a"));
+
+ Assert.assertNull(result);
+ }
+
+
+ @Test(expected=java.lang.IllegalArgumentException.class)
+ public void testEgMailingList04() throws Exception {
+ UriTemplate t = new UriTemplate("/a/{var1}/{var2}");
+ @SuppressWarnings("unused")
+ Map<String,String> result = t.match(new UriTemplate("/a//c"));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]