varun_ramesh created OLINGO-1567: ------------------------------------ Summary: Expected item not found exception while parsing batch response Key: OLINGO-1567 URL: https://issues.apache.org/jira/browse/OLINGO-1567 Project: Olingo Issue Type: Bug Components: odata4-client Affects Versions: (Java) V4 4.8.0 Environment: Not Applicable Reporter: varun_ramesh Attachments: sample_request.txt, sample_response.txt
While parsing batch changeset response, any of the changeset may fail (can have response code > 300). As per spec, a batch request and response must be structurally identical with an exception. # When a request within a change set fails, the change set response is not represented using the multipart/mixed media type. Instead, a single response, using the application/http media type, is returned that applies to all requests in the change set and MUST be a valid OData error response. There is an issue in an iterator of the class ODataChangesetResponseItem.java where hasNext() returns true but when next() is called "IllegalStateException : Expected item not found" exception is thrown. When the condition as mentioned in point 1 occurs, the iterators' hasNext() gives us true indicating there is a next element whereas fetching the element using next() gives an exception. This will happen when there are multiple changeset parts but the remote service gives failure response for only one changeset part. I have attached a sample request and response too. On the other hand even if we set continueOnError to false, when the service gives all the failure response, ODataChangesetResponseItem's iterator will parse only the first response. Ideally there seems to be a flaw in the iterator design. I have a unit test in this project [https://github.com/varunrr/olingo-response] reproducing the scenario where the backend service is https://services.odata.org/TripPinRESTierService. -- This message was sent by Atlassian Jira (v8.20.7#820007)