[OLINGO-1315]OData v4.0:Client: API to return HTTP Request details
This commit is contained in:
parent
5b32c3acbf
commit
f91568e1ab
|
@ -31,6 +31,7 @@ import static org.junit.Assume.assumeTrue;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.io.StringWriter;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
|
@ -41,6 +42,7 @@ import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.http.client.methods.HttpUriRequest;
|
import org.apache.http.client.methods.HttpUriRequest;
|
||||||
import org.apache.olingo.client.api.EdmEnabledODataClient;
|
import org.apache.olingo.client.api.EdmEnabledODataClient;
|
||||||
import org.apache.olingo.client.api.ODataClient;
|
import org.apache.olingo.client.api.ODataClient;
|
||||||
|
@ -303,8 +305,8 @@ public class BasicITCase extends AbstractParamTecSvcITCase {
|
||||||
getEntitySetRequest(uriBuilder.build());
|
getEntitySetRequest(uriBuilder.build());
|
||||||
|
|
||||||
final ODataRetrieveResponse<ClientEntitySet> res = req.execute();
|
final ODataRetrieveResponse<ClientEntitySet> res = req.execute();
|
||||||
|
assertNotNull(res.getRawResponse());
|
||||||
final ClientEntitySet feed = res.getBody();
|
final ClientEntitySet feed = res.getBody();
|
||||||
|
|
||||||
assertNotNull(feed);
|
assertNotNull(feed);
|
||||||
|
|
||||||
assertEquals(10, feed.getEntities().size());
|
assertEquals(10, feed.getEntities().size());
|
||||||
|
@ -364,7 +366,7 @@ public class BasicITCase extends AbstractParamTecSvcITCase {
|
||||||
saveCookieHeader(response);
|
saveCookieHeader(response);
|
||||||
assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode());
|
assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode());
|
||||||
assertContentType(response.getContentType());
|
assertContentType(response.getContentType());
|
||||||
|
assertNotNull(response.getRawResponse());
|
||||||
final ClientEntity entity = response.getBody();
|
final ClientEntity entity = response.getBody();
|
||||||
assertNotNull(entity);
|
assertNotNull(entity);
|
||||||
final ClientProperty property = entity.getProperty("CollPropertyInt16");
|
final ClientProperty property = entity.getProperty("CollPropertyInt16");
|
||||||
|
@ -377,6 +379,30 @@ public class BasicITCase extends AbstractParamTecSvcITCase {
|
||||||
assertShortOrInt(30112, iterator.next().asPrimitive().toValue());
|
assertShortOrInt(30112, iterator.next().asPrimitive().toValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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
|
@Test
|
||||||
public void deleteEntity() throws Exception {
|
public void deleteEntity() throws Exception {
|
||||||
final URI uri = getClient().newURIBuilder(SERVICE_URI).appendEntitySetSegment(ES_ALL_PRIM).appendKeySegment(32767)
|
final URI uri = getClient().newURIBuilder(SERVICE_URI).appendEntitySetSegment(ES_ALL_PRIM).appendKeySegment(32767)
|
||||||
|
@ -431,6 +457,64 @@ public class BasicITCase extends AbstractParamTecSvcITCase {
|
||||||
assertEquals(isJson() ? "PT6S" : BigDecimal.valueOf(6), property4.getPrimitiveValue().toValue());
|
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
|
@Test
|
||||||
public void updateEntity() throws Exception {
|
public void updateEntity() throws Exception {
|
||||||
ClientEntity newEntity = getFactory().newEntity(ET_ALL_PRIM);
|
ClientEntity newEntity = getFactory().newEntity(ET_ALL_PRIM);
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.olingo.client.core.communication.request.retrieve;
|
package org.apache.olingo.client.core.communication.request.retrieve;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
|
||||||
import org.apache.http.HttpResponse;
|
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.communication.response.ODataRetrieveResponse;
|
||||||
import org.apache.olingo.client.api.data.ResWrap;
|
import org.apache.olingo.client.api.data.ResWrap;
|
||||||
import org.apache.olingo.client.api.domain.ClientDelta;
|
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.client.api.serialization.ODataDeserializerException;
|
||||||
import org.apache.olingo.commons.api.data.Delta;
|
import org.apache.olingo.commons.api.data.Delta;
|
||||||
import org.apache.olingo.commons.api.format.ContentType;
|
import org.apache.olingo.commons.api.format.ContentType;
|
||||||
|
@ -66,11 +64,9 @@ public class ODataDeltaRequestImpl extends AbstractODataRetrieveRequest<ClientDe
|
||||||
if (delta == null) {
|
if (delta == null) {
|
||||||
try {
|
try {
|
||||||
final ResWrap<Delta> resource = odataClient.getDeserializer(ContentType.parse(getContentType())).
|
final ResWrap<Delta> resource = odataClient.getDeserializer(ContentType.parse(getContentType())).
|
||||||
toDelta(res.getEntity().getContent());
|
toDelta(getRawResponse());
|
||||||
|
|
||||||
delta = odataClient.getBinder().getODataDelta(resource);
|
delta = odataClient.getBinder().getODataDelta(resource);
|
||||||
} catch (IOException e) {
|
|
||||||
throw new HttpClientException(e);
|
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new IllegalArgumentException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.olingo.client.core.communication.request.retrieve;
|
package org.apache.olingo.client.core.communication.request.retrieve;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.URI;
|
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.ODataClient;
|
||||||
import org.apache.olingo.client.api.communication.request.retrieve.ODataMediaRequest;
|
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.communication.response.ODataRetrieveResponse;
|
||||||
import org.apache.olingo.client.api.http.HttpClientException;
|
|
||||||
import org.apache.olingo.commons.api.format.ContentType;
|
import org.apache.olingo.commons.api.format.ContentType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -82,11 +80,7 @@ public class ODataMediaRequestImpl extends AbstractODataRetrieveRequest<InputStr
|
||||||
@Override
|
@Override
|
||||||
public InputStream getBody() {
|
public InputStream getBody() {
|
||||||
if (input == null) {
|
if (input == null) {
|
||||||
try {
|
input = getRawResponse();
|
||||||
input = res.getEntity().getContent();
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new HttpClientException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.olingo.client.core.communication.request.retrieve;
|
package org.apache.olingo.client.core.communication.request.retrieve;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
|
||||||
import org.apache.http.HttpResponse;
|
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.communication.response.ODataRetrieveResponse;
|
||||||
import org.apache.olingo.client.api.data.ResWrap;
|
import org.apache.olingo.client.api.data.ResWrap;
|
||||||
import org.apache.olingo.client.api.domain.ClientProperty;
|
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.client.api.serialization.ODataDeserializerException;
|
||||||
import org.apache.olingo.commons.api.data.Property;
|
import org.apache.olingo.commons.api.data.Property;
|
||||||
import org.apache.olingo.commons.api.format.ContentType;
|
import org.apache.olingo.commons.api.format.ContentType;
|
||||||
|
@ -76,11 +74,9 @@ public class ODataPropertyRequestImpl<T extends ClientProperty>
|
||||||
if (property == null) {
|
if (property == null) {
|
||||||
try {
|
try {
|
||||||
final ResWrap<Property> resource = odataClient.getDeserializer(ContentType.parse(getContentType()))
|
final ResWrap<Property> resource = odataClient.getDeserializer(ContentType.parse(getContentType()))
|
||||||
.toProperty(res.getEntity().getContent());
|
.toProperty(getRawResponse());
|
||||||
|
|
||||||
property = (T) odataClient.getBinder().getODataProperty(resource);
|
property = (T) odataClient.getBinder().getODataProperty(resource);
|
||||||
} catch (IOException e) {
|
|
||||||
throw new HttpClientException(e);
|
|
||||||
} catch (final ODataDeserializerException e) {
|
} catch (final ODataDeserializerException e) {
|
||||||
throw new IllegalArgumentException(e);
|
throw new IllegalArgumentException(e);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -101,6 +101,8 @@ public abstract class AbstractODataResponse implements ODataResponse {
|
||||||
* Batch info (if to be batched).
|
* Batch info (if to be batched).
|
||||||
*/
|
*/
|
||||||
protected ODataBatchController batchInfo = null;
|
protected ODataBatchController batchInfo = null;
|
||||||
|
|
||||||
|
private byte[] inputContent = null;
|
||||||
|
|
||||||
public AbstractODataResponse(
|
public AbstractODataResponse(
|
||||||
final ODataClient odataClient, final HttpClient httpclient, final HttpResponse res) {
|
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) {
|
public final ODataResponse initFromHttpResponse(final HttpResponse res) {
|
||||||
try {
|
try {
|
||||||
this.payload = res.getEntity() == null ? null : res.getEntity().getContent();
|
this.payload = res.getEntity() == null ? null : res.getEntity().getContent();
|
||||||
|
this.inputContent = null;
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final IllegalStateException e) {
|
||||||
HttpClientUtils.closeQuietly(res);
|
HttpClientUtils.closeQuietly(res);
|
||||||
LOG.error("Error retrieving payload", e);
|
LOG.error("Error retrieving payload", e);
|
||||||
|
@ -252,6 +255,9 @@ public abstract class AbstractODataResponse implements ODataResponse {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InputStream getRawResponse() {
|
public InputStream getRawResponse() {
|
||||||
|
|
||||||
|
|
||||||
|
InputStream inputStream = null;
|
||||||
if (HttpStatus.SC_NO_CONTENT == getStatusCode()) {
|
if (HttpStatus.SC_NO_CONTENT == getStatusCode()) {
|
||||||
throw new NoContentException();
|
throw new NoContentException();
|
||||||
}
|
}
|
||||||
|
@ -279,8 +285,21 @@ public abstract class AbstractODataResponse implements ODataResponse {
|
||||||
LOG.error("Error streaming payload response", e);
|
LOG.error("Error streaming payload response", e);
|
||||||
throw new IllegalStateException(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;
|
return payload;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue