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/03 20:12:52 UTC
svn commit: r1004018 - in /cxf/branches/2.2.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/
rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/
rt/frontend/jaxr...
Author: sergeyb
Date: Sun Oct 3 18:12:52 2010
New Revision: 1004018
URL: http://svn.apache.org/viewvc?rev=1004018&view=rev
Log:
Merged revisions 1004016 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1004016 | sergeyb | 2010-10-03 19:01:56 +0100 (Sun, 03 Oct 2010) | 1 line
Fixing last ignored UriBuilder tests
........
Modified:
cxf/branches/2.2.x-fixes/ (props changed)
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java
Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
svn:mergeinfo = /cxf/trunk:1004016
Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java?rev=1004018&r1=1004017&r2=1004018&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java Sun Oct 3 18:12:52 2010
@@ -117,6 +117,13 @@ public class UriBuilderImpl extends UriB
&& thePath.length() != 0 && !thePath.startsWith("/")) {
thePath = "/" + thePath;
}
+ if (theQuery != null && HttpUtils.isPartiallyEncoded(theQuery)) {
+ try {
+ return buildURIFromEncoded(thePath, theQuery, theFragment);
+ } catch (Exception ex) {
+ // lets try the option below
+ }
+ }
URI uri = new URI(scheme, userInfo, host, port,
thePath, theQuery, theFragment);
if (thePath.contains("%2F")) {
@@ -585,7 +592,13 @@ public class UriBuilderImpl extends UriB
@Override
public UriBuilder replaceQuery(String queryValue) throws IllegalArgumentException {
- query = JAXRSUtils.getStructuredParams(queryValue, "&", true, false);
+ if (queryValue != null) {
+ // workaround to do with a conflicting and confusing requirement where spaces
+ // passed as part of replaceQuery are encoded as %20 while those passed as part
+ // of quertyParam are encoded as '+'
+ queryValue = queryValue.replace(" ", "%20");
+ }
+ query = JAXRSUtils.getStructuredParams(queryValue, "&", false, false);
return this;
}
@@ -656,6 +669,8 @@ public class UriBuilderImpl extends UriB
String val = sit.next();
if (fromEncoded) {
val = HttpUtils.encodePartiallyEncoded(val, isQuery);
+ } else if (isQuery && !val.startsWith("{") && !val.endsWith("}")) {
+ val = HttpUtils.encodePartiallyEncoded(val, isQuery);
}
b.append(entry.getKey());
if (val.length() != 0) {
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java?rev=1004018&r1=1004017&r2=1004018&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java Sun Oct 3 18:12:52 2010
@@ -61,8 +61,10 @@ public final class HttpUtils {
private static final String LOCAL_HOST = "localhost";
private static final Pattern ENCODE_PATTERN = Pattern.compile("%[0-9a-fA-F][0-9a-fA-F]");
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 QUERY_RESERVED_CHARACTERS = "?/+";
private HttpUtils() {
}
@@ -75,25 +77,14 @@ public final class HttpUtils {
return UrlUtils.pathDecode(value);
}
- public static String urlEncode(String value) {
-
- try {
- value = URLEncoder.encode(value, "UTF-8");
- } catch (UnsupportedEncodingException ex) {
- // unlikely to happen
- }
-
- return value;
- }
-
- public static String pathEncode(String value) {
+ private static String componentEncode(String reservedChars, String value) {
StringBuilder buffer = new StringBuilder();
StringBuilder bufferToEncode = new StringBuilder();
for (int i = 0; i < value.length(); i++) {
char currentChar = value.charAt(i);
- if (PATH_RESERVED_CHARACTERS.indexOf(currentChar) != -1) {
+ if (reservedChars.indexOf(currentChar) != -1) {
if (bufferToEncode.length() > 0) {
buffer.append(urlEncode(bufferToEncode.toString()));
bufferToEncode.setLength(0);
@@ -108,7 +99,28 @@ public final class HttpUtils {
buffer.append(urlEncode(bufferToEncode.toString()));
}
- String result = buffer.toString();
+ return buffer.toString();
+ }
+
+ public static String queryEncode(String value) {
+
+ return componentEncode(QUERY_RESERVED_CHARACTERS, value);
+ }
+
+ public static String urlEncode(String value) {
+
+ try {
+ value = URLEncoder.encode(value, "UTF-8");
+ } catch (UnsupportedEncodingException ex) {
+ // unlikely to happen
+ }
+
+ return value;
+ }
+
+ public static String pathEncode(String value) {
+
+ String result = componentEncode(PATH_RESERVED_CHARACTERS, value);
// URLEncoder will encode '+' to %2B but will turn ' ' into '+'
// We need to retain '+' and encode ' ' as %20
if (result.indexOf('+') != -1) {
@@ -121,6 +133,9 @@ public final class HttpUtils {
return result;
}
+ public static boolean isPartiallyEncoded(String value) {
+ return ENCODE_PATTERN.matcher(value).find();
+ }
/**
* Encodes partially encoded string. Encode all values but those matching pattern
@@ -138,12 +153,12 @@ public final class HttpUtils {
int i = 0;
while (m.find()) {
String before = encoded.substring(i, m.start());
- sb.append(query ? HttpUtils.urlEncode(before) : HttpUtils.pathEncode(before));
+ sb.append(query ? HttpUtils.queryEncode(before) : HttpUtils.pathEncode(before));
sb.append(m.group());
i = m.end();
}
String tail = encoded.substring(i, encoded.length());
- sb.append(query ? HttpUtils.urlEncode(tail) : HttpUtils.pathEncode(tail));
+ sb.append(query ? HttpUtils.queryEncode(tail) : HttpUtils.pathEncode(tail));
return sb.toString();
}
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java?rev=1004018&r1=1004017&r2=1004018&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java Sun Oct 3 18:12:52 2010
@@ -34,7 +34,7 @@ public class WebClientTest extends Asser
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%2B+", u.toString());
+ assertEquals("http://foo/bar+%20%2B;a=value+%20?b=bv++", u.toString());
}
@Test
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java?rev=1004018&r1=1004017&r2=1004018&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java Sun Oct 3 18:12:52 2010
@@ -34,7 +34,6 @@ import org.apache.cxf.jaxrs.resources.Ur
import org.apache.cxf.jaxrs.utils.JAXRSUtils;
import org.junit.Assert;
-import org.junit.Ignore;
import org.junit.Test;
public class UriBuilderImplTest extends Assert {
@@ -168,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%2Bq3%20",
+ "http://bar/a+%20/b%2B%20%20;m=m1%20;m=m2+%20?q=q1+&q=q2+q3%20",
newUri.toString());
}
@@ -177,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%2Bb%20%2B", newUri.toString());
+ "http://bar/foo+%20%2B?q=a+b%20%2B", newUri.toString());
}
@Test
@@ -216,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%2Bb%20%2B", newUri.toString());
+ assertEquals("URI is not built correctly", "http://bar?q=a+b%20%2B", newUri.toString());
}
@Test
@@ -1091,7 +1090,6 @@ public class UriBuilderImplTest extends
}
@Test
- @Ignore("QueryParamTest5")
public void testEncodingQueryParamFromBuild() throws Exception {
String expectedValue =
"http://localhost:8080?name=x%3D&name=y?&name=x+y&name=%26";
@@ -1101,7 +1099,6 @@ public class UriBuilderImplTest extends
}
@Test
- @Ignore("ReplaceQueryParamTest3")
public void testReplaceParamAndEncodeQueryParamFromBuild() throws Exception {
String expectedValue =
"http://localhost:8080?name=x&name=y&name=y+x&name=x%25y&name=%20";
@@ -1112,7 +1109,6 @@ public class UriBuilderImplTest extends
}
@Test
- // ReplaceQuery3
public void testReplaceStringAndEncodeQueryParamFromBuild() {
String expected = "http://localhost:8080?name1=x&name2=%20&name3=x+y&name4=23&name5=x%20y";