You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@olingo.apache.org by "Christian Amend (JIRA)" <ji...@apache.org> on 2016/12/27 12:41:58 UTC

[jira] [Resolved] (OLINGO-1064) ComplexType is deserialized as Primitive Type if the value is NULL

     [ https://issues.apache.org/jira/browse/OLINGO-1064?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Christian Amend resolved OLINGO-1064.
-------------------------------------
    Resolution: Information Provided
      Assignee: Christian Amend

Hi Punith,

the ClientDeserializer works without metadata information as the default. This means that it can`t decide if a property is a complex property or primitive property if the value is null. The same issue appears with expanded navigation properties. Currently the parser doesn`t know if it is a navigation propery or a complex property when a value is provided because they look exaclty the same in the payload. Without further information it is impossible to decide based on the payload alone.

In order to work around this you can use the EDM aware client or request "full metadata" from the server.

> ComplexType is deserialized as Primitive Type if the value is NULL
> ------------------------------------------------------------------
>
>                 Key: OLINGO-1064
>                 URL: https://issues.apache.org/jira/browse/OLINGO-1064
>             Project: Olingo
>          Issue Type: Bug
>          Components: odata2-core, odata4-client, odata4-commons
>    Affects Versions: (Java) V4 4.2.0
>            Reporter: Punith DG
>            Assignee: Christian Amend
>         Attachments: complexType.png
>
>
> The ODataClient deserializer wrongly converts the Complex Type field to Primitive Type field if the value received for the complex type is NULL.
> e.g. on querying Person data from OData TripPin service (https://services.odata.org/TripPinRESTierService) I received below JSON response.
> {
> 	"@odata.context": "http://services.odata.org/TripPinRESTierService/(S(myhztseklikbg41mbg03ugk5))/$metadata#People(AddressInfo,FavoriteFeature,FirstName,HomeAddress,LastName,UserName)",
> 	"value": [{
> 		"FavoriteFeature": "Feature1",
> 		"FirstName": "Angel",
> 		"Gender": "Female",
> 		"LastName": "Huffman",
> 		"UserName": "angelhuffman",
> 		"AddressInfo": [{
> 			"Address": "55 Grizzly Peak Rd.",
> 			"City": {
> 				"Name": "Butte",
> 				"CountryRegion": "United States",
> 				"Region": "MT"
> 			}
> 		}],
> 		"HomeAddress": null
> 	}]
> }
> See that 'HomeAddress' is ComplexType of type 'Location' and received 'null' value.
> Similarly, ComplexType property 'City' is deserialized as Primitive Type in the below response.
> "HomeAddress": {
> 			"Address": null,
> 			"City": null
> 		}
> When you deserialize and get an entity, the HomeAddress property of the Person entity is set to Primitive Type with null value. This could be complex type?
> Metadata URL - http://tinyurl.com/gm8vomc



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