SlavomÃr Bavala created OLINGO-1420: ---------------------------------------
Summary: 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 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)