This is an automated email from the ASF dual-hosted git repository. mibo pushed a commit to branch OLINGO-1574 in repository https://gitbox.apache.org/repos/asf/olingo-odata4.git
commit 797f16a3d10321d5cb1faf090b20d9f46f464bc1 Author: mibo <[email protected]> AuthorDate: Sat Aug 13 12:34:15 2022 +0200 [OLINGO-1574] Better error messages for client --- .../proxy/commons/TransactionalPersistenceManagerImpl.java | 2 +- .../api/communication/ODataClientErrorException.java | 14 ++++++++++++-- .../api/communication/ODataServerErrorException.java | 11 ++++++++++- .../communication/header/ODataErrorResponseChecker.java | 6 +++--- .../communication/request/AsyncRequestWrapperImpl.java | 2 +- 5 files changed, 27 insertions(+), 8 deletions(-) diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/TransactionalPersistenceManagerImpl.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/TransactionalPersistenceManagerImpl.java index e24796efa..5b29506ae 100644 --- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/TransactionalPersistenceManagerImpl.java +++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/TransactionalPersistenceManagerImpl.java @@ -78,7 +78,7 @@ public class TransactionalPersistenceManagerImpl extends AbstractPersistenceMana // This should be 202 for service version <= 3.0 and 200 for service version >= 4.0 but it seems that // many service implementations are not fully compliant in this respect. if (response.getStatusCode() != 202 && response.getStatusCode() != 200) { - throw new ODataServerErrorException(new ResponseStatusLine(response)); + throw new ODataServerErrorException(new ResponseStatusLine(response), response.getRawResponse()); } if (!items.isEmpty()) { diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/ODataClientErrorException.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/ODataClientErrorException.java index 290f59f89..77063fb1f 100644 --- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/ODataClientErrorException.java +++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/ODataClientErrorException.java @@ -23,6 +23,8 @@ import org.apache.http.StatusLine; import org.apache.olingo.commons.api.ex.ODataError; import org.apache.olingo.commons.api.ex.ODataRuntimeException; +import java.io.InputStream; + /** * Represents a client error in OData. * @@ -38,16 +40,19 @@ public class ODataClientErrorException extends ODataRuntimeException { private Header[] headerInfo; + private InputStream rawResponse; + /** * Constructor. * * @param statusLine request status info. */ - public ODataClientErrorException(final StatusLine statusLine) { + public ODataClientErrorException(final StatusLine statusLine, final InputStream entity) { super(statusLine.toString()); this.statusLine = statusLine; this.error = null; + this.rawResponse = entity; } /** @@ -56,7 +61,7 @@ public class ODataClientErrorException extends ODataRuntimeException { * @param statusLine request status info. * @param error OData error to be wrapped. */ - public ODataClientErrorException(final StatusLine statusLine, final ODataError error) { + public ODataClientErrorException(final StatusLine statusLine, final ODataError error, final InputStream entity) { super(error == null ? statusLine.toString() : (error.getCode() == null || error.getCode().isEmpty() ? "" : "(" + error.getCode() + ") ") @@ -64,6 +69,7 @@ public class ODataClientErrorException extends ODataRuntimeException { this.statusLine = statusLine; this.error = error; + this.rawResponse = entity; } /** @@ -99,4 +105,8 @@ public class ODataClientErrorException extends ODataRuntimeException { public Header[] getHeaderInfo() { return headerInfo; } + + public InputStream getRawResponse() { + return rawResponse; + } } diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/ODataServerErrorException.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/ODataServerErrorException.java index 932e3cb3b..32e20b55d 100644 --- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/ODataServerErrorException.java +++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/ODataServerErrorException.java @@ -21,6 +21,8 @@ package org.apache.olingo.client.api.communication; import org.apache.http.StatusLine; import org.apache.olingo.commons.api.ex.ODataRuntimeException; +import java.io.InputStream; + /** * Represents a server error in OData. */ @@ -28,12 +30,19 @@ public class ODataServerErrorException extends ODataRuntimeException { private static final long serialVersionUID = -6423014532618680135L; + private InputStream rawResponse; + /** * Constructor. * * @param statusLine request status info. */ - public ODataServerErrorException(final StatusLine statusLine) { + public ODataServerErrorException(final StatusLine statusLine, final InputStream entity) { super(statusLine.toString()); + this.rawResponse = entity; + } + + public InputStream getRawResponse() { + return rawResponse; } } diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/header/ODataErrorResponseChecker.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/header/ODataErrorResponseChecker.java index 1f8413ba0..2acba3abf 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/header/ODataErrorResponseChecker.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/header/ODataErrorResponseChecker.java @@ -54,7 +54,7 @@ public final class ODataErrorResponseChecker { ODataRuntimeException result = null; if (entity == null) { - result = new ODataClientErrorException(statusLine); + result = new ODataClientErrorException(statusLine, entity); } else { final ContentType contentType = accept.contains("xml") ? ContentType.APPLICATION_ATOM_XML : ContentType.JSON; @@ -94,9 +94,9 @@ public final class ODataErrorResponseChecker { if (statusLine.getStatusCode() >= 500 && error!= null && (error.getDetails() == null || error.getDetails().isEmpty()) && (error.getInnerError() == null || error.getInnerError().size() == 0)) { - result = new ODataServerErrorException(statusLine); + result = new ODataServerErrorException(statusLine, entity); } else { - result = new ODataClientErrorException(statusLine, error); + result = new ODataClientErrorException(statusLine, error, entity); } } diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AsyncRequestWrapperImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AsyncRequestWrapperImpl.java index 924f47bed..48fb596d4 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AsyncRequestWrapperImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AsyncRequestWrapperImpl.java @@ -231,7 +231,7 @@ public class AsyncRequestWrapperImpl<R extends ODataResponse> extends AbstractRe } if (response == null) { - throw new ODataClientErrorException(res == null ? null : res.getStatusLine()); + throw new ODataClientErrorException(res == null ? null : res.getStatusLine(), response.getRawResponse()); } return response;
