You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2023/07/31 16:42:45 UTC

[camel-quarkus] branch main updated: Tidy iCal extension native workaround for absence of com.github.erosb:json-sKema

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

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new 3c412624d4 Tidy iCal extension native workaround for absence of com.github.erosb:json-sKema
3c412624d4 is described below

commit 3c412624d4634b8c9cf0c98d85efb2b575b7e793
Author: James Netherton <ja...@gmail.com>
AuthorDate: Mon Jul 31 13:56:16 2023 +0100

    Tidy iCal extension native workaround for absence of com.github.erosb:json-sKema
    
    Fixes #5099
---
 .../component/ical/deployment/IcalProcessor.java   | 22 ++++++-----------
 .../deployment/SchemaValidatorFactorySubst.java    | 28 +++++++++++++++-------
 2 files changed, 27 insertions(+), 23 deletions(-)

diff --git a/extensions/ical/deployment/src/main/java/org/apache/camel/quarkus/component/ical/deployment/IcalProcessor.java b/extensions/ical/deployment/src/main/java/org/apache/camel/quarkus/component/ical/deployment/IcalProcessor.java
index 989dd7cd8c..5ae52c557c 100644
--- a/extensions/ical/deployment/src/main/java/org/apache/camel/quarkus/component/ical/deployment/IcalProcessor.java
+++ b/extensions/ical/deployment/src/main/java/org/apache/camel/quarkus/component/ical/deployment/IcalProcessor.java
@@ -20,13 +20,13 @@ import java.util.stream.Stream;
 
 import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
-import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceDirectoryBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
-import io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.RuntimeReinitializedClassBuildItem;
+import net.fortuna.ical4j.model.TimeZoneLoader;
+import net.fortuna.ical4j.util.MapTimeZoneCache;
 
 class IcalProcessor {
 
@@ -62,21 +62,13 @@ class IcalProcessor {
     }
 
     @BuildStep
-    void registerWsSecurityReflectionItems(CombinedIndexBuildItem combinedIndexBuildItem,
-            BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
+    void registerForReflection(BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
         reflectiveClass
-                .produce(ReflectiveClassBuildItem.builder("net.fortuna.ical4j.util.MapTimeZoneCache").methods(true).build());
+                .produce(ReflectiveClassBuildItem.builder(MapTimeZoneCache.class).build());
     }
 
     @BuildStep
-    IndexDependencyBuildItem registerDependencyForIndex() {
-        return new IndexDependencyBuildItem("org.mnode.ical4j", "ical4j");
+    RuntimeReinitializedClassBuildItem runtimeReinitializedClasses() {
+        return new RuntimeReinitializedClassBuildItem(TimeZoneLoader.class.getName());
     }
-
-    @BuildStep
-    void runtimeInitializedClasses(BuildProducer<RuntimeInitializedClassBuildItem> runtimeInitializedClass) {
-        runtimeInitializedClass
-                .produce(new RuntimeInitializedClassBuildItem("net.fortuna.ical4j.validate.schema.JsonSchemaValidator"));
-    }
-
 }
diff --git a/extensions/ical/runtime/src/main/java/org/apache/camel/quarkus/component/ical/deployment/SchemaValidatorFactorySubst.java b/extensions/ical/runtime/src/main/java/org/apache/camel/quarkus/component/ical/deployment/SchemaValidatorFactorySubst.java
index e3f6e3447a..dfa063ecab 100644
--- a/extensions/ical/runtime/src/main/java/org/apache/camel/quarkus/component/ical/deployment/SchemaValidatorFactorySubst.java
+++ b/extensions/ical/runtime/src/main/java/org/apache/camel/quarkus/component/ical/deployment/SchemaValidatorFactorySubst.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.quarkus.component.ical.deployment;
 
+import java.util.function.BooleanSupplier;
+
 import com.oracle.svm.core.annotate.Substitute;
 import com.oracle.svm.core.annotate.TargetClass;
 import net.fortuna.ical4j.model.parameter.Schema;
@@ -23,17 +25,27 @@ import net.fortuna.ical4j.model.property.StructuredData;
 import net.fortuna.ical4j.validate.Validator;
 import net.fortuna.ical4j.validate.schema.SchemaValidatorFactory;
 
-@TargetClass(value = SchemaValidatorFactory.class)
+/**
+ * Cuts out paths to optional JsonSchemaValidator. Only required if STRUCTURED-DATA elements are present
+ * in the calendar definition. See RFC 9073.
+ */
+@TargetClass(value = SchemaValidatorFactory.class, onlyWith = IsJsonSkemaAbsent.class)
 final class SchemaValidatorFactorySubstitutions {
-
     @Substitute
     public static Validator<StructuredData> newInstance(Schema schema) {
-        //see https://github.com/apache/camel-quarkus/issues/5099 for more details
-        //Method causes error (it is unclear to me, why it is happening):
-        //UnresolvedElementException: Discovered unresolved method during parsing: net.fortuna.ical4j.validate.schema.JsonSchemaValidator.<init>(java.net.URL).
-        // This error is reported at image build time because class net.fortuna.ical4j.validate.schema.SchemaValidatorFactory
-        // is registered for linking at image build time by command line
+        throw new UnsupportedOperationException(
+                "iCalendar JSON schema validation is unavailable. Add com.github.erosb:json-sKema to the application classpath");
+    }
+}
 
-        throw new RuntimeException("Feature is not supported.");
+final class IsJsonSkemaAbsent implements BooleanSupplier {
+    @Override
+    public boolean getAsBoolean() {
+        try {
+            Class.forName("com.github.erosb.jsonsKema.Schema", false, Thread.currentThread().getContextClassLoader());
+            return false;
+        } catch (ClassNotFoundException e) {
+            return true;
+        }
     }
 }