Senthamizh Chelvi Kaliyaperumal created OLINGO-815:
------------------------------------------------------

             Summary: Getting Illegal argument error while trying JSON Deep 
Insert based on custom JDBC implemenation
                 Key: OLINGO-815
                 URL: https://issues.apache.org/jira/browse/OLINGO-815
             Project: Olingo
          Issue Type: Bug
          Components: odata2-core
    Affects Versions: V2 2.0.5
            Reporter: Senthamizh Chelvi Kaliyaperumal
             Fix For: V2 2.0.6


We are facing problem while trying to implement JSON deep insert, using custom 
back end logic for POST operation.
The EdmProvider is defined properly with all the necessary entities along with 
associations, navigations etc. When we are trying to read ODataEntry from 
EntityProvider, we are getting an error message saying "Illegal argument for 
method call with message 'Address'." 
ODataEntry entry = EntityProvider.readEntry(requestContentType, 
uriInfo.getStartEntitySet(), content, properties); This line fails and throws 
the error.

1) Metadata:
    <?xml version='1.0' encoding='UTF-8'?>
    <edmx:Edmx Version="1.0" 
xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx";>
      <edmx:DataServices m:DataServiceVersion="1.0" 
xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";>
        <Schema Namespace="org.apache.olingo.odata2.ODataCars" 
xmlns="http://schemas.microsoft.com/ado/2008/09/edm";>
          <EntityType Name="Car">
            <Key>
              <PropertyRef Name="Id"/>
            </Key>
            <Property Name="Id" Type="Edm.Int32" Nullable="false"/>
            <Property Name="Model" Type="Edm.String" Nullable="false" 
DefaultValue="Hugo" MaxLength="100" m:FC_TargetPath="SyndicationTitle"/>
            <Property Name="ManufacturerId" Type="Edm.Int32"/>
            <Property Name="Price" Type="Edm.Decimal"/>
            <Property Name="Currency" Type="Edm.String" MaxLength="3"/>
            <Property Name="ModelYear" Type="Edm.String" MaxLength="4"/>
            <Property Name="Updated" Type="Edm.DateTime" Nullable="false" 
ConcurrencyMode="Fixed" m:FC_TargetPath="SyndicationUpdated"/>
            <Property Name="ImagePath" Type="Edm.String"/>
            <NavigationProperty Name="Manufacturer" 
Relationship="org.apache.olingo.odata2.ODataCars.Car_Manufacturer_Manufacturer_Cars"
 FromRole="Car_Manufacturer" ToRole="Manufacturer_Cars"/>
          </EntityType>
          <EntityType Name="Manufacturer">
            <Key>
              <PropertyRef Name="Id"/>
            </Key>
            <Property Name="Id" Type="Edm.Int32" Nullable="false"/>
            <Property Name="Name" Type="Edm.String" Nullable="false" 
MaxLength="100" m:FC_TargetPath="SyndicationTitle"/>
            <Property Name="Updated" Type="Edm.DateTime" Nullable="false" 
ConcurrencyMode="Fixed" m:FC_TargetPath="SyndicationUpdated"/>
            <NavigationProperty Name="Cars" 
Relationship="org.apache.olingo.odata2.ODataCars.Car_Manufacturer_Manufacturer_Cars"
 FromRole="Manufacturer_Cars" ToRole="Car_Manufacturer"/>
          </EntityType>
          <ComplexType Name="Address">
            <Property Name="Street" Type="Edm.String"/>
            <Property Name="City" Type="Edm.String"/>
            <Property Name="ZipCode" Type="Edm.String"/>
            <Property Name="Country" Type="Edm.String"/>
          </ComplexType>
          <Association Name="Car_Manufacturer_Manufacturer_Cars">
            <End Type="org.apache.olingo.odata2.ODataCars.Car" Multiplicity="*" 
Role="Car_Manufacturer"/>
            <End Type="org.apache.olingo.odata2.ODataCars.Manufacturer" 
Multiplicity="1" Role="Manufacturer_Cars"/>
          </Association>
          <EntityContainer Name="ODataCarsEntityContainer" 
m:IsDefaultEntityContainer="true">
            <EntitySet Name="Cars" 
EntityType="org.apache.olingo.odata2.ODataCars.Car"/>
            <EntitySet Name="Manufacturers" 
EntityType="org.apache.olingo.odata2.ODataCars.Manufacturer"/>
            <AssociationSet Name="Cars_Manufacturers" 
Association="org.apache.olingo.odata2.ODataCars.Car_Manufacturer_Manufacturer_Cars">
              <End EntitySet="Manufacturers" Role="Manufacturer_Cars"/>
              <End EntitySet="Cars" Role="Car_Manufacturer"/>
            </AssociationSet>
          </EntityContainer>
        </Schema>
      </edmx:DataServices>
    </edmx:Edmx>

2) Sample Request Payload used in POST:
{
    "Id": 1,
    "Name": "Star Powered Racing",
    "Address": {
        "Street": "Star Street 137",
        "City": "Stuttgart",
        "ZipCode": "70173",
        "Country": "Germany"
    },
    "Cars" : [
        {
            "Id": 1,
            "Model": "F1 W03",
            "ManufacturerId": 1,
            "Price": "189189.43",
            "Currency": "EUR",
            "ModelYear": "2012",
            "Updated": "/Date(1355224271271)/",
            "ImagePath": "file://imagePath/w03"
        }
    ]
}

3) Error Message:
url: http://localhost:8080/my-car-service/CarService.svc/Manufacturers, POST
{
  "error": {
    "code": "Error Code: 400",
    "message": {
      "lang": "en",
      "value": "Illegal argument for method call with message 'Address'."
    }
  }
}

Could you please help?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to