You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2012/01/25 00:30:16 UTC

svn commit: r1235552 - in /cxf/branches/2.4.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/wadl/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ rt/frontend...

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 &amp; 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");