[OLINGO-1483]Handle Decimal types in JsonPropertyConsumer
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 @@
               .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 @@
     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.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 @@
 
     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 @@
     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);