You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2022/08/13 10:34:42 UTC

[olingo-odata4] branch OLINGO-1574 created (now 797f16a3d)

This is an automated email from the ASF dual-hosted git repository.

mibo pushed a change to branch OLINGO-1574
in repository https://gitbox.apache.org/repos/asf/olingo-odata4.git


      at 797f16a3d [OLINGO-1574] Better error messages for client

This branch includes the following new commits:

     new 797f16a3d [OLINGO-1574] Better error messages for client

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[olingo-odata4] 01/01: [OLINGO-1574] Better error messages for client

Posted by mi...@apache.org.
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 <mi...@apache.org>
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;