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

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


The following commit(s) were added to refs/heads/CAUSEWAY-3718 by this push:
     new e4461ac56c CAUSEWAY-3718: JsonValueEncoderServiceDefault: fix for 
recover pojo from string
e4461ac56c is described below

commit e4461ac56c4a73a6e847bd6c1efa357d2c2afc2a
Author: Andi Huber <[email protected]>
AuthorDate: Tue Apr 9 05:52:09 2024 +0200

    CAUSEWAY-3718: JsonValueEncoderServiceDefault: fix for recover pojo from
    string
---
 .../valuesemantics/BlobValueSemantics.java         |   2 -
 .../JsonValueEncoderServiceDefault.java            |  21 +-
 viewers/restfulobjects/test/pom.xml                | 281 +++++++++++----------
 .../staff/Staff_lowlevel_v1_IntegTest.java         |  36 +--
 4 files changed, 169 insertions(+), 171 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BlobValueSemantics.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BlobValueSemantics.java
index 9949d8afb9..e128bb4002 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BlobValueSemantics.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BlobValueSemantics.java
@@ -22,12 +22,10 @@ import java.util.function.UnaryOperator;
 
 import javax.annotation.Priority;
 import javax.inject.Named;
-import javax.inject.Provider;
 
 import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.stereotype.Component;
 
 import org.apache.causeway.applib.annotation.PriorityPrecedence;
 import org.apache.causeway.applib.util.schema.CommonDtoUtils;
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
index 0b2415a232..0a8f3607e3 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
@@ -114,9 +114,9 @@ public class JsonValueEncoderServiceDefault implements 
JsonValueEncoderService {
             return ManagedObject.value(spec, pojo);
         }
 
-        // best effort: try 'String' type
-        return asStringElseFail(valueRepr, valueSerializer)
-                .map(string->ManagedObject.value(spec, string))
+        // best effort: try 'String' repr. type
+        return recoverPojoFromStringElseFail(valueRepr, valueSerializer)
+                .map(pojo->ManagedObject.value(spec, pojo))
                 .orElseGet(()->ManagedObject.empty(spec));
     }
 
@@ -139,7 +139,7 @@ public class JsonValueEncoderServiceDefault implements 
JsonValueEncoderService {
      * Returns the recovered nullable String, wrapped as optional.
      * @throws IllegalArgumentException if cannot be parsed as String
      */
-    private static Optional<String> asStringElseFail(
+    private static Optional<Object> recoverPojoFromStringElseFail(
             final JsonRepresentation valueRepr,
             final ValueSerializer<?> valueSerializer) {
         if (valueRepr.isString()) {
@@ -147,17 +147,8 @@ public class JsonValueEncoderServiceDefault implements 
JsonValueEncoderService {
                     valueSerializer.destring(Format.JSON, 
valueRepr.asString()))
                     .mapFailure(ex->_Exceptions
                             .illegalArgument(ex, "Unable to parse value %s as 
String", valueRepr))
-                    .ifFailureFail()
-                    .getValue().orElse(null);
-                    ;
-            if(recoveredValue==null) {
-                return Optional.empty();
-            }
-            val recoveredStringIfAny = _Casts.castTo(String.class, 
recoveredValue);
-            if(recoveredStringIfAny.isPresent()) {
-                return recoveredStringIfAny;
-            }
-            throw _Exceptions.illegalArgument("Unable to parse value %s as 
String", recoveredValue.getClass());
+                    .valueAsNullableElseFail();
+            return Optional.ofNullable(recoveredValue);
         }
         throw _Exceptions.illegalArgument("Unable to parse value %s as String"
                 + " (using 'String' as a fallback attempt)", valueRepr);
diff --git a/viewers/restfulobjects/test/pom.xml 
b/viewers/restfulobjects/test/pom.xml
index bd9d4d2400..a6986d2ef6 100644
--- a/viewers/restfulobjects/test/pom.xml
+++ b/viewers/restfulobjects/test/pom.xml
@@ -17,29 +17,32 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
        <modelVersion>4.0.0</modelVersion>
 
-    <parent>
-        <groupId>org.apache.causeway.viewer</groupId>
-        <artifactId>causeway-viewer-restfulobjects</artifactId>
-        <version>2.0.0-SNAPSHOT</version>
-    </parent>
+       <parent>
+               <groupId>org.apache.causeway.viewer</groupId>
+               <artifactId>causeway-viewer-restfulobjects</artifactId>
+               <version>2.0.0-SNAPSHOT</version>
+       </parent>
 
-    <artifactId>causeway-viewer-restfulobjects-test</artifactId>
+       <artifactId>causeway-viewer-restfulobjects-test</artifactId>
 
        <name>Apache Causeway Viewer - RO (Test)</name>
 
-    <properties>
-        
<jar-plugin.automaticModuleName>org.apache.causeway.viewer.restfulobjects.test</jar-plugin.automaticModuleName>
-        
<git-plugin.propertiesDir>org/apache/causeway/viewer/restfulobjects/test</git-plugin.propertiesDir>
+       <properties>
+               <jar-plugin.automaticModuleName>
+                       
org.apache.causeway.viewer.restfulobjects.test</jar-plugin.automaticModuleName>
+               
<git-plugin.propertiesDir>org/apache/causeway/viewer/restfulobjects/test</git-plugin.propertiesDir>
 
-        <maven.install.skip>true</maven.install.skip>
-        <maven.deploy.skip>true</maven.deploy.skip>
+               <maven.install.skip>true</maven.install.skip>
+               <maven.deploy.skip>true</maven.deploy.skip>
 
-    </properties>
+       </properties>
 
-    <build>
+       <build>
                <testResources>
                        <testResource>
                                <directory>src/test/resources</directory>
@@ -52,126 +55,132 @@
                </testResources>
        </build>
 
-    <dependencies>
-
-        <!-- TESTING -->
-
-               <dependency>
-            <groupId>org.apache.causeway.core</groupId>
-            <artifactId>causeway-core-webapp</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-               <dependency>
-            <groupId>org.apache.causeway.viewer</groupId>
-            <artifactId>causeway-viewer-commons-services</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.causeway.viewer</groupId>
-            <artifactId>causeway-viewer-restfulobjects-rendering</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>com.fasterxml.jackson.module</groupId>
-            <artifactId>jackson-module-jaxb-annotations</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.causeway.core</groupId>
-            <artifactId>causeway-core-runtimeservices</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.causeway.persistence</groupId>
-            <artifactId>causeway-persistence-jpa-eclipselink</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.causeway.security</groupId>
-            <artifactId>causeway-security-bypass</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.causeway.core</groupId>
-            <artifactId>causeway-core-internaltestsupport</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.causeway.testing</groupId>
-            <artifactId>causeway-testing-fixtures-applib</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.causeway.viewer</groupId>
-            <artifactId>causeway-viewer-restfulobjects-client</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.causeway.viewer</groupId>
-            <artifactId>causeway-viewer-restfulobjects-viewer</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.causeway.viewer</groupId>
-            
<artifactId>causeway-viewer-restfulobjects-jaxrsresteasy</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <!-- we use log4j-2 instead -->
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-logging</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-test-autoconfigure</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.glassfish.jersey.core</groupId>
-            <artifactId>jersey-client</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.glassfish.jersey.inject</groupId>
-            <artifactId>jersey-hk2</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>com.h2database</groupId>
-            <artifactId>h2</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.github.gavlyukovskiy</groupId>
-            <artifactId>datasource-proxy-spring-boot-starter</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.github.vertical-blank</groupId>
-            <artifactId>sql-formatter</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>com.approvaltests</groupId>
-            <artifactId>approvaltests</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-    </dependencies>
+       <dependencies>
+
+               <!-- TESTING -->
+
+               <dependency>
+                       <groupId>org.apache.causeway.core</groupId>
+                       <artifactId>causeway-core-webapp</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+               <dependency>
+                       <groupId>org.apache.causeway.viewer</groupId>
+                       
<artifactId>causeway-viewer-commons-services</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+               <dependency>
+                       <groupId>org.apache.causeway.viewer</groupId>
+                       
<artifactId>causeway-viewer-restfulobjects-rendering</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+               <dependency>
+                       <groupId>com.fasterxml.jackson.module</groupId>
+                       <artifactId>jackson-module-jaxb-annotations</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+               <dependency>
+                       <groupId>org.apache.causeway.core</groupId>
+                       <artifactId>causeway-core-runtimeservices</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.causeway.persistence</groupId>
+                       
<artifactId>causeway-persistence-jpa-eclipselink</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.causeway.security</groupId>
+                       <artifactId>causeway-security-bypass</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.causeway.core</groupId>
+                       
<artifactId>causeway-core-internaltestsupport</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.causeway.testing</groupId>
+                       
<artifactId>causeway-testing-fixtures-applib</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.causeway.viewer</groupId>
+                       
<artifactId>causeway-viewer-restfulobjects-client</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.causeway.viewer</groupId>
+                       
<artifactId>causeway-viewer-restfulobjects-viewer</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.causeway.viewer</groupId>
+                       
<artifactId>causeway-viewer-restfulobjects-jaxrsresteasy</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-starter-web</artifactId>
+                       <scope>test</scope>
+                       <exclusions>
+                               <exclusion>
+                                       <!-- we use log4j-2 instead -->
+                                       
<groupId>org.springframework.boot</groupId>
+                                       
<artifactId>spring-boot-starter-logging</artifactId>
+                               </exclusion>
+                       </exclusions>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-test-autoconfigure</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+               <dependency>
+                       <groupId>org.glassfish.jersey.core</groupId>
+                       <artifactId>jersey-client</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.glassfish.jersey.inject</groupId>
+                       <artifactId>jersey-hk2</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+               <dependency>
+                       <groupId>com.h2database</groupId>
+                       <artifactId>h2</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>com.github.gavlyukovskiy</groupId>
+                       
<artifactId>datasource-proxy-spring-boot-starter</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>com.github.vertical-blank</groupId>
+                       <artifactId>sql-formatter</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+               <dependency>
+                       <groupId>com.approvaltests</groupId>
+                       <artifactId>approvaltests</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+               <dependency>
+                       <groupId>com.google.code.gson</groupId>
+                       <artifactId>gson</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+       </dependencies>
 </project>
diff --git 
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_lowlevel_v1_IntegTest.java
 
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_lowlevel_v1_IntegTest.java
index 05cf9712e8..b06259afdc 100644
--- 
a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_lowlevel_v1_IntegTest.java
+++ 
b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_lowlevel_v1_IntegTest.java
@@ -34,19 +34,6 @@ import javax.ws.rs.core.Response;
 import com.google.common.io.Resources;
 import com.google.gson.GsonBuilder;
 
-import org.apache.causeway.applib.annotation.PriorityPrecedence;
-import org.apache.causeway.applib.value.Blob;
-import org.apache.causeway.applib.value.NamedWithMimeType;
-import org.apache.causeway.applib.value.semantics.Renderer;
-import org.apache.causeway.applib.value.semantics.ValueDecomposition;
-import org.apache.causeway.applib.value.semantics.ValueSemanticsAbstract;
-import org.apache.causeway.applib.value.semantics.ValueSemanticsProvider;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.commons.internal.base._Bytes;
-import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.core.metamodel.valuesemantics.BlobValueSemantics;
-import org.apache.causeway.schema.common.v2.ValueType;
-
 import org.approvaltests.Approvals;
 import org.approvaltests.reporters.DiffReporter;
 import org.approvaltests.reporters.UseReporter;
@@ -61,7 +48,19 @@ import org.springframework.stereotype.Component;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.transaction.annotation.Propagation;
 
+import org.apache.causeway.applib.annotation.PriorityPrecedence;
 import org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.applib.value.Blob;
+import org.apache.causeway.applib.value.NamedWithMimeType;
+import org.apache.causeway.applib.value.semantics.Renderer;
+import org.apache.causeway.applib.value.semantics.ValueDecomposition;
+import org.apache.causeway.applib.value.semantics.ValueSemanticsProvider;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.commons.internal.base._Bytes;
+import org.apache.causeway.commons.internal.base._Strings;
+import 
org.apache.causeway.core.internaltestsupport.annotations.DisabledIfRunningWithSurefire;
+import org.apache.causeway.core.metamodel.valuesemantics.BlobValueSemantics;
+import org.apache.causeway.schema.common.v2.ValueType;
 import 
org.apache.causeway.viewer.restfulobjects.test.scenarios.Abstract_IntegTest;
 
 import lombok.Getter;
@@ -81,6 +80,7 @@ public class Staff_lowlevel_v1_IntegTest extends 
Abstract_IntegTest {
         gsonBuilder = new GsonBuilder();
     }
 
+    @DisabledIfRunningWithSurefire
     @SneakyThrows
     @Test
     @UseReporter(DiffReporter.class)
@@ -138,15 +138,15 @@ public class Staff_lowlevel_v1_IntegTest extends 
Abstract_IntegTest {
         assertThat(bookmarkAfterIfAny).isNotEmpty();
     }
 
-    private String asAbsoluteHref(Bookmark bookmark) {
+    private String asAbsoluteHref(final Bookmark bookmark) {
         return String.format("%s%s", 
restfulClient.getConfig().getRestfulBaseUrl(), asRelativeHref(bookmark));
     }
 
-    private String asRelativeHref(Bookmark bookmark) {
+    private String asRelativeHref(final Bookmark bookmark) {
         return String.format("objects/%s/%s", bookmark.getLogicalTypeName(), 
bookmark.getIdentifier());
     }
 
-    private String readFileAndEncodeAsBlob(String fileName) throws 
IOException, URISyntaxException {
+    private String readFileAndEncodeAsBlob(final String fileName) throws 
IOException, URISyntaxException {
         byte[] bytes = 
Resources.toByteArray(Resources.getResource(Abstract_IntegTest.class, 
fileName));
         String photoEncoded = encodePdf(fileName, bytes);
         return photoEncoded;
@@ -166,7 +166,7 @@ public class Staff_lowlevel_v1_IntegTest extends 
Abstract_IntegTest {
          * @param departmentHrefValue
          * @param blobValue - is the Blob encoded format: 
"filename.pdf:application/pdf:pdfBytesBase64Encoded"
          */
-        Body(String nameValue, String departmentHrefValue, String blobValue) {
+        Body(final String nameValue, final String departmentHrefValue, final 
String blobValue) {
             photo = new Blob(blobValue);
             name = new Name(nameValue);
             department = new Department(new 
Department.Value(departmentHrefValue));
@@ -216,7 +216,7 @@ public class Staff_lowlevel_v1_IntegTest extends 
Abstract_IntegTest {
 
         @Override
         public ValueType getSchemaValueType() {
-            return ValueType.BLOB;
+            return ValueType.STRING;
         }
 
         // -- COMPOSER

Reply via email to