Patrick Haller created OLINGO-1108:
--------------------------------------

             Summary: Edm.Decimal not supported in OData Create requests (POST)
                 Key: OLINGO-1108
                 URL: https://issues.apache.org/jira/browse/OLINGO-1108
             Project: Olingo
          Issue Type: Bug
          Components: odata2-core
    Affects Versions: V2 2.0.8
            Reporter: Patrick Haller


We've got Edm.Decimal on a POST request (OData Create). 
Upon sending the request, we see the following exception in the server log.

In JsonPropertyConsumer.readSimpleProperty()'s switch case, we have
type=Edm.Decimal
tokenType=JsonToken.NUMBER
and therefore end up with throwing INVALID_PROPERTY_VALUE.

*exception*
{quote}Caused by: org.apache.olingo.odata2.api.ep.EntityProviderException: 
Provided value for the property 'Quantity' is not compatible with the property.
        at 
org.apache.olingo.odata2.core.ep.consumer.JsonPropertyConsumer.readSimpleProperty(JsonPropertyConsumer.java:227)
        at 
org.apache.olingo.odata2.core.ep.consumer.JsonPropertyConsumer.readPropertyValue(JsonPropertyConsumer.java:169)
        at 
org.apache.olingo.odata2.core.ep.consumer.JsonEntryConsumer.handleName(JsonEntryConsumer.java:172)
        at 
org.apache.olingo.odata2.core.ep.consumer.JsonEntryConsumer.readEntryContent(JsonEntryConsumer.java:130)
        at 
org.apache.olingo.odata2.core.ep.consumer.JsonEntryConsumer.readSingleEntry(JsonEntryConsumer.java:93)
        at 
org.apache.olingo.odata2.core.ep.consumer.JsonEntityConsumer.readEntry(JsonEntityConsumer.java:57)
        at 
org.apache.olingo.odata2.core.ep.JsonEntityProvider.readEntry(JsonEntityProvider.java:315)
        at 
org.apache.olingo.odata2.core.ep.ProviderFacadeImpl.readEntry(ProviderFacadeImpl.java:179)
        at 
org.apache.olingo.odata2.api.ep.EntityProvider.readEntry(EntityProvider.java:746)
        at 
org.apache.olingo.odata2.jpa.processor.core.ODataEntityParser.parseEntry(ODataEntityParser.java:64)
        ... 66 common frames omitted{quote}

*Data Model classes*

*Java Client (Spring RestTemplate)*
{quote}class MyPostRequest {
        @JsonProperty("Cost")
        BigDecimal cost;
}{quote}

*Java Server (Olingo)*
{quote}class ProjectCost implements Serializable
{
    // ...

    @Column
    private BigDecimal cost;
}{quote}

*$metadata*
{quote}<edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx"; 
Version="1.0">
<edmx:DataServices 
xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"; 
m:DataServiceVersion="1.0">
<Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm"; 
Namespace="project">
<EntityType xmlns:sap="http://www.sap.com/Protocols/SAPData"; Name="Project" 
sap:label="Project">
<Key>
<PropertyRef Name="Uuid"/>
</Key>
<Property xmlns:sap="http://www.sap.com/Protocols/SAPData"; Name="LastUpdate" 
Type="Edm.DateTime" Nullable="true" sap:label="Last Update"/>
<Property xmlns:sap="http://www.sap.com/Protocols/SAPData"; Name="Name" 
Type="Edm.String" Nullable="true" MaxLength="255" sap:label="Project"/>
<Property xmlns:sap="http://www.sap.com/Protocols/SAPData"; Name="ProjectType" 
Type="Edm.String" Nullable="true" MaxLength="255" sap:label="Type"/>
<Property xmlns:sap="http://www.sap.com/Protocols/SAPData"; Name="Responsible" 
Type="Edm.String" Nullable="true" MaxLength="255" sap:label="Person 
Responsible"/>
<Property xmlns:sap="http://www.sap.com/Protocols/SAPData"; Name="Stage" 
Type="Edm.String" Nullable="true" MaxLength="255" sap:label="Stage"/>
<Property xmlns:sap="http://www.sap.com/Protocols/SAPData"; Name="Status" 
Type="Edm.String" Nullable="true" MaxLength="255" sap:label="Status"/>
<Property Name="Uuid" Type="Edm.String" Nullable="false"/>
<NavigationProperty Name="ProjectCostDetails" 
Relationship="project.Project_ProjectCost_One_Many0" FromRole="Project" 
ToRole="ProjectCost"/>
</EntityType>
<EntityType Name="ProjectCost">
<Key>
<PropertyRef Name="Uuid"/>
</Key>
<Property Name="ChangedBy" Type="Edm.String" Nullable="true" MaxLength="255"/>
<Property Name="ChangedTime" Type="Edm.DateTime" Nullable="true"/>
<Property Name="Cost" Type="Edm.Decimal" Nullable="true"/>
<Property Name="CreatedBy" Type="Edm.String" Nullable="true" MaxLength="255"/>
<Property Name="CreationTime" Type="Edm.DateTime" Nullable="true"/>
<Property Name="Currency" Type="Edm.String" Nullable="true" MaxLength="255"/>
<Property Name="Margin" Type="Edm.Decimal" Nullable="true"/>
<Property Name="ParentStructureElement" Type="Edm.String" Nullable="true" 
MaxLength="255"/>
<Property Name="Project" Type="Edm.String" Nullable="true"/>
<Property Name="Quantity" Type="Edm.Decimal" Nullable="true"/>
<Property Name="Revenue" Type="Edm.Decimal" Nullable="true"/>
<Property Name="StructureElement" Type="Edm.String" Nullable="true" 
MaxLength="255"/>
<Property Name="StructureElementDescription" Type="Edm.String" Nullable="true" 
MaxLength="255"/>
<Property Name="UnitOfMeasure" Type="Edm.String" Nullable="true" 
MaxLength="255"/>
<Property Name="Uuid" Type="Edm.String" Nullable="false"/>
<NavigationProperty Name="ProjectDetails" 
Relationship="project.Project_ProjectCost_One_Many0" FromRole="ProjectCost" 
ToRole="Project"/>
</EntityType>
<Association Name="Project_ProjectCost_One_Many0">
<End Type="project.Project" Multiplicity="0..1" Role="Project"/>
<End Type="project.ProjectCost" Multiplicity="*" Role="ProjectCost"/>
<ReferentialConstraint>
<Principal Role="Project">
<PropertyRef Name="Uuid"/>
</Principal>
<Dependent Role="ProjectCost">
<PropertyRef Name="Project"/>
</Dependent>
</ReferentialConstraint>
</Association>
<EntityContainer Name="projectContainer" m:IsDefaultEntityContainer="true">
<EntitySet Name="Projects" EntityType="project.Project"/>
<EntitySet Name="ProjectCosts" EntityType="project.ProjectCost"/>
<AssociationSet Name="Project_ProjectCost_One_Many0Set" 
Association="project.Project_ProjectCost_One_Many0">
<End EntitySet="Projects" Role="Project"/>
<End EntitySet="ProjectCosts" Role="ProjectCost"/>
</AssociationSet>
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>{quote}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to