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 2020/10/08 09:00:42 UTC
[olingo-odata2] branch master updated: [OLINGO-1483]Handle Decimal
types in JsonPropertyConsumer
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-odata2.git
The following commit(s) were added to refs/heads/master by this push:
new 24ec404 [OLINGO-1483]Handle Decimal types in JsonPropertyConsumer
24ec404 is described below
commit 24ec4046285fb28965f06dacd1d966bfa21533c3
Author: ramya vasanth <ra...@sap.com>
AuthorDate: Thu Oct 8 14:30:27 2020 +0530
[OLINGO-1483]Handle Decimal types in JsonPropertyConsumer
---
.../odata2/core/ep/consumer/JsonPropertyConsumer.java | 8 ++++++++
.../odata2/core/ep/consumer/JsonPropertyConsumerTest.java | 15 +++++++++++++++
.../odata2/core/ep/consumer/XmlPropertyConsumerTest.java | 13 +++++++++++++
.../org/apache/olingo/odata2/testutil/mock/EdmMock.java | 4 +++-
4 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumer.java
index 7589aa5..e8a7cf2 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumer.java
@@ -219,6 +219,14 @@ public class JsonPropertyConsumer {
.addContent(entityPropertyInfo.getName()));
}
break;
+ case Decimal:
+ if (tokenType == JsonToken.NUMBER || tokenType == JsonToken.STRING) {
+ value = reader.nextString();
+ } else {
+ throw new EntityProviderException(EntityProviderException.INVALID_PROPERTY_VALUE
+ .addContent(entityPropertyInfo.getName()));
+ }
+ break;
default:
if (tokenType == JsonToken.STRING) {
value = reader.nextString();
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumerTest.java
index 36b1cca..6d73fca 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumerTest.java
@@ -97,6 +97,21 @@ public class JsonPropertyConsumerTest extends BaseTest {
when(edmProperty.getType()).thenReturn(EdmSimpleTypeKind.Int32.getEdmSimpleTypeInstance());
resultMap = execute(edmProperty, reader);
assertEquals(Integer.valueOf("67"), resultMap.get("Age"));
+ // Decimal
+ reader = prepareReader(simplePropertyJson);
+ when(edmProperty.getType()).thenReturn(EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance());
+ resultMap = execute(edmProperty, reader);
+ assertEquals(BigDecimal.valueOf(67), resultMap.get("Age"));
+ //Decimal
+ simplePropertyJson = "{\"d\":{\"Revenue\":67.56}}";
+ edmProperty = mock(EdmProperty.class);
+ when(edmProperty.getName()).thenReturn("Revenue");
+ when(edmProperty.isSimple()).thenReturn(true);
+
+ reader = prepareReader(simplePropertyJson);
+ when(edmProperty.getType()).thenReturn(EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance());
+ resultMap = execute(edmProperty, reader);
+ assertEquals(BigDecimal.valueOf(67.56), resultMap.get("Revenue"));
}
@Test
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlPropertyConsumerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlPropertyConsumerTest.java
index 1b3bc8c..367eefd 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlPropertyConsumerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlPropertyConsumerTest.java
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
@@ -67,6 +68,18 @@ public class XmlPropertyConsumerTest extends AbstractXmlConsumerTest {
assertEquals(Integer.valueOf(67), resultMap.get("Age"));
}
+
+ @Test
+ public void readDecimalProperty() throws Exception {
+ String xml = "<Revenue xmlns=\"" + Edm.NAMESPACE_D_2007_08 + "\">67.56</Revenue>";
+ XMLStreamReader reader = createReaderForTest(xml, true);
+ final EdmProperty property =
+ (EdmProperty) MockFacade.getMockEdm().getEntityType("RefScenario", "Organization").getProperty("Revenue");
+
+ Map<String, Object> resultMap = new XmlPropertyConsumer().readProperty(reader, property, null);
+
+ assertEquals(BigDecimal.valueOf(67.56), resultMap.get("Revenue"));
+ }
@Test
public void readIntegerPropertyAsLong() throws Exception {
diff --git a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java
index d069b29..5a9a2ee 100644
--- a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java
+++ b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java
@@ -180,11 +180,13 @@ class EdmMock {
createProperty("NGO", EdmSimpleTypeKind.Boolean, companyType);
EdmEntityType organizationType = organizationsEntitySet.getEntityType();
- when(organizationType.getPropertyNames()).thenReturn(Arrays.asList("Id", "Name", "Kind", "Location", "NoOfTeam"));
+ when(organizationType.getPropertyNames()).thenReturn(Arrays.asList("Id", "Name", "Kind", "Location", "NoOfTeam"
+ , "Revenue"));
when(organizationType.getProperty("Location")).thenReturn(locationComplexProperty);
EdmProperty orgName = createProperty("Name", EdmSimpleTypeKind.String, organizationType);
EdmProperty orgKind = createProperty("Kind", EdmSimpleTypeKind.String, organizationType);
createProperty("NoOfTeam", EdmSimpleTypeKind.Int16, organizationType);
+ createProperty("Revenue", EdmSimpleTypeKind.Decimal, organizationType);
EdmFacets orgNameFacets = mock(EdmFacets.class);
when(orgNameFacets.isNullable()).thenReturn(null);