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

Slavomír Bavala closed OLINGO-1420.
-----------------------------------

> Unable to perform deep insert using Olingo V2 when navigation properties 
> relationship is 1:N
> --------------------------------------------------------------------------------------------
>
>                 Key: OLINGO-1420
>                 URL: https://issues.apache.org/jira/browse/OLINGO-1420
>             Project: Olingo
>          Issue Type: Bug
>          Components: odata2-core
>    Affects Versions: V2 2.0.11
>            Reporter: Slavomír Bavala
>            Priority: Major
>
> Use case: perform deep insert using Olingo V2
> As described in https://issues.apache.org/jira/browse/OLINGO-1401 Olingo will 
> not serialize navigation properties and their contents into the request if 
> _contentOnly_ flag is set to *true*.
> We set it to *false* but that adds metadata to the request payload as a 
> result. In case of an update, where key properties are not present in the 
> payload but in the URL, the metadata generation will fail (we wrote a hack to 
> overcome this).
> The biggest problem we found is the serialization of 
> +_childNavigationProperty_+ properties described by 1:N relationship, see the 
> following example:
> {code:java}
> {
>   "rootLevelProperty": "",
>   "rootLevelNavigationProperty": [
>     {
>       "child": "1",
>       "childNavigationProperty": [
>          {
>            "grandChild": "X"
>          }
>        ]
>     },
>     {
>       "child": "2",
>       "childNavigationProperty": [ 
>         { 
>           "grandChild": "Y" 
>         }
>       ]
>     }
>   }
> }{code}
> To serialize the navigation properties we need to specify the 
> _customExpanedLinks_ for every nested level. We also need to specify 
> _callbacks_ for every navigation property (this means also defining nested 
> callbacks for nested navigation properties).
> When navigation property is described by 1:N relationship, we need to 
> register a _OnWriteFeedContent_ callback. This callback however doesn't allow 
> us to specify nested callbacks for every item in the list, we can only 
> register a single callback for the +*entire feed*+. This means we are not 
> able to serialize _grandChild_ property correctly and we have to choose 
> either "X" or "Y" as a value for both items.
> Our code looks like this:
> {code:java}
> writeEntry(APPLICATION_JSON, rootEntitySet, dataMap,
>         serviceRoot(new URI(entitySetName))
>                 .omitJsonWrapper(true)
>                 .contentOnly(update) //true for updates
>                 .expandSelectTree(expandSelectTreeNodeBuilder.build()) //tree 
> of customExpanedLinks so navigation properties are serialized
>                 .callbacks(createCallbacks(navigationPropertyMap, 
> rootEntityType)) // tree of callbacks to provide data for all 
> customExpanedLinks defined above
>                 .build()
> {code}
> How can we perform such deep insert using Olingo?
>  Are we using the library as intended?
>  Does Olingo V2 even supports deep inserts?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to