This is an automated email from the ASF dual-hosted git repository. github-bot pushed a commit to branch camel-main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 81cc2e670a3c358b07757180fdd4f76dd6af4c62 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Fri Oct 6 08:07:51 2023 +0100 Rework Kemelet build time resource processing for #5230 --- .../kamelet/deployment/KameletProcessor.java | 24 +++++++++----------- ...pathResource.java => EmptyKameletResource.java} | 26 +++++----------------- .../quarkus/component/kamelet/KameletRecorder.java | 24 ++++++++++++++++++++ 3 files changed, 39 insertions(+), 35 deletions(-) diff --git a/extensions/kamelet/deployment/src/main/java/org/apache/camel/quarkus/component/kamelet/deployment/KameletProcessor.java b/extensions/kamelet/deployment/src/main/java/org/apache/camel/quarkus/component/kamelet/deployment/KameletProcessor.java index 142a4461ae..1b9ea1f1c1 100644 --- a/extensions/kamelet/deployment/src/main/java/org/apache/camel/quarkus/component/kamelet/deployment/KameletProcessor.java +++ b/extensions/kamelet/deployment/src/main/java/org/apache/camel/quarkus/component/kamelet/deployment/KameletProcessor.java @@ -16,7 +16,6 @@ */ package org.apache.camel.quarkus.component.kamelet.deployment; -import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -36,7 +35,7 @@ import org.apache.camel.RoutesBuilder; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.model.RouteTemplateDefinition; -import org.apache.camel.quarkus.component.kamelet.KameletClasspathResource; +import org.apache.camel.quarkus.component.kamelet.EmptyKameletResource; import org.apache.camel.quarkus.component.kamelet.KameletConfiguration; import org.apache.camel.quarkus.component.kamelet.KameletRecorder; import org.apache.camel.quarkus.core.deployment.spi.CamelContextCustomizerBuildItem; @@ -121,19 +120,16 @@ class KameletProcessor { } } - // Use Quarkus recorder serialization friendly KameletClasspathResource instead of the default Resource + // TODO: Improve / remove this https://github.com/apache/camel-quarkus/issues/5230 + // Use Quarkus recorder serialization friendly EmptyKameletResource instead of the default Resource. + // The resource will get reevaluated at runtime and replaced if it exists definitions.forEach(definition -> { - try { - Resource originalResource = definition.getResource(); - KameletClasspathResource kameletResource = new KameletClasspathResource(); - kameletResource.setScheme(originalResource.getScheme()); - kameletResource.setLocation(originalResource.getLocation()); - kameletResource.setExists(originalResource.exists()); - kameletResource.setData(originalResource.getInputStream().readAllBytes()); - definition.setResource(kameletResource); - } catch (IOException e) { - throw new RuntimeException(e); - } + Resource originalResource = definition.getResource(); + EmptyKameletResource resource = new EmptyKameletResource(); + resource.setScheme(originalResource.getScheme()); + resource.setLocation(originalResource.getLocation()); + resource.setExists(originalResource.exists()); + definition.setResource(resource); }); return new CamelContextCustomizerBuildItem( diff --git a/extensions/kamelet/runtime/src/main/java/org/apache/camel/quarkus/component/kamelet/KameletClasspathResource.java b/extensions/kamelet/runtime/src/main/java/org/apache/camel/quarkus/component/kamelet/EmptyKameletResource.java similarity index 77% rename from extensions/kamelet/runtime/src/main/java/org/apache/camel/quarkus/component/kamelet/KameletClasspathResource.java rename to extensions/kamelet/runtime/src/main/java/org/apache/camel/quarkus/component/kamelet/EmptyKameletResource.java index 357e86c0e1..aa17e84ead 100644 --- a/extensions/kamelet/runtime/src/main/java/org/apache/camel/quarkus/component/kamelet/KameletClasspathResource.java +++ b/extensions/kamelet/runtime/src/main/java/org/apache/camel/quarkus/component/kamelet/EmptyKameletResource.java @@ -16,7 +16,6 @@ */ package org.apache.camel.quarkus.component.kamelet; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Objects; @@ -24,14 +23,14 @@ import java.util.Objects; import org.apache.camel.spi.Resource; /** - * Mutable & Quarkus recorder serialization friendly implementation for Kamelet classpath resources + * TODO: Improve / remove this https://github.com/apache/camel-quarkus/issues/5230 + * Quarkus build time & serialization friendly implementation for Kamelet resources. This gets replaced at runtime + * when the resource is reevaluated. */ -public class KameletClasspathResource implements Resource { +public final class EmptyKameletResource implements Resource { private String scheme; private String location; private boolean exists; - private byte[] data; - private InputStream inputStream; @Override public String getScheme() { @@ -60,24 +59,9 @@ public class KameletClasspathResource implements Resource { this.exists = exists; } - public byte[] getData() { - return this.data; - } - - public void setData(byte[] data) { - this.inputStream = null; - this.data = data; - } - @Override public InputStream getInputStream() throws IOException { - if (this.data == null) { - throw new IOException("No resource content was defined"); - } - if (this.inputStream == null) { - this.inputStream = new ByteArrayInputStream(this.data); - } - return inputStream; + return InputStream.nullInputStream(); } @Override diff --git a/extensions/kamelet/runtime/src/main/java/org/apache/camel/quarkus/component/kamelet/KameletRecorder.java b/extensions/kamelet/runtime/src/main/java/org/apache/camel/quarkus/component/kamelet/KameletRecorder.java index eddc8a87a5..98499932ed 100644 --- a/extensions/kamelet/runtime/src/main/java/org/apache/camel/quarkus/component/kamelet/KameletRecorder.java +++ b/extensions/kamelet/runtime/src/main/java/org/apache/camel/quarkus/component/kamelet/KameletRecorder.java @@ -25,9 +25,16 @@ import org.apache.camel.CamelContext; import org.apache.camel.model.Model; import org.apache.camel.model.RouteTemplateDefinition; import org.apache.camel.spi.CamelContextCustomizer; +import org.apache.camel.spi.Resource; +import org.apache.camel.spi.ResourceLoader; +import org.apache.camel.support.PluginHelper; +import org.apache.camel.util.ObjectHelper; +import org.jboss.logging.Logger; @Recorder public class KameletRecorder { + private static final Logger LOG = Logger.getLogger(KameletRecorder.class); + public RuntimeValue<CamelContextCustomizer> createTemplateLoaderCustomizer( @RelaxedValidation List<RouteTemplateDefinition> definitions) { @@ -35,6 +42,23 @@ public class KameletRecorder { @Override public void configure(CamelContext context) { try { + // TODO: Improve / remove this: https://github.com/apache/camel-quarkus/issues/5230 + ResourceLoader resourceLoader = PluginHelper.getResourceLoader(context); + for (RouteTemplateDefinition definition : definitions) { + Resource originalResource = definition.getResource(); + String location = originalResource.getLocation(); + if (originalResource instanceof EmptyKameletResource && !ObjectHelper.isNotEmpty(location)) { + Resource resource = resourceLoader.resolveResource(location); + if (resource != null) { + definition.setResource(resource); + } else { + if (LOG.isDebugEnabled()) { + LOG.debugf("Failed resolving Kamelet resource %s. Resource dumping will be disabled.", + definition.getId()); + } + } + } + } context.getCamelContextExtension().getContextPlugin(Model.class).addRouteTemplateDefinitions(definitions); } catch (Exception e) { throw new RuntimeException(e);