You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/12/16 17:17:51 UTC

[isis] branch spring6 updated: ISIS-3275: don't ship MOXy with commons (build fixes)

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

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


The following commit(s) were added to refs/heads/spring6 by this push:
     new 79a226abc1 ISIS-3275: don't ship MOXy with commons (build fixes)
79a226abc1 is described below

commit 79a226abc17dc02bdf74c6fb89a3004c38e41149
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Dec 16 18:17:43 2022 +0100

    ISIS-3275: don't ship MOXy with commons (build fixes)
    
    - as only used by RO clients that want to talk JSON - let clients pull
    in the dependencies
---
 commons/pom.xml                                    | 19 ------------------
 commons/src/main/java/module-info.java             |  3 ---
 .../org/apache/causeway/commons/io/JsonUtils.java  | 14 +++++++++++--
 persistence/jpa/applib/pom.xml                     | 21 ++++++++++++++++++++
 viewers/restfulobjects/client/pom.xml              | 23 ++++++++++++++++++++++
 .../restfulobjects/client/RestfulClient.java       | 15 +++++++-------
 6 files changed, 64 insertions(+), 31 deletions(-)

diff --git a/commons/pom.xml b/commons/pom.xml
index d2e6c1dbd1..c173cb2a2e 100644
--- a/commons/pom.xml
+++ b/commons/pom.xml
@@ -54,25 +54,6 @@
 	</build>
 
 	<dependencies>
-		
-		<dependency>
-			<groupId>org.eclipse.persistence</groupId>
-			<artifactId>org.eclipse.persistence.moxy</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>org.ow2.asm</groupId>
-					<artifactId>asm</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.ow2.asm</groupId>
-					<artifactId>asm-tree</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.ow2.asm</groupId>
-					<artifactId>asm-analysis</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
 
 		<dependency>
 			<groupId>com.fasterxml.woodstox</groupId>
diff --git a/commons/src/main/java/module-info.java b/commons/src/main/java/module-info.java
index 117828d4aa..9f46f0e78a 100644
--- a/commons/src/main/java/module-info.java
+++ b/commons/src/main/java/module-info.java
@@ -71,12 +71,9 @@ module org.apache.causeway.commons {
     requires transitive spring.beans;
     requires transitive spring.context;
     requires transitive spring.core;
-    //requires org.eclipse.persistence.moxy;
-
     requires transitive jakarta.xml.bind;
     requires transitive jakarta.inject;
     requires jakarta.annotation;
-    requires org.eclipse.persistence.moxy;
 
     // JAXB JUnit test
     opens org.apache.causeway.commons.internal.resources to jakarta.xml.bind;
diff --git a/commons/src/main/java/org/apache/causeway/commons/io/JsonUtils.java b/commons/src/main/java/org/apache/causeway/commons/io/JsonUtils.java
index 00c9cb46eb..664e774b00 100644
--- a/commons/src/main/java/org/apache/causeway/commons/io/JsonUtils.java
+++ b/commons/src/main/java/org/apache/causeway/commons/io/JsonUtils.java
@@ -31,11 +31,13 @@ import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModu
 import org.springframework.lang.Nullable;
 
 import org.apache.causeway.commons.functional.Try;
+import org.apache.causeway.commons.internal.context._Context;
 
 import lombok.NonNull;
 import lombok.SneakyThrows;
 import lombok.val;
 import lombok.experimental.UtilityClass;
+import lombok.extern.log4j.Log4j2;
 
 /**
  * Utilities to convert from and to JSON format.
@@ -43,13 +45,21 @@ import lombok.experimental.UtilityClass;
  * @since 2.0 {@index}
  */
 @UtilityClass
+@Log4j2
 public class JsonUtils {
 
     /**
      * Consumers of the framework may choose to use a different provider.
      */
-    public Class<?> getPlatformDefaultJsonProviderForJaxb() {
-        return org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.class;
+    public Optional<Class<?>> getPlatformDefaultJsonProviderForJaxb() {
+        return Try.call(()->_Context.loadClass("org.eclipse.persistence.jaxb.rs.MOXyJsonProvider"))
+                .ifFailure(cause->
+                      log.warn("This implementation of RestfulClient does require the class 'MOXyJsonProvider'"
+                          + " on the class-path."
+                          + " Are you missing a maven dependency?")
+                )
+                .getValue()
+                .map(x->x);
     }
 
     @FunctionalInterface
diff --git a/persistence/jpa/applib/pom.xml b/persistence/jpa/applib/pom.xml
index 8b01f61a0c..594eada19e 100644
--- a/persistence/jpa/applib/pom.xml
+++ b/persistence/jpa/applib/pom.xml
@@ -88,6 +88,27 @@
 			<scope>provided</scope>
         </dependency>
 
+        <!-- TODO JPA API (providing compile dependency) -->
+		<dependency>
+			<groupId>org.eclipse.persistence</groupId>
+			<artifactId>org.eclipse.persistence.moxy</artifactId>
+			<version>4.0.0</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.ow2.asm</groupId>
+					<artifactId>asm</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.ow2.asm</groupId>
+					<artifactId>asm-tree</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.ow2.asm</groupId>
+					<artifactId>asm-analysis</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+
 	</dependencies>
 
 
diff --git a/viewers/restfulobjects/client/pom.xml b/viewers/restfulobjects/client/pom.xml
index bbafbca024..9a5f9abe4b 100644
--- a/viewers/restfulobjects/client/pom.xml
+++ b/viewers/restfulobjects/client/pom.xml
@@ -53,6 +53,29 @@
 		    <artifactId>parsson</artifactId>
 		    <version>1.1.1</version>
 		</dependency>
+		
+		<dependency>
+			<groupId>org.eclipse.persistence</groupId>
+			<artifactId>org.eclipse.persistence.moxy</artifactId>
+			<exclusions>
+				<exclusion>
+    				<groupId>org.eclipse.angus</groupId>
+    				<artifactId>angus-activation</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.ow2.asm</groupId>
+					<artifactId>asm</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.ow2.asm</groupId>
+					<artifactId>asm-tree</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.ow2.asm</groupId>
+					<artifactId>asm-analysis</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
 
         <!-- TEST DEPENDENCIES -->
 
diff --git a/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/RestfulClient.java b/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/RestfulClient.java
index 972dd5d78c..34b126465a 100644
--- a/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/RestfulClient.java
+++ b/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/RestfulClient.java
@@ -40,7 +40,6 @@ import org.apache.causeway.viewer.restfulobjects.client.auth.BasicAuthFilter.Cre
 import org.apache.causeway.viewer.restfulobjects.client.log.ClientConversationLogger;
 
 import lombok.NonNull;
-import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 /**
@@ -183,14 +182,16 @@ public class RestfulClient implements AutoCloseable {
     // -- HELPER FILTER
 
     private void registerDefaultJsonProviderForJaxb(final Optional<Class<?>> jsonProviderForJaxbOverride) {
+        jsonProviderForJaxbOverride
+            .or(JsonUtils::getPlatformDefaultJsonProviderForJaxb)
+            .ifPresent(jsonProviderForJaxb->{
 
-        val jsonProviderForJaxb = jsonProviderForJaxbOverride
-                .orElseGet(JsonUtils::getPlatformDefaultJsonProviderForJaxb);
+                Try.run(()->client.register(jsonProviderForJaxb))
+                .ifFailure(cause->
+                    log.error("Failed to register the JsonProviderForJaxb {} for the Restful Client to use."
+                            + " Are you missing a Maven dependency?", jsonProviderForJaxb.getName(), cause));
 
-        Try.run(()->client.register(jsonProviderForJaxb))
-        .ifFailure(cause->
-            log.error("Failed to register the JsonProviderForJaxb for the Restful Client to use."
-                    + " Are you missing a Maven dependency?", cause));
+            });
     }
 
     private void registerBasicAuthFilter() {