You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/02/28 13:20:52 UTC

[causeway] branch master updated: CAUSEWAY-3304: Restful Client fixes

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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new d8d79ee867 CAUSEWAY-3304: Restful Client fixes
d8d79ee867 is described below

commit d8d79ee8670dabb7079c9ce8c0ef0ccb060cdba0
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Feb 28 14:20:46 2023 +0100

    CAUSEWAY-3304: Restful Client fixes
---
 .../causeway/testdomain/rest/RestServiceTest.java     | 14 +++++++-------
 .../viewer/restfulobjects/client/ResponseDigest.java  | 19 +++++++++++--------
 .../restfulobjects/client/ResponseDigester.java       | 10 ++++++++--
 3 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/regressiontests/stable-rest/src/test/java/org/apache/causeway/testdomain/rest/RestServiceTest.java b/regressiontests/stable-rest/src/test/java/org/apache/causeway/testdomain/rest/RestServiceTest.java
index 190d456ebc..ab6017beb7 100644
--- a/regressiontests/stable-rest/src/test/java/org/apache/causeway/testdomain/rest/RestServiceTest.java
+++ b/regressiontests/stable-rest/src/test/java/org/apache/causeway/testdomain/rest/RestServiceTest.java
@@ -73,7 +73,7 @@ class RestServiceTest {
     @Test
     void httpSessionInfo() {
         val digest = restService.getHttpSessionInfo(restfulClient)
-                .ifFailure(Assertions::fail);
+                .ifFailureFail();
 
         val httpSessionInfo = digest.getValue().orElseThrow();
 
@@ -86,7 +86,7 @@ class RestServiceTest {
     @Test
     void bookOfTheWeek_viaRestEndpoint() {
         val digest = restService.getRecommendedBookOfTheWeek(restfulClient)
-                .ifFailure(Assertions::fail);
+                .ifFailureFail();
 
         val bookOfTheWeek = digest.getValue().orElseThrow();
 
@@ -100,7 +100,7 @@ class RestServiceTest {
                 "REST Author", "REST ISBN", "REST Publisher");
 
         val digest = restService.storeBook(restfulClient, newBook)
-                .ifFailure(Assertions::fail);
+                .ifFailureFail();
 
         val storedBook = digest.getValue().orElseThrow();
 
@@ -111,7 +111,7 @@ class RestServiceTest {
     @Test
     void multipleBooks_viaRestEndpoint() throws JAXBException {
         val digest = restService.getMultipleBooks(restfulClient)
-                .ifFailure(Assertions::fail);
+                .ifFailureFail();
 
         val expectedBookTitles = JdoTestFixtures.expectedBookTitles();
 
@@ -124,7 +124,7 @@ class RestServiceTest {
     @Test
     void bookOfTheWeek_asDto_viaRestEndpoint() {
         val digest = restService.getRecommendedBookOfTheWeekAsDto(restfulClient)
-                .ifFailure(Assertions::fail);
+                .ifFailureFail();
 
         val bookOfTheWeek = digest.getValue().orElseThrow();
 
@@ -135,7 +135,7 @@ class RestServiceTest {
     @Test
     void multipleBooks_asDto_viaRestEndpoint() throws JAXBException {
         val digest = restService.getMultipleBooksAsDto(restfulClient)
-                .ifFailure(Assertions::fail);
+                .ifFailureFail();
 
         val multipleBooks = digest.getValue().orElseThrow();
 
@@ -149,7 +149,7 @@ class RestServiceTest {
     @Test
     void inventoryAsJaxbVm_viaRestEndpoint() {
         val digest = restService.getInventoryAsJaxbVm(restfulClient)
-                .ifFailure(Assertions::fail);
+                .ifFailureFail();
 
         final JdoInventoryJaxbVm inventoryAsJaxbVm = digest.getValue().orElseThrow();
 
diff --git a/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/ResponseDigest.java b/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/ResponseDigest.java
index 37e4cc5d6d..62492d9155 100644
--- a/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/ResponseDigest.java
+++ b/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/ResponseDigest.java
@@ -179,14 +179,17 @@ class ResponseDigest<T> {
             failureCause = _Exceptions.unrecoverable(e, "failed to read JAX-RS response content");
         }
 
-        // guard against entity type mismatch
-        failureCause = entities.stream()
-            .filter(entity->!entityType.isAssignableFrom(entity.getClass()))
-            .map(entityOfWrongType->_Exceptions.unrecoverable("type mismatch when digesting REST response, expected: %s, got: %s",
-                    entityType,
-                    entityOfWrongType.getClass()))
-            .findAny()
-            .orElse(null);
+        // guard against entity type mismatch, but don't shadow a failureCause, if there is already one
+        failureCause = failureCause!=null
+                ? failureCause
+                : entities.stream()
+                    .filter(entity->!entityType.isAssignableFrom(entity.getClass()))
+                    .map(entityOfWrongType->
+                        _Exceptions.unrecoverable("type mismatch when digesting REST response, expected: %s, got: %s",
+                            entityType,
+                            entityOfWrongType.getClass()))
+                    .findAny()
+                    .orElse(null);
 
         return this;
     }
diff --git a/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/ResponseDigester.java b/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/ResponseDigester.java
index 355f01655a..87f4255bc7 100644
--- a/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/ResponseDigester.java
+++ b/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/ResponseDigester.java
@@ -32,6 +32,7 @@ import org.springframework.lang.Nullable;
 import org.apache.causeway.applib.client.RepresentationTypeSimplifiedV2;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.commons.internal.exceptions._Exceptions;
+import org.apache.causeway.commons.io.JsonUtils;
 import org.apache.causeway.viewer.restfulobjects.applib.dtos.ScalarValueDtoV2;
 
 import lombok.RequiredArgsConstructor;
@@ -84,10 +85,15 @@ interface ResponseDigester {
             if(reprType.isValue()
                     || reprType.isValues()) {
                 val jsonInput = response.readEntity(String.class);
-                val scalarValueDto = new ObjectMapper().readValue(jsonInput, ScalarValueDtoV2.class);
+                val scalarValueDto = JsonUtils.tryRead(ScalarValueDtoV2.class, jsonInput)
+                        .valueAsNonNullElseFail();
                 return scalarValueDto.getValueAs(entityType);
             }
-            return response.<T>readEntity(entityType);
+            //does not work ...
+            //mapper.registerModule(new JaxbAnnotationModule());
+            //mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+            //return mapper.readValue(jsonInput, entityType);
+            return response.<T>readEntity(entityType); // uses RestEasy, which uses MOXy
         }
 
         @SneakyThrows