You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/01/02 15:17:12 UTC
[camel] 01/02: CAMEL-14349: camel-core - Transformer and Validator
registry should be on-demand
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 972bbda5e4c883249933bc1fd5f24af9fb1d800c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Jan 2 16:15:46 2020 +0100
CAMEL-14349: camel-core - Transformer and Validator registry should be on-demand
---
.../main/java/org/apache/camel/CamelContext.java | 4 +--
.../camel/impl/engine/AbstractCamelContext.java | 40 +++++++++++++++------
.../impl/engine/DefaultTransformerRegistry.java | 10 ++++++
.../impl/engine/DefaultValidatorRegistry.java | 12 +++++++
.../org/apache/camel/builder/RouteBuilder.java | 30 ++++++++++++++++
.../apache/camel/builder/TransformerBuilder.java | 3 ++
.../org/apache/camel/builder/ValidatorBuilder.java | 3 ++
.../camel/impl/AbstractModelCamelContext.java | 26 +++-----------
.../transformer/CustomTransformeReifier.java | 5 ++-
.../transformer/EndpointTransformeReifier.java | 2 +-
.../reifier/transformer/TransformerReifier.java | 4 +--
.../reifier/validator/CustomValidatorReifier.java | 5 ++-
.../validator/EndpointValidatorReifier.java | 2 +-
.../validator/PredicateValidatorReifier.java | 2 +-
.../camel/reifier/validator/ValidatorReifier.java | 4 +--
.../core/xml/AbstractCamelContextFactoryBean.java | 41 ++++++++++++++++++++++
.../camel/impl/MultipleLifecycleStrategyTest.java | 4 +--
.../management/mbean/ModelCamelContextHelper.java | 1 +
.../management/ManagedNonManagedServiceTest.java | 2 +-
...edProducerRouteAddRemoveRegisterAlwaysTest.java | 2 +-
.../management/ManagedRouteAddRemoveTest.java | 2 +-
21 files changed, 151 insertions(+), 53 deletions(-)
diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
index 27537f9..ec962d6 100644
--- a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
@@ -910,7 +910,7 @@ public interface CamelContext extends StatefulService, RuntimeConfiguration {
* Gets the {@link org.apache.camel.spi.TransformerRegistry}
* @return the TransformerRegistry
*/
- TransformerRegistry<? extends ValueHolder<String>> getTransformerRegistry();
+ TransformerRegistry getTransformerRegistry();
/**
* Resolve a validator given from/to data type.
@@ -924,7 +924,7 @@ public interface CamelContext extends StatefulService, RuntimeConfiguration {
* Gets the {@link org.apache.camel.spi.ValidatorRegistry}
* @return the ValidatorRegistry
*/
- ValidatorRegistry<? extends ValueHolder<String>> getValidatorRegistry();
+ ValidatorRegistry getValidatorRegistry();
/**
* Sets global options that can be referenced in the camel context
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index a732d95..eddaf50 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -2524,10 +2524,6 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
// re-create endpoint registry as the cache size limit may be set after the constructor of this instance was called.
// and we needed to create endpoints up-front as it may be accessed before this context is started
endpoints = doAddService(createEndpointRegistry(endpoints));
- // Initialize declarative transformer registry
- transformerRegistry = doAddService(createTransformerRegistry());
- // Initialize declarative validator registry
- validatorRegistry = doAddService(createValidatorRegistry());
// optimised to not include runtimeEndpointRegistry unless startServices
// its enabled or JMX statistics is in extended mode
@@ -3983,29 +3979,51 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
@Override
public Transformer resolveTransformer(String scheme) {
- return transformerRegistry.resolveTransformer(new TransformerKey(scheme));
+ return getTransformerRegistry().resolveTransformer(new TransformerKey(scheme));
}
@Override
public Transformer resolveTransformer(DataType from, DataType to) {
- return transformerRegistry.resolveTransformer(new TransformerKey(from, to));
+ return getTransformerRegistry().resolveTransformer(new TransformerKey(from, to));
}
@Override
- public TransformerRegistry<TransformerKey> getTransformerRegistry() {
+ public TransformerRegistry getTransformerRegistry() {
+ if (transformerRegistry == null) {
+ synchronized (lock) {
+ if (transformerRegistry == null) {
+ setTransformerRegistry(createTransformerRegistry());
+ }
+ }
+ }
return transformerRegistry;
}
+ public void setTransformerRegistry(TransformerRegistry transformerRegistry) {
+ this.transformerRegistry = doAddService(transformerRegistry);
+ }
+
@Override
public Validator resolveValidator(DataType type) {
- return validatorRegistry.resolveValidator(new ValidatorKey(type));
+ return getValidatorRegistry().resolveValidator(new ValidatorKey(type));
}
@Override
- public ValidatorRegistry<ValidatorKey> getValidatorRegistry() {
+ public ValidatorRegistry getValidatorRegistry() {
+ if (validatorRegistry == null) {
+ synchronized (lock) {
+ if (validatorRegistry == null) {
+ setValidatorRegistry(createValidatorRegistry());
+ }
+ }
+ }
return validatorRegistry;
}
+ public void setValidatorRegistry(ValidatorRegistry validatorRegistry) {
+ this.validatorRegistry = doAddService(validatorRegistry);
+ }
+
@Override
public void setSSLContextParameters(SSLContextParameters sslContextParameters) {
this.sslContextParameters = sslContextParameters;
@@ -4200,8 +4218,8 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext
protected abstract EndpointRegistry<EndpointKey> createEndpointRegistry(Map<EndpointKey, Endpoint> endpoints);
- protected abstract TransformerRegistry<TransformerKey> createTransformerRegistry() throws Exception;
+ protected abstract TransformerRegistry<TransformerKey> createTransformerRegistry();
- protected abstract ValidatorRegistry<ValidatorKey> createValidatorRegistry() throws Exception;
+ protected abstract ValidatorRegistry<ValidatorKey> createValidatorRegistry();
}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultTransformerRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultTransformerRegistry.java
index c4530b1..eb1a12c 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultTransformerRegistry.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultTransformerRegistry.java
@@ -21,10 +21,13 @@ import java.util.concurrent.ConcurrentHashMap;
import org.apache.camel.CamelContext;
import org.apache.camel.impl.transformer.TransformerKey;
+import org.apache.camel.impl.validator.ValidatorKey;
import org.apache.camel.spi.DataType;
import org.apache.camel.spi.Transformer;
import org.apache.camel.spi.TransformerRegistry;
+import org.apache.camel.spi.Validator;
import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.service.ServiceHelper;
import org.apache.camel.util.ObjectHelper;
/**
@@ -82,6 +85,13 @@ public class DefaultTransformerRegistry extends AbstractDynamicRegistry<Transfor
}
@Override
+ public Transformer put(TransformerKey key, Transformer transformer) {
+ // ensure transformer is started before its being used
+ ServiceHelper.startService(transformer);
+ return super.put(key, transformer);
+ }
+
+ @Override
public boolean isStatic(String scheme) {
return isStatic(new TransformerKey(scheme));
}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultValidatorRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultValidatorRegistry.java
index 8e3307c..a13f889 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultValidatorRegistry.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultValidatorRegistry.java
@@ -16,12 +16,17 @@
*/
package org.apache.camel.impl.engine;
+import java.io.IOException;
+
import org.apache.camel.CamelContext;
+import org.apache.camel.Service;
import org.apache.camel.impl.validator.ValidatorKey;
import org.apache.camel.spi.DataType;
import org.apache.camel.spi.Validator;
import org.apache.camel.spi.ValidatorRegistry;
import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.service.ServiceHelper;
+import org.apache.camel.support.service.ServiceSupport;
import org.apache.camel.util.ObjectHelper;
/**
@@ -57,4 +62,11 @@ public class DefaultValidatorRegistry extends AbstractDynamicRegistry<ValidatorK
return "ValidatorRegistry for " + context.getName() + ", capacity: " + maxCacheSize;
}
+ @Override
+ public Validator put(ValidatorKey key, Validator validator) {
+ // ensure validator is started before its being used
+ ServiceHelper.startService(validator);
+ return super.put(key, validator);
+ }
+
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/RouteBuilder.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/RouteBuilder.java
index 90dadea..2d3e5d9 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/RouteBuilder.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/RouteBuilder.java
@@ -29,6 +29,9 @@ import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.Ordered;
import org.apache.camel.Route;
import org.apache.camel.RoutesBuilder;
+import org.apache.camel.ValueHolder;
+import org.apache.camel.impl.transformer.TransformerKey;
+import org.apache.camel.impl.validator.ValidatorKey;
import org.apache.camel.model.FromDefinition;
import org.apache.camel.model.InterceptDefinition;
import org.apache.camel.model.InterceptFromDefinition;
@@ -41,8 +44,15 @@ import org.apache.camel.model.RoutesDefinition;
import org.apache.camel.model.rest.RestConfigurationDefinition;
import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.model.rest.RestsDefinition;
+import org.apache.camel.model.transformer.TransformerDefinition;
+import org.apache.camel.model.validator.ValidatorDefinition;
+import org.apache.camel.reifier.transformer.TransformerReifier;
+import org.apache.camel.reifier.validator.ValidatorReifier;
+import org.apache.camel.spi.DataType;
import org.apache.camel.spi.PropertiesComponent;
import org.apache.camel.spi.RestConfiguration;
+import org.apache.camel.spi.Transformer;
+import org.apache.camel.spi.Validator;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StringHelper;
import org.apache.camel.util.function.ThrowingConsumer;
@@ -543,6 +553,16 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
for (TransformerBuilder tdb : transformerBuilders) {
tdb.configure(camelContext);
}
+
+ // create and register transformers on transformer registry
+ for (TransformerDefinition def : camelContext.getExtension(Model.class).getTransformers()) {
+ Transformer transformer = TransformerReifier.reifier(def).createTransformer(camelContext);
+ camelContext.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()));
}
protected void populateValidators() {
@@ -553,6 +573,16 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
for (ValidatorBuilder vb : validatorBuilders) {
vb.configure(camelContext);
}
+
+ // create and register validators on validator registry
+ for (ValidatorDefinition def : camelContext.getExtension(Model.class).getValidators()) {
+ Validator validator = ValidatorReifier.reifier(def).createValidator(camelContext);
+ camelContext.getValidatorRegistry().put(createValidatorKey(def), validator);
+ }
+ }
+
+ private static ValidatorKey createValidatorKey(ValidatorDefinition def) {
+ return new ValidatorKey(new DataType(def.getType()));
}
public RestsDefinition getRestCollection() {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/TransformerBuilder.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/TransformerBuilder.java
index 3996943f..f309911 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/TransformerBuilder.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/TransformerBuilder.java
@@ -185,6 +185,9 @@ public class TransformerBuilder {
transformer.setToType(to);
}
+ // force init of transformer registry
+ camelContext.getTransformerRegistry();
+
camelContext.getExtension(Model.class).getTransformers().add(transformer);
}
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/ValidatorBuilder.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/ValidatorBuilder.java
index 13aa3b8..08d595b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/ValidatorBuilder.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/ValidatorBuilder.java
@@ -165,6 +165,9 @@ public class ValidatorBuilder {
throw new IllegalArgumentException("No Validator type was specified");
}
+ // force init of validator registry
+ camelContext.getValidatorRegistry();
+
validator.setType(type);
camelContext.getExtension(Model.class).getValidators().add(validator);
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
index 6a78a7c..b017356 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/AbstractModelCamelContext.java
@@ -257,31 +257,13 @@ public abstract class AbstractModelCamelContext extends AbstractCamelContext imp
}
@Override
- protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() throws Exception {
- DefaultValidatorRegistry registry = new DefaultValidatorRegistry(this);
- for (ValidatorDefinition def : getValidators()) {
- Validator validator = ValidatorReifier.reifier(def).createValidator(this);
- registry.put(createKey(def), doAddService(validator));
- }
- return registry;
- }
-
- private ValidatorKey createKey(ValidatorDefinition def) {
- return new ValidatorKey(new DataType(def.getType()));
+ protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() {
+ return new DefaultValidatorRegistry(this);
}
@Override
- protected TransformerRegistry<TransformerKey> createTransformerRegistry() throws Exception {
- DefaultTransformerRegistry registry = new DefaultTransformerRegistry(this);
- for (TransformerDefinition def : getTransformers()) {
- Transformer transformer = TransformerReifier.reifier(def).createTransformer(this);
- registry.put(createKey(def), doAddService(transformer));
- }
- return registry;
- }
-
- private TransformerKey createKey(TransformerDefinition def) {
- return ObjectHelper.isNotEmpty(def.getScheme()) ? new TransformerKey(def.getScheme()) : new TransformerKey(new DataType(def.getFromType()), new DataType(def.getToType()));
+ protected TransformerRegistry<TransformerKey> createTransformerRegistry() {
+ return new DefaultTransformerRegistry(this);
}
protected abstract HealthCheckRegistry createHealthCheckRegistry();
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/CustomTransformeReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/CustomTransformeReifier.java
index 6cfea73..049f00a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/CustomTransformeReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/CustomTransformeReifier.java
@@ -28,7 +28,7 @@ public class CustomTransformeReifier extends TransformerReifier<CustomTransforme
}
@Override
- protected Transformer doCreateTransformer(CamelContext context) throws Exception {
+ protected Transformer doCreateTransformer(CamelContext context) {
if (definition.getRef() == null && definition.getClassName() == null) {
throw new IllegalArgumentException("'ref' or 'className' must be specified for customTransformer");
}
@@ -42,12 +42,11 @@ public class CustomTransformeReifier extends TransformerReifier<CustomTransforme
throw new IllegalArgumentException(String.format("Transformer '%s' is already in use. Please check if duplicate transformer exists.", definition.getRef()));
}
} else {
- Class<Transformer> transformerClass = context.getClassResolver().resolveMandatoryClass(definition.getClassName(), Transformer.class);
+ Class<Transformer> transformerClass = context.getClassResolver().resolveClass(definition.getClassName(), Transformer.class);
if (transformerClass == null) {
throw new IllegalArgumentException("Cannot find transformer class: " + definition.getClassName());
}
transformer = context.getInjector().newInstance(transformerClass, false);
-
}
transformer.setCamelContext(context);
return transformer.setModel(definition.getScheme()).setFrom(definition.getFromType()).setTo(definition.getToType());
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/EndpointTransformeReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/EndpointTransformeReifier.java
index 32b284c..b1afd5f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/EndpointTransformeReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/EndpointTransformeReifier.java
@@ -32,7 +32,7 @@ public class EndpointTransformeReifier extends TransformerReifier<EndpointTransf
}
@Override
- protected Transformer doCreateTransformer(CamelContext context) throws Exception {
+ protected Transformer doCreateTransformer(CamelContext context) {
Endpoint endpoint = definition.getUri() != null ? context.getEndpoint(definition.getUri()) : context.getRegistry().lookupByNameAndType(definition.getRef(), Endpoint.class);
SendProcessor processor = new SendProcessor(endpoint, ExchangePattern.InOut);
return new ProcessorTransformer(context).setProcessor(processor).setModel(definition.getScheme()).setFrom(definition.getFromType()).setTo(definition.getToType());
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/TransformerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/TransformerReifier.java
index b4c2b9e..f27b31a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/TransformerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/transformer/TransformerReifier.java
@@ -52,10 +52,10 @@ public abstract class TransformerReifier<T> {
throw new IllegalStateException("Unsupported definition: " + definition);
}
- public Transformer createTransformer(CamelContext context) throws Exception {
+ public Transformer createTransformer(CamelContext context) {
return doCreateTransformer(context);
}
- protected abstract Transformer doCreateTransformer(CamelContext context) throws Exception;
+ protected abstract Transformer doCreateTransformer(CamelContext context);
}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/CustomValidatorReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/CustomValidatorReifier.java
index 0d6118a..42e612b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/CustomValidatorReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/CustomValidatorReifier.java
@@ -28,7 +28,7 @@ public class CustomValidatorReifier extends ValidatorReifier<CustomValidatorDefi
}
@Override
- protected Validator doCreateValidator(CamelContext context) throws Exception {
+ protected Validator doCreateValidator(CamelContext context) {
if (definition.getRef() == null && definition.getClassName() == null) {
throw new IllegalArgumentException("'ref' or 'type' must be specified for customValidator");
}
@@ -42,12 +42,11 @@ public class CustomValidatorReifier extends ValidatorReifier<CustomValidatorDefi
throw new IllegalArgumentException(String.format("Validator '%s' is already in use. Please check if duplicate validator exists.", definition.getRef()));
}
} else {
- Class<Validator> validatorClass = context.getClassResolver().resolveMandatoryClass(definition.getClassName(), Validator.class);
+ Class<Validator> validatorClass = context.getClassResolver().resolveClass(definition.getClassName(), Validator.class);
if (validatorClass == null) {
throw new IllegalArgumentException("Cannot find validator class: " + definition.getClassName());
}
validator = context.getInjector().newInstance(validatorClass, false);
-
}
validator.setCamelContext(context);
return validator.setType(definition.getType());
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/EndpointValidatorReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/EndpointValidatorReifier.java
index c8c4712..b8364df 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/EndpointValidatorReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/EndpointValidatorReifier.java
@@ -32,7 +32,7 @@ public class EndpointValidatorReifier extends ValidatorReifier<EndpointValidator
}
@Override
- protected Validator doCreateValidator(CamelContext context) throws Exception {
+ protected Validator doCreateValidator(CamelContext context) {
Endpoint endpoint = definition.getUri() != null ? context.getEndpoint(definition.getUri()) : context.getRegistry().lookupByNameAndType(definition.getRef(), Endpoint.class);
SendProcessor processor = new SendProcessor(endpoint, ExchangePattern.InOut);
return new ProcessorValidator(context).setProcessor(processor).setType(definition.getType());
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/PredicateValidatorReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/PredicateValidatorReifier.java
index 8fc8450..17c097b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/PredicateValidatorReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/PredicateValidatorReifier.java
@@ -31,7 +31,7 @@ public class PredicateValidatorReifier extends ValidatorReifier<PredicateValidat
}
@Override
- protected Validator doCreateValidator(CamelContext context) throws Exception {
+ protected Validator doCreateValidator(CamelContext context) {
Predicate pred = definition.getExpression().createPredicate(context);
PredicateValidatingProcessor processor = new PredicateValidatingProcessor(pred);
return new ProcessorValidator(context).setProcessor(processor).setType(definition.getType());
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/ValidatorReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/ValidatorReifier.java
index 2de79e1..cc90525 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/ValidatorReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/validator/ValidatorReifier.java
@@ -56,10 +56,10 @@ public abstract class ValidatorReifier<T> {
throw new IllegalStateException("Unsupported definition: " + definition);
}
- public Validator createValidator(CamelContext context) throws Exception {
+ public Validator createValidator(CamelContext context) {
return doCreateValidator(context);
}
- protected abstract Validator doCreateValidator(CamelContext context) throws Exception;
+ protected abstract Validator doCreateValidator(CamelContext context);
}
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index e094c23..314ce92 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -39,6 +39,7 @@ import org.apache.camel.ShutdownRoute;
import org.apache.camel.ShutdownRunningTask;
import org.apache.camel.TypeConverterExists;
import org.apache.camel.TypeConverters;
+import org.apache.camel.ValueHolder;
import org.apache.camel.builder.ErrorHandlerBuilderRef;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.cloud.ServiceRegistry;
@@ -51,6 +52,8 @@ import org.apache.camel.health.HealthCheckRegistry;
import org.apache.camel.health.HealthCheckRepository;
import org.apache.camel.health.HealthCheckService;
import org.apache.camel.impl.engine.DefaultManagementStrategy;
+import org.apache.camel.impl.transformer.TransformerKey;
+import org.apache.camel.impl.validator.ValidatorKey;
import org.apache.camel.model.ContextScanDefinition;
import org.apache.camel.model.FromDefinition;
import org.apache.camel.model.GlobalOptionsDefinition;
@@ -76,13 +79,18 @@ import org.apache.camel.model.dataformat.DataFormatsDefinition;
import org.apache.camel.model.rest.RestConfigurationDefinition;
import org.apache.camel.model.rest.RestContainer;
import org.apache.camel.model.rest.RestDefinition;
+import org.apache.camel.model.transformer.TransformerDefinition;
import org.apache.camel.model.transformer.TransformersDefinition;
+import org.apache.camel.model.validator.ValidatorDefinition;
import org.apache.camel.model.validator.ValidatorsDefinition;
import org.apache.camel.processor.interceptor.BacklogTracer;
+import org.apache.camel.reifier.transformer.TransformerReifier;
+import org.apache.camel.reifier.validator.ValidatorReifier;
import org.apache.camel.runtimecatalog.JSonSchemaResolver;
import org.apache.camel.runtimecatalog.RuntimeCamelCatalog;
import org.apache.camel.spi.AsyncProcessorAwaitManager;
import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.spi.DataType;
import org.apache.camel.spi.Debugger;
import org.apache.camel.spi.EndpointStrategy;
import org.apache.camel.spi.EventFactory;
@@ -111,9 +119,11 @@ import org.apache.camel.spi.ShutdownStrategy;
import org.apache.camel.spi.StreamCachingStrategy;
import org.apache.camel.spi.ThreadPoolFactory;
import org.apache.camel.spi.ThreadPoolProfile;
+import org.apache.camel.spi.Transformer;
import org.apache.camel.spi.TypeConverterRegistry;
import org.apache.camel.spi.UnitOfWorkFactory;
import org.apache.camel.spi.UuidGenerator;
+import org.apache.camel.spi.Validator;
import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.ObjectHelper;
import org.apache.camel.util.StringHelper;
@@ -427,6 +437,9 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
// must init rest refs before we add the rests
initRestRefs();
+ initTransformers();
+ initValidators();
+
// cannot add rests as routes yet as we need to initialize this specially
getContext().addRestDefinitions(getRests(), false);
@@ -474,6 +487,34 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
}
}
+ private void initTransformers() {
+ if (getTransformers() != null) {
+ for (TransformerDefinition def : getTransformers().getTransformers()) {
+ // create and register transformers on transformer registry
+ Transformer transformer = TransformerReifier.reifier(def).createTransformer(getContext());
+ getContext().getTransformerRegistry().put(createTransformerKey(def), transformer);
+ }
+ }
+ }
+
+ private static ValueHolder<String> createTransformerKey(TransformerDefinition def) {
+ return org.apache.camel.util.ObjectHelper.isNotEmpty(def.getScheme()) ? new TransformerKey(def.getScheme()) : new TransformerKey(new DataType(def.getFromType()), new DataType(def.getToType()));
+ }
+
+ private void initValidators() {
+ if (getValidators() != null) {
+ for (ValidatorDefinition def : getValidators().getValidators()) {
+ // create and register validators on validator registry
+ Validator validator = ValidatorReifier.reifier(def).createValidator(getContext());
+ getContext().getValidatorRegistry().put(createValidatorKey(def), validator);
+ }
+ }
+ }
+
+ private static ValidatorKey createValidatorKey(ValidatorDefinition def) {
+ return new ValidatorKey(new DataType(def.getType()));
+ }
+
/**
* Do special preparation for some concepts such as interceptors and policies
* this is needed as JAXB does not build exactly the same model definition as Spring DSL would do
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
index 7e503d3..76abf3c 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/MultipleLifecycleStrategyTest.java
@@ -51,8 +51,8 @@ public class MultipleLifecycleStrategyTest extends TestSupport {
List<String> expectedEvents = Arrays.asList("onContextStart",
"onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd",
- "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd",
- "onServiceAdd", "onServiceAdd", "onServiceAdd", "onComponentAdd", "onEndpointAdd", "onComponentRemove", "onContextStop");
+ "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd", "onServiceAdd",
+ "onComponentAdd", "onEndpointAdd", "onComponentRemove", "onContextStop");
assertEquals(expectedEvents, dummy1.getEvents());
assertEquals(expectedEvents, dummy2.getEvents());
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ModelCamelContextHelper.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ModelCamelContextHelper.java
index d683c73..70090bf 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ModelCamelContextHelper.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ModelCamelContextHelper.java
@@ -27,6 +27,7 @@ import org.apache.camel.model.RouteDefinition;
/**
* A number of helper methods
*/
+@Deprecated
public final class ModelCamelContextHelper {
/**
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java
index 3d81dc5..3a249b5 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedNonManagedServiceTest.java
@@ -29,7 +29,7 @@ import org.junit.Test;
public class ManagedNonManagedServiceTest extends ManagementTestSupport {
- private static final int SERVICES = 14;
+ private static final int SERVICES = 12;
@Test
public void testService() throws Exception {
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java
index 8429a81..4bb974c 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedProducerRouteAddRemoveRegisterAlwaysTest.java
@@ -28,7 +28,7 @@ import org.junit.Test;
public class ManagedProducerRouteAddRemoveRegisterAlwaysTest extends ManagementTestSupport {
- private int services = 14;
+ private int services = 12;
@Override
protected CamelContext createCamelContext() throws Exception {
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
index 6ed0d66..339ec5f 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteAddRemoveTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
*/
public class ManagedRouteAddRemoveTest extends ManagementTestSupport {
- private static final int SERVICES = 14;
+ private static final int SERVICES = 12;
@Override
protected RouteBuilder createRouteBuilder() throws Exception {