You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2017/04/27 07:45:27 UTC

olingo-odata4 git commit: [OLINGO-1102] Missing Detail error message for ODataServerErrorException

Repository: olingo-odata4
Updated Branches:
  refs/heads/master 272719d59 -> a16a16841


[OLINGO-1102] Missing Detail error message for ODataServerErrorException

Signed-off-by: Christian Amend <ch...@sap.com>


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/a16a1684
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/a16a1684
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/a16a1684

Branch: refs/heads/master
Commit: a16a16841b03fe27b1fb0dab20a0d0029a6de335
Parents: 272719d
Author: i050510 <ra...@sap.com>
Authored: Wed Apr 26 11:13:13 2017 +0530
Committer: Christian Amend <ch...@sap.com>
Committed: Wed Apr 26 16:28:18 2017 +0200

----------------------------------------------------------------------
 .../header/ODataErrorResponseChecker.java       |  3 +-
 .../apache/olingo/client/core/ErrorTest.java    | 48 +++++++++++++++++++-
 .../org/apache/olingo/client/core/500error.json | 10 ++++
 .../apache/olingo/client/core/500error1.json    |  6 +++
 4 files changed, 64 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a16a1684/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/header/ODataErrorResponseChecker.java
----------------------------------------------------------------------
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 d83b8fb..274da3a 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
@@ -69,7 +69,8 @@ public final class ODataErrorResponseChecker {
             statusLine.getReasonPhrase());
       }
 
-      if (statusLine.getStatusCode() >= 500) {
+      if (statusLine.getStatusCode() >= 500 && (error.getDetails() == null || error.getDetails().size() == 0) && 
+          (error.getInnerError() == null || error.getInnerError().size() == 0)) {
         result = new ODataServerErrorException(statusLine);
       } else {
         result = new ODataClientErrorException(statusLine, error);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a16a1684/lib/client-core/src/test/java/org/apache/olingo/client/core/ErrorTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/ErrorTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/ErrorTest.java
index b930464..4446e92 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/ErrorTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/ErrorTest.java
@@ -18,14 +18,25 @@
  */
 package org.apache.olingo.client.core;
 
-import java.util.Map;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
+import java.io.InputStream;
+import java.util.Map;
+
+import org.apache.http.StatusLine;
+import org.apache.olingo.client.api.ODataClient;
+import org.apache.olingo.client.api.communication.ODataClientErrorException;
+import org.apache.olingo.client.api.communication.ODataServerErrorException;
 import org.apache.olingo.client.api.serialization.ODataDeserializerException;
+import org.apache.olingo.client.core.communication.header.ODataErrorResponseChecker;
 import org.apache.olingo.commons.api.ex.ODataError;
 import org.apache.olingo.commons.api.ex.ODataErrorDetail;
 import org.apache.olingo.commons.api.format.ContentType;
-import static org.junit.Assert.assertEquals;
 import org.junit.Test;
 
 public class ErrorTest extends AbstractTest {
@@ -69,4 +80,37 @@ public class ErrorTest extends AbstractTest {
     simple(ContentType.APPLICATION_ATOM_XML);
   }
 
+  @Test
+  public void test1OLINGO1102() throws Exception {
+    ODataClient odataClient = ODataClientFactory.getClient();
+    InputStream entity = getClass().getResourceAsStream("500error." + getSuffix(ContentType.JSON));
+    StatusLine statusLine = mock(StatusLine.class);
+    when(statusLine.getStatusCode()).thenReturn(500);
+    when(statusLine.toString()).thenReturn("Internal Server Error");
+    
+    ODataClientErrorException exp = (ODataClientErrorException) ODataErrorResponseChecker.
+        checkResponse(odataClient, statusLine, entity, "Json");
+    assertTrue(exp.getMessage().contains("(500) Internal Server Error"));
+    ODataError error = exp.getODataError();
+    assertEquals("Internal Server Error", error.getMessage());
+    assertEquals(500, Integer.parseInt(error.getCode()));
+    assertEquals(2, error.getInnerError().size());
+    assertEquals("\"Method does not support entities of specific type\"", error.getInnerError().get("message"));
+    assertEquals("\"FaultException\"", error.getInnerError().get("type"));
+    assertNull(error.getDetails());
+        
+  }
+  
+  @Test
+  public void test2OLINGO1102() throws Exception {
+    ODataClient odataClient = ODataClientFactory.getClient();
+    InputStream entity = getClass().getResourceAsStream("500error1." + getSuffix(ContentType.JSON));
+    StatusLine statusLine = mock(StatusLine.class);
+    when(statusLine.getStatusCode()).thenReturn(500);
+    when(statusLine.toString()).thenReturn("Internal Server Error");
+        
+    ODataServerErrorException exp = (ODataServerErrorException) ODataErrorResponseChecker.
+        checkResponse(odataClient, statusLine, entity, "Json");
+    assertEquals("Internal Server Error", exp.getMessage());
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a16a1684/lib/client-core/src/test/resources/org/apache/olingo/client/core/500error.json
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/500error.json b/lib/client-core/src/test/resources/org/apache/olingo/client/core/500error.json
new file mode 100644
index 0000000..0c7a9e8
--- /dev/null
+++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/500error.json
@@ -0,0 +1,10 @@
+{
+  "error": {
+    "code": "500",
+    "message": "Internal Server Error",
+    "innererror": {
+      "type": "FaultException",
+      "message": "Method does not support entities of specific type"
+    }
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a16a1684/lib/client-core/src/test/resources/org/apache/olingo/client/core/500error1.json
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/500error1.json b/lib/client-core/src/test/resources/org/apache/olingo/client/core/500error1.json
new file mode 100644
index 0000000..d7c7f3a
--- /dev/null
+++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/500error1.json
@@ -0,0 +1,6 @@
+{
+  "error": {
+    "code": "500",
+    "message": "Internal Server Error"
+  }
+}
\ No newline at end of file