You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ra...@apache.org on 2021/05/11 04:40:56 UTC

[olingo-odata4] branch master updated: [OLINGO-1525]PUT, POST support on collection properties

This is an automated email from the ASF dual-hosted git repository.

ramyav pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata4.git


The following commit(s) were added to refs/heads/master by this push:
     new 3de463a  [OLINGO-1525]PUT, POST support on collection properties
3de463a is described below

commit 3de463a5b1c6edfe59580930189b5a9d2c326809
Author: ramya vasanth <ra...@sap.com>
AuthorDate: Tue May 11 10:10:37 2021 +0530

    [OLINGO-1525]PUT, POST support on collection properties
---
 .../org/apache/olingo/server/core/ODataDispatcher.java   |  6 ++++--
 .../core/deserializer/json/ODataJsonDeserializer.java    | 11 +++++++----
 .../apache/olingo/server/core/ODataHandlerImplTest.java  | 16 ++++++++++++----
 3 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataDispatcher.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataDispatcher.java
index e922277..dc2f45e 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataDispatcher.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataDispatcher.java
@@ -413,7 +413,8 @@ public class ODataDispatcher {
         handler.selectProcessor(ComplexProcessor.class)
             .readComplex(request, response, uriInfo, requestedContentType);
       }
-    } else if (method == HttpMethod.PUT || method == HttpMethod.PATCH) {
+    } else if (method == HttpMethod.PUT || method == HttpMethod.PATCH ||
+          ((method == HttpMethod.POST) && isCollection)) {
       validatePreconditions(request, false);
       final ContentType requestFormat = getSupportedContentType(request.getHeader(HttpHeader.CONTENT_TYPE),
           complexRepresentationType, true);
@@ -457,7 +458,8 @@ public class ODataDispatcher {
         handler.selectProcessor(PrimitiveProcessor.class)
             .readPrimitive(request, response, uriInfo, requestedContentType);
       }
-    } else if (method == HttpMethod.PUT || method == HttpMethod.PATCH) {
+    } else if (method == HttpMethod.PUT || method == HttpMethod.PATCH ||
+          ((method == HttpMethod.POST) && isCollection)) {
       validatePreconditions(request, false);
       ContentType requestFormat = null;
       List<UriResource> uriResources = uriInfo.getUriResourceParts();
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java
index 4e09c7a..943b5eb 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java
@@ -26,6 +26,7 @@ import java.math.BigDecimal;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -739,12 +740,14 @@ public class ODataJsonDeserializer implements ODataDeserializer {
       final boolean isNullable, final Integer maxLength, final Integer precision, final Integer scale,
       final boolean isUnicode, final EdmMapping mapping, final JsonNode jsonNode, final Property property)
       throws DeserializerException {
+
+    Iterator<JsonNode> iterator;
+    List<Object> valueArray = new ArrayList<>();
     if (!jsonNode.isArray()) {
-      throw new DeserializerException("Value for property: " + name + " must be an array but is not.",
-          DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY, name);
+      iterator = Arrays.asList(jsonNode).iterator();
+    } else {
+      iterator = jsonNode.iterator();
     }
-    List<Object> valueArray = new ArrayList<>();
-    Iterator<JsonNode> iterator = jsonNode.iterator();
     switch (type.getKind()) {
     case PRIMITIVE:
     case DEFINITION:
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerImplTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerImplTest.java
index 7c0894a..e0fcc71 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerImplTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/ODataHandlerImplTest.java
@@ -89,6 +89,7 @@ import org.apache.olingo.server.tecsvc.processor.TechnicalActionProcessor;
 import org.apache.olingo.server.tecsvc.provider.ContainerProvider;
 import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
 import org.junit.Test;
+import org.mockito.internal.verification.VerificationModeFactory;
 
 public class ODataHandlerImplTest {
 
@@ -902,14 +903,18 @@ public class ODataHandlerImplTest {
         any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class), any(ContentType.class));
 
     dispatch(HttpMethod.PUT, uri, processor);
-    verify(processor).updatePrimitiveCollection(
+    verify(processor, VerificationModeFactory.times(1)).updatePrimitiveCollection(
+        any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class), any(ContentType.class),
+        any(ContentType.class));
+
+    dispatch(HttpMethod.POST, uri, processor);
+    verify(processor, VerificationModeFactory.times(2)).updatePrimitiveCollection(
         any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class), any(ContentType.class),
         any(ContentType.class));
 
     dispatch(HttpMethod.DELETE, uri, processor);
     verify(processor).deletePrimitiveCollection(any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class));
 
-    dispatchMethodNotAllowed(HttpMethod.POST, uri, processor);
     dispatchMethodNotAllowed(HttpMethod.HEAD, uri, processor);
   }
 
@@ -964,14 +969,17 @@ public class ODataHandlerImplTest {
         any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class), any(ContentType.class));
 
     dispatch(HttpMethod.PUT, uri, processor);
-    verify(processor).updateComplexCollection(
+    verify(processor, VerificationModeFactory.times(1)).updateComplexCollection(
         any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class), any(ContentType.class),
         any(ContentType.class));
 
+    dispatch(HttpMethod.POST, uri, processor);
+    verify(processor, VerificationModeFactory.times(2)).updateComplexCollection(any(ODataRequest.class),
+        any(ODataResponse.class), any(UriInfo.class), any(ContentType.class), any(ContentType.class));
+
     dispatch(HttpMethod.DELETE, uri, processor);
     verify(processor).deleteComplexCollection(any(ODataRequest.class), any(ODataResponse.class), any(UriInfo.class));
 
-    dispatchMethodNotAllowed(HttpMethod.POST, uri, processor);
     dispatchMethodNotAllowed(HttpMethod.HEAD, uri, processor);
   }