You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/11/05 14:31:36 UTC

olingo-odata4 git commit: [OLINGO-818] All verbs are allowed for individual requests in batch requests

Repository: olingo-odata4
Updated Branches:
  refs/heads/master 734ea9198 -> 303c4e869


[OLINGO-818] All verbs are allowed for individual requests in batch requests


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/303c4e86
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/303c4e86
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/303c4e86

Branch: refs/heads/master
Commit: 303c4e869f2bce30694504ca767b89838e95c536
Parents: 734ea91
Author: Christian Holzer <c....@sap.com>
Authored: Thu Nov 5 14:30:51 2015 +0100
Committer: Christian Holzer <c....@sap.com>
Committed: Thu Nov 5 14:30:51 2015 +0100

----------------------------------------------------------------------
 .../batch/BatchDeserializerException.java       |  2 -
 .../batch/HttpRequestStatusLine.java            | 15 +----
 .../server-core-exceptions-i18n.properties      |  1 -
 .../batch/BatchRequestParserTest.java           | 61 ++++++++++++++++++--
 4 files changed, 59 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/303c4e86/lib/server-api/src/main/java/org/apache/olingo/server/api/deserializer/batch/BatchDeserializerException.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/deserializer/batch/BatchDeserializerException.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/deserializer/batch/BatchDeserializerException.java
index cff3b25..e7a81da 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/deserializer/batch/BatchDeserializerException.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/deserializer/batch/BatchDeserializerException.java
@@ -43,8 +43,6 @@ public class BatchDeserializerException extends DeserializerException {
     /** parameter: line */
     INVALID_METHOD,
     /** parameter: line */
-    INVALID_QUERY_OPERATION_METHOD,
-    /** parameter: line */
     INVALID_STATUS_LINE,
     /** parameter: line */
     INVALID_URI,

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/303c4e86/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLine.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLine.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLine.java
index efe1ce1..f2d006a 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLine.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLine.java
@@ -33,7 +33,6 @@ import org.apache.olingo.server.api.deserializer.batch.BatchDeserializerExceptio
 public class HttpRequestStatusLine {
   private static final Pattern PATTERN_RELATIVE_URI = Pattern.compile("([^/][^?]*)(?:\\?(.*))?");
 
-  private static final Set<String> HTTP_BATCH_METHODS = new HashSet<String>(Arrays.asList(new String[] { "GET" }));
   private static final Set<String> HTTP_CHANGE_SET_METHODS = new HashSet<String>(Arrays.asList(new String[] { "POST",
       "PUT", "DELETE", "PATCH" }));
   private static final String HTTP_VERSION = "HTTP/1.1";
@@ -144,17 +143,9 @@ public class HttpRequestStatusLine {
   }
 
   public void validateHttpMethod(final boolean isChangeSet) throws BatchDeserializerException {
-    Set<String> validMethods = (isChangeSet) ? HTTP_CHANGE_SET_METHODS : HTTP_BATCH_METHODS;
-
-    if (!validMethods.contains(getMethod().toString())) {
-      if (isChangeSet) {
-        throw new BatchDeserializerException("Invalid change set method", MessageKeys.INVALID_CHANGESET_METHOD,
-            Integer.toString(statusLine.getLineNumber()));
-      } else {
-        throw new BatchDeserializerException("Invalid query operation method",
-            MessageKeys.INVALID_QUERY_OPERATION_METHOD,
-            Integer.toString(statusLine.getLineNumber()));
-      }
+    if(isChangeSet && !HTTP_CHANGE_SET_METHODS.contains(getMethod().toString())) {
+      throw new BatchDeserializerException("Invalid change set method", MessageKeys.INVALID_CHANGESET_METHOD,
+          Integer.toString(statusLine.getLineNumber()));
     }
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/303c4e86/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties b/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties
index 08e9eb8..046edfd 100644
--- a/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties
+++ b/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties
@@ -142,7 +142,6 @@ BatchDeserializerException.UNEXPECTED_CONTENT_TYPE=Content-Type at line '%1$s' s
 BatchDeserializerException.INVALID_CONTENT_ID=Invalid Content-ID HTTP header at line '%1$s'.
 BatchDeserializerException.INVALID_HTTP_VERSION=The HTTP version must be HTTP/1.1 at line '%1$s'.
 BatchDeserializerException.INVALID_METHOD=Invalid HTTP method at line '%1$s'.
-BatchDeserializerException.INVALID_QUERY_OPERATION_METHOD=The query operation at line '%1$s' can only contain retrieve requests.
 BatchDeserializerException.INVALID_STATUS_LINE=Invalid HTTP status line at line '%1$s'.
 BatchDeserializerException.INVALID_URI=Invalid URI at line '%1$s'.
 BatchDeserializerException.FORBIDDEN_HEADER=Forbidden header at line '%1$s'.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/303c4e86/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestParserTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestParserTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestParserTest.java
index 155c678..008fdbe 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestParserTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestParserTest.java
@@ -33,9 +33,9 @@ import org.apache.olingo.commons.api.http.HttpHeader;
 import org.apache.olingo.commons.api.http.HttpMethod;
 import org.apache.olingo.server.api.ODataRequest;
 import org.apache.olingo.server.api.deserializer.batch.BatchDeserializerException;
+import org.apache.olingo.server.api.deserializer.batch.BatchDeserializerException.MessageKeys;
 import org.apache.olingo.server.api.deserializer.batch.BatchOptions;
 import org.apache.olingo.server.api.deserializer.batch.BatchRequestPart;
-import org.apache.olingo.server.api.deserializer.batch.BatchDeserializerException.MessageKeys;
 import org.junit.Test;
 
 public class BatchRequestParserTest {
@@ -437,16 +437,67 @@ public class BatchRequestParserTest {
   }
 
   @Test
-  public void testInvalidMethodForBatch() throws Exception {
+  public void testMethodsForIndividualRequests() throws Exception {
     final String batch = "--batch_8194-cf13-1f56" + CRLF
         + MIME_HEADERS
         + CRLF
-        + "POST Employees('1')/EmployeeName HTTP/1.1" + CRLF
+        + "POST Employees HTTP/1.1" + CRLF
+        + "Content-Type: application/json" + CRLF
+        + CRLF
+        + "{ \"Name\": \"Foo\" }"
+        + CRLF
+        + "--batch_8194-cf13-1f56" + CRLF
+        + MIME_HEADERS
+        + CRLF
+        + "DELETE Employees('1') HTTP/1.1" + CRLF
+        + CRLF
+        + CRLF
+        + "--batch_8194-cf13-1f56" + CRLF
+        + MIME_HEADERS
+        + CRLF
+        + "PATCH Employees('1') HTTP/1.1" + CRLF
+        + "Content-Type: application/json" + CRLF
+        + CRLF
+        + "{ \"Name\": \"Foo\" }" + CRLF
+        + "--batch_8194-cf13-1f56" + CRLF
+        + MIME_HEADERS
+        + CRLF
+        + "PUT Employees('1') HTTP/1.1" + CRLF
+        + "Content-Type: application/json" + CRLF
+        + CRLF
+        + "{ \"Name\": \"Foo\" }" + CRLF
+        + "--batch_8194-cf13-1f56" + CRLF
+        + MIME_HEADERS
+        + CRLF
+        + "GET Employees('1') HTTP/1.1" + CRLF
+        + "Accept: application/json" + CRLF
         + CRLF
         + CRLF
         + "--batch_8194-cf13-1f56--";
-
-    parseInvalidBatchBody(batch, BatchDeserializerException.MessageKeys.INVALID_QUERY_OPERATION_METHOD);
+    
+    List<BatchRequestPart> requests = parse(batch);
+    assertEquals(HttpMethod.POST, requests.get(0).getRequests().get(0).getMethod());
+    assertEquals("/Employees", requests.get(0).getRequests().get(0).getRawODataPath());
+    assertEquals("{ \"Name\": \"Foo\" }", IOUtils.toString(requests.get(0).getRequests().get(0).getBody()));
+    
+    requests = parse(batch);
+    assertEquals(HttpMethod.DELETE, requests.get(1).getRequests().get(0).getMethod());
+    assertEquals("/Employees('1')", requests.get(1).getRequests().get(0).getRawODataPath());
+    
+    requests = parse(batch);
+    assertEquals(HttpMethod.PATCH, requests.get(2).getRequests().get(0).getMethod());
+    assertEquals("{ \"Name\": \"Foo\" }", IOUtils.toString(requests.get(0).getRequests().get(0).getBody()));
+    assertEquals("/Employees('1')", requests.get(2).getRequests().get(0).getRawODataPath());
+    
+    requests = parse(batch);
+    assertEquals(HttpMethod.PUT, requests.get(3).getRequests().get(0).getMethod());
+    assertEquals("{ \"Name\": \"Foo\" }", IOUtils.toString(requests.get(0).getRequests().get(0).getBody()));
+    assertEquals("/Employees('1')", requests.get(3).getRequests().get(0).getRawODataPath());
+    
+    requests = parse(batch);
+    assertEquals(HttpMethod.GET, requests.get(4).getRequests().get(0).getMethod());
+    assertEquals("/Employees('1')", requests.get(4).getRequests().get(0).getRawODataPath());
+    
   }
 
   @Test