You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2020/04/07 08:55:15 UTC
[camel-quarkus] 02/08: camel 3.2-snapshot
This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch camel-master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit f548b81000ccbd2888c2dd1cdf47c9f96217fb3a
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Mon Mar 30 14:06:52 2020 +0200
camel 3.2-snapshot
---
docs/modules/ROOT/pages/cdi.adoc | 2 +-
.../src/main/java/org/acme/timer/TimerRoute.java | 2 +-
.../src/main/java/org/acme/timer/TimerRoute.java | 2 +-
.../src/main/resources/routes/my-routes.xml | 2 +-
.../src/main/java/org/acme/timer/TimerRoute.java | 2 +-
.../core/deployment/NativeImageProcessor.java | 34 +++-
.../org/apache/camel/quarkus/core/BaseModel.java | 59 +-----
.../org/apache/camel/quarkus/core/CamelMain.java | 8 +-
.../camel/quarkus/core/CamelMainRecorder.java | 1 -
.../apache/camel/quarkus/core/CamelRecorder.java | 2 +-
.../quarkus/core/DisabledValidateReifier.java | 6 +-
.../camel/quarkus/core/FastCamelContext.java | 225 ++++++++++++---------
.../org/apache/camel/quarkus/core/FastModel.java | 195 ------------------
.../camel/quarkus/core/FastTypeConverter.java | 5 +-
.../component/xml/jaxb/XmlJaxbRecorder.java | 2 +-
.../component/qute/QuteComponentConfigurer.java | 32 ++-
.../component/qute/QuteEndpointConfigurer.java | 36 +++-
.../org/apache/camel/component/qute/qute.json | 1 +
18 files changed, 245 insertions(+), 371 deletions(-)
diff --git a/docs/modules/ROOT/pages/cdi.adoc b/docs/modules/ROOT/pages/cdi.adoc
index e9f1420..f858973 100644
--- a/docs/modules/ROOT/pages/cdi.adoc
+++ b/docs/modules/ROOT/pages/cdi.adoc
@@ -15,7 +15,7 @@ import org.eclipse.microprofile.config.inject.ConfigProperty;
@ApplicationScoped <1>
public class TimerRoute extends RouteBuilder {
- @ConfigProperty(name = "timer.period", defaultValue = "1s") <2>
+ @ConfigProperty(name = "timer.period", defaultValue = "1000") <2>
String period;
@Inject
diff --git a/examples/timer-log-cdi/src/main/java/org/acme/timer/TimerRoute.java b/examples/timer-log-cdi/src/main/java/org/acme/timer/TimerRoute.java
index 8052005..0e0056f 100644
--- a/examples/timer-log-cdi/src/main/java/org/acme/timer/TimerRoute.java
+++ b/examples/timer-log-cdi/src/main/java/org/acme/timer/TimerRoute.java
@@ -32,7 +32,7 @@ import org.eclipse.microprofile.config.inject.ConfigProperty;
public class TimerRoute extends RouteBuilder {
/** {@code timer.period} is defined in {@code src/main/resources/application.properties} */
- @ConfigProperty(name = "timer.period", defaultValue = "1s")
+ @ConfigProperty(name = "timer.period", defaultValue = "1000")
String period;
/** An injected bean */
diff --git a/examples/timer-log-spring/src/main/java/org/acme/timer/TimerRoute.java b/examples/timer-log-spring/src/main/java/org/acme/timer/TimerRoute.java
index 21c07bd..a7cdd61 100644
--- a/examples/timer-log-spring/src/main/java/org/acme/timer/TimerRoute.java
+++ b/examples/timer-log-spring/src/main/java/org/acme/timer/TimerRoute.java
@@ -31,7 +31,7 @@ public class TimerRoute extends RouteBuilder {
* {@code timer.period} is defined in {@code src/main/resources/application.properties}
*/
@Value("timer.period")
- String period = "1s";
+ String period = "1000";
/**
* An injected bean
diff --git a/examples/timer-log-xml/src/main/resources/routes/my-routes.xml b/examples/timer-log-xml/src/main/resources/routes/my-routes.xml
index 42fd73f..ed63c39 100644
--- a/examples/timer-log-xml/src/main/resources/routes/my-routes.xml
+++ b/examples/timer-log-xml/src/main/resources/routes/my-routes.xml
@@ -24,7 +24,7 @@
http://camel.apache.org/schema/spring/camel-spring.xsd">
<route id="xml-route">
- <from uri="timer:from-xml?period=1s"/>
+ <from uri="timer:from-xml?period=1000"/>
<log message="Hello XML!"/>
</route>
diff --git a/examples/timer-log/src/main/java/org/acme/timer/TimerRoute.java b/examples/timer-log/src/main/java/org/acme/timer/TimerRoute.java
index 70b8bd7..0a3b0b9 100644
--- a/examples/timer-log/src/main/java/org/acme/timer/TimerRoute.java
+++ b/examples/timer-log/src/main/java/org/acme/timer/TimerRoute.java
@@ -22,7 +22,7 @@ public class TimerRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
- from("timer:foo?period=1s")
+ from("timer:foo?period=1000")
.log("Hello World");
}
}
diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/NativeImageProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/NativeImageProcessor.java
index 0daef50..c055309 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/NativeImageProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/NativeImageProcessor.java
@@ -33,6 +33,7 @@ import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveMethodBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.RuntimeReinitializedClassBuildItem;
import org.apache.camel.CamelContext;
import org.apache.camel.Component;
import org.apache.camel.Consumer;
@@ -85,7 +86,7 @@ public class NativeImageProcessor {
PropertiesComponent.class,
DataFormat.class);
- @BuildStep
+ // @BuildStep
void reflectiveItems(
CombinedIndexBuildItem combinedIndex,
BuildProducer<ReflectiveClassBuildItem> reflectiveClass,
@@ -138,7 +139,7 @@ public class NativeImageProcessor {
}
- @BuildStep
+ // @BuildStep
void camelServices(
List<CamelServiceBuildItem> camelServices,
BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
@@ -292,16 +293,16 @@ public class NativeImageProcessor {
//
camelRoutesBuilders.forEach(camelRoutesBuilderClassBuildItem -> {
reflectiveClass.produce(
- new ReflectiveClassBuildItem(true, true, camelRoutesBuilderClassBuildItem.getDotName().toString()));
+ new ReflectiveClassBuildItem(false, false, camelRoutesBuilderClassBuildItem.getDotName().toString()));
});
- reflectiveClass.produce(new ReflectiveClassBuildItem(
- true,
- false,
- org.apache.camel.main.DefaultConfigurationProperties.class,
- org.apache.camel.main.MainConfigurationProperties.class,
- org.apache.camel.main.HystrixConfigurationProperties.class,
- org.apache.camel.main.RestConfigurationProperties.class));
+ // reflectiveClass.produce(new ReflectiveClassBuildItem(
+ // true,
+ // false,
+ // org.apache.camel.main.DefaultConfigurationProperties.class,
+ // org.apache.camel.main.MainConfigurationProperties.class,
+ // org.apache.camel.main.HystrixConfigurationProperties.class,
+ // org.apache.camel.main.RestConfigurationProperties.class));
// TODO: The classes below are needed to fix https://github.com/apache/camel-quarkus/issues/1005
// but we need to investigate why it does not fail with Java 1.8
@@ -314,4 +315,17 @@ public class NativeImageProcessor {
org.apache.camel.spi.RestConfiguration.class));
}
}
+
+ @BuildStep
+ void process(BuildProducer<RuntimeReinitializedClassBuildItem> reinitialized) {
+ for (String s : Arrays.asList(
+ "sun.security.jca.JCAUtil",
+ "sun.security.jca.JCAUtil$CachedSecureRandomHolder",
+ "sun.security.provider.SecureRandom$SeederHolder",
+ "sun.security.provider.SeedGenerator",
+ "java.security.SecureRandom",
+ "java.net.DefaultDatagramSocketImplFactory")) {
+ reinitialized.produce(new RuntimeReinitializedClassBuildItem(s));
+ }
+ }
}
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java
index 0a11942..2ccfc61 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java
@@ -16,28 +16,13 @@
*/
package org.apache.camel.quarkus.core;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import org.apache.camel.CamelContext;
import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.FailedToStartRouteException;
-import org.apache.camel.model.DataFormatDefinition;
-import org.apache.camel.model.HystrixConfigurationDefinition;
-import org.apache.camel.model.Model;
-import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.ProcessorDefinitionHelper;
-import org.apache.camel.model.Resilience4jConfigurationDefinition;
-import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteDefinitionHelper;
-import org.apache.camel.model.RouteFilters;
+import org.apache.camel.model.*;
import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.model.transformer.TransformerDefinition;
@@ -80,7 +65,7 @@ public abstract class BaseModel implements Model {
removeRouteDefinitions(list);
this.routeDefinitions.addAll(list);
if (shouldStartRoutes()) {
- startRouteDefinitions(list);
+ getCamelContext().adapt(ModelCamelContext.class).startRouteDefinitions(list);
}
}
@@ -256,7 +241,7 @@ public abstract class BaseModel implements Model {
}
@Override
- public <T extends ProcessorDefinition> T getProcessorDefinition(String id, Class<T> type) {
+ public <T extends ProcessorDefinition<T>> T getProcessorDefinition(String id, Class<T> type) {
ProcessorDefinition answer = getProcessorDefinition(id);
if (answer != null) {
return type.cast(answer);
@@ -295,11 +280,6 @@ public abstract class BaseModel implements Model {
}
@Override
- public void startRouteDefinitions() throws Exception {
- startRouteDefinitions(routeDefinitions);
- }
-
- @Override
public void setRouteFilterPattern(String include, String exclude) {
setRouteFilter(RouteFilters.filterByPattern(include, exclude));
}
@@ -314,37 +294,6 @@ public abstract class BaseModel implements Model {
this.routeFilter = routeFilter;
}
- protected void startRouteDefinitions(Collection<RouteDefinition> list) throws Exception {
- if (list != null) {
- for (RouteDefinition route : list) {
- startRoute(route);
- }
- }
- }
-
- public void startRoute(RouteDefinition routeDefinition) throws Exception {
- prepare(routeDefinition);
- start(routeDefinition);
- }
-
- protected void prepare(RouteDefinition routeDefinition) throws Exception {
- // assign ids to the routes and validate that the id's is all unique
- RouteDefinitionHelper.forceAssignIds(camelContext, routeDefinitions);
- String duplicate = RouteDefinitionHelper.validateUniqueIds(routeDefinition, routeDefinitions);
- if (duplicate != null) {
- throw new FailedToStartRouteException(routeDefinition.getId(),
- "duplicate id detected: " + duplicate + ". Please correct ids to be unique among all your routes.");
- }
-
- // must ensure route is prepared, before we can start it
- if (!routeDefinition.isPrepared()) {
- RouteDefinitionHelper.prepareRoute(camelContext, routeDefinition);
- routeDefinition.markPrepared();
- }
- }
-
- protected abstract void start(RouteDefinition routeDefinition) throws Exception;
-
/**
* Should we start newly added routes?
*/
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMain.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMain.java
index a83862c..34cfa37 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMain.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMain.java
@@ -41,12 +41,18 @@ public class CamelMain extends BaseMainSupport implements CamelContextAware {
}
@Override
+ protected void doInit() throws Exception {
+ super.doInit();
+ postProcessCamelContext(getCamelContext());
+ getCamelContext().init();
+ }
+
+ @Override
protected void doStart() throws Exception {
for (MainListener listener : listeners) {
listener.beforeStart(this);
}
- postProcessCamelContext(getCamelContext());
getCamelContext().start();
for (MainListener listener : listeners) {
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java
index ec0d238..8542ee6 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelMainRecorder.java
@@ -93,7 +93,6 @@ public class CamelMainRecorder {
});
try {
- main.getValue().init();
main.getValue().start();
} catch (Exception e) {
throw new RuntimeException(e);
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 56c37e5..95770b0 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
@@ -80,7 +80,7 @@ public class CamelRecorder {
context.setTypeConverterRegistry(typeConverterRegistry.getValue());
context.setLoadTypeConverters(false);
context.setModelJAXBContextFactory(contextFactory.getValue());
- context.init();
+ context.build();
// register to the container
beanContainer.instance(CamelProducers.class).setContext(context);
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledValidateReifier.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledValidateReifier.java
index 911bfe7..a9b8144 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledValidateReifier.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledValidateReifier.java
@@ -17,15 +17,15 @@
package org.apache.camel.quarkus.core;
import org.apache.camel.Processor;
+import org.apache.camel.Route;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.model.ValidateDefinition;
import org.apache.camel.reifier.ProcessorReifier;
-import org.apache.camel.spi.RouteContext;
public class DisabledValidateReifier extends ProcessorReifier<ValidateDefinition> {
- public DisabledValidateReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
- super(routeContext, (ValidateDefinition) definition);
+ public DisabledValidateReifier(Route route, ProcessorDefinition<?> definition) {
+ super(route, (ValidateDefinition) definition);
}
@Override
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
index f0d0493..768a48f 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
@@ -24,105 +24,33 @@ import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.function.Function;
-import org.apache.camel.AsyncProcessor;
-import org.apache.camel.CatalogCamelContext;
-import org.apache.camel.Component;
-import org.apache.camel.Endpoint;
-import org.apache.camel.Processor;
-import org.apache.camel.TypeConverter;
+import org.apache.camel.*;
+import org.apache.camel.builder.AdviceWithRouteBuilder;
import org.apache.camel.catalog.RuntimeCamelCatalog;
import org.apache.camel.catalog.impl.DefaultRuntimeCamelCatalog;
import org.apache.camel.component.microprofile.config.CamelMicroProfilePropertiesSource;
import org.apache.camel.health.HealthCheckRegistry;
import org.apache.camel.impl.DefaultExecutorServiceManager;
-import org.apache.camel.impl.engine.AbstractCamelContext;
-import org.apache.camel.impl.engine.BeanProcessorFactoryResolver;
-import org.apache.camel.impl.engine.BeanProxyFactoryResolver;
-import org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager;
-import org.apache.camel.impl.engine.DefaultBeanIntrospection;
-import org.apache.camel.impl.engine.DefaultCamelBeanPostProcessor;
-import org.apache.camel.impl.engine.DefaultCamelContextNameStrategy;
-import org.apache.camel.impl.engine.DefaultClassResolver;
-import org.apache.camel.impl.engine.DefaultComponentResolver;
-import org.apache.camel.impl.engine.DefaultConfigurerResolver;
-import org.apache.camel.impl.engine.DefaultDataFormatResolver;
-import org.apache.camel.impl.engine.DefaultEndpointRegistry;
-import org.apache.camel.impl.engine.DefaultInflightRepository;
-import org.apache.camel.impl.engine.DefaultInjector;
-import org.apache.camel.impl.engine.DefaultLanguageResolver;
-import org.apache.camel.impl.engine.DefaultMessageHistoryFactory;
-import org.apache.camel.impl.engine.DefaultNodeIdFactory;
-import org.apache.camel.impl.engine.DefaultPackageScanClassResolver;
-import org.apache.camel.impl.engine.DefaultPackageScanResourceResolver;
-import org.apache.camel.impl.engine.DefaultProcessorFactory;
-import org.apache.camel.impl.engine.DefaultReactiveExecutor;
-import org.apache.camel.impl.engine.DefaultRouteController;
-import org.apache.camel.impl.engine.DefaultStreamCachingStrategy;
-import org.apache.camel.impl.engine.DefaultTracer;
-import org.apache.camel.impl.engine.DefaultTransformerRegistry;
-import org.apache.camel.impl.engine.DefaultUnitOfWorkFactory;
-import org.apache.camel.impl.engine.DefaultValidatorRegistry;
-import org.apache.camel.impl.engine.EndpointKey;
-import org.apache.camel.impl.engine.HeadersMapFactoryResolver;
-import org.apache.camel.impl.engine.RestRegistryFactoryResolver;
+import org.apache.camel.impl.engine.*;
import org.apache.camel.impl.health.DefaultHealthCheckRegistry;
import org.apache.camel.impl.transformer.TransformerKey;
import org.apache.camel.impl.validator.ValidatorKey;
-import org.apache.camel.model.DataFormatDefinition;
-import org.apache.camel.model.HystrixConfigurationDefinition;
-import org.apache.camel.model.Model;
-import org.apache.camel.model.ModelCamelContext;
-import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.Resilience4jConfigurationDefinition;
-import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.*;
import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
+import org.apache.camel.model.language.ExpressionDefinition;
import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.model.transformer.TransformerDefinition;
import org.apache.camel.model.validator.ValidatorDefinition;
import org.apache.camel.processor.MulticastProcessor;
-import org.apache.camel.spi.AsyncProcessorAwaitManager;
-import org.apache.camel.spi.BeanIntrospection;
-import org.apache.camel.spi.BeanProcessorFactory;
-import org.apache.camel.spi.BeanProxyFactory;
-import org.apache.camel.spi.CamelBeanPostProcessor;
-import org.apache.camel.spi.CamelContextNameStrategy;
-import org.apache.camel.spi.ClassResolver;
-import org.apache.camel.spi.ComponentResolver;
-import org.apache.camel.spi.ConfigurerResolver;
-import org.apache.camel.spi.DataFormat;
-import org.apache.camel.spi.DataFormatResolver;
-import org.apache.camel.spi.EndpointRegistry;
-import org.apache.camel.spi.ExecutorServiceManager;
-import org.apache.camel.spi.FactoryFinderResolver;
-import org.apache.camel.spi.HeadersMapFactory;
-import org.apache.camel.spi.InflightRepository;
-import org.apache.camel.spi.Injector;
-import org.apache.camel.spi.Language;
-import org.apache.camel.spi.LanguageResolver;
-import org.apache.camel.spi.ManagementNameStrategy;
-import org.apache.camel.spi.MessageHistoryFactory;
-import org.apache.camel.spi.ModelJAXBContextFactory;
-import org.apache.camel.spi.ModelToXMLDumper;
-import org.apache.camel.spi.NodeIdFactory;
-import org.apache.camel.spi.PackageScanClassResolver;
-import org.apache.camel.spi.PackageScanResourceResolver;
-import org.apache.camel.spi.ProcessorFactory;
-import org.apache.camel.spi.PropertiesComponent;
-import org.apache.camel.spi.ReactiveExecutor;
-import org.apache.camel.spi.Registry;
-import org.apache.camel.spi.RestRegistryFactory;
-import org.apache.camel.spi.RouteController;
-import org.apache.camel.spi.ShutdownStrategy;
-import org.apache.camel.spi.StreamCachingStrategy;
-import org.apache.camel.spi.Tracer;
-import org.apache.camel.spi.TransformerRegistry;
-import org.apache.camel.spi.TypeConverterRegistry;
-import org.apache.camel.spi.UnitOfWorkFactory;
-import org.apache.camel.spi.UuidGenerator;
-import org.apache.camel.spi.ValidatorRegistry;
-import org.apache.camel.spi.XMLRoutesDefinitionLoader;
+import org.apache.camel.reifier.RouteReifier;
+import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
+import org.apache.camel.reifier.language.ExpressionReifier;
+import org.apache.camel.reifier.transformer.TransformerReifier;
+import org.apache.camel.reifier.validator.ValidatorReifier;
+import org.apache.camel.spi.*;
import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.ObjectHelper;
public class FastCamelContext extends AbstractCamelContext implements CatalogCamelContext, ModelCamelContext {
private final Model model;
@@ -285,17 +213,25 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
@Override
protected HeadersMapFactory createHeadersMapFactory() {
- return new HeadersMapFactoryResolver().resolve(this);
+ return new BaseServiceResolver<>(HeadersMapFactory.FACTORY, HeadersMapFactory.class)
+ .resolve(getCamelContextReference())
+ .orElseGet(DefaultHeadersMapFactory::new);
}
@Override
protected BeanProxyFactory createBeanProxyFactory() {
- return new BeanProxyFactoryResolver().resolve(this);
+ return new BaseServiceResolver<>(BeanProxyFactory.FACTORY, BeanProxyFactory.class)
+ .resolve(getCamelContextReference())
+ .orElseThrow(() -> new IllegalArgumentException("Cannot find BeanProxyFactory on classpath. "
+ + "Add camel-bean to classpath."));
}
@Override
protected BeanProcessorFactory createBeanProcessorFactory() {
- return new BeanProcessorFactoryResolver().resolve(this);
+ return new BaseServiceResolver<>(BeanProcessorFactory.FACTORY, BeanProcessorFactory.class)
+ .resolve(getCamelContextReference())
+ .orElseThrow(() -> new IllegalArgumentException("Cannot find BeanProcessorFactory on classpath. "
+ + "Add camel-bean to classpath."));
}
@Override
@@ -357,7 +293,10 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
@Override
protected RestRegistryFactory createRestRegistryFactory() {
- return new RestRegistryFactoryResolver().resolve(this);
+ return new BaseServiceResolver<>(RestRegistryFactory.FACTORY, RestRegistryFactory.class)
+ .resolve(getCamelContextReference())
+ .orElseThrow(() -> new IllegalArgumentException("Cannot find RestRegistryFactory on classpath. "
+ + "Add camel-rest to classpath."));
}
@Override
@@ -388,8 +327,9 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
@Override
public AsyncProcessor createMulticast(Collection<Processor> processors, ExecutorService executor,
boolean shutdownExecutorService) {
- return new MulticastProcessor(this, processors, null, true, executor, shutdownExecutorService,
- false, false, 0L, null, false, false);
+ return new MulticastProcessor(getCamelContextReference(), null, processors, null,
+ true, executor, shutdownExecutorService, false, false,
+ 0, null, false, false);
}
@Override
@@ -398,6 +338,24 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
}
@Override
+ protected HealthCheckRegistry createHealthCheckRegistry() {
+ return new DefaultHealthCheckRegistry(this);
+ }
+
+ @Override
+ protected ComponentNameResolver createComponentNameResolver() {
+ return new DefaultComponentNameResolver();
+ }
+
+ @Override
+ protected RestBindingJaxbDataFormatFactory createRestBindingJaxbDataFormatFactory() {
+ return new BaseServiceResolver<>(RestBindingJaxbDataFormatFactory.FACTORY, RestBindingJaxbDataFormatFactory.class)
+ .resolve(getCamelContextReference())
+ .orElseThrow(() -> new IllegalArgumentException("Cannot find RestBindingJaxbDataFormatFactory on classpath. "
+ + "Add camel-jaxb to classpath."));
+ }
+
+ @Override
public void setTypeConverterRegistry(TypeConverterRegistry typeConverterRegistry) {
super.setTypeConverterRegistry(typeConverterRegistry);
@@ -506,13 +464,22 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
return null;
}
+ @Override
+ public Processor createErrorHandler(Route route, Processor processor) throws Exception {
+ return ErrorHandlerReifier.reifier(route, route.getErrorHandlerFactory())
+ .createErrorHandler(processor);
+ }
+
//
// ModelCamelContext
//
@Override
public void startRouteDefinitions() throws Exception {
- model.startRouteDefinitions();
+ List<RouteDefinition> routeDefinitions = model.getRouteDefinitions();
+ if (routeDefinitions != null) {
+ startRouteDefinitions(routeDefinitions);
+ }
}
@Override
@@ -576,7 +543,7 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
}
@Override
- public <T extends ProcessorDefinition> T getProcessorDefinition(String id, Class<T> type) {
+ public <T extends ProcessorDefinition<T>> T getProcessorDefinition(String id, Class<T> type) {
return model.getProcessorDefinition(id, type);
}
@@ -674,4 +641,78 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
public Function<RouteDefinition, Boolean> getRouteFilter() {
return model.getRouteFilter();
}
+
+ @Override
+ public void startRouteDefinitions(List<RouteDefinition> routeDefinitions) throws Exception {
+ // indicate we are staring the route using this thread so
+ // we are able to query this if needed
+ boolean alreadyStartingRoutes = isStartingRoutes();
+ if (!alreadyStartingRoutes) {
+ setStartingRoutes(true);
+ }
+ try {
+ RouteDefinitionHelper.forceAssignIds(getCamelContextReference(), routeDefinitions);
+ for (RouteDefinition routeDefinition : routeDefinitions) {
+ // assign ids to the routes and validate that the id's is all unique
+ String duplicate = RouteDefinitionHelper.validateUniqueIds(routeDefinition, routeDefinitions);
+ if (duplicate != null) {
+ throw new FailedToStartRouteException(routeDefinition.getId(),
+ "duplicate id detected: " + duplicate + ". Please correct ids to be unique among all your routes.");
+ }
+
+ // must ensure route is prepared, before we can start it
+ if (!routeDefinition.isPrepared()) {
+ RouteDefinitionHelper.prepareRoute(getCamelContextReference(), routeDefinition);
+ routeDefinition.markPrepared();
+ }
+
+ Route route = new RouteReifier(getCamelContextReference(), routeDefinition).createRoute();
+ RouteService routeService = new RouteService(route);
+ startRouteService(routeService, true);
+ }
+ } finally {
+ if (!alreadyStartingRoutes) {
+ setStartingRoutes(false);
+ }
+ }
+ }
+
+ @Override
+ public Expression createExpression(ExpressionDefinition definition) {
+ return ExpressionReifier.reifier(this, definition).createExpression();
+ }
+
+ @Override
+ public Predicate createPredicate(ExpressionDefinition definition) {
+ return ExpressionReifier.reifier(this, definition).createPredicate();
+ }
+
+ @Override
+ public RouteDefinition adviceWith(RouteDefinition definition, AdviceWithRouteBuilder builder) throws Exception {
+ return RouteReifier.adviceWith(definition, this, builder);
+ }
+
+ @Override
+ public void registerValidator(ValidatorDefinition def) {
+ model.getValidators().add(def);
+ Validator validator = ValidatorReifier.reifier(this, def).createValidator();
+ getValidatorRegistry().put(createValidatorKey(def), validator);
+ }
+
+ private static ValueHolder<String> createValidatorKey(ValidatorDefinition def) {
+ return new ValidatorKey(new DataType(def.getType()));
+ }
+
+ @Override
+ public void registerTransformer(TransformerDefinition def) {
+ model.getTransformers().add(def);
+ Transformer transformer = TransformerReifier.reifier(this, def).createTransformer();
+ getTransformerRegistry().put(createTransformerKey(def), transformer);
+ }
+
+ private static ValueHolder<String> createTransformerKey(TransformerDefinition def) {
+ return ObjectHelper.isNotEmpty(def.getScheme()) ? new TransformerKey(def.getScheme())
+ : new TransformerKey(new DataType(def.getFromType()), new DataType(def.getToType()));
+ }
+
}
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastModel.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastModel.java
index 847cfcc..fd299a8 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastModel.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastModel.java
@@ -16,206 +16,11 @@
*/
package org.apache.camel.quarkus.core;
-import java.util.ArrayList;
-import java.util.List;
-
import org.apache.camel.CamelContext;
-import org.apache.camel.ErrorHandlerFactory;
-import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.NamedNode;
-import org.apache.camel.Navigate;
-import org.apache.camel.Processor;
-import org.apache.camel.Route;
-import org.apache.camel.Service;
-import org.apache.camel.impl.engine.AbstractCamelContext;
-import org.apache.camel.impl.engine.BaseRouteService;
-import org.apache.camel.impl.engine.DefaultRouteContext;
-import org.apache.camel.model.OnCompletionDefinition;
-import org.apache.camel.model.OnExceptionDefinition;
-import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteDefinitionHelper;
-import org.apache.camel.processor.channel.DefaultChannel;
-import org.apache.camel.reifier.RouteReifier;
-import org.apache.camel.support.CamelContextHelper;
public class FastModel extends BaseModel {
public FastModel(CamelContext camelContext) {
super(camelContext);
}
- @Override
- protected void start(RouteDefinition routeDefinition) throws Exception {
- // indicate we are staring the route using this thread so
- // we are able to query this if needed
- CamelContext camelContext = getCamelContext();
- AbstractCamelContext mcc = camelContext.adapt(AbstractCamelContext.class);
- mcc.setStartingRoutes(true);
- try {
- String id = routeDefinition.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
- FastRouteContext routeContext = new FastRouteContext(camelContext, routeDefinition, id);
- Route route = new RouteReifier(routeContext, routeDefinition).createRoute();
- FastRouteService routeService = createRouteService(route);
- mcc.startRouteService(routeService, true);
- } finally {
- // we are done staring routes
- mcc.setStartingRoutes(false);
- }
- }
-
- private FastRouteService createRouteService(Route route) {
- Integer startupOrder;
- String description;
- boolean autoStartup;
- boolean contextScopedErrorHandler;
- List<Service> routeScopedServices;
-
- RouteDefinition definition = (RouteDefinition) route.getRouteContext().getRoute();
- startupOrder = definition.getStartupOrder();
- description = RouteDefinitionHelper.getRouteMessage(definition.toString());
-
- if (!route.getCamelContext().isAutoStartup()) {
- autoStartup = false;
- } else if (definition.getAutoStartup() == null) {
- // should auto startup by default
- autoStartup = true;
- } else {
- Boolean isAutoStartup = CamelContextHelper.parseBoolean(route.getCamelContext(), definition.getAutoStartup());
- autoStartup = isAutoStartup != null && isAutoStartup;
- }
-
- if (!definition.isContextScopedErrorHandler()) {
- contextScopedErrorHandler = false;
- } else if (definition.getErrorHandlerRef() != null) {
- // if error handler ref is configured it may refer to a context scoped, so we need to check this first
- // the XML DSL will configure error handlers using refs, so we need this additional test
- ErrorHandlerFactory routeScoped = route.getRouteContext().getErrorHandlerFactory();
- ErrorHandlerFactory contextScoped = route.getCamelContext().adapt(ExtendedCamelContext.class)
- .getErrorHandlerFactory();
- contextScopedErrorHandler = contextScoped != null && routeScoped == contextScoped;
- } else {
- contextScopedErrorHandler = true;
- }
-
- List<Service> services = new ArrayList<>();
- for (ProcessorDefinition<?> output : definition.getOutputs()) {
- if (output instanceof OnExceptionDefinition) {
- OnExceptionDefinition onExceptionDefinition = (OnExceptionDefinition) output;
- if (onExceptionDefinition.isRouteScoped()) {
- Processor errorHandler = route.getRouteContext().getOnException(onExceptionDefinition.getId());
- if (errorHandler instanceof Service) {
- services.add((Service) errorHandler);
- }
- }
- } else if (output instanceof OnCompletionDefinition) {
- OnCompletionDefinition onCompletionDefinition = (OnCompletionDefinition) output;
- if (onCompletionDefinition.isRouteScoped()) {
- Processor onCompletionProcessor = route.getRouteContext().getOnCompletion(onCompletionDefinition.getId());
- if (onCompletionProcessor instanceof Service) {
- services.add((Service) onCompletionProcessor);
- }
- }
- }
- }
- routeScopedServices = services;
-
- FastRouteService routeService = new FastRouteService(route);
- routeService.setStartupOrder(startupOrder);
- routeService.setDescription(description);
- routeService.setAutoStartup(autoStartup);
- routeService.setContextScopedErrorHandler(contextScopedErrorHandler);
- routeService.setRouteScopedServices(routeScopedServices);
- return routeService;
- }
-
- static class FastRouteContext extends DefaultRouteContext {
-
- private NamedNode route;
-
- public FastRouteContext(CamelContext camelContext, NamedNode route, String routeId) {
- super(camelContext, null, routeId);
- this.route = route;
- }
-
- @Override
- public NamedNode getRoute() {
- return route;
- }
-
- @SuppressWarnings("unchecked")
- private void clearModel(Processor nav) {
- if (nav instanceof DefaultChannel) {
- DefaultChannel channel = (DefaultChannel) nav;
- channel.setDefinition(null);
- }
- if (nav instanceof Navigate) {
- List<Processor> children = ((Navigate<Processor>) nav).next();
- if (children != null) {
- for (Processor p : children) {
- clearModel(p);
- }
- }
- }
- }
-
- }
-
- static class FastRouteService extends BaseRouteService {
-
- private Integer startupOrder;
- private String description;
- private boolean autoStartup;
- private boolean contextScopedErrorHandler;
- private List<Service> routeScopedServices;
-
- public FastRouteService(Route route) {
- super(route);
- }
-
- public void setStartupOrder(Integer startupOrder) {
- this.startupOrder = startupOrder;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public void setAutoStartup(boolean autoStartup) {
- this.autoStartup = autoStartup;
- }
-
- public void setContextScopedErrorHandler(boolean contextScopedErrorHandler) {
- this.contextScopedErrorHandler = contextScopedErrorHandler;
- }
-
- public void setRouteScopedServices(List<Service> routeScopedServices) {
- this.routeScopedServices = routeScopedServices;
- }
-
- @Override
- public Integer getStartupOrder() {
- return startupOrder;
- }
-
- @Override
- protected String getRouteDescription() {
- return description;
- }
-
- @Override
- public boolean isAutoStartup() {
- return autoStartup;
- }
-
- @Override
- public boolean isContextScopedErrorHandler() {
- return contextScopedErrorHandler;
- }
-
- @Override
- protected void doGetRouteScopedServices(List<Service> services) {
- services.addAll(routeScopedServices);
- }
- }
-
}
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastTypeConverter.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastTypeConverter.java
index 178250f..83ec56e 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastTypeConverter.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastTypeConverter.java
@@ -29,7 +29,10 @@ public class FastTypeConverter extends DefaultTypeConverter {
}
@Override
- protected void doStart() throws Exception {
+ protected void doInit() throws Exception {
+ if (this.injector == null && this.camelContext != null) {
+ this.injector = this.camelContext.getInjector();
+ }
for (TypeConverterLoader loader : getCamelContext().getRegistry().findByType(TypeConverterLoader.class)) {
LOG.debug("TypeConverterLoader: {} loading converters", loader);
loader.load(this);
diff --git a/extensions-core/xml-jaxb/runtime/src/main/java/org/apache/camel/quarkus/component/xml/jaxb/XmlJaxbRecorder.java b/extensions-core/xml-jaxb/runtime/src/main/java/org/apache/camel/quarkus/component/xml/jaxb/XmlJaxbRecorder.java
index 3cb9e69..260da00 100644
--- a/extensions-core/xml-jaxb/runtime/src/main/java/org/apache/camel/quarkus/component/xml/jaxb/XmlJaxbRecorder.java
+++ b/extensions-core/xml-jaxb/runtime/src/main/java/org/apache/camel/quarkus/component/xml/jaxb/XmlJaxbRecorder.java
@@ -21,10 +21,10 @@ import javax.xml.bind.JAXBException;
import io.quarkus.runtime.RuntimeValue;
import io.quarkus.runtime.annotations.Recorder;
import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.impl.DefaultModelJAXBContextFactory;
import org.apache.camel.spi.ModelJAXBContextFactory;
import org.apache.camel.spi.ModelToXMLDumper;
import org.apache.camel.spi.XMLRoutesDefinitionLoader;
+import org.apache.camel.xml.jaxb.DefaultModelJAXBContextFactory;
import org.apache.camel.xml.jaxb.JaxbModelToXMLDumper;
import org.apache.camel.xml.jaxb.JaxbXMLRoutesDefinitionLoader;
import org.graalvm.nativeimage.ImageInfo;
diff --git a/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteComponentConfigurer.java b/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteComponentConfigurer.java
index 37d5e07..0e903b1 100644
--- a/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteComponentConfigurer.java
+++ b/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteComponentConfigurer.java
@@ -1,29 +1,55 @@
/* Generated by camel build tools - do NOT edit this file! */
package org.apache.camel.component.qute;
+import java.util.Map;
+
import org.apache.camel.CamelContext;
import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.util.CaseInsensitiveMap;
import org.apache.camel.support.component.PropertyConfigurerSupport;
/**
* Generated by camel build tools - do NOT edit this file!
*/
@SuppressWarnings("unchecked")
-public class QuteComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer {
+public class QuteComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
@Override
public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
QuteComponent target = (QuteComponent) obj;
switch (ignoreCase ? name.toLowerCase() : name) {
- case "lazystartproducer":
- case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
case "basicpropertybinding":
case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
+ case "lazystartproducer":
+ case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
case "quteengine":
case "quteEngine": target.setQuteEngine(property(camelContext, io.quarkus.qute.Engine.class, value)); return true;
default: return false;
}
}
+ @Override
+ public Map<String, Object> getAllOptions(Object target) {
+ Map<String, Object> answer = new CaseInsensitiveMap();
+ answer.put("basicPropertyBinding", boolean.class);
+ answer.put("lazyStartProducer", boolean.class);
+ answer.put("quteEngine", io.quarkus.qute.Engine.class);
+ return answer;
+ }
+
+ @Override
+ public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+ QuteComponent target = (QuteComponent) obj;
+ switch (ignoreCase ? name.toLowerCase() : name) {
+ case "basicpropertybinding":
+ case "basicPropertyBinding": return target.isBasicPropertyBinding();
+ case "lazystartproducer":
+ case "lazyStartProducer": return target.isLazyStartProducer();
+ case "quteengine":
+ case "quteEngine": return target.getQuteEngine();
+ default: return null;
+ }
+ }
}
diff --git a/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteEndpointConfigurer.java b/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteEndpointConfigurer.java
index 86093a9..059e63e 100644
--- a/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteEndpointConfigurer.java
+++ b/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteEndpointConfigurer.java
@@ -1,31 +1,61 @@
/* Generated by camel build tools - do NOT edit this file! */
package org.apache.camel.component.qute;
+import java.util.Map;
+
import org.apache.camel.CamelContext;
import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.util.CaseInsensitiveMap;
import org.apache.camel.support.component.PropertyConfigurerSupport;
/**
* Generated by camel build tools - do NOT edit this file!
*/
@SuppressWarnings("unchecked")
-public class QuteEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer {
+public class QuteEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
@Override
public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
QuteEndpoint target = (QuteEndpoint) obj;
switch (ignoreCase ? name.toLowerCase() : name) {
+ case "basicpropertybinding":
+ case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
case "contentcache":
case "contentCache": target.setContentCache(property(camelContext, boolean.class, value)); return true;
case "encoding": target.setEncoding(property(camelContext, java.lang.String.class, value)); return true;
case "lazystartproducer":
case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
- case "basicpropertybinding":
- case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
case "synchronous": target.setSynchronous(property(camelContext, boolean.class, value)); return true;
default: return false;
}
}
+ @Override
+ public Map<String, Object> getAllOptions(Object target) {
+ Map<String, Object> answer = new CaseInsensitiveMap();
+ answer.put("basicPropertyBinding", boolean.class);
+ answer.put("contentCache", boolean.class);
+ answer.put("encoding", java.lang.String.class);
+ answer.put("lazyStartProducer", boolean.class);
+ answer.put("synchronous", boolean.class);
+ return answer;
+ }
+
+ @Override
+ public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+ QuteEndpoint target = (QuteEndpoint) obj;
+ switch (ignoreCase ? name.toLowerCase() : name) {
+ case "basicpropertybinding":
+ case "basicPropertyBinding": return target.isBasicPropertyBinding();
+ case "contentcache":
+ case "contentCache": return target.isContentCache();
+ case "encoding": return target.getEncoding();
+ case "lazystartproducer":
+ case "lazyStartProducer": return target.isLazyStartProducer();
+ case "synchronous": return target.isSynchronous();
+ default: return null;
+ }
+ }
}
diff --git a/extensions/qute/component/src/generated/resources/org/apache/camel/component/qute/qute.json b/extensions/qute/component/src/generated/resources/org/apache/camel/component/qute/qute.json
index c50c6d4..486d247 100644
--- a/extensions/qute/component/src/generated/resources/org/apache/camel/component/qute/qute.json
+++ b/extensions/qute/component/src/generated/resources/org/apache/camel/component/qute/qute.json
@@ -1,6 +1,7 @@
{
"component": {
"kind": "component",
+ "name": "qute",
"scheme": "qute",
"extendsScheme": "",
"syntax": "qute:resourceUri",