[OLINGO-577] Fix: Invalid encoding of space characters Signed-off-by: Christian Amend <[email protected]>
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/cfb72dec Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/cfb72dec Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/cfb72dec Branch: refs/heads/master Commit: cfb72decd1ff79d5f9b8b968ee03dd1ad22f33e4 Parents: 42dc396 Author: Christian Holzer <[email protected]> Authored: Thu Feb 19 15:39:20 2015 +0100 Committer: Christian Amend <[email protected]> Committed: Fri Feb 20 14:22:46 2015 +0100 ---------------------------------------------------------------------- .../client/core/uri/AbstractURIBuilder.java | 21 ++++++++++++++++++-- .../client/core/uri/v4/URIBuilderTest.java | 3 +-- 2 files changed, 20 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cfb72dec/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java index 07153ad..f80e394 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/AbstractURIBuilder.java @@ -29,7 +29,6 @@ import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.apache.http.NameValuePair; -import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.message.BasicNameValuePair; import org.apache.olingo.client.api.Configuration; import org.apache.olingo.client.api.uri.CommonURIBuilder; @@ -38,6 +37,7 @@ import org.apache.olingo.client.api.uri.SegmentType; import org.apache.olingo.client.api.uri.URIFilter; import org.apache.olingo.commons.api.Constants; import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion; +import org.apache.olingo.commons.core.Encoder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -311,7 +311,8 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme // it will try to call URLEncodedUtils.format(Iterable<>,Charset) method, // which works in desktop java application, however, throws NoSuchMethodError in android OS, // so here manually construct the URL by its overload URLEncodedUtils.format(List<>,String). - String queryStr = URLEncodedUtils.format(list1, "UTF-8"); + //String queryStr = URLEncodedUtils.format(list1, "UTF-8"); + final String queryStr = encodeQueryParameter(list1); sb.append(queryStr); } @@ -321,6 +322,22 @@ public abstract class AbstractURIBuilder<UB extends CommonURIBuilder<?>> impleme } } + private String encodeQueryParameter(List<NameValuePair> list) { + final StringBuilder builder = new StringBuilder(); + + for (NameValuePair pair : list) { + if (builder.length() > 0) { + builder.append("&"); + } + + builder.append(Encoder.encode(pair.getName())); + builder.append("="); + builder.append(Encoder.encode(pair.getValue())); + } + + return builder.toString(); + } + @Override public String toString() { return build().toASCIIString(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cfb72dec/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java index 6686963..731bf1d 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java @@ -156,7 +156,6 @@ public class URIBuilderTest extends AbstractTest { final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT). appendEntitySetSegment("Products").search("blue OR green"); - assertEquals(new org.apache.http.client.utils.URIBuilder( - SERVICE_ROOT + "/Products").addParameter("$search", "blue OR green").build(), uriBuilder.build()); + assertEquals(new URI("http://host/service/Products?%24search=blue%20OR%20green"), uriBuilder.build()); } }
