You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ar...@apache.org on 2019/03/26 11:36:11 UTC
[olingo-odata4] branch master updated: [OLINGO-1333]ODataResponse
for delta client throws NPE on Asynchronous calls
This is an automated email from the ASF dual-hosted git repository.
archanarai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata4.git
The following commit(s) were added to refs/heads/master by this push:
new 256b14f [OLINGO-1333]ODataResponse for delta client throws NPE on Asynchronous calls
256b14f is described below
commit 256b14f02ba4763e0cf741710b705b987b4e98d5
Author: Archana Rai <ar...@sap.com>
AuthorDate: Tue Mar 26 17:05:59 2019 +0530
[OLINGO-1333]ODataResponse for delta client throws NPE on Asynchronous calls
---
.../olingo/fit/base/ConformanceTestITCase.java | 45 +++++++++++++++++++++-
.../request/retrieve/ODataDeltaRequestImpl.java | 13 ++++++-
2 files changed, 56 insertions(+), 2 deletions(-)
diff --git a/fit/src/test/java/org/apache/olingo/fit/base/ConformanceTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/base/ConformanceTestITCase.java
index 7e08428..23215a3 100644
--- a/fit/src/test/java/org/apache/olingo/fit/base/ConformanceTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/base/ConformanceTestITCase.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertTrue;
import java.net.URI;
+import org.apache.olingo.client.api.communication.request.AsyncRequestFactory;
import org.apache.olingo.client.api.communication.request.AsyncRequestWrapper;
import org.apache.olingo.client.api.communication.request.cud.ODataEntityCreateRequest;
import org.apache.olingo.client.api.communication.request.retrieve.ODataDeltaRequest;
@@ -41,8 +42,8 @@ import org.apache.olingo.client.api.domain.ClientProperty;
import org.apache.olingo.client.api.uri.URIBuilder;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
-import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.format.ContentType;
+import org.apache.olingo.commons.api.http.HttpHeader;
import org.junit.Test;
/**
@@ -163,6 +164,48 @@ public class ConformanceTestITCase extends AbstractTestITCase {
assertTrue(property.hasComplexValue());
}
+
+ /**
+ * 10. MAY support deleted entities, link entities, deleted link entities in a delta response for asynch req.
+ */
+ @Test
+ public void itemAsynch10() {
+
+ final ODataEntitySetRequest<ClientEntitySet> req = client.getRetrieveRequestFactory().getEntitySetRequest(
+ client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").build());
+ req.setPrefer(client.newPreferences().trackChanges());
+
+ final ClientEntitySet customers = req.execute().getBody();
+ assertNotNull(customers);
+ assertNotNull(customers.getDeltaLink());
+
+ final ODataDeltaRequest deltaReq = client.getRetrieveRequestFactory().getDeltaRequest(customers.getDeltaLink());
+
+ AsyncRequestFactory asyncRequestFactory = client.getAsyncRequestFactory();
+ AsyncRequestWrapper<ODataRetrieveResponse<ClientDelta>> asyncRequestWrapper =
+ asyncRequestFactory
+ .<ODataRetrieveResponse<ClientDelta>>getAsyncRequestWrapper(deltaReq);
+
+ AsyncResponseWrapper<ODataRetrieveResponse<ClientDelta>> responseWrapper =
+ asyncRequestWrapper
+ .execute();
+ if (responseWrapper.isPreferenceApplied()) {
+ int waitInSec = 5;
+ while (!responseWrapper.isDone()) {
+ try {
+ Thread.sleep(waitInSec);
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+ boolean done = responseWrapper.isDone();
+ ODataRetrieveResponse<ClientDelta> res = responseWrapper.getODataResponse();
+ ClientDelta delta = res.getBody(); // NPE !!!
+ assertNotNull(delta);
+ }
+
/**
* 11. MAY support asynchronous responses (section 9.1.3).
*/
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataDeltaRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataDeltaRequestImpl.java
index 7485ad4..629e158 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataDeltaRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataDeltaRequestImpl.java
@@ -18,6 +18,8 @@
*/
package org.apache.olingo.client.core.communication.request.retrieve;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URI;
import org.apache.http.HttpResponse;
@@ -27,6 +29,7 @@ import org.apache.olingo.client.api.communication.request.retrieve.ODataDeltaReq
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
import org.apache.olingo.client.api.data.ResWrap;
import org.apache.olingo.client.api.domain.ClientDelta;
+import org.apache.olingo.client.api.http.HttpClientException;
import org.apache.olingo.client.api.serialization.ODataDeserializerException;
import org.apache.olingo.commons.api.data.Delta;
import org.apache.olingo.commons.api.format.ContentType;
@@ -63,12 +66,20 @@ public class ODataDeltaRequestImpl extends AbstractODataRetrieveRequest<ClientDe
public ClientDelta getBody() {
if (delta == null) {
try {
+ InputStream content;
+ if(res == null){
+ content = payload;
+ }else{
+ content = res.getEntity().getContent();
+ }
final ResWrap<Delta> resource = odataClient.getDeserializer(ContentType.parse(getContentType())).
- toDelta(getRawResponse());
+ toDelta(content);
delta = odataClient.getBinder().getODataDelta(resource);
} catch (final ODataDeserializerException e) {
throw new IllegalArgumentException(e);
+ } catch (IOException e) {
+ throw new HttpClientException(e);
} finally {
this.close();
}