You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gi...@apache.org on 2023/10/07 03:24:14 UTC
[camel-quarkus] 46/46: Rework Kemelet build time resource processing for #5230
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 7ced8877b94b57b5e428a951a7fb347368935792
Author: James Netherton <ja...@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);