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 f91568e  [OLINGO-1315]OData v4.0:Client: API to return HTTP Request 
details
f91568e is described below

commit f91568e1abe6e4b606d541d6c3a85218d6ab739e
Author: Archana Rai <[email protected]>
AuthorDate: Tue Mar 26 16:56:08 2019 +0530

    [OLINGO-1315]OData v4.0:Client: API to return HTTP Request details
---
 .../olingo/fit/tecsvc/client/BasicITCase.java      | 88 +++++++++++++++++++++-
 .../request/retrieve/ODataDeltaRequestImpl.java    |  6 +-
 .../request/retrieve/ODataMediaRequestImpl.java    |  8 +-
 .../request/retrieve/ODataPropertyRequestImpl.java |  6 +-
 .../response/AbstractODataResponse.java            | 21 +++++-
 5 files changed, 109 insertions(+), 20 deletions(-)

diff --git 
a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java 
b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
index 8e303ba..e04f668 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
@@ -31,6 +31,7 @@ import static org.junit.Assume.assumeTrue;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.StringWriter;
 import java.math.BigDecimal;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -41,6 +42,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.http.client.methods.HttpUriRequest;
 import org.apache.olingo.client.api.EdmEnabledODataClient;
 import org.apache.olingo.client.api.ODataClient;
@@ -303,8 +305,8 @@ public class BasicITCase extends AbstractParamTecSvcITCase {
         getEntitySetRequest(uriBuilder.build());
 
     final ODataRetrieveResponse<ClientEntitySet> res = req.execute();
+    assertNotNull(res.getRawResponse());
     final ClientEntitySet feed = res.getBody();
-
     assertNotNull(feed);
 
     assertEquals(10, feed.getEntities().size());
@@ -364,7 +366,7 @@ public class BasicITCase extends AbstractParamTecSvcITCase {
     saveCookieHeader(response);
     assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode());
     assertContentType(response.getContentType());
-
+    assertNotNull(response.getRawResponse());
     final ClientEntity entity = response.getBody();
     assertNotNull(entity);
     final ClientProperty property = entity.getProperty("CollPropertyInt16");
@@ -378,6 +380,30 @@ public class BasicITCase extends AbstractParamTecSvcITCase 
{
   }
 
   @Test
+  public void readEntityProperty() throws Exception {
+    ODataPropertyRequest<ClientProperty> request = 
getClient().getRetrieveRequestFactory()
+        .getPropertyRequest(getClient().newURIBuilder(SERVICE_URI)
+            .appendEntitySetSegment("ESCollAllPrim").appendKeySegment(1)
+            .appendPropertySegment("CollPropertyInt16").build());
+    assertNotNull(request);
+    setCookieHeader(request);
+
+    final ODataRetrieveResponse<ClientProperty> response = request.execute();
+    saveCookieHeader(response);
+    assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode());
+    assertContentType(response.getContentType());
+    assertNotNull(response.getRawResponse());
+    final ClientProperty property = response.getBody();
+    assertNotNull(property);
+    assertNotNull(property.getCollectionValue());
+    assertEquals(3, property.getCollectionValue().size());
+    Iterator<ClientValue> iterator = property.getCollectionValue().iterator();
+    assertShortOrInt(1000, iterator.next().asPrimitive().toValue());
+    assertShortOrInt(2000, iterator.next().asPrimitive().toValue());
+    assertShortOrInt(30112, iterator.next().asPrimitive().toValue());
+  }
+  
+  @Test
   public void deleteEntity() throws Exception {
     final URI uri = 
getClient().newURIBuilder(SERVICE_URI).appendEntitySetSegment(ES_ALL_PRIM).appendKeySegment(32767)
         .build();
@@ -431,6 +457,64 @@ public class BasicITCase extends AbstractParamTecSvcITCase 
{
     assertEquals(isJson() ? "PT6S" : BigDecimal.valueOf(6), 
property4.getPrimitiveValue().toValue());
   }
 
+
+  @Test
+  public void readUpdatepdateEntity() throws Exception {
+    
+    EdmMetadataRequest request = 
getClient().getRetrieveRequestFactory().getMetadataRequest(SERVICE_URI);
+    assertNotNull(request);
+    setCookieHeader(request);    
+    
+    ODataRetrieveResponse<Edm> response = request.execute();
+    saveCookieHeader(response);
+    assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode());
+
+    Edm edm = response.getBody();
+    assertNotNull(edm);
+    
+    final EdmEntityContainer container = edm.getEntityContainer(
+        new FullQualifiedName("olingo.odata.test1", "Container"));
+    assertNotNull(container);
+    
+    final EdmEntitySet esAllPrim = container.getEntitySet("ESAllPrim");
+    assertNotNull(esAllPrim);
+    assertEquals("olingo.odata.test1", 
esAllPrim.getEntityType().getNamespace());
+    
+    assertEquals(2, edm.getSchemas().size());
+    assertEquals(SERVICE_NAMESPACE, 
edm.getSchema(SERVICE_NAMESPACE).getNamespace());
+    assertEquals("Namespace1_Alias", 
edm.getSchema(SERVICE_NAMESPACE).getAlias());
+    assertEquals("Org.OData.Core.V1", 
edm.getSchema("Org.OData.Core.V1").getNamespace());
+    assertEquals("Core", edm.getSchema("Org.OData.Core.V1").getAlias());
+    
+    ClientEntity newEntity = getFactory().newEntity(ET_ALL_PRIM);
+    
newEntity.getProperties().add(getFactory().newPrimitiveProperty(PROPERTY_INT64,
+        getFactory().newPrimitiveValueBuilder().buildInt64((long) 42)));
+
+    final URI uri = 
getClient().newURIBuilder(SERVICE_URI).appendEntitySetSegment(ES_ALL_PRIM).appendKeySegment(32767)
+        .build();
+    final ODataEntityUpdateRequest<ClientEntity> request2 = 
getClient().getCUDRequestFactory().getEntityUpdateRequest(
+        uri, UpdateType.REPLACE, newEntity);
+    HttpUriRequest req = request2.getHttpRequest();
+    final ODataEntityUpdateResponse<ClientEntity> response2 = 
request2.execute();
+    assertNotNull(req);
+    assertEquals(HttpStatusCode.OK.getStatusCode(), response2.getStatusCode());
+
+    // Check that the updated properties have changed and that other 
properties have their default values.
+ 
+    StringWriter writer = new StringWriter();
+    InputStream stream = response2.getRawResponse();
+    IOUtils.copy(stream, writer);
+    assertNotNull(writer.toString());  
+    final ClientEntity entity = response2.getBody();
+    assertNotNull(entity);
+    final ClientProperty property1 = entity.getProperty(PROPERTY_INT64);
+    assertNotNull(property1);
+    assertShortOrInt(42, property1.getPrimitiveValue().toValue());
+    final ClientProperty property2 = entity.getProperty(PROPERTY_DECIMAL);
+    assertNotNull(property2);
+    assertNull(property2.getPrimitiveValue().toValue());
+  }
+  
   @Test
   public void updateEntity() throws Exception {
     ClientEntity newEntity = getFactory().newEntity(ET_ALL_PRIM);
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 42d665a..7485ad4 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,7 +18,6 @@
  */
 package org.apache.olingo.client.core.communication.request.retrieve;
 
-import java.io.IOException;
 import java.net.URI;
 
 import org.apache.http.HttpResponse;
@@ -28,7 +27,6 @@ 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;
@@ -66,11 +64,9 @@ public class ODataDeltaRequestImpl extends 
AbstractODataRetrieveRequest<ClientDe
       if (delta == null) {
         try {
           final ResWrap<Delta> resource = 
odataClient.getDeserializer(ContentType.parse(getContentType())).
-              toDelta(res.getEntity().getContent());
+              toDelta(getRawResponse());
 
           delta = odataClient.getBinder().getODataDelta(resource);
-        } catch (IOException e) {
-          throw new HttpClientException(e);
         } catch (final ODataDeserializerException e) {
           throw new IllegalArgumentException(e);
         } finally {
diff --git 
a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataMediaRequestImpl.java
 
b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataMediaRequestImpl.java
index 3f32f1b..1b534db 100644
--- 
a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataMediaRequestImpl.java
+++ 
b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataMediaRequestImpl.java
@@ -18,7 +18,6 @@
  */
 package org.apache.olingo.client.core.communication.request.retrieve;
 
-import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
 
@@ -27,7 +26,6 @@ import org.apache.http.client.HttpClient;
 import org.apache.olingo.client.api.ODataClient;
 import 
org.apache.olingo.client.api.communication.request.retrieve.ODataMediaRequest;
 import 
org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
-import org.apache.olingo.client.api.http.HttpClientException;
 import org.apache.olingo.commons.api.format.ContentType;
 
 /**
@@ -82,11 +80,7 @@ public class ODataMediaRequestImpl extends 
AbstractODataRetrieveRequest<InputStr
     @Override
     public InputStream getBody() {
       if (input == null) {
-        try {
-          input = res.getEntity().getContent();
-        } catch (IOException e) {
-          throw new HttpClientException(e);
-        }
+          input = getRawResponse();
       }
       return input;
     }
diff --git 
a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java
 
b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java
index adb522d..548cde6 100644
--- 
a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java
+++ 
b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java
@@ -18,7 +18,6 @@
  */
 package org.apache.olingo.client.core.communication.request.retrieve;
 
-import java.io.IOException;
 import java.net.URI;
 
 import org.apache.http.HttpResponse;
@@ -28,7 +27,6 @@ import 
org.apache.olingo.client.api.communication.request.retrieve.ODataProperty
 import 
org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
 import org.apache.olingo.client.api.data.ResWrap;
 import org.apache.olingo.client.api.domain.ClientProperty;
-import org.apache.olingo.client.api.http.HttpClientException;
 import org.apache.olingo.client.api.serialization.ODataDeserializerException;
 import org.apache.olingo.commons.api.data.Property;
 import org.apache.olingo.commons.api.format.ContentType;
@@ -76,11 +74,9 @@ public class ODataPropertyRequestImpl<T extends 
ClientProperty>
       if (property == null) {
         try {
           final ResWrap<Property> resource = 
odataClient.getDeserializer(ContentType.parse(getContentType()))
-                  .toProperty(res.getEntity().getContent());
+                  .toProperty(getRawResponse());
 
           property = (T) odataClient.getBinder().getODataProperty(resource);
-        } catch (IOException e) {
-          throw new HttpClientException(e);
         } catch (final ODataDeserializerException e) {
           throw new IllegalArgumentException(e);
         } finally {
diff --git 
a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/response/AbstractODataResponse.java
 
b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/response/AbstractODataResponse.java
index 5052e91..8be5d35 100644
--- 
a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/response/AbstractODataResponse.java
+++ 
b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/response/AbstractODataResponse.java
@@ -101,6 +101,8 @@ public abstract class AbstractODataResponse implements 
ODataResponse {
    * Batch info (if to be batched).
    */
   protected ODataBatchController batchInfo = null;
+  
+  private byte[] inputContent = null;
 
   public AbstractODataResponse(
       final ODataClient odataClient, final HttpClient httpclient, final 
HttpResponse res) {
@@ -149,6 +151,7 @@ public abstract class AbstractODataResponse implements 
ODataResponse {
   public final ODataResponse initFromHttpResponse(final HttpResponse res) {
     try {
       this.payload = res.getEntity() == null ? null : 
res.getEntity().getContent();
+      this.inputContent = null;
     } catch (final IllegalStateException e) {
       HttpClientUtils.closeQuietly(res);
       LOG.error("Error retrieving payload", e);
@@ -252,6 +255,9 @@ public abstract class AbstractODataResponse implements 
ODataResponse {
 
   @Override
   public InputStream getRawResponse() {
+
+
+    InputStream inputStream = null;
     if (HttpStatus.SC_NO_CONTENT == getStatusCode()) {
       throw new NoContentException();
     }
@@ -279,8 +285,21 @@ public abstract class AbstractODataResponse implements 
ODataResponse {
         LOG.error("Error streaming payload response", e);
         throw new IllegalStateException(e);
       }
+    } else if (payload != null) {
+      ByteArrayOutputStream byteArrayOutputStream = new 
ByteArrayOutputStream();
+      try {
+        org.apache.commons.io.IOUtils.copy(payload, byteArrayOutputStream);
+       if(inputContent == null){
+         inputContent  = byteArrayOutputStream.toByteArray();
+       }
+        inputStream = new ByteArrayInputStream(inputContent);
+        return inputStream;
+      } catch (IOException e) {
+        HttpClientUtils.closeQuietly(res);
+        LOG.error("Error retrieving payload", e);
+        throw new ODataRuntimeException(e);
+      }
     }
-
     return payload;
   }
 }

Reply via email to