Repository: olingo-odata2 Updated Branches: refs/heads/master 2d876376a -> 5d88b96e8
[OLINGO-752]Add support for + sign as a separator in addition to %20 for URLs Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/5d88b96e Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/5d88b96e Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/5d88b96e Branch: refs/heads/master Commit: 5d88b96e805303bf2c04aa4f93291e074b736910 Parents: 2d87637 Author: Archana Rai <archana....@sap.com> Authored: Tue Nov 21 11:47:15 2017 +0530 Committer: Archana Rai <archana....@sap.com> Committed: Tue Nov 21 11:47:15 2017 +0530 ---------------------------------------------------------------------- .../org/apache/olingo/odata2/api/ODataServiceFactory.java | 5 +++++ .../apache/olingo/odata2/core/servlet/ODataServlet.java | 3 ++- .../org/apache/olingo/odata2/core/servlet/RestUtil.java | 10 +++++++--- .../org/apache/olingo/odata2/core/uri/UriParserImpl.java | 3 ++- .../apache/olingo/odata2/core/servlet/RestUtilTest.java | 8 ++++---- .../org/apache/olingo/odata2/core/uri/UriParserTest.java | 6 +++--- 6 files changed, 23 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5d88b96e/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ODataServiceFactory.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ODataServiceFactory.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ODataServiceFactory.java index 57736c7..0fc8443 100644 --- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ODataServiceFactory.java +++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ODataServiceFactory.java @@ -50,6 +50,11 @@ public abstract class ODataServiceFactory { * Label used in web.xml to assign servlet init parameter for a path split (service resolution). */ public static final String PATH_SPLIT_LABEL = "org.apache.olingo.odata2.path.split"; + + /** + * Label used in web.xml to assign servlet init parameter for a accept form encoding. + */ + public static final String ACCEPT_FORM_ENCODING ="org.apache.olingo.odata.accept.forms.encoding"; /** * Create instance of custom {@link ODataService}. http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5d88b96e/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/ODataServlet.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/ODataServlet.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/ODataServlet.java index 571c313..3fdb99c 100644 --- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/ODataServlet.java +++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/ODataServlet.java @@ -177,6 +177,7 @@ public class ODataServlet extends HttpServlet { throws IOException { try { final String pathSplitAsString = getInitParameter(ODataServiceFactory.PATH_SPLIT_LABEL); + final String formEncoding = getInitParameter(ODataServiceFactory.ACCEPT_FORM_ENCODING); int pathSplit = 0; if (pathSplitAsString != null) { pathSplit = Integer.parseInt(pathSplitAsString); @@ -193,7 +194,7 @@ public class ODataServlet extends HttpServlet { .acceptHeaders(RestUtil.extractAcceptHeaders(req.getHeader(HttpHeaders.ACCEPT))) .acceptableLanguages(RestUtil.extractAcceptableLanguage(req.getHeader(HttpHeaders.ACCEPT_LANGUAGE))) .pathInfo(RestUtil.buildODataPathInfo(req, pathSplit)) - .allQueryParameters(RestUtil.extractAllQueryParameters(req.getQueryString())) + .allQueryParameters(RestUtil.extractAllQueryParameters(req.getQueryString(), formEncoding)) .requestHeaders(RestUtil.extractHeaders(req)) .body(req.getInputStream()) .build(); http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5d88b96e/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/RestUtil.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/RestUtil.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/RestUtil.java index 9f5721f..ad76658 100644 --- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/RestUtil.java +++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/servlet/RestUtil.java @@ -69,6 +69,7 @@ public class RestUtil { Pattern.compile(REG_EX_ACCEPT_LANGUAGES + "(?:;" + REG_EX_OPTIONAL_WHITESPACE + REG_EX_QVALUE + ")?"); private static final Pattern REG_EX_MATRIX_PARAMETER = Pattern.compile("([^=]*)(?:=(.*))?"); + private static final String ACCEPT_FORM_ENCODING = "odata-accept-forms-encoding"; public static ContentType extractRequestContentType(final String contentType) throws ODataUnsupportedMediaTypeException { @@ -109,9 +110,13 @@ public class RestUtil { return queryParametersMap; } - public static Map<String, List<String>> extractAllQueryParameters(final String queryString) { + public static Map<String, List<String>> extractAllQueryParameters(final String queryString, String formEncoding) { Map<String, List<String>> allQueryParameterMap = new HashMap<String, List<String>>(); - + if(Boolean.parseBoolean(formEncoding)){ + List<String> encoding = new ArrayList<String>(); + encoding.add(formEncoding); + allQueryParameterMap.put(ACCEPT_FORM_ENCODING, encoding ); + } if (queryString != null && queryString.length() > 0) { // At first the queryString will be decoded. List<String> queryParameters = Arrays.asList(queryString.split("\\&")); @@ -136,7 +141,6 @@ public class RestUtil { } } } - return allQueryParameterMap; } http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5d88b96e/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java index 9225b48..b7e9c18 100644 --- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java +++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java @@ -588,7 +588,8 @@ public class UriParserImpl extends UriParser { private void distributeQueryParameters(final Map<String, List<String>> queryParameters) throws UriSyntaxException { boolean formEncoding = false; if(queryParameters.containsKey(ACCEPT_FORM_ENCODING)){ - formEncoding=Boolean.parseBoolean(queryParameters.get(ACCEPT_FORM_ENCODING).get(0));; + formEncoding=Boolean.parseBoolean(queryParameters.get(ACCEPT_FORM_ENCODING).get(0)); + queryParameters.remove(ACCEPT_FORM_ENCODING); } for (final String queryOptionString : queryParameters.keySet()) { final String decodedString = percentDecode(queryOptionString); http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5d88b96e/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/RestUtilTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/RestUtilTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/RestUtilTest.java index dae2d3a..1086c46 100644 --- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/RestUtilTest.java +++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/servlet/RestUtilTest.java @@ -41,17 +41,17 @@ public class RestUtilTest { @Test public void testExtractAllQueryParameters() throws Exception { - Map<String, List<String>> result = RestUtil.extractAllQueryParameters("some=value"); + Map<String, List<String>> result = RestUtil.extractAllQueryParameters("some=value", "false"); Assert.assertEquals("value", result.get("some").get(0)); - result = RestUtil.extractAllQueryParameters("some=value&another=v"); + result = RestUtil.extractAllQueryParameters("some=value&another=v", "false"); Assert.assertEquals("value", result.get("some").get(0)); Assert.assertEquals("v", result.get("another").get(0)); - result = RestUtil.extractAllQueryParameters(""); + result = RestUtil.extractAllQueryParameters("", "false"); Assert.assertTrue(result.isEmpty()); - result = RestUtil.extractAllQueryParameters("some=v1&another=v&some=v2"); + result = RestUtil.extractAllQueryParameters("some=v1&another=v&some=v2", "false"); Assert.assertEquals("v1", result.get("some").get(0)); Assert.assertEquals("v2", result.get("some").get(1)); Assert.assertEquals("v", result.get("another").get(0)); http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/5d88b96e/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java index b41eab6..a4b095c 100644 --- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java +++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java @@ -1041,7 +1041,7 @@ public class UriParserTest extends BaseTest { assertEquals("Employees", result.getTargetEntitySet().getName()); assertEquals(UriType.URI1, result.getUriType()); assertEquals("EmployeeId eq '1'", result.getFilter().getUriLiteral()); - assertEquals("true", result.getCustomQueryOptions().get(ACCEPT_FORM_ENCODING)); + assertNull(result.getCustomQueryOptions().get(ACCEPT_FORM_ENCODING)); } @Test @@ -1058,7 +1058,7 @@ public class UriParserTest extends BaseTest { assertEquals("Employees", result.getTargetEntitySet().getName()); assertEquals(UriType.URI1, result.getUriType()); assertEquals("EmployeeId eq '1'", result.getFilter().getUriLiteral()); - assertEquals("true", result.getCustomQueryOptions().get(ACCEPT_FORM_ENCODING)); + assertNull(result.getCustomQueryOptions().get(ACCEPT_FORM_ENCODING)); } @Test @@ -1067,7 +1067,7 @@ public class UriParserTest extends BaseTest { assertEquals("Employees", result.getTargetEntitySet().getName()); assertEquals(UriType.URI1, result.getUriType()); assertEquals("EmployeeId eq '1'", result.getFilter().getUriLiteral()); - assertEquals("true", result.getCustomQueryOptions().get(ACCEPT_FORM_ENCODING)); + assertNull(result.getCustomQueryOptions().get(ACCEPT_FORM_ENCODING)); } @Test