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;

Reply via email to