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);
}