Author: sergeyb Date: Tue Jan 24 23:30:16 2012 New Revision: 1235552 URL: http://svn.apache.org/viewvc?rev=1235552&view=rev Log: Merged revisions 1235547 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.5.x-fixes
................ r1235547 | sergeyb | 2012-01-24 23:19:12 +0000 (Tue, 24 Jan 2012) | 9 lines Merged revisions 1235544 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r1235544 | sergeyb | 2012-01-24 23:15:27 +0000 (Tue, 24 Jan 2012) | 1 line [CXF-4061] Keeping some of the URI path characters unencoded ........ ................ Modified: cxf/branches/2.4.x-fixes/ (props changed) cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java Propchange: cxf/branches/2.4.x-fixes/ ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Tue Jan 24 23:30:16 2012 @@ -0,0 +1,2 @@ +/cxf/branches/2.5.x-fixes:1235547 +/cxf/trunk:1235544 Propchange: cxf/branches/2.4.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java?rev=1235552&r1=1235551&r2=1235552&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java (original) +++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java Tue Jan 24 23:30:16 2012 @@ -40,7 +40,7 @@ public final class URITemplate { public static final String LIMITED_REGEX_SUFFIX = "(/.*)?"; public static final String FINAL_MATCH_GROUP = "FINAL_MATCH_GROUP"; private static final String DEFAULT_PATH_VARIABLE_REGEX = "([^/]+?)"; - private static final String CHARACTERS_TO_ESCAPE = ".*+"; + private static final String CHARACTERS_TO_ESCAPE = ".*+$()"; private static final String SLASH = "/"; private static final String SLASH_QUOTE = "/;"; Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java?rev=1235552&r1=1235551&r2=1235552&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java (original) +++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java Tue Jan 24 23:30:16 2012 @@ -326,11 +326,16 @@ public class WadlGenerator implements Re } private String getPath(String path) { + String thePath = null; if (ignoreForwardSlash && path.startsWith("/") && path.length() > 0) { - return path.substring(1); + thePath = path.substring(1); } else { - return path; + thePath = path; } + if (thePath.contains("&")) { + thePath = thePath.replace("&", "&"); + } + return thePath; } private void startMethodTag(StringBuilder sb, OperationResourceInfo ori) { Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java?rev=1235552&r1=1235551&r2=1235552&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java (original) +++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java Tue Jan 24 23:30:16 2012 @@ -63,7 +63,7 @@ public final class HttpUtils { private static final String CHARSET_PARAMETER = "charset"; // there are more of such characters, ex, '*' but '*' is not affected by UrlEncode - private static final String PATH_RESERVED_CHARACTERS = "=@/:"; + private static final String PATH_RESERVED_CHARACTERS = "=@/:!$&\'(),;~"; private static final String QUERY_RESERVED_CHARACTERS = "?/"; private HttpUtils() { Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java?rev=1235552&r1=1235551&r2=1235552&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java (original) +++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java Tue Jan 24 23:30:16 2012 @@ -40,6 +40,13 @@ public class URITemplateTest extends Ass } @Test + public void testPathCharacters() { + String pathChars = ":@!$&'*+,;=-._~()"; + assertTrue(new URITemplate(pathChars).match(pathChars, + new MetadataMap<String, String>())); + } + + @Test public void testMatchBasic() throws Exception { URITemplate uriTemplate = new URITemplate("/customers/{id}"); MultivaluedMap<String, String> values = new MetadataMap<String, String>(); Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java?rev=1235552&r1=1235551&r2=1235552&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java (original) +++ cxf/branches/2.4.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java Tue Jan 24 23:30:16 2012 @@ -59,8 +59,24 @@ public class HttpUtilsTest extends Asser assertEquals("%2B+", HttpUtils.urlEncode("+ ")); } + @Test public void testPathEncode() { + // rfc3986.txt 3.3 + //segment-nz = 1*pchar + //pchar = unreserved / pct-encoded / sub-delims / ":" / "@" + // sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" + // unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" + + // '&' has to be represented as & in WADL + + String pathChars = ":@!$&'()*+,;=-._~"; + String str = HttpUtils.pathEncode(pathChars); + assertEquals(str, pathChars); + } + + @Test + public void testPathEncodeWithPlusAndSpace() { assertEquals("+%20", HttpUtils.pathEncode("+ ")); } Modified: cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java?rev=1235552&r1=1235551&r2=1235552&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java (original) +++ cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java Tue Jan 24 23:30:16 2012 @@ -117,6 +117,12 @@ public class BookStore { public void preDestroy() { //System.out.println("PreDestroy called"); } + + @GET + @Path("allCharsButA-B/:@!$&'()*+,;=-._~") + public Book getWithComplexPath() { + return new Book("Encoded Path", 125L); + } @GET @Path("/default") Modified: cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java?rev=1235552&r1=1235551&r2=1235552&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java (original) +++ cxf/branches/2.4.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java Tue Jan 24 23:30:16 2012 @@ -80,6 +80,15 @@ public class JAXRSClientServerBookTest e } @Test + public void testWithComplexPath() { + WebClient wc = + WebClient.create("http://localhost:" + PORT + "/bookstore/allCharsButA-B/:@!$&'()*+,;=-._~"); + wc.accept("application/xml"); + Book book = wc.get(Book.class); + assertEquals("Encoded Path", book.getName()); + } + + @Test public void testMalformedAcceptType() { WebClient wc = WebClient.create("http://localhost:" + PORT + "/bookstore/books/123");
