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