This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch camel-master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit cc81236863af9d54e917f4995524ee06ff65b371 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Mon Oct 19 07:16:38 2020 +0100 Upgrade to Camel 3.7.0 --- .../pages/reference/extensions/kubernetes.adoc | 1 + .../ROOT/pages/reference/extensions/leveldb.adoc | 12 ++- .../partials/reference/components/atlasmap.adoc | 1 + .../components/kubernetes-custom-resources.adoc | 13 +++ .../partials/reference/dataformats/json-jsonb.adoc | 1 + .../ROOT/partials/reference/languages/joor.adoc | 1 + .../partials/reference/others/leveldb-legacy.adoc | 1 + .../quarkus/core/deployment/CamelProcessor.java | 8 ++ extensions-core/core/runtime/pom.xml | 16 +-- .../org/apache/camel/quarkus/core/BaseModel.java | 31 ++++-- .../quarkus/core/CamelLifecycleEventBridge.java | 12 --- .../camel/quarkus/core/FastCamelContext.java | 117 +++++++++++++++------ .../org/apache/camel/quarkus/core/FastModel.java | 1 - .../camel/quarkus/core/FastTypeConverter.java | 2 +- .../camel/quarkus/main/CamelMainRecorder.java | 5 - extensions/json-validator/runtime/pom.xml | 4 + .../leveldb/runtime/src/main/doc/limitations.adoc | 12 ++- .../component/leveldb/ObjectCodecSubstitute.java | 64 ----------- .../QuarkusLevelDBAggregationRepository.java | 71 +++++++++++++ .../MicroprofileFaultToleranceProcessor.java | 8 ++ .../component/qute/QuteComponentConfigurer.java | 28 ++--- .../component/qute/QuteEndpointConfigurer.java | 36 ++++--- .../component/qute/QuteEndpointUriFactory.java | 4 +- .../component/foundation/it/mock/MockResource.java | 4 +- .../component/leveldb/it/LeveldbRouteBuilder.java | 10 +- .../quarkus/component/leveldb/it/LeveldbIT.java | 4 - .../quarkus/component/leveldb/it/LeveldbTest.java | 14 +-- .../camel/quarkus/component/saga/it/SagaRoute.java | 2 +- pom.xml | 3 +- poms/bom/pom.xml | 10 ++ 30 files changed, 301 insertions(+), 195 deletions(-) diff --git a/docs/modules/ROOT/pages/reference/extensions/kubernetes.adoc b/docs/modules/ROOT/pages/reference/extensions/kubernetes.adoc index 03778ed..05cfc34 100644 --- a/docs/modules/ROOT/pages/reference/extensions/kubernetes.adoc +++ b/docs/modules/ROOT/pages/reference/extensions/kubernetes.adoc @@ -18,6 +18,7 @@ Perform operations against Kubernetes API == What's inside * xref:latest@components::kubernetes-config-maps-component.adoc[Kubernetes ConfigMap component], URI syntax: `kubernetes-config-maps:masterUrl` +* xref:latest@components::kubernetes-custom-resources-component.adoc[Kubernetes Custom Resources component], URI syntax: `kubernetes-custom-resources:masterUrl` * xref:latest@components::kubernetes-deployments-component.adoc[Kubernetes Deployments component], URI syntax: `kubernetes-deployments:masterUrl` * xref:latest@components::kubernetes-hpa-component.adoc[Kubernetes HPA component], URI syntax: `kubernetes-hpa:masterUrl` * xref:latest@components::kubernetes-job-component.adoc[Kubernetes Job component], URI syntax: `kubernetes-job:masterUrl` diff --git a/docs/modules/ROOT/pages/reference/extensions/leveldb.adoc b/docs/modules/ROOT/pages/reference/extensions/leveldb.adoc index fda4ef0..190fc8d 100644 --- a/docs/modules/ROOT/pages/reference/extensions/leveldb.adoc +++ b/docs/modules/ROOT/pages/reference/extensions/leveldb.adoc @@ -38,8 +38,14 @@ In native mode the extension uses a port of LevelDB written in Java (https://git which is within 10% of the performance of the C++ original. Please upvote https://github.com/apache/camel-quarkus/issues/1911[this issue] if you do not like the present state. -This extension does not support binary payloads in native mode since object serialization is https://github.com/oracle/graal/issues/460[not supported] on GraalVM. To work around this limitation, the extension instead uses Jackson serializaton / deserialization. +Serialization is https://github.com/oracle/graal/issues/460[not supported] on GraalVM. Extension has to use serializationization based +on Jackson. Aggregation repository in native has to be constructed in one of the following ways: + +* Use class `QuarkusLevelDBAggregationRepository` instead of `LevelDBAggregationRepository`. +* Configure jackson serializer on `LevelDBAggregationRepository` by calling `repo.setSerializer(new JacksonLevelDBSerializer());` + +Jackson serializer has limitation towards binary content. If payload object contains binary data (does not concern payloads which are completely binary), Jackson serialization and deserialization won't work correctly. +To avoid this, define your own jackson serializer/deserealizer via `Module` and provide it to the aggragation repository +(you can use for example the constructor of `QuarkusLevelDBAggregationRepository`). -The problem will be solved when the camel-leveldb component is refactored to use Jackson and custom -serializers (see https://issues.apache.org/jira/browse/CAMEL-15679[issue]) diff --git a/docs/modules/ROOT/partials/reference/components/atlasmap.adoc b/docs/modules/ROOT/partials/reference/components/atlasmap.adoc new file mode 100644 index 0000000..a509c1d --- /dev/null +++ b/docs/modules/ROOT/partials/reference/components/atlasmap.adoc @@ -0,0 +1 @@ +// Empty partial for a Camel bit unsupported by Camel Quarkus to avoid warnings when this file is included from a Camel page diff --git a/docs/modules/ROOT/partials/reference/components/kubernetes-custom-resources.adoc b/docs/modules/ROOT/partials/reference/components/kubernetes-custom-resources.adoc new file mode 100644 index 0000000..07f368a --- /dev/null +++ b/docs/modules/ROOT/partials/reference/components/kubernetes-custom-resources.adoc @@ -0,0 +1,13 @@ +// Do not edit directly! +// This file was generated by camel-quarkus-maven-plugin:update-extension-doc-page +:cq-artifact-id: camel-quarkus-kubernetes +:cq-artifact-id-base: kubernetes +:cq-native-supported: true +:cq-status: Stable +:cq-deprecated: false +:cq-jvm-since: 1.0.0 +:cq-native-since: 1.0.0 +:cq-camel-part-name: kubernetes-custom-resources +:cq-camel-part-title: Kubernetes Custom Resources +:cq-camel-part-description: Perform operations on Kubernetes Custom Resources and get notified on Deployment changes. +:cq-extension-page-title: Kubernetes diff --git a/docs/modules/ROOT/partials/reference/dataformats/json-jsonb.adoc b/docs/modules/ROOT/partials/reference/dataformats/json-jsonb.adoc new file mode 100644 index 0000000..a509c1d --- /dev/null +++ b/docs/modules/ROOT/partials/reference/dataformats/json-jsonb.adoc @@ -0,0 +1 @@ +// Empty partial for a Camel bit unsupported by Camel Quarkus to avoid warnings when this file is included from a Camel page diff --git a/docs/modules/ROOT/partials/reference/languages/joor.adoc b/docs/modules/ROOT/partials/reference/languages/joor.adoc new file mode 100644 index 0000000..a509c1d --- /dev/null +++ b/docs/modules/ROOT/partials/reference/languages/joor.adoc @@ -0,0 +1 @@ +// Empty partial for a Camel bit unsupported by Camel Quarkus to avoid warnings when this file is included from a Camel page diff --git a/docs/modules/ROOT/partials/reference/others/leveldb-legacy.adoc b/docs/modules/ROOT/partials/reference/others/leveldb-legacy.adoc new file mode 100644 index 0000000..a509c1d --- /dev/null +++ b/docs/modules/ROOT/partials/reference/others/leveldb-legacy.adoc @@ -0,0 +1 @@ +// Empty partial for a Camel bit unsupported by Camel Quarkus to avoid warnings when this file is included from a Camel page 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 4b542c9..7efea5e 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 @@ -40,6 +40,7 @@ import io.quarkus.deployment.annotations.Overridable; import io.quarkus.deployment.annotations.Record; import io.quarkus.deployment.builditem.ApplicationArchivesBuildItem; import io.quarkus.deployment.builditem.CombinedIndexBuildItem; +import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; import io.quarkus.deployment.recording.RecorderContext; import io.quarkus.runtime.RuntimeValue; import org.apache.camel.impl.converter.BaseTypeConverterRegistry; @@ -346,4 +347,11 @@ class CamelProcessor { .map(CamelRoutesBuilderClassBuildItem::new) .collect(Collectors.toList()); } + + @BuildStep + NativeImageResourceBuildItem initResources() { + return new NativeImageResourceBuildItem( + "META-INF/services/org/apache/camel/bean-processor-factory", + "META-INF/services/org/apache/camel/rest-registry-factory"); + } } diff --git a/extensions-core/core/runtime/pom.xml b/extensions-core/core/runtime/pom.xml index 0f2a2c8..9688e0c 100644 --- a/extensions-core/core/runtime/pom.xml +++ b/extensions-core/core/runtime/pom.xml @@ -66,27 +66,31 @@ <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-core-engine</artifactId> + <artifactId>camel-base</artifactId> </dependency> <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-base</artifactId> + <artifactId>camel-componentdsl</artifactId> </dependency> <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-core-languages</artifactId> + <artifactId>camel-core-catalog</artifactId> </dependency> <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-endpointdsl</artifactId> + <artifactId>camel-core-engine</artifactId> </dependency> <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-componentdsl</artifactId> + <artifactId>camel-core-languages</artifactId> </dependency> <dependency> <groupId>org.apache.camel</groupId> - <artifactId>camel-core-catalog</artifactId> + <artifactId>camel-core-processor</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-endpointdsl</artifactId> </dependency> <dependency> <groupId>org.apache.camel</groupId> 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 8ee50e0..df3c89a 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 @@ -29,6 +29,7 @@ import java.util.function.Function; import org.apache.camel.CamelContext; import org.apache.camel.ExtendedCamelContext; +import org.apache.camel.impl.DefaultModelReifierFactory; import org.apache.camel.model.DataFormatDefinition; import org.apache.camel.model.FaultToleranceConfigurationDefinition; import org.apache.camel.model.HystrixConfigurationDefinition; @@ -46,6 +47,7 @@ import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition; 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.spi.ModelReifierFactory; import org.apache.camel.spi.NodeIdFactory; import org.apache.camel.util.AntPathMatcher; @@ -53,6 +55,7 @@ public abstract class BaseModel implements Model { private final CamelContext camelContext; + private ModelReifierFactory modelReifierFactory = new DefaultModelReifierFactory(); private final List<RouteDefinition> routeDefinitions = new ArrayList<>(); private final List<RouteTemplateDefinition> routeTemplateDefinitions = new ArrayList<>(); private final List<RestDefinition> restDefinitions = new ArrayList<>(); @@ -201,10 +204,11 @@ public abstract class BaseModel implements Model { throw new IllegalArgumentException("Cannot find RouteTemplate with id " + routeTemplateId); } - StringJoiner templatesBuilder = new StringJoiner(", "); final Map<String, Object> prop = new HashMap<>(); // include default values first from the template (and validate that we have inputs for all required parameters) if (target.getTemplateParameters() != null) { + StringJoiner templatesBuilder = new StringJoiner(", "); + for (RouteTemplateParameterDefinition temp : target.getTemplateParameters()) { if (temp.getDefaultValue() != null) { prop.put(temp.getName(), temp.getDefaultValue()); @@ -215,18 +219,19 @@ public abstract class BaseModel implements Model { } } } + if (templatesBuilder.length() > 0) { + throw new IllegalArgumentException( + "Route template " + routeTemplateId + " the following mandatory parameters must be provided: " + + templatesBuilder.toString()); + } } - if (templatesBuilder.length() > 0) { - throw new IllegalArgumentException( - "Route template " + routeTemplateId + " the following mandatory parameters must be provided: " - + templatesBuilder.toString()); - } + // then override with user parameters if (parameters != null) { prop.putAll(parameters); } - RouteTemplateDefinition.Converter converter = RouteTemplateDefinition::asRouteDefinition; + RouteTemplateDefinition.Converter converter = RouteTemplateDefinition.Converter.DEFAULT_CONVERTER; for (Map.Entry<String, RouteTemplateDefinition.Converter> entry : routeTemplateConverters.entrySet()) { final String key = entry.getKey(); @@ -244,7 +249,7 @@ public abstract class BaseModel implements Model { } } - RouteDefinition def = converter.apply(target); + RouteDefinition def = converter.apply(target, prop); if (routeId != null) { def.setId(routeId); } @@ -476,6 +481,16 @@ public abstract class BaseModel implements Model { return modelLifecycleStrategies; } + @Override + public ModelReifierFactory getModelReifierFactory() { + return modelReifierFactory; + } + + @Override + public void setModelReifierFactory(ModelReifierFactory modelReifierFactory) { + this.modelReifierFactory = modelReifierFactory; + } + /** * Should we start newly added routes? */ diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelLifecycleEventBridge.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelLifecycleEventBridge.java index 8b535b1..a675ed9 100644 --- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelLifecycleEventBridge.java +++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelLifecycleEventBridge.java @@ -26,8 +26,6 @@ import io.quarkus.arc.Arc; import org.apache.camel.CamelContext; import org.apache.camel.Component; import org.apache.camel.Endpoint; -import org.apache.camel.ErrorHandlerFactory; -import org.apache.camel.Processor; import org.apache.camel.Route; import org.apache.camel.Service; import org.apache.camel.VetoCamelContextStartException; @@ -96,16 +94,6 @@ public class CamelLifecycleEventBridge implements LifecycleStrategy { } @Override - public void onErrorHandlerAdd(Route route, Processor errorHandler, ErrorHandlerFactory errorHandlerFactory) { - fireEvent(new ErrorHandlerAddEvent(route, errorHandler, errorHandlerFactory)); - } - - @Override - public void onErrorHandlerRemove(Route route, Processor errorHandler, ErrorHandlerFactory errorHandlerFactory) { - fireEvent(new ErrorHandlerRemoveEvent(route, errorHandler, errorHandlerFactory)); - } - - @Override public void onThreadPoolAdd(CamelContext camelContext, ThreadPoolExecutor threadPool, String id, String sourceId, String routeId, String threadPoolProfileId) { fireEvent(new ThreadPoolAddEvent(camelContext, threadPool, id, sourceId, routeId, threadPoolProfileId)); 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 4ca613e..fd96350 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 @@ -22,10 +22,8 @@ import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Properties; -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; @@ -36,12 +34,12 @@ import org.apache.camel.Processor; import org.apache.camel.Route; import org.apache.camel.TypeConverter; import org.apache.camel.ValueHolder; +import org.apache.camel.builder.AdviceWith; 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.BaseServiceResolver; import org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager; @@ -54,17 +52,19 @@ 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.DefaultExecutorServiceManager; import org.apache.camel.impl.engine.DefaultHeadersMapFactory; import org.apache.camel.impl.engine.DefaultInflightRepository; import org.apache.camel.impl.engine.DefaultInjector; +import org.apache.camel.impl.engine.DefaultInterceptEndpointFactory; 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.DefaultRouteFactory; import org.apache.camel.impl.engine.DefaultStreamCachingStrategy; import org.apache.camel.impl.engine.DefaultTracer; import org.apache.camel.impl.engine.DefaultTransformerRegistry; @@ -73,8 +73,8 @@ import org.apache.camel.impl.engine.DefaultUriFactoryResolver; import org.apache.camel.impl.engine.DefaultValidatorRegistry; import org.apache.camel.impl.engine.EndpointKey; import org.apache.camel.impl.engine.RouteService; -import org.apache.camel.impl.transformer.TransformerKey; -import org.apache.camel.impl.validator.ValidatorKey; +import org.apache.camel.impl.engine.TransformerKey; +import org.apache.camel.impl.engine.ValidatorKey; import org.apache.camel.model.DataFormatDefinition; import org.apache.camel.model.FaultToleranceConfigurationDefinition; import org.apache.camel.model.HystrixConfigurationDefinition; @@ -91,12 +91,16 @@ 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.processor.DefaultAnnotationBasedProcessorFactory; +import org.apache.camel.processor.DefaultDeferServiceFactory; +import org.apache.camel.processor.DefaultInternalProcessorFactory; +import org.apache.camel.processor.DefaultProcessorFactory; 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.AnnotationBasedProcessorFactory; import org.apache.camel.spi.AsyncProcessorAwaitManager; import org.apache.camel.spi.BeanIntrospection; import org.apache.camel.spi.BeanProcessorFactory; @@ -110,17 +114,21 @@ import org.apache.camel.spi.ConfigurerResolver; import org.apache.camel.spi.DataFormat; import org.apache.camel.spi.DataFormatResolver; import org.apache.camel.spi.DataType; +import org.apache.camel.spi.DeferServiceFactory; 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.InterceptEndpointFactory; +import org.apache.camel.spi.InternalProcessorFactory; 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.ModelReifierFactory; import org.apache.camel.spi.ModelToXMLDumper; import org.apache.camel.spi.NodeIdFactory; import org.apache.camel.spi.PackageScanClassResolver; @@ -132,6 +140,7 @@ import org.apache.camel.spi.Registry; import org.apache.camel.spi.RestBindingJaxbDataFormatFactory; import org.apache.camel.spi.RestRegistryFactory; import org.apache.camel.spi.RouteController; +import org.apache.camel.spi.RouteFactory; import org.apache.camel.spi.ShutdownStrategy; import org.apache.camel.spi.StreamCachingStrategy; import org.apache.camel.spi.Tracer; @@ -150,7 +159,7 @@ import org.apache.camel.util.IOHelper; import org.apache.camel.util.ObjectHelper; public class FastCamelContext extends AbstractCamelContext implements CatalogCamelContext, ModelCamelContext { - private final Model model; + private Model model; private final String version; private final XMLRoutesDefinitionLoader xmlLoader; private final ModelToXMLDumper modelDumper; @@ -275,6 +284,21 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam } @Override + protected InternalProcessorFactory createInternalProcessorFactory() { + return new DefaultInternalProcessorFactory(); + } + + @Override + protected InterceptEndpointFactory createInterceptEndpointFactory() { + return new DefaultInterceptEndpointFactory(); + } + + @Override + protected RouteFactory createRouteFactory() { + return new DefaultRouteFactory(); + } + + @Override protected MessageHistoryFactory createMessageHistoryFactory() { return new DefaultMessageHistoryFactory(); } @@ -320,18 +344,30 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam @Override protected BeanProxyFactory createBeanProxyFactory() { - return new BaseServiceResolver<>(BeanProxyFactory.FACTORY, BeanProxyFactory.class) - .resolve(getCamelContextReference()) - .orElseThrow(() -> new IllegalArgumentException("Cannot find BeanProxyFactory on classpath. " - + "Add camel-bean to classpath.")); + return new BaseServiceResolver<>(BeanProxyFactory.FACTORY, BeanProxyFactory.class, + getBootstrapFactoryFinder()) + .resolve(getCamelContextReference()) + .orElseThrow(() -> new IllegalArgumentException("Cannot find BeanProxyFactory on classpath. " + + "Add camel-bean to classpath.")); + } + + @Override + protected AnnotationBasedProcessorFactory createAnnotationBasedProcessorFactory() { + return new DefaultAnnotationBasedProcessorFactory(); + } + + @Override + protected DeferServiceFactory createDeferServiceFactory() { + return new DefaultDeferServiceFactory(); } @Override protected BeanProcessorFactory createBeanProcessorFactory() { - return new BaseServiceResolver<>(BeanProcessorFactory.FACTORY, BeanProcessorFactory.class) - .resolve(getCamelContextReference()) - .orElseThrow(() -> new IllegalArgumentException("Cannot find BeanProcessorFactory on classpath. " - + "Add camel-bean to classpath.")); + return new BaseServiceResolver<>(BeanProcessorFactory.FACTORY, BeanProcessorFactory.class, + getBootstrapFactoryFinder()) + .resolve(getCamelContextReference()) + .orElseThrow(() -> new IllegalArgumentException("Cannot find BeanProcessorFactory on classpath. " + + "Add camel-bean to classpath.")); } @Override @@ -393,10 +429,11 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam @Override protected RestRegistryFactory createRestRegistryFactory() { - return new BaseServiceResolver<>(RestRegistryFactory.FACTORY, RestRegistryFactory.class) - .resolve(getCamelContextReference()) - .orElseThrow(() -> new IllegalArgumentException("Cannot find RestRegistryFactory on classpath. " - + "Add camel-rest to classpath.")); + return new BaseServiceResolver<>(RestRegistryFactory.FACTORY, RestRegistryFactory.class, + getBootstrapFactoryFinder()) + .resolve(getCamelContextReference()) + .orElseThrow(() -> new IllegalArgumentException("Cannot find RestRegistryFactory on classpath. " + + "Add camel-rest to classpath.")); } @Override @@ -425,14 +462,6 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam } @Override - public AsyncProcessor createMulticast(Collection<Processor> processors, ExecutorService executor, - boolean shutdownExecutorService) { - return new MulticastProcessor(getCamelContextReference(), null, processors, null, - true, executor, shutdownExecutorService, false, false, - 0, null, false, false); - } - - @Override protected ConfigurerResolver createConfigurerResolver() { return new DefaultConfigurerResolver(); } @@ -444,8 +473,9 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam @Override protected HealthCheckRegistry createHealthCheckRegistry() { - return new BaseServiceResolver<>(HealthCheckRegistry.FACTORY, HealthCheckRegistry.class) - .resolve(getCamelContextReference()).orElse(null); + return new BaseServiceResolver<>(HealthCheckRegistry.FACTORY, HealthCheckRegistry.class, + getBootstrapFactoryFinder()) + .resolve(getCamelContextReference()).orElse(null); } @Override @@ -455,10 +485,12 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam @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.")); + return new BaseServiceResolver<>(RestBindingJaxbDataFormatFactory.FACTORY, RestBindingJaxbDataFormatFactory.class, + getBootstrapFactoryFinder()) + .resolve(getCamelContextReference()) + .orElseThrow( + () -> new IllegalArgumentException("Cannot find RestBindingJaxbDataFormatFactory on classpath. " + + "Add camel-jaxb to classpath.")); } @Override @@ -576,6 +608,11 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam .createErrorHandler(processor); } + @Override + public void disposeModel() { + this.model = null; + } + // // ModelCamelContext // @@ -804,6 +841,16 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam } @Override + public ModelReifierFactory getModelReifierFactory() { + return model.getModelReifierFactory(); + } + + @Override + public void setModelReifierFactory(ModelReifierFactory modelReifierFactory) { + model.setModelReifierFactory(modelReifierFactory); + } + + @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 @@ -860,7 +907,7 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam @Override public RouteDefinition adviceWith(RouteDefinition definition, AdviceWithRouteBuilder builder) throws Exception { - return RouteReifier.adviceWith(definition, this, builder); + return AdviceWith.adviceWith(definition, this, builder); } @SuppressWarnings("unchecked") 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 fd299a8..f266f57 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 @@ -22,5 +22,4 @@ public class FastModel extends BaseModel { public FastModel(CamelContext camelContext) { super(camelContext); } - } 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 6492338..2df9239 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 @@ -25,7 +25,7 @@ public class FastTypeConverter extends DefaultTypeConverter { private static final Logger LOG = LoggerFactory.getLogger(FastTypeConverter.class); public FastTypeConverter() { - super(null, null, null, null, false); + super(null, null, null, false); } @Override diff --git a/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java b/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java index d7ba558..0b3e65c 100644 --- a/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java +++ b/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRecorder.java @@ -42,11 +42,6 @@ public class CamelMainRecorder { main.setRoutesCollector(routesCollector.getValue()); main.addMainListener(new CamelMainEventBridge()); - // autowire only non null values as components may have configured - // through CDI or from a Build Item thus those values should not be - // overridden - main.configure().setAutowireComponentPropertiesNonNullOnly(true); - // properties are loaded through MicroProfile Config so there's // no need to look for sources. main.setDefaultPropertyPlaceholderLocation("false"); diff --git a/extensions/json-validator/runtime/pom.xml b/extensions/json-validator/runtime/pom.xml index cb6ee35..d94e66e 100644 --- a/extensions/json-validator/runtime/pom.xml +++ b/extensions/json-validator/runtime/pom.xml @@ -56,6 +56,10 @@ <groupId>org.apache.camel</groupId> <artifactId>camel-json-validator</artifactId> </dependency> + <dependency> + <groupId>org.jruby.joni</groupId> + <artifactId>joni</artifactId> + </dependency> </dependencies> <build> diff --git a/extensions/leveldb/runtime/src/main/doc/limitations.adoc b/extensions/leveldb/runtime/src/main/doc/limitations.adoc index e7ebff9..9b74c99 100644 --- a/extensions/leveldb/runtime/src/main/doc/limitations.adoc +++ b/extensions/leveldb/runtime/src/main/doc/limitations.adoc @@ -2,7 +2,13 @@ In native mode the extension uses a port of LevelDB written in Java (https://git which is within 10% of the performance of the C++ original. Please upvote https://github.com/apache/camel-quarkus/issues/1911[this issue] if you do not like the present state. -This extension does not support binary payloads in native mode since object serialization is https://github.com/oracle/graal/issues/460[not supported] on GraalVM. To work around this limitation, the extension instead uses Jackson serializaton / deserialization. +Serialization is https://github.com/oracle/graal/issues/460[not supported] on GraalVM. Extension has to use serializationization based +on Jackson. Aggregation repository in native has to be constructed in one of the following ways: + +* Use class `QuarkusLevelDBAggregationRepository` instead of `LevelDBAggregationRepository`. +* Configure jackson serializer on `LevelDBAggregationRepository` by calling `repo.setSerializer(new JacksonLevelDBSerializer());` + +Jackson serializer has limitation towards binary content. If payload object contains binary data (does not concern payloads which are completely binary), Jackson serialization and deserialization won't work correctly. +To avoid this, define your own jackson serializer/deserealizer via `Module` and provide it to the aggragation repository +(you can use for example the constructor of `QuarkusLevelDBAggregationRepository`). -The problem will be solved when the camel-leveldb component is refactored to use Jackson and custom -serializers (see https://issues.apache.org/jira/browse/CAMEL-15679[issue]) diff --git a/extensions/leveldb/runtime/src/main/java/org/apache/camel/quarkus/component/leveldb/ObjectCodecSubstitute.java b/extensions/leveldb/runtime/src/main/java/org/apache/camel/quarkus/component/leveldb/ObjectCodecSubstitute.java deleted file mode 100644 index 8ab38a4..0000000 --- a/extensions/leveldb/runtime/src/main/java/org/apache/camel/quarkus/component/leveldb/ObjectCodecSubstitute.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.component.leveldb; - -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.oracle.svm.core.annotate.Inject; -import com.oracle.svm.core.annotate.Substitute; -import com.oracle.svm.core.annotate.TargetClass; -import org.apache.camel.support.DefaultExchangeHolder; -import org.fusesource.hawtbuf.codec.ObjectCodec; - -/** - * This os workaround for serialization of DefaultExchangeHolder. - * Once serialization is implemented in graalVM (see https://github.com/oracle/graal/issues/460), this substitution - * could - * be removed. - */ -@TargetClass(value = ObjectCodec.class) -final class ObjectCodecSubstitute { - - @Inject - private ObjectMapper objectMapper; - - @Substitute - public void encode(Object object, DataOutput dataOut) throws IOException { - if (objectMapper == null) { - objectMapper = new ObjectMapper(); - objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE); - objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); - } - objectMapper.writeValue(dataOut, object); - } - - @Substitute - public Object decode(DataInput dataIn) throws IOException { - if (objectMapper == null) { - objectMapper = new ObjectMapper(); - objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE); - objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); - } - return objectMapper.readValue(dataIn, DefaultExchangeHolder.class); - } - -} diff --git a/extensions/leveldb/runtime/src/main/java/org/apache/camel/quarkus/component/leveldb/QuarkusLevelDBAggregationRepository.java b/extensions/leveldb/runtime/src/main/java/org/apache/camel/quarkus/component/leveldb/QuarkusLevelDBAggregationRepository.java new file mode 100644 index 0000000..7e930ec --- /dev/null +++ b/extensions/leveldb/runtime/src/main/java/org/apache/camel/quarkus/component/leveldb/QuarkusLevelDBAggregationRepository.java @@ -0,0 +1,71 @@ +/* + * 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.component.leveldb; + +import com.fasterxml.jackson.databind.Module; +import org.apache.camel.component.leveldb.LevelDBAggregationRepository; +import org.apache.camel.component.leveldb.LevelDBFile; +import org.apache.camel.component.leveldb.serializer.JacksonLevelDBSerializer; + +public class QuarkusLevelDBAggregationRepository extends LevelDBAggregationRepository { + + public QuarkusLevelDBAggregationRepository() { + initSerializer(null); + } + + public QuarkusLevelDBAggregationRepository(String repositoryName) { + super(repositoryName); + initSerializer(null); + } + + public QuarkusLevelDBAggregationRepository(String repositoryName, String persistentFileName) { + super(repositoryName, persistentFileName); + initSerializer(null); + } + + public QuarkusLevelDBAggregationRepository(String repositoryName, LevelDBFile levelDBFile) { + super(repositoryName, levelDBFile); + initSerializer(null); + } + + //constructor with module + + public QuarkusLevelDBAggregationRepository(Module module) { + JacksonLevelDBSerializer serializer = new JacksonLevelDBSerializer(module); + initSerializer(module); + } + + public QuarkusLevelDBAggregationRepository(String repositoryName, Module module) { + super(repositoryName); + initSerializer(module); + } + + public QuarkusLevelDBAggregationRepository(String repositoryName, String persistentFileName, Module module) { + super(repositoryName, persistentFileName); + initSerializer(module); + } + + public QuarkusLevelDBAggregationRepository(String repositoryName, LevelDBFile levelDBFile, Module module) { + super(repositoryName, levelDBFile); + initSerializer(module); + } + + private void initSerializer(Module module) { + JacksonLevelDBSerializer serializer = new JacksonLevelDBSerializer(module); + setSerializer(serializer); + } +} diff --git a/extensions/microprofile-fault-tolerance/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/fault/tolerance/deployment/MicroprofileFaultToleranceProcessor.java b/extensions/microprofile-fault-tolerance/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/fault/tolerance/deployment/MicroprofileFaultToleranceProcessor.java index d5b8b14..05673b1 100644 --- a/extensions/microprofile-fault-tolerance/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/fault/tolerance/deployment/MicroprofileFaultToleranceProcessor.java +++ b/extensions/microprofile-fault-tolerance/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/fault/tolerance/deployment/MicroprofileFaultToleranceProcessor.java @@ -18,6 +18,7 @@ package org.apache.camel.quarkus.component.microprofile.fault.tolerance.deployme import io.quarkus.deployment.annotations.BuildStep; import io.quarkus.deployment.builditem.FeatureBuildItem; +import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem; class MicroprofileFaultToleranceProcessor { @@ -27,4 +28,11 @@ class MicroprofileFaultToleranceProcessor { FeatureBuildItem feature() { return new FeatureBuildItem(FEATURE); } + + @BuildStep + NativeImageResourceBuildItem initResources() { + return new NativeImageResourceBuildItem( + "META-INF/services/org/apache/camel/model/CircuitBreakerDefinition"); + } + } 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 95e6cc2..cd93a33 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 @@ -4,8 +4,10 @@ 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.ExtendedPropertyConfigurerGetter; import org.apache.camel.spi.PropertyConfigurerGetter; +import org.apache.camel.spi.ConfigurerStrategy; +import org.apache.camel.spi.GeneratedPropertyConfigurer; import org.apache.camel.util.CaseInsensitiveMap; import org.apache.camel.support.component.PropertyConfigurerSupport; @@ -15,16 +17,6 @@ import org.apache.camel.support.component.PropertyConfigurerSupport; @SuppressWarnings("unchecked") public class QuteComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter { - private static final Map<String, Object> ALL_OPTIONS; - static { - Map<String, Object> map = new CaseInsensitiveMap(); - map.put("allowTemplateFromHeader", boolean.class); - map.put("lazyStartProducer", boolean.class); - map.put("basicPropertyBinding", boolean.class); - map.put("quteEngine", io.quarkus.qute.Engine.class); - ALL_OPTIONS = map; - } - @Override public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) { QuteComponent target = (QuteComponent) obj; @@ -42,8 +34,18 @@ public class QuteComponentConfigurer extends PropertyConfigurerSupport implement } @Override - public Map<String, Object> getAllOptions(Object target) { - return ALL_OPTIONS; + public Class<?> getOptionType(String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + case "allowtemplatefromheader": + case "allowTemplateFromHeader": return boolean.class; + case "basicpropertybinding": + case "basicPropertyBinding": return boolean.class; + case "lazystartproducer": + case "lazyStartProducer": return boolean.class; + case "quteengine": + case "quteEngine": return io.quarkus.qute.Engine.class; + default: return null; + } } @Override 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 983fa1c..ba4acd5 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 @@ -4,8 +4,10 @@ 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.ExtendedPropertyConfigurerGetter; import org.apache.camel.spi.PropertyConfigurerGetter; +import org.apache.camel.spi.ConfigurerStrategy; +import org.apache.camel.spi.GeneratedPropertyConfigurer; import org.apache.camel.util.CaseInsensitiveMap; import org.apache.camel.support.component.PropertyConfigurerSupport; @@ -15,20 +17,6 @@ import org.apache.camel.support.component.PropertyConfigurerSupport; @SuppressWarnings("unchecked") public class QuteEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter { - private static final Map<String, Object> ALL_OPTIONS; - static { - Map<String, Object> map = new CaseInsensitiveMap(); - map.put("resourceUri", java.lang.String.class); - map.put("allowContextMapAll", boolean.class); - map.put("allowTemplateFromHeader", boolean.class); - map.put("contentCache", boolean.class); - map.put("encoding", java.lang.String.class); - map.put("lazyStartProducer", boolean.class); - map.put("basicPropertyBinding", boolean.class); - map.put("synchronous", boolean.class); - ALL_OPTIONS = map; - } - @Override public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) { QuteEndpoint target = (QuteEndpoint) obj; @@ -50,8 +38,22 @@ public class QuteEndpointConfigurer extends PropertyConfigurerSupport implements } @Override - public Map<String, Object> getAllOptions(Object target) { - return ALL_OPTIONS; + public Class<?> getOptionType(String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + case "allowcontextmapall": + case "allowContextMapAll": return boolean.class; + case "allowtemplatefromheader": + case "allowTemplateFromHeader": return boolean.class; + case "basicpropertybinding": + case "basicPropertyBinding": return boolean.class; + case "contentcache": + case "contentCache": return boolean.class; + case "encoding": return java.lang.String.class; + case "lazystartproducer": + case "lazyStartProducer": return boolean.class; + case "synchronous": return boolean.class; + default: return null; + } } @Override diff --git a/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteEndpointUriFactory.java b/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteEndpointUriFactory.java index f24c41f..28b192e 100644 --- a/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteEndpointUriFactory.java +++ b/extensions/qute/component/src/generated/java/org/apache/camel/component/qute/QuteEndpointUriFactory.java @@ -39,14 +39,14 @@ public class QuteEndpointUriFactory extends org.apache.camel.support.component.E } @Override - public String buildUri(String scheme, Map<String, Object> properties) throws URISyntaxException { + public String buildUri(String scheme, Map<String, Object> properties, boolean encode) throws URISyntaxException { String syntax = scheme + BASE; String uri = syntax; Map<String, Object> copy = new HashMap<>(properties); uri = buildPathParameter(syntax, uri, "resourceUri", null, true, copy); - uri = buildQueryParameters(uri, copy); + uri = buildQueryParameters(uri, copy, encode); return uri; } diff --git a/integration-tests/foundation/src/main/java/org/apache/camel/quarkus/component/foundation/it/mock/MockResource.java b/integration-tests/foundation/src/main/java/org/apache/camel/quarkus/component/foundation/it/mock/MockResource.java index 6d0e29c..985a507 100644 --- a/integration-tests/foundation/src/main/java/org/apache/camel/quarkus/component/foundation/it/mock/MockResource.java +++ b/integration-tests/foundation/src/main/java/org/apache/camel/quarkus/component/foundation/it/mock/MockResource.java @@ -26,10 +26,10 @@ import javax.ws.rs.core.MediaType; import org.apache.camel.CamelContext; import org.apache.camel.ProducerTemplate; +import org.apache.camel.builder.AdviceWith; import org.apache.camel.builder.AdviceWithRouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.model.ModelCamelContext; -import org.apache.camel.reifier.RouteReifier; import org.jboss.logging.Logger; import org.wildfly.common.Assert; @@ -51,7 +51,7 @@ public class MockResource { // advice the first route using the inlined AdviceWith route builder // which has extended capabilities than the regular route builder - RouteReifier.adviceWith(context.adapt(ModelCamelContext.class).getRouteDefinition("forMocking"), context, + AdviceWith.adviceWith(context.adapt(ModelCamelContext.class).getRouteDefinition("forMocking"), context, new AdviceWithRouteBuilder() { @Override public void configure() throws Exception { diff --git a/integration-tests/leveldb/src/main/java/org/apache/camel/quarkus/component/leveldb/it/LeveldbRouteBuilder.java b/integration-tests/leveldb/src/main/java/org/apache/camel/quarkus/component/leveldb/it/LeveldbRouteBuilder.java index ed9674f..a5f7b8b 100644 --- a/integration-tests/leveldb/src/main/java/org/apache/camel/quarkus/component/leveldb/it/LeveldbRouteBuilder.java +++ b/integration-tests/leveldb/src/main/java/org/apache/camel/quarkus/component/leveldb/it/LeveldbRouteBuilder.java @@ -24,6 +24,7 @@ import org.apache.camel.AggregationStrategy; import org.apache.camel.Exchange; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.leveldb.LevelDBAggregationRepository; +import org.apache.camel.quarkus.component.leveldb.QuarkusLevelDBAggregationRepository; public class LeveldbRouteBuilder extends RouteBuilder { public static final String DIRECT_START = "direct:start"; @@ -39,21 +40,22 @@ public class LeveldbRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { - LevelDBAggregationRepository repo = new LevelDBAggregationRepository("repo", DATA_FOLDER + "leveldb.dat"); + LevelDBAggregationRepository repo = new QuarkusLevelDBAggregationRepository("repo", DATA_FOLDER + "leveldb.dat"); from(DIRECT_START) .aggregate(header("id"), new MyAggregationStrategy()) .completionSize(7).aggregationRepository(repo) .to(MOCK_RESULT); - LevelDBAggregationRepository repoBinary = new LevelDBAggregationRepository("repo", DATA_FOLDER + "levelBinarydb.dat"); + LevelDBAggregationRepository repoBinary = new QuarkusLevelDBAggregationRepository("repo", + DATA_FOLDER + "levelBinarydb.dat"); from(DIRECT_BINARY) .aggregate(header("id"), new BinaryAggregationStrategy()) .completionSize(3).aggregationRepository(repoBinary) .to(MOCK_RESULT); - LevelDBAggregationRepository repoWithFailure = new LevelDBAggregationRepository("repoWithFailure", + LevelDBAggregationRepository repoWithFailure = new QuarkusLevelDBAggregationRepository("repoWithFailure", DATA_FOLDER + "leveldbWithFailure.dat"); repoWithFailure.setUseRecovery(true); @@ -72,7 +74,7 @@ public class LeveldbRouteBuilder extends RouteBuilder { .to(MOCK_RESULT) .end(); - LevelDBAggregationRepository repoDeadLetter = new LevelDBAggregationRepository("repoDeadLetter", + LevelDBAggregationRepository repoDeadLetter = new QuarkusLevelDBAggregationRepository("repoDeadLetter", DATA_FOLDER + "leveldbDeadLetter.dat"); repoDeadLetter.setUseRecovery(true); diff --git a/integration-tests/leveldb/src/test/java/org/apache/camel/quarkus/component/leveldb/it/LeveldbIT.java b/integration-tests/leveldb/src/test/java/org/apache/camel/quarkus/component/leveldb/it/LeveldbIT.java index e4fc4ba..743e2ab 100644 --- a/integration-tests/leveldb/src/test/java/org/apache/camel/quarkus/component/leveldb/it/LeveldbIT.java +++ b/integration-tests/leveldb/src/test/java/org/apache/camel/quarkus/component/leveldb/it/LeveldbIT.java @@ -20,8 +20,4 @@ import io.quarkus.test.junit.NativeImageTest; @NativeImageTest class LeveldbIT extends LeveldbTest { - @Override - boolean doeasBinaryDataWork() { - return false; - } } diff --git a/integration-tests/leveldb/src/test/java/org/apache/camel/quarkus/component/leveldb/it/LeveldbTest.java b/integration-tests/leveldb/src/test/java/org/apache/camel/quarkus/component/leveldb/it/LeveldbTest.java index 1ffa037..3d473b8 100644 --- a/integration-tests/leveldb/src/test/java/org/apache/camel/quarkus/component/leveldb/it/LeveldbTest.java +++ b/integration-tests/leveldb/src/test/java/org/apache/camel/quarkus/component/leveldb/it/LeveldbTest.java @@ -101,19 +101,7 @@ class LeveldbTest { .statusCode(201) .extract().as(Boolean.class); - if (doeasBinaryDataWork()) { - assertTrue(theSame); - } else { - assertFalse(theSame); - } - } - - /** - * Until binary payload is not supported, in native binary test will fail. - * Needs https://issues.apache.org/jira/browse/CAMEL-15679 - */ - boolean doeasBinaryDataWork() { - return true; + assertTrue(theSame); } private Map<String, List<Map<String, Object>>> testAggregate(String path, List<String> messages) { diff --git a/integration-tests/saga/src/main/java/org/apache/camel/quarkus/component/saga/it/SagaRoute.java b/integration-tests/saga/src/main/java/org/apache/camel/quarkus/component/saga/it/SagaRoute.java index 32dc3cb..6196340 100644 --- a/integration-tests/saga/src/main/java/org/apache/camel/quarkus/component/saga/it/SagaRoute.java +++ b/integration-tests/saga/src/main/java/org/apache/camel/quarkus/component/saga/it/SagaRoute.java @@ -21,9 +21,9 @@ import javax.inject.Inject; import org.apache.camel.Exchange; import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.impl.saga.InMemorySagaService; import org.apache.camel.model.SagaPropagation; import org.apache.camel.saga.CamelSagaService; +import org.apache.camel.saga.InMemorySagaService; @ApplicationScoped public class SagaRoute extends RouteBuilder { diff --git a/pom.xml b/pom.xml index c083f73..07b8a3c 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ <awssdk1-swf-libs.version>1.11.22</awssdk1-swf-libs.version> <awssdk2.version>2.14.3</awssdk2.version> <bouncycastle.version>1.66</bouncycastle.version> - <camel.version>3.6.0</camel.version> + <camel.version>3.7.0-SNAPSHOT</camel.version> <commons-beanutils.version>1.9.4</commons-beanutils.version><!-- keep in sync with Camel --> <commons-cli.version>1.4</commons-cli.version><!-- keep in sync with Quarkus, via quarkus-bootstrap-core --> <commons-collections.version>3.2.2</commons-collections.version><!-- used by hbase, should be pretty stable as commons-collections are not developed actively anymore --> @@ -72,6 +72,7 @@ <jackson-asl.version>1.9.13</jackson-asl.version><!-- Mess in the transitive dependencies of spark and hbase-testing-util --> <java.xml.ws.version>2.3.1</java.xml.ws.version> <jcodings.version>1.0.55</jcodings.version><!-- used by hbase --> + <joni.version>2.1.31</joni.version><!-- used by json-validator --> <jaxen.version>1.2.0</jaxen.version> <javassist.version>3.22.0-CR2</javassist.version><!-- debezium --> <jersey-sun.version>1.19.4</jersey-sun.version><!-- Spark --> diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml index ab3e1e7..6b7003a 100644 --- a/poms/bom/pom.xml +++ b/poms/bom/pom.xml @@ -656,6 +656,11 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-core-processor</artifactId> + <version>${camel.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-couchbase</artifactId> <version>${camel.version}</version> </dependency> @@ -5602,6 +5607,11 @@ <version>${jcodings.version}</version> </dependency> <dependency> + <groupId>org.jruby.joni</groupId> + <artifactId>joni</artifactId> + <version>${joni.version}</version> + </dependency> + <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version>