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;
+ }
}
}