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 b790ce0b1e feat: introduce a CamelModelReifierFactoryBuildItem spi to
inject a custom ModelReifierFactory
b790ce0b1e is described below
commit b790ce0b1e1bc5f23223ff8afc596317f57d3487
Author: Luca Burgazzoli <[email protected]>
AuthorDate: Wed Feb 21 12:17:00 2024 +0100
feat: introduce a CamelModelReifierFactoryBuildItem spi to inject a custom
ModelReifierFactory
---
.../core/deployment/CamelContextProcessor.java | 3 ++
.../quarkus/core/deployment/CamelProcessor.java | 10 ++++++
.../spi/CamelModelReifierFactoryBuildItem.java | 36 ++++++++++++++++++++++
.../camel/quarkus/core/CamelContextRecorder.java | 5 +--
.../apache/camel/quarkus/core/CamelRecorder.java | 6 ++++
.../quarkus/k/deployment/RuntimeProcessor.java | 7 +++++
.../k/runtime/ApplicationModelReifierFactory.java | 22 +++++++++++++
.../quarkus/k/runtime/ApplicationRecorder.java | 5 +++
.../org/apache/camel/quarkus/k/it/Application.java | 7 +++--
.../org/apache/camel/quarkus/k/it/RuntimeTest.java | 3 ++
10 files changed, 100 insertions(+), 4 deletions(-)
diff --git
a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
index 1d8aa8a34c..e9215cdb45 100644
---
a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
+++
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelContextProcessor.java
@@ -39,6 +39,7 @@ import
org.apache.camel.quarkus.core.deployment.spi.CamelContextBuildItem;
import
org.apache.camel.quarkus.core.deployment.spi.CamelContextCustomizerBuildItem;
import
org.apache.camel.quarkus.core.deployment.spi.CamelFactoryFinderResolverBuildItem;
import
org.apache.camel.quarkus.core.deployment.spi.CamelModelJAXBContextFactoryBuildItem;
+import
org.apache.camel.quarkus.core.deployment.spi.CamelModelReifierFactoryBuildItem;
import
org.apache.camel.quarkus.core.deployment.spi.CamelModelToXMLDumperBuildItem;
import
org.apache.camel.quarkus.core.deployment.spi.CamelModelToYAMLDumperBuildItem;
import
org.apache.camel.quarkus.core.deployment.spi.CamelPackageScanClassResolverBuildItem;
@@ -80,6 +81,7 @@ public class CamelContextProcessor {
List<CamelContextCustomizerBuildItem> customizers,
CamelComponentNameResolverBuildItem componentNameResolver,
CamelPackageScanClassResolverBuildItem packageScanClassResolver,
+ CamelModelReifierFactoryBuildItem modelReifierFactory,
CamelConfig config) {
RuntimeValue<CamelContext> context = recorder.createContext(
@@ -91,6 +93,7 @@ public class CamelContextProcessor {
factoryFinderResolver.getFactoryFinderResolver(),
componentNameResolver.getComponentNameResolver(),
packageScanClassResolver.getPackageScanClassResolver(),
+ modelReifierFactory.getModelReifierFactory(),
beanContainer.getValue(),
CamelSupport.getCamelVersion(),
config);
diff --git
a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
index d41626e38c..97a0be5c89 100644
---
a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
+++
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java
@@ -56,6 +56,7 @@ import
org.apache.camel.quarkus.core.FastFactoryFinderResolver.Builder;
import
org.apache.camel.quarkus.core.deployment.spi.CamelComponentNameResolverBuildItem;
import
org.apache.camel.quarkus.core.deployment.spi.CamelFactoryFinderResolverBuildItem;
import
org.apache.camel.quarkus.core.deployment.spi.CamelModelJAXBContextFactoryBuildItem;
+import
org.apache.camel.quarkus.core.deployment.spi.CamelModelReifierFactoryBuildItem;
import
org.apache.camel.quarkus.core.deployment.spi.CamelModelToXMLDumperBuildItem;
import
org.apache.camel.quarkus.core.deployment.spi.CamelModelToYAMLDumperBuildItem;
import
org.apache.camel.quarkus.core.deployment.spi.CamelPackageScanClassBuildItem;
@@ -443,6 +444,15 @@ class CamelProcessor {
"META-INF/services/org/apache/camel/rest-registry-factory");
}
+ @Overridable
+ @BuildStep
+ @Record(value = ExecutionTime.STATIC_INIT, optional = true)
+ CamelModelReifierFactoryBuildItem modelReifierFactory(
+ CamelRecorder recorder) {
+
+ return new
CamelModelReifierFactoryBuildItem(recorder.modelReifierFactory());
+ }
+
/**
* Useful for identifying Camel services that are potentially not covered
by inclusion patterns
*/
diff --git
a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelModelReifierFactoryBuildItem.java
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelModelReifierFactoryBuildItem.java
new file mode 100644
index 0000000000..ec98be227f
--- /dev/null
+++
b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/spi/CamelModelReifierFactoryBuildItem.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.core.deployment.spi;
+
+import io.quarkus.builder.item.SimpleBuildItem;
+import io.quarkus.runtime.RuntimeValue;
+import org.apache.camel.spi.ModelReifierFactory;
+
+/**
+ * A {@link SimpleBuildItem} holding a {@link ModelReifierFactory} {@link
RuntimeValue}.
+ */
+public final class CamelModelReifierFactoryBuildItem extends SimpleBuildItem {
+ private final RuntimeValue<ModelReifierFactory> modelReifierFactory;
+
+ public CamelModelReifierFactoryBuildItem(RuntimeValue<ModelReifierFactory>
modelReifierFactory) {
+ this.modelReifierFactory = modelReifierFactory;
+ }
+
+ public RuntimeValue<ModelReifierFactory> getModelReifierFactory() {
+ return modelReifierFactory;
+ }
+}
diff --git
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
index 924c8f3923..0ed013005c 100644
---
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
+++
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java
@@ -38,6 +38,7 @@ import org.apache.camel.spi.CamelContextCustomizer;
import org.apache.camel.spi.ComponentNameResolver;
import org.apache.camel.spi.FactoryFinderResolver;
import org.apache.camel.spi.ModelJAXBContextFactory;
+import org.apache.camel.spi.ModelReifierFactory;
import org.apache.camel.spi.ModelToXMLDumper;
import org.apache.camel.spi.ModelToYAMLDumper;
import org.apache.camel.spi.PackageScanClassResolver;
@@ -56,6 +57,7 @@ public class CamelContextRecorder {
RuntimeValue<FactoryFinderResolver> factoryFinderResolver,
RuntimeValue<ComponentNameResolver> componentNameResolver,
RuntimeValue<PackageScanClassResolver> packageScanClassResolver,
+ RuntimeValue<ModelReifierFactory> modelReifierFactory,
BeanContainer beanContainer,
String version,
CamelConfig config) {
@@ -75,8 +77,7 @@ public class CamelContextRecorder {
extendedCamelContext.addContextPlugin(VariableRepositoryFactory.class,
new DefaultVariableRepositoryFactory(context));
extendedCamelContext.setRegistry(registry.getValue());
- //initialize reifier factory (later then implemented in the Camel)
-
context.setModelReifierFactory(context.createDefaultModelReifierFactory());
+ context.setModelReifierFactory(modelReifierFactory.getValue());
TypeConverterRegistry typeConverterRegistryValue =
typeConverterRegistry.getValue();
typeConverterRegistryValue.setInjector(new
FastTypeConverterInjector(context));
diff --git
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
index 20f51df4af..95b77d2c6a 100644
---
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
+++
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
@@ -27,6 +27,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.FluentProducerTemplate;
import org.apache.camel.ProducerTemplate;
+import org.apache.camel.impl.DefaultModelReifierFactory;
import org.apache.camel.impl.engine.DefaultReactiveExecutor;
import org.apache.camel.model.ValidateDefinition;
import org.apache.camel.model.validator.PredicateValidatorDefinition;
@@ -37,6 +38,7 @@ import org.apache.camel.spi.BeanProxyFactory;
import org.apache.camel.spi.ComponentNameResolver;
import org.apache.camel.spi.FactoryFinderResolver;
import org.apache.camel.spi.ModelJAXBContextFactory;
+import org.apache.camel.spi.ModelReifierFactory;
import org.apache.camel.spi.ModelToXMLDumper;
import org.apache.camel.spi.ModelToYAMLDumper;
import org.apache.camel.spi.PackageScanClassResolver;
@@ -154,6 +156,10 @@ public class CamelRecorder {
return new RuntimeValue<>(builder.getValue().build());
}
+ public RuntimeValue<ModelReifierFactory> modelReifierFactory() {
+ return new RuntimeValue<>(new DefaultModelReifierFactory());
+ }
+
public RuntimeValue<ReactiveExecutor> createReactiveExecutor() {
return new RuntimeValue<>(new DefaultReactiveExecutor());
}
diff --git
a/extensions/camel-k/deployment/src/main/java/org/apache/camel/quarkus/k/deployment/RuntimeProcessor.java
b/extensions/camel-k/deployment/src/main/java/org/apache/camel/quarkus/k/deployment/RuntimeProcessor.java
index b561a978c0..61bdfde43c 100644
---
a/extensions/camel-k/deployment/src/main/java/org/apache/camel/quarkus/k/deployment/RuntimeProcessor.java
+++
b/extensions/camel-k/deployment/src/main/java/org/apache/camel/quarkus/k/deployment/RuntimeProcessor.java
@@ -36,6 +36,7 @@ import org.apache.camel.builder.RouteBuilderLifecycleStrategy;
import org.apache.camel.quarkus.core.deployment.main.spi.CamelMainBuildItem;
import
org.apache.camel.quarkus.core.deployment.main.spi.CamelMainListenerBuildItem;
import
org.apache.camel.quarkus.core.deployment.main.spi.CamelRoutesCollectorBuildItem;
+import
org.apache.camel.quarkus.core.deployment.spi.CamelModelReifierFactoryBuildItem;
import org.apache.camel.quarkus.core.deployment.spi.CamelRuntimeTaskBuildItem;
import org.apache.camel.quarkus.core.deployment.spi.CamelServiceDestination;
import
org.apache.camel.quarkus.core.deployment.spi.CamelServicePatternBuildItem;
@@ -135,4 +136,10 @@ public class RuntimeProcessor {
getAllKnownImplementors(view, StreamCachingStrategy.SpoolRule.class)
.forEach(i ->
reflectiveClass.produce(reflectiveClassBuildItem(i)));
}
+
+ @BuildStep
+ @Record(value = ExecutionTime.STATIC_INIT, optional = true)
+ CamelModelReifierFactoryBuildItem modelReifierFactory(ApplicationRecorder
recorder) {
+ return new
CamelModelReifierFactoryBuildItem(recorder.modelReifierFactory());
+ }
}
diff --git
a/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationModelReifierFactory.java
b/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationModelReifierFactory.java
new file mode 100644
index 0000000000..0c5682ce1f
--- /dev/null
+++
b/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationModelReifierFactory.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.k.runtime;
+
+import org.apache.camel.impl.DefaultModelReifierFactory;
+
+public class ApplicationModelReifierFactory extends DefaultModelReifierFactory
{
+}
diff --git
a/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationRecorder.java
b/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationRecorder.java
index 5e06ec9bd6..a70088ca2b 100644
---
a/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationRecorder.java
+++
b/extensions/camel-k/runtime/src/main/java/org/apache/camel/quarkus/k/runtime/ApplicationRecorder.java
@@ -25,6 +25,7 @@ import org.apache.camel.main.MainListener;
import org.apache.camel.main.RoutesCollector;
import org.apache.camel.quarkus.k.core.Runtime;
import org.apache.camel.quarkus.main.CamelMain;
+import org.apache.camel.spi.ModelReifierFactory;
import org.slf4j.LoggerFactory;
@Recorder
@@ -45,4 +46,8 @@ public class ApplicationRecorder {
public RuntimeValue<RoutesCollector> createRoutesCollector() {
return new RuntimeValue<>(new Application.NoRoutesCollector());
}
+
+ public RuntimeValue<ModelReifierFactory> modelReifierFactory() {
+ return new RuntimeValue<>(new ApplicationModelReifierFactory());
+ }
}
diff --git
a/integration-tests/camel-k-runtime/src/main/java/org/apache/camel/quarkus/k/it/Application.java
b/integration-tests/camel-k-runtime/src/main/java/org/apache/camel/quarkus/k/it/Application.java
index d498de2f60..49fffdb8d4 100644
---
a/integration-tests/camel-k-runtime/src/main/java/org/apache/camel/quarkus/k/it/Application.java
+++
b/integration-tests/camel-k-runtime/src/main/java/org/apache/camel/quarkus/k/it/Application.java
@@ -31,6 +31,7 @@ import jakarta.ws.rs.core.MediaType;
import org.apache.camel.CamelContext;
import org.apache.camel.component.properties.PropertiesComponent;
import org.apache.camel.main.BaseMainSupport;
+import org.apache.camel.model.Model;
import org.apache.camel.quarkus.k.core.Runtime;
import org.apache.camel.quarkus.main.CamelMain;
@@ -46,7 +47,6 @@ public class Application {
@GET
@Path("/inspect")
@Produces(MediaType.APPLICATION_JSON)
- @SuppressWarnings("unchecked")
public JsonObject inspect() {
return Json.createObjectBuilder()
.add(
@@ -62,11 +62,14 @@ public class Application {
.add(
"global-options",
Json.createObjectBuilder(
- (Map) instance(CamelMain.class)
+ instance(CamelMain.class)
.map(BaseMainSupport::getCamelContext)
.map(CamelContext::getGlobalOptions)
.orElseGet(Collections::emptyMap))
.build())
+ .add("model-reifier-factory", Json.createValue(
+
camelContext.getCamelContextExtension().getContextPlugin(Model.class)
+
.getModelReifierFactory().getClass().getName()))
.build();
}
diff --git
a/integration-tests/camel-k-runtime/src/test/java/org/apache/camel/quarkus/k/it/RuntimeTest.java
b/integration-tests/camel-k-runtime/src/test/java/org/apache/camel/quarkus/k/it/RuntimeTest.java
index db62034a4d..7b527a3ed2 100644
---
a/integration-tests/camel-k-runtime/src/test/java/org/apache/camel/quarkus/k/it/RuntimeTest.java
+++
b/integration-tests/camel-k-runtime/src/test/java/org/apache/camel/quarkus/k/it/RuntimeTest.java
@@ -33,6 +33,7 @@ import io.restassured.path.json.JsonPath;
import jakarta.ws.rs.core.MediaType;
import org.apache.camel.quarkus.core.FastCamelContext;
import org.apache.camel.quarkus.k.runtime.Application;
+import org.apache.camel.quarkus.k.runtime.ApplicationModelReifierFactory;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
@@ -59,6 +60,8 @@ public class RuntimeTest {
.isEqualTo(Application.Runtime.class.getName());
assertThat(p.getString("routes-collector"))
.isEqualTo(Application.NoRoutesCollector.class.getName());
+ assertThat(p.getString("model-reifier-factory"))
+ .isEqualTo(ApplicationModelReifierFactory.class.getName());
}
public static class Resources implements
QuarkusTestResourceLifecycleManager {