Author: sergeyb
Date: Sat Jan  8 19:47:33 2011
New Revision: 1056778

URL: http://svn.apache.org/viewvc?rev=1056778&view=rev
Log:
[CXF-3226] Support for explicit spaces in Path expressions

Modified:
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
    
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
    
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
    
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
    
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java?rev=1056778&r1=1056777&r2=1056778&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
 Sat Jan  8 19:47:33 2011
@@ -61,7 +61,8 @@ public final class URITemplate {
             UriChunk chunk = UriChunk.createUriChunk(templatePart);
             uriChunks.add(chunk);
             if (chunk instanceof Literal) {
-                String substr = escapeCharacters(chunk.getValue());
+                String encodedValue = 
HttpUtils.encodePartiallyEncoded(chunk.getValue(), false);
+                String substr = escapeCharacters(encodedValue);
                 literalChars.append(substr);
                 patternBuilder.append(substr);
             } else if (chunk instanceof Variable) {

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java?rev=1056778&r1=1056777&r2=1056778&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
 Sat Jan  8 19:47:33 2011
@@ -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/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java?rev=1056778&r1=1056777&r2=1056778&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
 Sat Jan  8 19:47:33 2011
@@ -212,7 +212,7 @@ public final class ResourceUtils {
             Method annotatedMethod = AnnotationUtils.getAnnotatedMethod(m);
             
             String httpMethod = 
AnnotationUtils.getHttpMethodValue(annotatedMethod);
-            Path path = 
(Path)AnnotationUtils.getMethodAnnotation(annotatedMethod, Path.class);
+            Path path = AnnotationUtils.getMethodAnnotation(annotatedMethod, 
Path.class);
             
             if (httpMethod != null || path != null) {
                 md.bind(createOperationInfo(m, annotatedMethod, cri, path, 
httpMethod), m);

Modified: 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java?rev=1056778&r1=1056777&r2=1056778&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
 Sat Jan  8 19:47:33 2011
@@ -250,7 +250,26 @@ public class URITemplateTest extends Ass
         assertFalse(uriTemplate.match("/books/acdb", values));
 
     }
+    
+    @Test
+    public void testEscapingWildCard() throws Exception {
+        URITemplate uriTemplate = new URITemplate("/books/a*");
+        MultivaluedMap<String, String> values = new MetadataMap<String, 
String>();
+
+        assertTrue(uriTemplate.match("/books/a*", values));
+        assertFalse(uriTemplate.match("/books/a", values));
+        assertFalse(uriTemplate.match("/books/ac", values));
+    }
+
+    @Test
+    public void testEncodedSpace() throws Exception {
+        URITemplate uriTemplate = new URITemplate("/1 2/%203");
+        MultivaluedMap<String, String> values = new MetadataMap<String, 
String>();
 
+        assertTrue(uriTemplate.match("/1%202/%203", values));
+        assertFalse(uriTemplate.match("/1 2/%203", values));
+    }
+    
     @Test
     public void testBasicCustomExpression4() throws Exception {
         URITemplate uriTemplate = new URITemplate("/books/{bookId:...\\.}");
@@ -559,9 +578,10 @@ public class URITemplateTest extends Ass
         assertFalse(tok.hasNext());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testUnclosedVariable() {
-        new URITemplate("/foo/{var/bar");
+        URITemplate ut = new URITemplate("/foo/{var/bar");
+        assertEquals("/foo/{var/bar", ut.getValue());
     }
 
     @Test

Modified: 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java?rev=1056778&r1=1056777&r2=1056778&view=diff
==============================================================================
--- 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
 (original)
+++ 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
 Sat Jan  8 19:47:33 2011
@@ -389,6 +389,13 @@ public class BookStore {
     }
     
     @GET
+    @Path("/the books/{bookId}/")
+    @Produces("application/xml")
+    public Book getBookWithSpace(@PathParam("bookId") String id) throws 
BookNotFoundFault {
+        return doGetBook(id);
+    }
+    
+    @GET
     @Path("/books/search")
     @Produces("application/xml")
     public Book getBook(@Context SearchContext searchContext) 

Modified: 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java?rev=1056778&r1=1056777&r2=1056778&view=diff
==============================================================================
--- 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
 (original)
+++ 
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
 Sat Jan  8 19:47:33 2011
@@ -89,6 +89,20 @@ public class JAXRSClientServerBookTest e
     }
     
     @Test
+    public void testBookWithSpace() throws Exception {
+        WebClient client = WebClient.create("http://localhost:"; + PORT + 
"/bookstore/").path("the books/123");
+        Book book = client.get(Book.class);
+        assertEquals(123L, book.getId());
+    }
+    
+    @Test
+    public void testBookWithSpaceProxy() throws Exception {
+        BookStore store = JAXRSClientFactory.create("http://localhost:"; + 
PORT, BookStore.class);
+        Book book = store.getBookWithSpace("123");
+        assertEquals(123L, book.getId());
+    }
+    
+    @Test
     public void testTempRedirectWebClient() throws Exception {
         WebClient client = WebClient.create("http://localhost:"; + PORT + 
"/bookstore/tempredirect");
         Response r = client.type("*/*").get();


Reply via email to