[
https://issues.apache.org/jira/browse/OLINGO-1108?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Christian Amend resolved OLINGO-1108.
-------------------------------------
Resolution: Not A Bug
Assignee: Christian Amend
Fix Version/s: V2 2.0.10
EDM.Decimal values must be Strings in a payload and not JSON Numbers according
to the specification. So your client needs to be adjusted.
See: http://www.odata.org/documentation/odata-version-2-0/json-format/
Edm.Decimal Literal form of Edm.Decimal as used in URIs formatted as a JSON
string
> 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
> Assignee: Christian Amend
> Fix For: V2 2.0.10
>
>
> 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.4.14#64029)