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