[OLINGO-319] fix java.lang.IllegalStateException: Content has been consumed
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/cf360e65 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/cf360e65 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/cf360e65 Branch: refs/heads/master Commit: cf360e6573630cd432fec89ab00b87a606939392 Parents: 5959dfb Author: challenh <[email protected]> Authored: Sun Jun 8 13:35:01 2014 +0800 Committer: challenh <[email protected]> Committed: Sun Jun 8 13:35:01 2014 +0800 ---------------------------------------------------------------------- .../invoke/AbstractODataInvokeRequest.java | 24 ++++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cf360e65/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java index 5cf9308..361741b 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java @@ -204,16 +204,20 @@ public abstract class AbstractODataInvokeRequest<T extends ODataInvokeResult> try { if (ODataNoContent.class.isAssignableFrom(reference)) { invokeResult = reference.cast(new ODataNoContent()); - } else if (CommonODataEntitySet.class.isAssignableFrom(reference)) { - invokeResult = reference.cast(odataClient.getReader().readEntitySet(res.getEntity().getContent(), - ODataPubFormat.fromString(getContentType()))); - } else if (CommonODataEntity.class.isAssignableFrom(reference)) { - invokeResult = reference.cast(odataClient.getReader().readEntity(res.getEntity().getContent(), - ODataPubFormat.fromString(getContentType()))); - } else if (CommonODataProperty.class.isAssignableFrom(reference)) { - invokeResult = reference.cast(odataClient.getReader().readProperty(res.getEntity().getContent(), - ODataFormat.fromString(getContentType()))); - } + } else { + // avoid getContent() twice:IllegalStateException: Content has been consumed + InputStream responseStream = this.payload == null ? res.getEntity().getContent() : this.payload; + if (CommonODataEntitySet.class.isAssignableFrom(reference)) { + invokeResult = reference.cast(odataClient.getReader().readEntitySet(responseStream, + ODataPubFormat.fromString(getContentType()))); + } else if (CommonODataEntity.class.isAssignableFrom(reference)) { + invokeResult = reference.cast(odataClient.getReader().readEntity(responseStream, + ODataPubFormat.fromString(getContentType()))); + } else if (CommonODataProperty.class.isAssignableFrom(reference)) { + invokeResult = reference.cast(odataClient.getReader().readProperty(responseStream, + ODataFormat.fromString(getContentType()))); + } + } } catch (IOException e) { throw new HttpClientException(e); } finally {
