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

Reply via email to