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 2010/10/04 20:03:22 UTC

svn commit: r1004341 - in /cxf/trunk/rt/frontend/jaxrs/src: main/java/org/apache/cxf/jaxrs/impl/ main/java/org/apache/cxf/jaxrs/utils/ test/java/org/apache/cxf/jaxrs/client/ test/java/org/apache/cxf/jaxrs/impl/

Author: sergeyb
Date: Mon Oct  4 18:03:21 2010
New Revision: 1004341

URL: http://svn.apache.org/viewvc?rev=1004341&view=rev
Log:
A hack to ensure that a + contained in UriBuilder.replaceQuery is retained but is encoded otherwise

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.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/JAXRSUtils.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java?rev=1004341&r1=1004340&r2=1004341&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java Mon Oct  4 18:03:21 2010
@@ -592,7 +592,7 @@ public class UriBuilderImpl extends UriB
             // of quertyParam are encoded as '+'
             queryValue = queryValue.replace(" ", "%20");
         }
-        query = JAXRSUtils.getStructuredParams(queryValue, "&", false, false);
+        query = JAXRSUtils.getStructuredParams(queryValue, "&", false, true);
         return this;
     }
 
@@ -661,9 +661,7 @@ public class UriBuilderImpl extends UriB
             Map.Entry<String, List<String>> entry = it.next();
             for (Iterator<String> sit = entry.getValue().iterator(); sit.hasNext();) {
                 String val = sit.next();
-                if (fromEncoded) {
-                    val = HttpUtils.encodePartiallyEncoded(val, isQuery);
-                } else if (isQuery && !val.startsWith("{") && !val.endsWith("}")) { 
+                if (fromEncoded  || (isQuery && !val.startsWith("{") && !val.endsWith("}"))) { 
                     val = HttpUtils.encodePartiallyEncoded(val, isQuery);
                 }
                 b.append(entry.getKey());

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=1004341&r1=1004340&r2=1004341&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 Mon Oct  4 18:03:21 2010
@@ -64,7 +64,7 @@ public final class HttpUtils {
     
     // there are more of such characters, ex, '*' but '*' is not affected by UrlEncode
     private static final String PATH_RESERVED_CHARACTERS = "=@";
-    private static final String QUERY_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/JAXRSUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java?rev=1004341&r1=1004340&r2=1004341&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java Mon Oct  4 18:03:21 2010
@@ -939,8 +939,8 @@ public final class JAXRSUtils {
                 String value = null;
                 if (values.length == 1) {
                     value = "";
-                } else if (decode) {
-                    value = (";".equals(sep) || !decodePlus)
+                } else if (decode || (decodePlus && values[1].contains("+"))) {
+                    value = (";".equals(sep))
                         ? HttpUtils.pathDecode(values[1]) : HttpUtils.urlDecode(values[1]); 
                 } else {
                     value = values[1];

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java?rev=1004341&r1=1004340&r2=1004341&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java Mon Oct  4 18:03:21 2010
@@ -33,8 +33,8 @@ public class WebClientTest extends Asser
     @Test
     public void testEncoding() {
         URI u = WebClient.create("http://foo").path("bar+ %2B").matrix("a", "value+ ")
-            .query("b", "bv+ ").getCurrentURI();
-        assertEquals("http://foo/bar+%20%2B;a=value+%20?b=bv++", u.toString());
+            .query("b", "bv+ %2B").getCurrentURI();
+        assertEquals("http://foo/bar+%20%2B;a=value+%20?b=bv%2B+%2B", u.toString());
     }
     
     @Test

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java?rev=1004341&r1=1004340&r2=1004341&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java Mon Oct  4 18:03:21 2010
@@ -167,7 +167,7 @@ public class UriBuilderImplTest extends 
             .matrixParam("m", "m1 ", "m2+%20")
             .queryParam("q", "q1 ", "q2+q3%20").clone().buildFromEncoded("a+ ", "b%2B%20 ");   
         assertEquals("URI is not built correctly", 
-                     "http://bar/a+%20/b%2B%20%20;m=m1%20;m=m2+%20?q=q1+&q=q2+q3%20", 
+                     "http://bar/a+%20/b%2B%20%20;m=m1%20;m=m2+%20?q=q1+&q=q2%2Bq3%20", 
                      newUri.toString());
     }
     
@@ -176,7 +176,7 @@ public class UriBuilderImplTest extends 
         URI uri = new URI("http://bar/foo+%20%2B?q=a+b%20%2B");
         URI newUri = new UriBuilderImpl(uri).buildFromEncoded();   
         assertEquals("URI is not built correctly", 
-                     "http://bar/foo+%20%2B?q=a+b%20%2B", newUri.toString());
+                     "http://bar/foo+%20%2B?q=a%2Bb%20%2B", newUri.toString());
     }
     
     @Test
@@ -215,7 +215,7 @@ public class UriBuilderImplTest extends 
     public void testEncodedAddedQuery() throws Exception {
         URI uri = new URI("http://bar");
         URI newUri = new UriBuilderImpl(uri).queryParam("q", "a+b%20%2B").buildFromEncoded();   
-        assertEquals("URI is not built correctly", "http://bar?q=a+b%20%2B", newUri.toString());
+        assertEquals("URI is not built correctly", "http://bar?q=a%2Bb%20%2B", newUri.toString());
     }
     
     @Test