You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2020/09/23 09:49:24 UTC

[camel-quarkus] branch master updated: Configure NativeImageResourceBuildItem for camel route classpath resources

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 9b5f04b  Configure NativeImageResourceBuildItem for camel route classpath resources
9b5f04b is described below

commit 9b5f04be79b348ad3891a5b13768be78781c5b1c
Author: James Netherton <ja...@gmail.com>
AuthorDate: Wed Sep 23 07:31:57 2020 +0100

    Configure NativeImageResourceBuildItem for camel route classpath resources
    
    Fixes #1812
---
 .../quarkus/core/deployment/util/CamelSupport.java |  7 ++++
 .../CamelMainHotDeploymentProcessor.java           |  7 ++--
 .../deployment/CamelMainNativeImageProcessor.java  | 40 ++++++++++++++++++++++
 .../src/main/resources/application.properties      |  3 --
 .../src/main/resources/application.properties      |  3 --
 .../src/main/resources/application.properties      |  3 --
 6 files changed, 49 insertions(+), 14 deletions(-)

diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/util/CamelSupport.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/util/CamelSupport.java
index 5c2850c..9ae4a90 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/util/CamelSupport.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/util/CamelSupport.java
@@ -34,6 +34,7 @@ import io.quarkus.deployment.ApplicationArchive;
 import io.quarkus.deployment.builditem.ApplicationArchivesBuildItem;
 import org.apache.camel.impl.engine.AbstractCamelContext;
 import org.apache.camel.quarkus.core.deployment.spi.CamelServiceBuildItem;
+import org.eclipse.microprofile.config.ConfigProvider;
 import org.jboss.jandex.ClassInfo;
 
 public final class CamelSupport {
@@ -118,4 +119,10 @@ public final class CamelSupport {
 
         return Objects.requireNonNull(version, "Could not determine Camel version");
     }
+
+    public static <T> T getOptionalConfigValue(String property, Class<T> type, T defaultValue) {
+        return ConfigProvider.getConfig()
+                .getOptionalValue(property, type)
+                .orElse(defaultValue);
+    }
 }
diff --git a/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainHotDeploymentProcessor.java b/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainHotDeploymentProcessor.java
index ce8d2a9..d207ea5 100644
--- a/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainHotDeploymentProcessor.java
+++ b/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainHotDeploymentProcessor.java
@@ -25,7 +25,7 @@ import java.util.stream.Stream;
 
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem;
-import org.eclipse.microprofile.config.ConfigProvider;
+import org.apache.camel.quarkus.core.deployment.util.CamelSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,10 +53,7 @@ class CamelMainHotDeploymentProcessor {
     }
 
     private static List<HotDeploymentWatchedFileBuildItem> locations(String property) {
-        String[] locations = ConfigProvider.getConfig()
-                .getOptionalValue(property, String[].class)
-                .orElse(EMPTY_STRING_ARRAY);
-
+        String[] locations = CamelSupport.getOptionalConfigValue(property, String[].class, EMPTY_STRING_ARRAY);
         List<HotDeploymentWatchedFileBuildItem> items = Stream.of(locations)
                 .filter(location -> location.startsWith(FILE_PREFIX))
                 .map(location -> location.substring(FILE_PREFIX.length()))
diff --git a/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainNativeImageProcessor.java b/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainNativeImageProcessor.java
index 2ea03b5..453f473 100644
--- a/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainNativeImageProcessor.java
+++ b/extensions-core/main/deployment/src/main/java/org/apache/camel/quarkus/main/deployment/CamelMainNativeImageProcessor.java
@@ -16,10 +16,21 @@
  */
 package org.apache.camel.quarkus.main.deployment;
 
+import io.quarkus.deployment.Capabilities;
+import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import org.apache.camel.quarkus.core.deployment.util.CamelSupport;
+import org.apache.camel.quarkus.support.common.CamelCapabilities;
+import org.apache.camel.support.ResourceHelper;
+import org.apache.camel.util.AntPathMatcher;
+import org.jboss.logging.Logger;
 
 public class CamelMainNativeImageProcessor {
+
+    private static final Logger LOG = Logger.getLogger(CamelMainNativeImageProcessor.class);
+
     @BuildStep
     ReflectiveClassBuildItem reflectiveCLasses() {
         // TODO: The classes below are needed to fix https://github.com/apache/camel-quarkus/issues/1005
@@ -33,4 +44,33 @@ public class CamelMainNativeImageProcessor {
                 org.apache.camel.spi.RestConfiguration.class,
                 org.apache.camel.quarkus.main.CamelMainApplication.class);
     }
+
+    @BuildStep
+    void camelNativeImageResources(Capabilities capabilities, BuildProducer<NativeImageResourceBuildItem> nativeResource) {
+        if (capabilities.isCapabilityPresent(CamelCapabilities.XML)) {
+            String prefix = "camel.main.";
+            String[] properties = new String[] { "xml-rests", "xml-routes", "xml-route-templates" };
+            for (String property : properties) {
+                embedCamelResource(prefix + property, nativeResource);
+            }
+        }
+    }
+
+    private void embedCamelResource(String propertyName, BuildProducer<NativeImageResourceBuildItem> nativeResource) {
+        for (String path : CamelSupport.getOptionalConfigValue(propertyName, String[].class, new String[0])) {
+            String scheme = ResourceHelper.getScheme(path);
+
+            // Null scheme is equivalent to classpath scheme
+            if (scheme == null || scheme.equals("classpath:")) {
+                if (AntPathMatcher.INSTANCE.isPattern(path)) {
+                    // Classpath directory traversal via wildcard paths does not work on GraalVM. The exact path to the resource has to be looked up
+                    // https://github.com/oracle/graal/issues/1108
+                    LOG.warnf("%s classpath wildcards does not work in native mode. Resources matching %s will not be loaded.",
+                            propertyName, path);
+                } else {
+                    nativeResource.produce(new NativeImageResourceBuildItem(path.replace("classpath:", "")));
+                }
+            }
+        }
+    }
 }
diff --git a/integration-tests/dataformats-json/src/main/resources/application.properties b/integration-tests/dataformats-json/src/main/resources/application.properties
index 2adf8b8..70600cc 100644
--- a/integration-tests/dataformats-json/src/main/resources/application.properties
+++ b/integration-tests/dataformats-json/src/main/resources/application.properties
@@ -19,9 +19,6 @@
 #
 quarkus.ssl.native=true
 
-# include xml routes in native image
-quarkus.native.additional-build-args = -H:IncludeResources=routes/.*-routes.xml
-
 #
 # Camel
 #
diff --git a/integration-tests/main-xml-io/src/main/resources/application.properties b/integration-tests/main-xml-io/src/main/resources/application.properties
index b2816e3..3f0170a 100644
--- a/integration-tests/main-xml-io/src/main/resources/application.properties
+++ b/integration-tests/main-xml-io/src/main/resources/application.properties
@@ -19,9 +19,6 @@
 # Quarkus
 #
 
-# include xml routes in native image
-quarkus.native.additional-build-args = -H:IncludeResources=routes/my-routes.xml
-
 #
 # Camel
 #
diff --git a/integration-tests/main-xml-jaxb/src/main/resources/application.properties b/integration-tests/main-xml-jaxb/src/main/resources/application.properties
index b2816e3..3f0170a 100644
--- a/integration-tests/main-xml-jaxb/src/main/resources/application.properties
+++ b/integration-tests/main-xml-jaxb/src/main/resources/application.properties
@@ -19,9 +19,6 @@
 # Quarkus
 #
 
-# include xml routes in native image
-quarkus.native.additional-build-args = -H:IncludeResources=routes/my-routes.xml
-
 #
 # Camel
 #