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 2019/11/30 18:53:21 UTC

[camel] branch master updated: [CAMEL-13575] Use strings instead of boolean/integer/long in definition fields (#3365)

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


The following commit(s) were added to refs/heads/master by this push:
     new a6deea3  [CAMEL-13575] Use strings instead of boolean/integer/long in definition fields (#3365)
a6deea3 is described below

commit a6deea370d6a2c3c64c8f2df4f02696ba2c12773
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Sat Nov 30 19:53:09 2019 +0100

    [CAMEL-13575] Use strings instead of boolean/integer/long in definition fields (#3365)
---
 components/camel-as2/camel-as2-api/pom.xml         |   4 +
 .../as2/api/io/AS2SessionInputBuffer.java          |   4 +-
 .../camel/cdi/XmlErrorHandlerFactoryBean.java      |   7 +-
 .../camel/cdi/xml/ErrorHandlerDefinition.java      |  24 +--
 .../hystrix/processor/HystrixReifier.java          |  58 +++----
 .../processor/HystrixHierarchicalConfigTest.java   |  20 +--
 .../HystrixRouteConfigMaximumSizeTest.java         |   2 +-
 .../hystrix/processor/HystrixRouteConfigTest.java  |   2 +-
 .../SpringHystrixRouteHierarchicalConfigTest.java  |   2 +-
 .../verifier/MongoDbVerifierExtensionTest.java     |   2 +-
 .../component/resilience4j/ResilienceReifier.java  |   2 +-
 .../src/test/resources/custom.properties           |   1 +
 .../apache/camel/spring/processor/aggregator.xml   |   6 +-
 .../apache/camel/swagger/RestSwaggerReader.java    |  10 +-
 .../camel/test/blueprint/ignoreDatatypes.xml       |   2 +-
 .../undertow/DefaultUndertowHttpBinding.java       |   4 +-
 .../UndertowComponentVerifierExtensionTest.java    |   2 +-
 .../undertow/UndertowComponentVerifierTest.java    |   2 +-
 .../impl/cloud/CachingServiceDiscoveryTest.java    |   2 +-
 .../org/apache/camel/builder/DataFormatClause.java |  22 +--
 .../camel/builder/ExpressionClauseSupport.java     |  48 +++---
 .../apache/camel/model/AggregateDefinition.java    | 162 ++++++++++++--------
 .../org/apache/camel/model/BeanDefinition.java     |   8 +-
 .../org/apache/camel/model/ChoiceDefinition.java   |  11 +-
 .../camel/model/CircuitBreakerDefinition.java      |   2 +-
 .../apache/camel/model/ClaimCheckDefinition.java   |  23 ++-
 .../apache/camel/model/ContextScanDefinition.java  |   6 +-
 .../apache/camel/model/DataFormatDefinition.java   |   7 +-
 .../org/apache/camel/model/DelayDefinition.java    |  18 +--
 .../camel/model/DynamicRouterDefinition.java       |  16 +-
 .../org/apache/camel/model/EnrichDefinition.java   |  40 ++---
 .../camel/model/HystrixConfigurationCommon.java    | 168 ++++++++++-----------
 .../model/HystrixConfigurationDefinition.java      | 110 +++++++-------
 .../camel/model/IdempotentConsumerDefinition.java  |  32 ++--
 .../org/apache/camel/model/InOnlyDefinition.java   |   4 +-
 .../org/apache/camel/model/InOutDefinition.java    |   4 +-
 .../apache/camel/model/InputTypeDefinition.java    |  21 ++-
 .../model/InterceptSendToEndpointDefinition.java   |   8 +-
 .../apache/camel/model/LoadBalanceDefinition.java  |  19 +--
 .../java/org/apache/camel/model/LogDefinition.java |   6 +-
 .../org/apache/camel/model/LoopDefinition.java     |  16 +-
 .../apache/camel/model/MulticastDefinition.java    |  66 ++++----
 .../apache/camel/model/OnCompletionDefinition.java |  46 +++---
 .../apache/camel/model/OnExceptionDefinition.java  |  29 ++--
 .../apache/camel/model/OnFallbackDefinition.java   |  36 +++--
 .../model/OptimisticLockRetryPolicyDefinition.java |  57 +++++--
 .../apache/camel/model/OtherwiseDefinition.java    |  11 +-
 .../apache/camel/model/OutputTypeDefinition.java   |  21 ++-
 .../apache/camel/model/PollEnrichDefinition.java   |  42 +++---
 .../apache/camel/model/ProcessorDefinition.java    |  62 ++++----
 .../camel/model/RecipientListDefinition.java       |  82 +++++-----
 .../camel/model/RedeliveryPolicyDefinition.java    |  32 +++-
 .../apache/camel/model/ResequenceDefinition.java   |  20 +--
 .../org/apache/camel/model/RollbackDefinition.java |  12 +-
 .../org/apache/camel/model/RouteDefinition.java    |  32 +---
 .../apache/camel/model/RoutingSlipDefinition.java  |  16 +-
 .../org/apache/camel/model/SendDefinition.java     |   2 +-
 .../camel/model/ThreadPoolProfileDefinition.java   |  32 ++--
 .../org/apache/camel/model/ThreadsDefinition.java  |  57 ++++---
 .../java/org/apache/camel/model/ToDefinition.java  |  12 +-
 .../apache/camel/model/ToDynamicDefinition.java    |  32 ++--
 .../org/apache/camel/model/WireTapDefinition.java  |  31 ++--
 ...ngServiceCallServiceDiscoveryConfiguration.java |  13 +-
 ...erServiceCallServiceDiscoveryConfiguration.java |   8 +-
 .../camel/model/config/BatchResequencerConfig.java |  45 +++---
 .../model/config/StreamResequencerConfig.java      |  45 +++---
 .../camel/model/dataformat/ASN1DataFormat.java     |  12 +-
 .../camel/model/dataformat/Any23DataFormat.java    |  15 +-
 .../camel/model/dataformat/BarcodeDataFormat.java  |  15 +-
 .../camel/model/dataformat/Base64DataFormat.java   |  16 +-
 .../camel/model/dataformat/BeanioDataFormat.java   |  30 ++--
 .../camel/model/dataformat/CBORDataFormat.java     |  36 +++--
 .../camel/model/dataformat/CryptoDataFormat.java   |  21 +--
 .../model/dataformat/JacksonXMLDataFormat.java     |  35 +++--
 .../camel/model/dataformat/PGPDataFormat.java      |  36 +++--
 .../camel/model/dataformat/UniVocityHeader.java    |   6 +-
 .../camel/model/language/ExpressionDefinition.java |  13 +-
 .../camel/model/language/JsonPathExpression.java   |  33 ++--
 .../camel/model/language/SimpleExpression.java     |   2 +-
 .../camel/model/language/TokenizerExpression.java  |  37 +++--
 .../model/language/XMLTokenizerExpression.java     |   8 +-
 .../camel/model/language/XPathExpression.java      |  31 ++--
 .../FailoverLoadBalancerDefinition.java            |  18 +--
 .../WeightedLoadBalancerDefinition.java            |  13 +-
 .../camel/model/rest/RestBindingDefinition.java    |  24 +--
 .../apache/camel/model/rest/RestDefinition.java    |  52 +++----
 .../apache/camel/model/rest/VerbDefinition.java    |  30 ++--
 .../org/apache/camel/reifier/AbstractReifier.java  |  29 ++++
 .../org/apache/camel/reifier/AggregateReifier.java |  53 +++----
 .../java/org/apache/camel/reifier/BeanReifier.java |   2 +-
 .../apache/camel/reifier/ClaimCheckReifier.java    |   3 +-
 .../org/apache/camel/reifier/DelayReifier.java     |  14 +-
 .../apache/camel/reifier/DynamicRouterReifier.java |   4 +-
 .../org/apache/camel/reifier/EnrichReifier.java    |  10 +-
 .../camel/reifier/IdempotentConsumerReifier.java   |   8 +-
 .../reifier/InterceptSendToEndpointReifier.java    |   6 +-
 .../java/org/apache/camel/reifier/LogReifier.java  |   2 +-
 .../java/org/apache/camel/reifier/LoopReifier.java |   4 +-
 .../org/apache/camel/reifier/MulticastReifier.java |  20 +--
 .../apache/camel/reifier/OnCompletionReifier.java  |   8 +-
 .../apache/camel/reifier/OnExceptionReifier.java   |   4 +-
 .../apache/camel/reifier/PollEnrichReifier.java    |  12 +-
 .../org/apache/camel/reifier/ProcessorReifier.java |   6 +-
 .../apache/camel/reifier/RecipientListReifier.java |  26 ++--
 .../apache/camel/reifier/ResequenceReifier.java    |  20 +--
 .../org/apache/camel/reifier/RollbackReifier.java  |   4 +-
 .../org/apache/camel/reifier/RouteReifier.java     |   8 +-
 .../apache/camel/reifier/RoutingSlipReifier.java   |   4 +-
 .../java/org/apache/camel/reifier/SendReifier.java |   3 +-
 .../org/apache/camel/reifier/ThreadsReifier.java   |  15 +-
 .../org/apache/camel/reifier/ToDynamicReifier.java |   7 +-
 .../org/apache/camel/reifier/WireTapReifier.java   |  11 +-
 .../reifier/dataformat/DataFormatReifier.java      |   5 +-
 .../UniVocityFixedWidthDataFormatReifier.java      |   5 +-
 .../reifier/errorhandler/ErrorHandlerReifier.java  |  17 ++-
 .../loadbalancer/FailoverLoadBalancerReifier.java  |   6 +-
 .../reifier/loadbalancer/LoadBalancerReifier.java  |   3 +-
 .../loadbalancer/WeightedLoadBalancerReifier.java  |   4 +-
 .../camel/reifier/rest/RestBindingReifier.java     |  11 +-
 .../core/xml/AbstractCamelContextFactoryBean.java  |   5 +-
 .../AbstractCamelRedeliveryPolicyFactoryBean.java  |  16 +-
 .../validator/ValidatorDtdAccessAbstractTest.java  |   4 +-
 .../validator/ValidatorDtdAccessOnTest.java        |   2 +-
 .../apache/camel/model/ChoiceDefinitionTest.java   |   1 +
 .../camel/model/OnFallbackDefinitionTest.java      |  17 +++
 .../java/org/apache/camel/model/XmlParseTest.java  |   8 +-
 .../aggregator/AlbertoAggregatorTest.java          |   4 +-
 .../apache/camel/util/CamelContextHelperTest.java  |  35 +++++
 .../mbean/ManagedWeightedBalancerMBean.java        |   2 +-
 .../mbean/ManagedWeightedLoadBalancer.java         |   2 +-
 .../ManagedWeightedLoadBalancerTest.java           |   4 +-
 .../apache/camel/support/CamelContextHelper.java   |  87 ++++-------
 .../HystrixConfigurationDefinitionCommon.java      | 168 ++++++++++-----------
 .../apt/CoreEipAnnotationProcessorHelper.java      |   3 +
 134 files changed, 1576 insertions(+), 1347 deletions(-)

diff --git a/components/camel-as2/camel-as2-api/pom.xml b/components/camel-as2/camel-as2-api/pom.xml
index 62577c7..1d06b00 100644
--- a/components/camel-as2/camel-as2-api/pom.xml
+++ b/components/camel-as2/camel-as2-api/pom.xml
@@ -80,6 +80,10 @@
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-slf4j-impl</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-util</artifactId>
+        </dependency>
 
         <!-- testing -->
         <dependency>
diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2SessionInputBuffer.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2SessionInputBuffer.java
index 5a7ccec..ed3b924 100644
--- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2SessionInputBuffer.java
+++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2SessionInputBuffer.java
@@ -35,6 +35,8 @@ import org.apache.http.util.Asserts;
 import org.apache.http.util.ByteArrayBuffer;
 import org.apache.http.util.CharArrayBuffer;
 
+import static org.apache.camel.util.BufferCaster.cast;
+
 public class AS2SessionInputBuffer implements SessionInputBuffer, BufferInfo {
 
     private final HttpTransportMetricsImpl metrics;
@@ -335,7 +337,7 @@ public class AS2SessionInputBuffer implements SessionInputBuffer, BufferInfo {
         if (result.isError()) {
             result.throwException();
         }
-        this.cbuf.flip();
+        cast(this.cbuf).flip();
         final int len = this.cbuf.remaining();
         while (this.cbuf.hasRemaining()) {
             charbuffer.append(this.cbuf.get());
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java
index 4b73881..e31c7f0 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java
@@ -31,6 +31,7 @@ import org.apache.camel.cdi.xml.ErrorHandlerDefinition;
 import org.apache.camel.cdi.xml.RedeliveryPolicyFactoryBean;
 import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
 
+import static java.lang.Boolean.parseBoolean;
 import static java.lang.String.format;
 import static java.util.Objects.nonNull;
 import static org.apache.camel.cdi.BeanManagerHelper.getReferenceByName;
@@ -80,16 +81,16 @@ final class XmlErrorHandlerFactoryBean extends SyntheticBean<ErrorHandlerBuilder
 
     private void setProperties(DefaultErrorHandlerBuilder builder) throws Exception {
         if (nonNull(handler.getDeadLetterHandleNewException())) {
-            builder.setDeadLetterHandleNewException(handler.getDeadLetterHandleNewException());
+            builder.setDeadLetterHandleNewException(Boolean.parseBoolean(handler.getDeadLetterHandleNewException()));
         }
         builder.setDeadLetterUri(handler.getDeadLetterUri());
         builder.setExecutorServiceRef(handler.getExecutorServiceRef());
         builder.setRetryWhileRef(handler.getRetryWhileRef());
         if (nonNull(handler.getUseOriginalMessage())) {
-            builder.setUseOriginalMessage(handler.getUseOriginalMessage());
+            builder.setUseOriginalMessage(parseBoolean(handler.getUseOriginalMessage()));
         }
         if (nonNull(handler.getUseOriginalBody())) {
-            builder.setUseOriginalBody(handler.getUseOriginalBody());
+            builder.setUseOriginalBody(Boolean.parseBoolean(handler.getUseOriginalBody()));
         }
 
         if (isNotEmpty(handler.getOnExceptionOccurredRef())) {
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ErrorHandlerDefinition.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ErrorHandlerDefinition.java
index 964000d..81015da 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ErrorHandlerDefinition.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ErrorHandlerDefinition.java
@@ -39,16 +39,16 @@ public class ErrorHandlerDefinition extends IdentifiedType {
     private String deadLetterUri;
 
     @XmlAttribute
-    private Boolean deadLetterHandleNewException;
+    private String deadLetterHandleNewException;
 
     @XmlAttribute
-    private LoggingLevel rollbackLoggingLevel;
+    private String rollbackLoggingLevel;
 
     @XmlAttribute
-    private Boolean useOriginalMessage;
+    private String useOriginalMessage;
 
     @XmlAttribute
-    private Boolean useOriginalBody;
+    private String useOriginalBody;
 
     @XmlAttribute
     private String transactionTemplateRef;
@@ -93,35 +93,35 @@ public class ErrorHandlerDefinition extends IdentifiedType {
         this.deadLetterUri = deadLetterUri;
     }
 
-    public Boolean getDeadLetterHandleNewException() {
+    public String getDeadLetterHandleNewException() {
         return deadLetterHandleNewException;
     }
 
-    public void setDeadLetterHandleNewException(Boolean deadLetterHandleNewException) {
+    public void setDeadLetterHandleNewException(String deadLetterHandleNewException) {
         this.deadLetterHandleNewException = deadLetterHandleNewException;
     }
 
-    public LoggingLevel getRollbackLoggingLevel() {
+    public String getRollbackLoggingLevel() {
         return rollbackLoggingLevel;
     }
 
-    public void setRollbackLoggingLevel(LoggingLevel rollbackLoggingLevel) {
+    public void setRollbackLoggingLevel(String rollbackLoggingLevel) {
         this.rollbackLoggingLevel = rollbackLoggingLevel;
     }
 
-    public Boolean getUseOriginalMessage() {
+    public String getUseOriginalMessage() {
         return useOriginalMessage;
     }
 
-    public void setUseOriginalMessage(Boolean useOriginalMessage) {
+    public void setUseOriginalMessage(String useOriginalMessage) {
         this.useOriginalMessage = useOriginalMessage;
     }
 
-    public Boolean getUseOriginalBody() {
+    public String getUseOriginalBody() {
         return useOriginalBody;
     }
 
-    public void setUseOriginalBody(Boolean useOriginalBody) {
+    public void setUseOriginalBody(String useOriginalBody) {
         this.useOriginalBody = useOriginalBody;
     }
 
diff --git a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
index a263851..ffd8eb0 100644
--- a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
+++ b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
@@ -94,7 +94,7 @@ public class HystrixReifier extends ProcessorReifier<CircuitBreakerDefinition> {
 
         // create setter for fallback via network
         HystrixCommand.Setter fallbackSetter = null;
-        boolean fallbackViaNetwork = definition.getOnFallback() != null && definition.getOnFallback().isFallbackViaNetwork();
+        boolean fallbackViaNetwork = definition.getOnFallback() != null && parseBoolean(routeContext, definition.getOnFallback().getFallbackViaNetwork());
         if (fallbackViaNetwork) {
             // use a different thread pool that is for fallback (should never use the same thread pool as the regular command)
             HystrixThreadPoolKey tpFallbackKey = HystrixThreadPoolKey.Factory.asKey(threadPoolKey + "-fallback");
@@ -119,91 +119,91 @@ public class HystrixReifier extends ProcessorReifier<CircuitBreakerDefinition> {
     private void configureHystrix(HystrixCommandProperties.Setter command, HystrixThreadPoolProperties.Setter threadPool, HystrixConfigurationDefinition config) {
         // command
         if (config.getCircuitBreakerEnabled() != null) {
-            command.withCircuitBreakerEnabled(config.getCircuitBreakerEnabled());
+            command.withCircuitBreakerEnabled(Boolean.parseBoolean(config.getCircuitBreakerEnabled()));
         }
         if (config.getCircuitBreakerErrorThresholdPercentage() != null) {
-            command.withCircuitBreakerErrorThresholdPercentage(config.getCircuitBreakerErrorThresholdPercentage());
+            command.withCircuitBreakerErrorThresholdPercentage(Integer.parseInt(config.getCircuitBreakerErrorThresholdPercentage()));
         }
         if (config.getCircuitBreakerForceClosed() != null) {
-            command.withCircuitBreakerForceClosed(config.getCircuitBreakerForceClosed());
+            command.withCircuitBreakerForceClosed(Boolean.parseBoolean(config.getCircuitBreakerForceClosed()));
         }
         if (config.getCircuitBreakerForceOpen() != null) {
-            command.withCircuitBreakerForceOpen(config.getCircuitBreakerForceOpen());
+            command.withCircuitBreakerForceOpen(Boolean.parseBoolean(config.getCircuitBreakerForceOpen()));
         }
         if (config.getCircuitBreakerRequestVolumeThreshold() != null) {
-            command.withCircuitBreakerRequestVolumeThreshold(config.getCircuitBreakerRequestVolumeThreshold());
+            command.withCircuitBreakerRequestVolumeThreshold(Integer.parseInt(config.getCircuitBreakerRequestVolumeThreshold()));
         }
         if (config.getCircuitBreakerSleepWindowInMilliseconds() != null) {
-            command.withCircuitBreakerSleepWindowInMilliseconds(config.getCircuitBreakerSleepWindowInMilliseconds());
+            command.withCircuitBreakerSleepWindowInMilliseconds(Integer.parseInt(config.getCircuitBreakerSleepWindowInMilliseconds()));
         }
         if (config.getExecutionIsolationSemaphoreMaxConcurrentRequests() != null) {
-            command.withExecutionIsolationSemaphoreMaxConcurrentRequests(config.getExecutionIsolationSemaphoreMaxConcurrentRequests());
+            command.withExecutionIsolationSemaphoreMaxConcurrentRequests(Integer.parseInt(config.getExecutionIsolationSemaphoreMaxConcurrentRequests()));
         }
         if (config.getExecutionIsolationStrategy() != null) {
             command.withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.valueOf(config.getExecutionIsolationStrategy()));
         }
         if (config.getExecutionIsolationThreadInterruptOnTimeout() != null) {
-            command.withExecutionIsolationThreadInterruptOnTimeout(config.getExecutionIsolationThreadInterruptOnTimeout());
+            command.withExecutionIsolationThreadInterruptOnTimeout(Boolean.parseBoolean(config.getExecutionIsolationThreadInterruptOnTimeout()));
         }
         if (config.getExecutionTimeoutInMilliseconds() != null) {
-            command.withExecutionTimeoutInMilliseconds(config.getExecutionTimeoutInMilliseconds());
+            command.withExecutionTimeoutInMilliseconds(Integer.parseInt(config.getExecutionTimeoutInMilliseconds()));
         }
         if (config.getExecutionTimeoutEnabled() != null) {
-            command.withExecutionTimeoutEnabled(config.getExecutionTimeoutEnabled());
+            command.withExecutionTimeoutEnabled(Boolean.parseBoolean(config.getExecutionTimeoutEnabled()));
         }
         if (config.getFallbackIsolationSemaphoreMaxConcurrentRequests() != null) {
-            command.withFallbackIsolationSemaphoreMaxConcurrentRequests(config.getFallbackIsolationSemaphoreMaxConcurrentRequests());
+            command.withFallbackIsolationSemaphoreMaxConcurrentRequests(Integer.parseInt(config.getFallbackIsolationSemaphoreMaxConcurrentRequests()));
         }
         if (config.getFallbackEnabled() != null) {
-            command.withFallbackEnabled(config.getFallbackEnabled());
+            command.withFallbackEnabled(Boolean.parseBoolean(config.getFallbackEnabled()));
         }
         if (config.getMetricsHealthSnapshotIntervalInMilliseconds() != null) {
-            command.withMetricsHealthSnapshotIntervalInMilliseconds(config.getMetricsHealthSnapshotIntervalInMilliseconds());
+            command.withMetricsHealthSnapshotIntervalInMilliseconds(Integer.parseInt(config.getMetricsHealthSnapshotIntervalInMilliseconds()));
         }
         if (config.getMetricsRollingPercentileBucketSize() != null) {
-            command.withMetricsRollingPercentileBucketSize(config.getMetricsRollingPercentileBucketSize());
+            command.withMetricsRollingPercentileBucketSize(Integer.parseInt(config.getMetricsRollingPercentileBucketSize()));
         }
         if (config.getMetricsRollingPercentileEnabled() != null) {
-            command.withMetricsRollingPercentileEnabled(config.getMetricsRollingPercentileEnabled());
+            command.withMetricsRollingPercentileEnabled(Boolean.parseBoolean(config.getMetricsRollingPercentileEnabled()));
         }
         if (config.getMetricsRollingPercentileWindowInMilliseconds() != null) {
-            command.withMetricsRollingPercentileWindowInMilliseconds(config.getMetricsRollingPercentileWindowInMilliseconds());
+            command.withMetricsRollingPercentileWindowInMilliseconds(Integer.parseInt(config.getMetricsRollingPercentileWindowInMilliseconds()));
         }
         if (config.getMetricsRollingPercentileWindowBuckets() != null) {
-            command.withMetricsRollingPercentileWindowBuckets(config.getMetricsRollingPercentileWindowBuckets());
+            command.withMetricsRollingPercentileWindowBuckets(Integer.parseInt(config.getMetricsRollingPercentileWindowBuckets()));
         }
         if (config.getMetricsRollingStatisticalWindowInMilliseconds() != null) {
-            command.withMetricsRollingStatisticalWindowInMilliseconds(config.getMetricsRollingStatisticalWindowInMilliseconds());
+            command.withMetricsRollingStatisticalWindowInMilliseconds(Integer.parseInt(config.getMetricsRollingStatisticalWindowInMilliseconds()));
         }
         if (config.getMetricsRollingStatisticalWindowBuckets() != null) {
-            command.withMetricsRollingStatisticalWindowBuckets(config.getMetricsRollingStatisticalWindowBuckets());
+            command.withMetricsRollingStatisticalWindowBuckets(Integer.parseInt(config.getMetricsRollingStatisticalWindowBuckets()));
         }
         if (config.getRequestLogEnabled() != null) {
-            command.withRequestLogEnabled(config.getRequestLogEnabled());
+            command.withRequestLogEnabled(Boolean.parseBoolean(config.getRequestLogEnabled()));
         }
         if (config.getCorePoolSize() != null) {
-            threadPool.withCoreSize(config.getCorePoolSize());
+            threadPool.withCoreSize(Integer.parseInt(config.getCorePoolSize()));
         }
         if (config.getMaximumSize() != null) {
-            threadPool.withMaximumSize(config.getMaximumSize());
+            threadPool.withMaximumSize(Integer.parseInt(config.getMaximumSize()));
         }
         if (config.getKeepAliveTime() != null) {
-            threadPool.withKeepAliveTimeMinutes(config.getKeepAliveTime());
+            threadPool.withKeepAliveTimeMinutes(Integer.parseInt(config.getKeepAliveTime()));
         }
         if (config.getMaxQueueSize() != null) {
-            threadPool.withMaxQueueSize(config.getMaxQueueSize());
+            threadPool.withMaxQueueSize(Integer.parseInt(config.getMaxQueueSize()));
         }
         if (config.getQueueSizeRejectionThreshold() != null) {
-            threadPool.withQueueSizeRejectionThreshold(config.getQueueSizeRejectionThreshold());
+            threadPool.withQueueSizeRejectionThreshold(Integer.parseInt(config.getQueueSizeRejectionThreshold()));
         }
         if (config.getThreadPoolRollingNumberStatisticalWindowInMilliseconds() != null) {
-            threadPool.withMetricsRollingStatisticalWindowInMilliseconds(config.getThreadPoolRollingNumberStatisticalWindowInMilliseconds());
+            threadPool.withMetricsRollingStatisticalWindowInMilliseconds(Integer.parseInt(config.getThreadPoolRollingNumberStatisticalWindowInMilliseconds()));
         }
         if (config.getThreadPoolRollingNumberStatisticalWindowBuckets() != null) {
-            threadPool.withMetricsRollingStatisticalWindowBuckets(config.getThreadPoolRollingNumberStatisticalWindowBuckets());
+            threadPool.withMetricsRollingStatisticalWindowBuckets(Integer.parseInt(config.getThreadPoolRollingNumberStatisticalWindowBuckets()));
         }
         if (config.getAllowMaximumSizeToDivergeFromCoreSize() != null) {
-            threadPool.withAllowMaximumSizeToDivergeFromCoreSize(config.getAllowMaximumSizeToDivergeFromCoreSize());
+            threadPool.withAllowMaximumSizeToDivergeFromCoreSize(Boolean.parseBoolean(config.getAllowMaximumSizeToDivergeFromCoreSize()));
         }
     }
 
diff --git a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java
index 5a73d9c..0f1e0c4 100644
--- a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java
+++ b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java
@@ -35,11 +35,11 @@ public class HystrixHierarchicalConfigTest {
         HystrixConfigurationDefinition def = new HystrixConfigurationDefinition();
         def.setGroupKey("global-group-key");
         def.setThreadPoolKey("global-thread-key");
-        def.setCorePoolSize(10);
+        def.corePoolSize(10);
 
         HystrixConfigurationDefinition ref = new HystrixConfigurationDefinition();
         ref.setGroupKey("ref-group-key");
-        ref.setCorePoolSize(5);
+        ref.corePoolSize(5);
 
         registry.bind(HystrixConstants.DEFAULT_HYSTRIX_CONFIGURATION_ID, def);
         registry.bind("ref-hystrix", ref);
@@ -56,7 +56,7 @@ public class HystrixHierarchicalConfigTest {
 
         Assert.assertEquals("local-conf-group-key", config.getGroupKey());
         Assert.assertEquals("global-thread-key", config.getThreadPoolKey());
-        Assert.assertEquals(Integer.valueOf(5), config.getCorePoolSize());
+        Assert.assertEquals(Integer.toString(5), config.getCorePoolSize());
     }
 
     @Test
@@ -66,11 +66,11 @@ public class HystrixHierarchicalConfigTest {
         HystrixConfigurationDefinition def = new HystrixConfigurationDefinition();
         def.setGroupKey("global-group-key");
         def.setThreadPoolKey("global-thread-key");
-        def.setCorePoolSize(10);
+        def.corePoolSize(10);
 
         HystrixConfigurationDefinition ref = new HystrixConfigurationDefinition();
         ref.setGroupKey("ref-group-key");
-        ref.setCorePoolSize(5);
+        ref.corePoolSize(5);
 
         context.getExtension(Model.class).setHystrixConfiguration(def);
         context.getExtension(Model.class).addHystrixConfiguration("ref-hystrix", ref);
@@ -87,7 +87,7 @@ public class HystrixHierarchicalConfigTest {
 
         Assert.assertEquals("local-conf-group-key", config.getGroupKey());
         Assert.assertEquals("global-thread-key", config.getThreadPoolKey());
-        Assert.assertEquals(Integer.valueOf(5), config.getCorePoolSize());
+        Assert.assertEquals(Integer.toString(5), config.getCorePoolSize());
     }
 
     @Test
@@ -98,17 +98,17 @@ public class HystrixHierarchicalConfigTest {
         HystrixConfigurationDefinition def = new HystrixConfigurationDefinition();
         def.setGroupKey("global-group-key");
         def.setThreadPoolKey("global-thread-key");
-        def.setCorePoolSize(10);
+        def.corePoolSize(10);
 
         HystrixConfigurationDefinition ref = new HystrixConfigurationDefinition();
         ref.setGroupKey("ref-group-key");
-        ref.setCorePoolSize(5);
+        ref.corePoolSize(5);
 
         // this should be ignored
         HystrixConfigurationDefinition defReg = new HystrixConfigurationDefinition();
         defReg.setGroupKey("global-reg-group-key");
         defReg.setThreadPoolKey("global-reg-thread-key");
-        defReg.setCorePoolSize(20);
+        defReg.corePoolSize(20);
 
         context.getExtension(Model.class).setHystrixConfiguration(def);
 
@@ -127,6 +127,6 @@ public class HystrixHierarchicalConfigTest {
 
         Assert.assertEquals("local-conf-group-key", config.getGroupKey());
         Assert.assertEquals("global-thread-key", config.getThreadPoolKey());
-        Assert.assertEquals(Integer.valueOf(5), config.getCorePoolSize());
+        Assert.assertEquals(Integer.toString(5), config.getCorePoolSize());
     }
 }
diff --git a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigMaximumSizeTest.java b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigMaximumSizeTest.java
index d1d286a..b02bb7f 100644
--- a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigMaximumSizeTest.java
+++ b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigMaximumSizeTest.java
@@ -56,7 +56,7 @@ public class HystrixRouteConfigMaximumSizeTest extends CamelTestSupport {
         
         HystrixConfigurationDefinition config = ((CircuitBreakerDefinition) route.getOutputs().get(0)).getHystrixConfiguration();
         assertEquals("test2", config.getGroupKey());
-        assertEquals(99999, config.getMetricsHealthSnapshotIntervalInMilliseconds().intValue());
+        assertEquals(Integer.toString(99999), config.getMetricsHealthSnapshotIntervalInMilliseconds());
     }
     
     @Override
diff --git a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigTest.java b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigTest.java
index 1f831ec..c4652e3 100644
--- a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigTest.java
+++ b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixRouteConfigTest.java
@@ -56,7 +56,7 @@ public class HystrixRouteConfigTest extends CamelTestSupport {
         
         HystrixConfigurationDefinition config = ((CircuitBreakerDefinition) route.getOutputs().get(0)).getHystrixConfiguration();
         assertEquals("test2", config.getGroupKey());
-        assertEquals(99999, config.getMetricsHealthSnapshotIntervalInMilliseconds().intValue());
+        assertEquals(Integer.toString(99999), config.getMetricsHealthSnapshotIntervalInMilliseconds());
     }
 
     
diff --git a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/SpringHystrixRouteHierarchicalConfigTest.java b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/SpringHystrixRouteHierarchicalConfigTest.java
index efbb76c..9a21244 100644
--- a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/SpringHystrixRouteHierarchicalConfigTest.java
+++ b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/SpringHystrixRouteHierarchicalConfigTest.java
@@ -45,7 +45,7 @@ public class SpringHystrixRouteHierarchicalConfigTest extends CamelSpringTestSup
 
         Assert.assertEquals("local-conf-group-key", config.getGroupKey());
         Assert.assertEquals("global-thread-key", config.getThreadPoolKey());
-        Assert.assertEquals(Integer.valueOf(5), config.getCorePoolSize());
+        Assert.assertEquals(Integer.toString(5), config.getCorePoolSize());
 
         getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
 
diff --git a/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/verifier/MongoDbVerifierExtensionTest.java b/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/verifier/MongoDbVerifierExtensionTest.java
index ac239ce..e00d8bc 100644
--- a/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/verifier/MongoDbVerifierExtensionTest.java
+++ b/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/verifier/MongoDbVerifierExtensionTest.java
@@ -70,7 +70,7 @@ public class MongoDbVerifierExtensionTest extends AbstractMongoDbTest {
     public void verifyConnectionKO() {
         //When
         Map<String, Object> parameters = new HashMap<>();
-        parameters.put("host", "notReachableHost");
+        parameters.put("host", "notReachable.host");
         parameters.put("user", USER);
         parameters.put("password", PASSWORD);
         //Given
diff --git a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java
index 63fe3a5..83d3f1f 100644
--- a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java
+++ b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java
@@ -58,7 +58,7 @@ public class ResilienceReifier extends ProcessorReifier<CircuitBreakerDefinition
         if (definition.getOnFallback() != null) {
             fallback = ProcessorReifier.reifier(definition.getOnFallback()).createProcessor(routeContext);
         }
-        boolean fallbackViaNetwork = definition.getOnFallback() != null && definition.getOnFallback().isFallbackViaNetwork();
+        boolean fallbackViaNetwork = definition.getOnFallback() != null && parseBoolean(routeContext, definition.getOnFallback().getFallbackViaNetwork());
         if (fallbackViaNetwork) {
             throw new UnsupportedOperationException("camel-resilience4j does not support onFallbackViaNetwork");
         }
diff --git a/components/camel-spring/src/test/resources/custom.properties b/components/camel-spring/src/test/resources/custom.properties
new file mode 100644
index 0000000..7244431
--- /dev/null
+++ b/components/camel-spring/src/test/resources/custom.properties
@@ -0,0 +1 @@
+aggregation.timeout=1000
diff --git a/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml b/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml
index 5628cf7..3886ed9 100644
--- a/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml
+++ b/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml
@@ -27,9 +27,13 @@
     <!-- START SNIPPET: example -->
     <camelContext xmlns="http://camel.apache.org/schema/spring">
 
+        <!-- spring property placeholder, ignore resource not found as the file resource is for unit testing -->
+        <propertyPlaceholder id="properties"
+                             ignoreMissingLocation="true" location="classpath:custom.properties"/>
+
         <route>
             <from uri="direct:start"/>
-            <aggregate strategyRef="latestAggregationStrategy" completionTimeout="1000">
+            <aggregate strategyRef="latestAggregationStrategy" completionTimeout="{{aggregation.timeout}}">
                 <correlationExpression>
                     <header>cheese</header>
                 </correlationExpression>
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
index 532c1ab..68c4ea6 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
@@ -120,7 +120,7 @@ public class RestSwaggerReader {
     private void parse(Swagger swagger, RestDefinition rest, String camelContextId, ClassResolver classResolver) throws ClassNotFoundException {
         List<VerbDefinition> verbs = new ArrayList<>(rest.getVerbs());
         // must sort the verbs by uri so we group them together when an uri has multiple operations
-        Collections.sort(verbs, new VerbOrdering());
+        verbs.sort(new VerbOrdering());
 
         // we need to group the operations within the same tag, so use the path as default if not configured
         String pathAsTag = rest.getTag() != null ? rest.getTag() : FileUtil.stripLeadingSeparator(rest.getPath());
@@ -181,14 +181,14 @@ public class RestSwaggerReader {
         for (VerbDefinition verb : verbs) {
 
             // check if the Verb Definition must be excluded from documentation
-            Boolean apiDocs;
+            String apiDocs;
             if (verb.getApiDocs() != null) {
                 apiDocs = verb.getApiDocs();
             } else {
                 // fallback to option on rest
                 apiDocs = rest.getApiDocs();
             }
-            if (apiDocs != null && !apiDocs) {
+            if (apiDocs != null && !Boolean.parseBoolean(apiDocs)) {
                 continue;
             }
 
@@ -237,14 +237,14 @@ public class RestSwaggerReader {
 
         for (VerbDefinition verb : verbs) {
             // check if the Verb Definition must be excluded from documentation
-            Boolean apiDocs;
+            String apiDocs;
             if (verb.getApiDocs() != null) {
                 apiDocs = verb.getApiDocs();
             } else {
                 // fallback to option on rest
                 apiDocs = rest.getApiDocs();
             }
-            if (apiDocs != null && !apiDocs) {
+            if (apiDocs != null && !Boolean.parseBoolean(apiDocs)) {
                 continue;
             }
             // the method must be in lower case
diff --git a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/ignoreDatatypes.xml b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/ignoreDatatypes.xml
index 91a103d..9f7b61d 100644
--- a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/ignoreDatatypes.xml
+++ b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/ignoreDatatypes.xml
@@ -36,7 +36,7 @@
     <camel:route>
       <camel:from uri="direct:start"/>
       <!-- use some syntactically constrained datatype such as int, boolean, enum, etc -->
-      <camel:log message="test" loggingLevel="${level}"/>
+      <camel:log message="test" loggingLevel="{{level}}"/>
       <camel:transform>
         <camel:simple>Hello ${body}</camel:simple>
       </camel:transform>
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java
index ef4d6e7..c79559f 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java
@@ -60,6 +60,8 @@ import org.xnio.channels.BlockingReadableByteChannel;
 import org.xnio.channels.StreamSourceChannel;
 import org.xnio.streams.ChannelInputStream;
 
+import static org.apache.camel.util.BufferCaster.cast;
+
 /**
  * DefaultUndertowHttpBinding represent binding used by default, if user doesn't provide any.
  * By default {@link UndertowHeaderFilterStrategy} is also used.
@@ -457,7 +459,7 @@ public class DefaultUndertowHttpBinding implements UndertowHttpBinding {
             } else if (res == 0) {
                 LOG.error("Channel did not block");
             } else {
-                buffer.flip();
+                cast(buffer).flip();
                 out.write(buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.arrayOffset() + buffer.limit());
                 buffer.clear();
             }
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentVerifierExtensionTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentVerifierExtensionTest.java
index 9da9092..405ca96 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentVerifierExtensionTest.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentVerifierExtensionTest.java
@@ -78,7 +78,7 @@ public class UndertowComponentVerifierExtensionTest extends BaseUndertowTest {
         ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
 
         Map<String, Object> parameters = new HashMap<>();
-        parameters.put("httpURI", "http://no-host:" + getPort());
+        parameters.put("httpURI", "http://no.host:" + getPort());
 
         ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters);
 
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentVerifierTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentVerifierTest.java
index 62c9764..1fe65f1 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentVerifierTest.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowComponentVerifierTest.java
@@ -77,7 +77,7 @@ public class UndertowComponentVerifierTest extends BaseUndertowTest {
         ComponentVerifierExtension verifier = component.getVerifier();
 
         Map<String, Object> parameters = new HashMap<>();
-        parameters.put("httpURI", "http://no-host:" + getPort());
+        parameters.put("httpURI", "http://no.host:" + getPort());
 
         ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters);
 
diff --git a/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/CachingServiceDiscoveryTest.java b/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/CachingServiceDiscoveryTest.java
index 1b724c7..29d4f0b7 100644
--- a/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/CachingServiceDiscoveryTest.java
+++ b/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/CachingServiceDiscoveryTest.java
@@ -50,7 +50,7 @@ public class CachingServiceDiscoveryTest extends ContextTestSupport {
 
         CachingServiceCallServiceDiscoveryConfiguration cachingConf = new CachingServiceCallServiceDiscoveryConfiguration();
         cachingConf.setServiceDiscoveryConfiguration(staticConf);
-        cachingConf.setTimeout(50);
+        cachingConf.timeout(50);
         cachingConf.setUnits(TimeUnit.MILLISECONDS);
 
         CachingServiceDiscovery caching = (CachingServiceDiscovery)cachingConf.newInstance(context);
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/DataFormatClause.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/DataFormatClause.java
index 01aecf5..f27850b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/DataFormatClause.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/DataFormatClause.java
@@ -134,9 +134,9 @@ public class DataFormatClause<T extends ProcessorDefinition<?>> {
      */
     public T base64(int lineLength, String lineSeparator, boolean urlSafe) {
         Base64DataFormat dataFormat = new Base64DataFormat();
-        dataFormat.setLineLength(lineLength);
+        dataFormat.setLineLength(Integer.toString(lineLength));
         dataFormat.setLineSeparator(lineSeparator);
-        dataFormat.setUrlSafe(urlSafe);
+        dataFormat.setUrlSafe(Boolean.toString(urlSafe));
         return dataFormat(dataFormat);
     }
 
@@ -169,9 +169,9 @@ public class DataFormatClause<T extends ProcessorDefinition<?>> {
         dataFormat.setMapping(mapping);
         dataFormat.setStreamName(streamName);
         dataFormat.setEncoding(encoding);
-        dataFormat.setIgnoreUnidentifiedRecords(ignoreUnidentifiedRecords);
-        dataFormat.setIgnoreUnexpectedRecords(ignoreUnexpectedRecords);
-        dataFormat.setIgnoreInvalidRecords(ignoreInvalidRecords);
+        dataFormat.setIgnoreUnidentifiedRecords(Boolean.toString(ignoreUnidentifiedRecords));
+        dataFormat.setIgnoreUnexpectedRecords(Boolean.toString(ignoreUnexpectedRecords));
+        dataFormat.setIgnoreInvalidRecords(Boolean.toString(ignoreInvalidRecords));
         return dataFormat(dataFormat);
     }
 
@@ -428,8 +428,8 @@ public class DataFormatClause<T extends ProcessorDefinition<?>> {
         pgp.setKeyFileName(keyFileName);
         pgp.setKeyUserid(keyUserid);
         pgp.setPassword(password);
-        pgp.setArmored(armored);
-        pgp.setIntegrity(integrity);
+        pgp.setArmored(Boolean.toString(armored));
+        pgp.setIntegrity(Boolean.toString(integrity));
         return dataFormat(pgp);
     }
 
@@ -472,7 +472,7 @@ public class DataFormatClause<T extends ProcessorDefinition<?>> {
      */
     public T jacksonxml(boolean prettyPrint) {
         JacksonXMLDataFormat jacksonXMLDataFormat = new JacksonXMLDataFormat();
-        jacksonXMLDataFormat.setPrettyPrint(prettyPrint);
+        jacksonXMLDataFormat.setPrettyPrint(Boolean.toString(prettyPrint));
         return dataFormat(jacksonXMLDataFormat);
     }
 
@@ -485,7 +485,7 @@ public class DataFormatClause<T extends ProcessorDefinition<?>> {
     public T jacksonxml(Class<?> unmarshalType, boolean prettyPrint) {
         JacksonXMLDataFormat jacksonXMLDataFormat = new JacksonXMLDataFormat();
         jacksonXMLDataFormat.setUnmarshalType(unmarshalType);
-        jacksonXMLDataFormat.setPrettyPrint(prettyPrint);
+        jacksonXMLDataFormat.setPrettyPrint(Boolean.toString(prettyPrint));
         return dataFormat(jacksonXMLDataFormat);
     }
 
@@ -500,7 +500,7 @@ public class DataFormatClause<T extends ProcessorDefinition<?>> {
         JacksonXMLDataFormat jacksonXMLDataFormat = new JacksonXMLDataFormat();
         jacksonXMLDataFormat.setUnmarshalType(unmarshalType);
         jacksonXMLDataFormat.setJsonView(jsonView);
-        jacksonXMLDataFormat.setPrettyPrint(prettyPrint);
+        jacksonXMLDataFormat.setPrettyPrint(Boolean.toString(prettyPrint));
         return dataFormat(jacksonXMLDataFormat);
     }
 
@@ -532,7 +532,7 @@ public class DataFormatClause<T extends ProcessorDefinition<?>> {
         jacksonXMLDataFormat.setUnmarshalType(unmarshalType);
         jacksonXMLDataFormat.setJsonView(jsonView);
         jacksonXMLDataFormat.setInclude(include);
-        jacksonXMLDataFormat.setPrettyPrint(prettyPrint);
+        jacksonXMLDataFormat.setPrettyPrint(Boolean.toString(prettyPrint));
         return dataFormat(jacksonXMLDataFormat);
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
index 8abc2c5..b5690e2 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
@@ -269,7 +269,7 @@ public class ExpressionClauseSupport<T> {
      */
     public T jsonpath(String text, boolean suppressExceptions) {
         JsonPathExpression expression = new JsonPathExpression(text);
-        expression.setSuppressExceptions(suppressExceptions);
+        expression.setSuppressExceptions(Boolean.toString(suppressExceptions));
         return expression(expression);
     }
 
@@ -286,8 +286,8 @@ public class ExpressionClauseSupport<T> {
      */
     public T jsonpath(String text, boolean suppressExceptions, boolean allowSimple) {
         JsonPathExpression expression = new JsonPathExpression(text);
-        expression.setSuppressExceptions(suppressExceptions);
-        expression.setAllowSimple(allowSimple);
+        expression.setSuppressExceptions(Boolean.toString(suppressExceptions));
+        expression.setAllowSimple(Boolean.toString(allowSimple));
         return expression(expression);
     }
 
@@ -318,7 +318,7 @@ public class ExpressionClauseSupport<T> {
      */
     public T jsonpath(String text, boolean suppressExceptions, Class<?> resultType) {
         JsonPathExpression expression = new JsonPathExpression(text);
-        expression.setSuppressExceptions(suppressExceptions);
+        expression.setSuppressExceptions(Boolean.toString(suppressExceptions));
         expression.setResultType(resultType);
         setExpressionType(expression);
         return result;
@@ -338,8 +338,8 @@ public class ExpressionClauseSupport<T> {
      */
     public T jsonpath(String text, boolean suppressExceptions, boolean allowSimple, Class<?> resultType) {
         JsonPathExpression expression = new JsonPathExpression(text);
-        expression.setSuppressExceptions(suppressExceptions);
-        expression.setAllowSimple(allowSimple);
+        expression.setSuppressExceptions(Boolean.toString(suppressExceptions));
+        expression.setAllowSimple(Boolean.toString(allowSimple));
         expression.setResultType(resultType);
         setExpressionType(expression);
         return result;
@@ -360,8 +360,8 @@ public class ExpressionClauseSupport<T> {
      */
     public T jsonpath(String text, boolean suppressExceptions, boolean allowSimple, Class<?> resultType, String headerName) {
         JsonPathExpression expression = new JsonPathExpression(text);
-        expression.setSuppressExceptions(suppressExceptions);
-        expression.setAllowSimple(allowSimple);
+        expression.setSuppressExceptions(Boolean.toString(suppressExceptions));
+        expression.setAllowSimple(Boolean.toString(allowSimple));
         expression.setResultType(resultType);
         expression.setHeaderName(headerName);
         setExpressionType(expression);
@@ -390,8 +390,8 @@ public class ExpressionClauseSupport<T> {
      */
     public T jsonpathWriteAsString(String text, boolean suppressExceptions) {
         JsonPathExpression expression = new JsonPathExpression(text);
-        expression.setWriteAsString(true);
-        expression.setSuppressExceptions(suppressExceptions);
+        expression.setWriteAsString(Boolean.toString(true));
+        expression.setSuppressExceptions(Boolean.toString(suppressExceptions));
         return expression(expression);
     }
 
@@ -408,9 +408,9 @@ public class ExpressionClauseSupport<T> {
      */
     public T jsonpathWriteAsString(String text, boolean suppressExceptions, boolean allowSimple) {
         JsonPathExpression expression = new JsonPathExpression(text);
-        expression.setWriteAsString(true);
-        expression.setSuppressExceptions(suppressExceptions);
-        expression.setAllowSimple(allowSimple);
+        expression.setWriteAsString(Boolean.toString(true));
+        expression.setSuppressExceptions(Boolean.toString(suppressExceptions));
+        expression.setAllowSimple(Boolean.toString(allowSimple));
         return expression(expression);
     }
 
@@ -428,9 +428,9 @@ public class ExpressionClauseSupport<T> {
      */
     public T jsonpathWriteAsString(String text, boolean suppressExceptions, boolean allowSimple, String headerName) {
         JsonPathExpression expression = new JsonPathExpression(text);
-        expression.setWriteAsString(true);
-        expression.setSuppressExceptions(suppressExceptions);
-        expression.setAllowSimple(allowSimple);
+        expression.setWriteAsString(Boolean.toString(true));
+        expression.setSuppressExceptions(Boolean.toString(suppressExceptions));
+        expression.setAllowSimple(Boolean.toString(allowSimple));
         expression.setHeaderName(headerName);
         return expression(expression);
     }
@@ -595,7 +595,7 @@ public class ExpressionClauseSupport<T> {
         TokenizerExpression expression = new TokenizerExpression();
         expression.setToken(token);
         expression.setHeaderName(headerName);
-        expression.setRegex(regex);
+        expression.setRegex(Boolean.toString(regex));
         setExpressionType(expression);
         return result;
     }
@@ -626,8 +626,8 @@ public class ExpressionClauseSupport<T> {
         TokenizerExpression expression = new TokenizerExpression();
         expression.setToken(token);
         expression.setHeaderName(headerName);
-        expression.setRegex(regex);
-        expression.setSkipFirst(skipFirst);
+        expression.setRegex(Boolean.toString(regex));
+        expression.setSkipFirst(Boolean.toString(skipFirst));
         setExpressionType(expression);
         return result;
     }
@@ -675,10 +675,10 @@ public class ExpressionClauseSupport<T> {
         TokenizerExpression expression = new TokenizerExpression();
         expression.setToken(token);
         expression.setHeaderName(headerName);
-        expression.setRegex(regex);
+        expression.setRegex(Boolean.toString(regex));
         expression.setGroup(group);
         expression.setGroupDelimiter(groupDelimiter);
-        expression.setSkipFirst(skipFirst);
+        expression.setSkipFirst(Boolean.toString(skipFirst));
         setExpressionType(expression);
         return result;
     }
@@ -695,7 +695,7 @@ public class ExpressionClauseSupport<T> {
         TokenizerExpression expression = new TokenizerExpression();
         expression.setToken(startToken);
         expression.setEndToken(endToken);
-        expression.setIncludeTokens(includeTokens);
+        expression.setIncludeTokens(Boolean.toString(includeTokens));
         setExpressionType(expression);
         return result;
     }
@@ -726,7 +726,7 @@ public class ExpressionClauseSupport<T> {
         TokenizerExpression expression = new TokenizerExpression();
         expression.setToken(tagName);
         expression.setInheritNamespaceTagName(inheritNamespaceTagName);
-        expression.setXml(true);
+        expression.setXml(Boolean.toString(true));
         expression.setGroup(group);
         setExpressionType(expression);
         return result;
@@ -750,7 +750,7 @@ public class ExpressionClauseSupport<T> {
         expression.setNamespaces(namespaces.getNamespaces());
 
         if (group > 0) {
-            expression.setGroup(group);
+            expression.setGroup(Integer.toString(group));
         }
         setExpressionType(expression);
         return result;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/AggregateDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/AggregateDefinition.java
index 938002a..a24c262 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/AggregateDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/AggregateDefinition.java
@@ -75,9 +75,11 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
     @XmlTransient
     private OptimisticLockRetryPolicy optimisticLockRetryPolicy;
     @XmlAttribute
-    private Boolean parallelProcessing;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String parallelProcessing;
     @XmlAttribute
-    private Boolean optimisticLocking;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String optimisticLocking;
     @XmlAttribute
     private String executorServiceRef;
     @XmlAttribute
@@ -89,34 +91,47 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
     @XmlAttribute
     private String strategyMethodName;
     @XmlAttribute
-    private Boolean strategyMethodAllowNull;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String strategyMethodAllowNull;
     @XmlAttribute
-    private Integer completionSize;
+    @Metadata(javaType = "java.lang.Integer")
+    private String completionSize;
     @XmlAttribute
-    private Long completionInterval;
+    @Metadata(javaType = "java.lang.Long")
+    private String completionInterval;
     @XmlAttribute
-    private Long completionTimeout;
+    @Metadata(javaType = "java.lang.Long")
+    private String completionTimeout;
     @XmlAttribute
-    @Metadata(defaultValue = "1000")
-    private Long completionTimeoutCheckerInterval = 1000L;
+    @Metadata(defaultValue = "1000", javaType = "java.lang.Long")
+    private String completionTimeoutCheckerInterval = Long.toString(1000L);
     @XmlAttribute
-    private Boolean completionFromBatchConsumer;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String completionFromBatchConsumer;
     @XmlAttribute
-    private Boolean completionOnNewCorrelationGroup;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String completionOnNewCorrelationGroup;
     @XmlAttribute
-    private Boolean eagerCheckCompletion;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String eagerCheckCompletion;
     @XmlAttribute
-    private Boolean ignoreInvalidCorrelationKeys;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String ignoreInvalidCorrelationKeys;
     @XmlAttribute
-    private Integer closeCorrelationKeyOnCompletion;
+    @Metadata(javaType = "java.lang.Integer")
+    private String closeCorrelationKeyOnCompletion;
     @XmlAttribute
-    private Boolean discardOnCompletionTimeout;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String discardOnCompletionTimeout;
     @XmlAttribute
-    private Boolean discardOnAggregationFailure;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String discardOnAggregationFailure;
     @XmlAttribute
-    private Boolean forceCompletionOnStop;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String forceCompletionOnStop;
     @XmlAttribute
-    private Boolean completeAllOnStop;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String completeAllOnStop;
     @XmlTransient
     private AggregateController aggregateController;
     @XmlAttribute
@@ -257,7 +272,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
         this.strategyMethodName = strategyMethodName;
     }
 
-    public Boolean getStrategyMethodAllowNull() {
+    public String getStrategyMethodAllowNull() {
         return strategyMethodAllowNull;
     }
 
@@ -279,7 +294,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * as the oldExchange (at the very first aggregation), when using POJOs as
      * the AggregationStrategy.
      */
-    public void setStrategyMethodAllowNull(Boolean strategyMethodAllowNull) {
+    public void setStrategyMethodAllowNull(String strategyMethodAllowNull) {
         this.strategyMethodAllowNull = strategyMethodAllowNull;
     }
 
@@ -298,11 +313,11 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
         return correlationExpression;
     }
 
-    public Integer getCompletionSize() {
+    public String getCompletionSize() {
         return completionSize;
     }
 
-    public void setCompletionSize(Integer completionSize) {
+    public void setCompletionSize(String completionSize) {
         this.completionSize = completionSize;
     }
 
@@ -322,27 +337,27 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
         this.optimisticLockRetryPolicy = optimisticLockRetryPolicy;
     }
 
-    public Long getCompletionInterval() {
+    public String getCompletionInterval() {
         return completionInterval;
     }
 
-    public void setCompletionInterval(Long completionInterval) {
+    public void setCompletionInterval(String completionInterval) {
         this.completionInterval = completionInterval;
     }
 
-    public Long getCompletionTimeout() {
+    public String getCompletionTimeout() {
         return completionTimeout;
     }
 
-    public void setCompletionTimeout(Long completionTimeout) {
+    public void setCompletionTimeout(String completionTimeout) {
         this.completionTimeout = completionTimeout;
     }
 
-    public Long getCompletionTimeoutCheckerInterval() {
+    public String getCompletionTimeoutCheckerInterval() {
         return completionTimeoutCheckerInterval;
     }
 
-    public void setCompletionTimeoutCheckerInterval(Long completionTimeoutCheckerInterval) {
+    public void setCompletionTimeoutCheckerInterval(String completionTimeoutCheckerInterval) {
         this.completionTimeoutCheckerInterval = completionTimeoutCheckerInterval;
     }
 
@@ -399,19 +414,19 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
         this.completionSizeExpression = completionSizeExpression;
     }
 
-    public Boolean getCompletionFromBatchConsumer() {
+    public String getCompletionFromBatchConsumer() {
         return completionFromBatchConsumer;
     }
 
-    public void setCompletionFromBatchConsumer(Boolean completionFromBatchConsumer) {
+    public void setCompletionFromBatchConsumer(String completionFromBatchConsumer) {
         this.completionFromBatchConsumer = completionFromBatchConsumer;
     }
 
-    public Boolean getCompletionOnNewCorrelationGroup() {
+    public String getCompletionOnNewCorrelationGroup() {
         return completionOnNewCorrelationGroup;
     }
 
-    public void setCompletionOnNewCorrelationGroup(Boolean completionOnNewCorrelationGroup) {
+    public void setCompletionOnNewCorrelationGroup(String completionOnNewCorrelationGroup) {
         this.completionOnNewCorrelationGroup = completionOnNewCorrelationGroup;
     }
 
@@ -425,19 +440,19 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
         this.executorService = executorService;
     }
 
-    public Boolean getOptimisticLocking() {
+    public String getOptimisticLocking() {
         return optimisticLocking;
     }
 
-    public void setOptimisticLocking(boolean optimisticLocking) {
+    public void setOptimisticLocking(String optimisticLocking) {
         this.optimisticLocking = optimisticLocking;
     }
 
-    public Boolean getParallelProcessing() {
+    public String getParallelProcessing() {
         return parallelProcessing;
     }
 
-    public void setParallelProcessing(boolean parallelProcessing) {
+    public void setParallelProcessing(String parallelProcessing) {
         this.parallelProcessing = parallelProcessing;
     }
 
@@ -451,27 +466,27 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
         this.executorServiceRef = executorServiceRef;
     }
 
-    public Boolean getEagerCheckCompletion() {
+    public String getEagerCheckCompletion() {
         return eagerCheckCompletion;
     }
 
-    public void setEagerCheckCompletion(Boolean eagerCheckCompletion) {
+    public void setEagerCheckCompletion(String eagerCheckCompletion) {
         this.eagerCheckCompletion = eagerCheckCompletion;
     }
 
-    public Boolean getIgnoreInvalidCorrelationKeys() {
+    public String getIgnoreInvalidCorrelationKeys() {
         return ignoreInvalidCorrelationKeys;
     }
 
-    public void setIgnoreInvalidCorrelationKeys(Boolean ignoreInvalidCorrelationKeys) {
+    public void setIgnoreInvalidCorrelationKeys(String ignoreInvalidCorrelationKeys) {
         this.ignoreInvalidCorrelationKeys = ignoreInvalidCorrelationKeys;
     }
 
-    public Integer getCloseCorrelationKeyOnCompletion() {
+    public String getCloseCorrelationKeyOnCompletion() {
         return closeCorrelationKeyOnCompletion;
     }
 
-    public void setCloseCorrelationKeyOnCompletion(Integer closeCorrelationKeyOnCompletion) {
+    public void setCloseCorrelationKeyOnCompletion(String closeCorrelationKeyOnCompletion) {
         this.closeCorrelationKeyOnCompletion = closeCorrelationKeyOnCompletion;
     }
 
@@ -491,19 +506,19 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
         this.aggregationRepositoryRef = aggregationRepositoryRef;
     }
 
-    public Boolean getDiscardOnCompletionTimeout() {
+    public String getDiscardOnCompletionTimeout() {
         return discardOnCompletionTimeout;
     }
 
-    public void setDiscardOnCompletionTimeout(Boolean discardOnCompletionTimeout) {
+    public void setDiscardOnCompletionTimeout(String discardOnCompletionTimeout) {
         this.discardOnCompletionTimeout = discardOnCompletionTimeout;
     }
 
-    public Boolean getDiscardOnAggregationFailure() {
+    public String getDiscardOnAggregationFailure() {
         return discardOnAggregationFailure;
     }
 
-    public void setDiscardOnAggregationFailure(Boolean discardOnAggregationFailure) {
+    public void setDiscardOnAggregationFailure(String discardOnAggregationFailure) {
         this.discardOnAggregationFailure = discardOnAggregationFailure;
     }
 
@@ -523,19 +538,19 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
         return timeoutCheckerExecutorServiceRef;
     }
 
-    public Boolean getForceCompletionOnStop() {
+    public String getForceCompletionOnStop() {
         return forceCompletionOnStop;
     }
 
-    public void setForceCompletionOnStop(Boolean forceCompletionOnStop) {
+    public void setForceCompletionOnStop(String forceCompletionOnStop) {
         this.forceCompletionOnStop = forceCompletionOnStop;
     }
 
-    public Boolean getCompleteAllOnStop() {
+    public String getCompleteAllOnStop() {
         return completeAllOnStop;
     }
 
-    public void setCompleteAllOnStop(Boolean completeAllOnStop) {
+    public void setCompleteAllOnStop(String completeAllOnStop) {
         this.completeAllOnStop = completeAllOnStop;
     }
 
@@ -570,7 +585,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * @return builder
      */
     public AggregateDefinition eagerCheckCompletion() {
-        setEagerCheckCompletion(true);
+        setEagerCheckCompletion(Boolean.toString(true));
         return this;
     }
 
@@ -581,7 +596,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * @return builder
      */
     public AggregateDefinition ignoreInvalidCorrelationKeys() {
-        setIgnoreInvalidCorrelationKeys(true);
+        setIgnoreInvalidCorrelationKeys(Boolean.toString(true));
         return this;
     }
 
@@ -595,7 +610,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * @return builder
      */
     public AggregateDefinition closeCorrelationKeyOnCompletion(int capacity) {
-        setCloseCorrelationKeyOnCompletion(capacity);
+        setCloseCorrelationKeyOnCompletion(Integer.toString(capacity));
         return this;
     }
 
@@ -608,7 +623,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * @return builder
      */
     public AggregateDefinition discardOnCompletionTimeout() {
-        setDiscardOnCompletionTimeout(true);
+        setDiscardOnCompletionTimeout(Boolean.toString(true));
         return this;
     }
 
@@ -622,7 +637,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * @return builder
      */
     public AggregateDefinition discardOnAggregationFailure() {
-        setDiscardOnAggregationFailure(true);
+        setDiscardOnAggregationFailure(Boolean.toString(true));
         return this;
     }
 
@@ -638,7 +653,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * @return builder
      */
     public AggregateDefinition completionFromBatchConsumer() {
-        setCompletionFromBatchConsumer(true);
+        setCompletionFromBatchConsumer(Boolean.toString(true));
         return this;
     }
 
@@ -652,7 +667,22 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * @return builder
      */
     public AggregateDefinition completionOnNewCorrelationGroup() {
-        setCompletionOnNewCorrelationGroup(true);
+        setCompletionOnNewCorrelationGroup(Boolean.toString(true));
+        return this;
+    }
+
+    /**
+     * Number of messages aggregated before the aggregation is complete. This
+     * option can be set as either a fixed value or using an Expression which
+     * allows you to evaluate a size dynamically - will use Integer as result.
+     * If both are set Camel will fallback to use the fixed value if the
+     * Expression result was null or 0.
+     *
+     * @param completionSize the completion size, must be a an expression evaluating to positive number
+     * @return builder
+     */
+    public AggregateDefinition completionSize(String completionSize) {
+        setCompletionSize(completionSize);
         return this;
     }
 
@@ -667,7 +697,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * @return builder
      */
     public AggregateDefinition completionSize(int completionSize) {
-        setCompletionSize(completionSize);
+        setCompletionSize(Integer.toString(completionSize));
         return this;
     }
 
@@ -699,7 +729,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * @return the builder
      */
     public AggregateDefinition completionInterval(long completionInterval) {
-        setCompletionInterval(completionInterval);
+        setCompletionInterval(Long.toString(completionInterval));
         return this;
     }
 
@@ -722,7 +752,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * @return the builder
      */
     public AggregateDefinition completionTimeout(long completionTimeout) {
-        setCompletionTimeout(completionTimeout);
+        setCompletionTimeout(Long.toString(completionTimeout));
         return this;
     }
 
@@ -764,7 +794,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * @return the builder
      */
     public AggregateDefinition completionTimeoutCheckerInterval(long completionTimeoutCheckerInterval) {
-        setCompletionTimeoutCheckerInterval(completionTimeoutCheckerInterval);
+        setCompletionTimeoutCheckerInterval(Long.toString(completionTimeoutCheckerInterval));
         return this;
     }
 
@@ -851,7 +881,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * @return the builder
      */
     public AggregateDefinition aggregationStrategyMethodAllowNull() {
-        setStrategyMethodAllowNull(true);
+        setStrategyMethodAllowNull(Boolean.toString(true));
         return this;
     }
 
@@ -945,7 +975,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * is stopped
      */
     public AggregateDefinition forceCompletionOnStop() {
-        setForceCompletionOnStop(true);
+        setForceCompletionOnStop(Boolean.toString(true));
         return this;
     }
 
@@ -964,7 +994,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * route using it.
      */
     public AggregateDefinition completeAllOnStop() {
-        setCompleteAllOnStop(true);
+        setCompleteAllOnStop(Boolean.toString(true));
         return this;
     }
 
@@ -975,7 +1005,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * specified then Camel creates a default pool with 10 concurrent threads.
      */
     public AggregateDefinition parallelProcessing() {
-        setParallelProcessing(true);
+        setParallelProcessing(Boolean.toString(true));
         return this;
     }
 
@@ -986,7 +1016,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * specified then Camel creates a default pool with 10 concurrent threads.
      */
     public AggregateDefinition parallelProcessing(boolean parallelProcessing) {
-        setParallelProcessing(parallelProcessing);
+        setParallelProcessing(Boolean.toString(parallelProcessing));
         return this;
     }
 
@@ -996,7 +1026,7 @@ public class AggregateDefinition extends ProcessorDefinition<AggregateDefinition
      * {@link org.apache.camel.spi.OptimisticLockingAggregationRepository}.
      */
     public AggregateDefinition optimisticLocking() {
-        setOptimisticLocking(true);
+        setOptimisticLocking(Boolean.toString(true));
         return this;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/BeanDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/BeanDefinition.java
index d4f317c..701497c 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/BeanDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/BeanDefinition.java
@@ -39,8 +39,8 @@ public class BeanDefinition extends NoOutputDefinition<BeanDefinition> {
     @XmlAttribute
     private String beanType;
     @XmlAttribute
-    @Metadata(defaultValue = "true")
-    private Boolean cache;
+    @Metadata(defaultValue = "true", javaType = "java.lang.Boolean")
+    private String cache;
     @XmlTransient
     private Class<?> beanClass;
     @XmlTransient
@@ -146,14 +146,14 @@ public class BeanDefinition extends NoOutputDefinition<BeanDefinition> {
         this.beanClass = beanType;
     }
 
-    public Boolean getCache() {
+    public String getCache() {
         return cache;
     }
 
     /**
      * Caches the bean lookup, to avoid lookup up bean on every usage.
      */
-    public void setCache(Boolean cache) {
+    public void setCache(String cache) {
         this.cache = cache;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/ChoiceDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/ChoiceDefinition.java
index c3a7333..3f2e8de 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/ChoiceDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/ChoiceDefinition.java
@@ -19,6 +19,7 @@ package org.apache.camel.model;
 import java.util.AbstractList;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
@@ -32,7 +33,6 @@ import org.apache.camel.builder.ExpressionClause;
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.spi.AsPredicate;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -218,13 +218,8 @@ public class ChoiceDefinition extends ProcessorDefinition<ChoiceDefinition> impl
 
     @Override
     public String getLabel() {
-        CollectionStringBuffer buffer = new CollectionStringBuffer("choice[");
-        List<WhenDefinition> list = getWhenClauses();
-        for (WhenDefinition whenType : list) {
-            buffer.append(whenType.getLabel());
-        }
-        buffer.append("]");
-        return buffer.toString();
+        return getOutputs().stream().map(ProcessorDefinition::getLabel)
+                .collect(Collectors.joining(",", getShortName() + "[", "]"));
     }
 
     public List<WhenDefinition> getWhenClauses() {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/CircuitBreakerDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/CircuitBreakerDefinition.java
index dab8f8a..5ff3f91 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/CircuitBreakerDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/CircuitBreakerDefinition.java
@@ -223,7 +223,7 @@ public class CircuitBreakerDefinition extends ProcessorDefinition<CircuitBreaker
      */
     public CircuitBreakerDefinition onFallbackViaNetwork() {
         onFallback = new OnFallbackDefinition();
-        onFallback.setFallbackViaNetwork(true);
+        onFallback.setFallbackViaNetwork(Boolean.toString(true));
         onFallback.setParent(this);
         return this;
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/ClaimCheckDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/ClaimCheckDefinition.java
index bfe314c..a885171 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/ClaimCheckDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/ClaimCheckDefinition.java
@@ -38,7 +38,8 @@ import org.apache.camel.spi.Metadata;
 public class ClaimCheckDefinition extends NoOutputDefinition<ClaimCheckDefinition> {
 
     @XmlAttribute(required = true)
-    private ClaimCheckOperation operation;
+    @Metadata(enums = "Get,GetAndRemove,Set,Push,Pop", javaType = "org.apache.camel.model.ClaimCheckOperation")
+    private String operation;
     @XmlAttribute
     private String key;
     @XmlAttribute
@@ -90,6 +91,22 @@ public class ClaimCheckDefinition extends NoOutputDefinition<ClaimCheckDefinitio
      * </ul>
      */
     public ClaimCheckDefinition operation(ClaimCheckOperation operation) {
+        return operation(operation.name());
+    }
+
+    /**
+     * The claim check operation to use. The following operations is supported:
+     * <ul>
+     * <li>Get</li> - Gets (does not remove) the claim check by the given key.
+     * <li>GetAndRemove</li> - Gets and remove the claim check by the given key.
+     * <li>Set</li> - Sets a new (will override if key already exists) claim
+     * check with the given key.
+     * <li>Push</li> - Sets a new claim check on the stack (does not use key).
+     * <li>Pop</li> - Gets the latest claim check from the stack (does not use
+     * key).
+     * </ul>
+     */
+    public ClaimCheckDefinition operation(String operation) {
         setOperation(operation);
         return this;
     }
@@ -190,11 +207,11 @@ public class ClaimCheckDefinition extends NoOutputDefinition<ClaimCheckDefinitio
         this.key = key;
     }
 
-    public ClaimCheckOperation getOperation() {
+    public String getOperation() {
         return operation;
     }
 
-    public void setOperation(ClaimCheckOperation operation) {
+    public void setOperation(String operation) {
         this.operation = operation;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/ContextScanDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/ContextScanDefinition.java
index 0c7357f..c0e5846 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/ContextScanDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/ContextScanDefinition.java
@@ -36,7 +36,7 @@ import org.apache.camel.spi.Metadata;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class ContextScanDefinition {
     @XmlAttribute
-    private Boolean includeNonSingletons;
+    private String includeNonSingletons;
     @XmlElement(name = "excludes")
     private List<String> excludes = new ArrayList<>();
     @XmlElement(name = "includes")
@@ -45,7 +45,7 @@ public class ContextScanDefinition {
     public ContextScanDefinition() {
     }
 
-    public Boolean getIncludeNonSingletons() {
+    public String getIncludeNonSingletons() {
         return includeNonSingletons;
     }
 
@@ -54,7 +54,7 @@ public class ContextScanDefinition {
      * <p/>
      * By default only singleton beans is included in the context scan
      */
-    public void setIncludeNonSingletons(Boolean includeNonSingletons) {
+    public void setIncludeNonSingletons(String includeNonSingletons) {
         this.includeNonSingletons = includeNonSingletons;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/DataFormatDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/DataFormatDefinition.java
index 4b1d888..32efdde 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/DataFormatDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/DataFormatDefinition.java
@@ -44,7 +44,8 @@ public class DataFormatDefinition extends IdentifiedType implements OtherAttribu
     @XmlAnyAttribute
     private Map<QName, Object> otherAttributes;
     @XmlAttribute
-    private Boolean contentTypeHeader;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String contentTypeHeader;
 
     public DataFormatDefinition() {
     }
@@ -86,7 +87,7 @@ public class DataFormatDefinition extends IdentifiedType implements OtherAttribu
         this.otherAttributes = otherAttributes;
     }
 
-    public Boolean getContentTypeHeader() {
+    public String getContentTypeHeader() {
         return contentTypeHeader;
     }
 
@@ -97,7 +98,7 @@ public class DataFormatDefinition extends IdentifiedType implements OtherAttribu
      * For example <tt>application/xml</tt> for data formats marshalling to XML,
      * or <tt>application/json</tt> for data formats marshalling to JSon etc.
      */
-    public void setContentTypeHeader(Boolean contentTypeHeader) {
+    public void setContentTypeHeader(String contentTypeHeader) {
         this.contentTypeHeader = contentTypeHeader;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/DelayDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/DelayDefinition.java
index 066f81e..e111ad68 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/DelayDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/DelayDefinition.java
@@ -43,10 +43,10 @@ public class DelayDefinition extends ExpressionNode implements ExecutorServiceAw
     private String executorServiceRef;
     @XmlAttribute
     @Metadata(defaultValue = "true")
-    private Boolean asyncDelayed;
+    private String asyncDelayed;
     @XmlAttribute
     @Metadata(defaultValue = "true")
-    private Boolean callerRunsWhenRejected;
+    private String callerRunsWhenRejected;
 
     public DelayDefinition() {
     }
@@ -94,7 +94,7 @@ public class DelayDefinition extends ExpressionNode implements ExecutorServiceAw
      * @return the builder
      */
     public DelayDefinition callerRunsWhenRejected(boolean callerRunsWhenRejected) {
-        setCallerRunsWhenRejected(callerRunsWhenRejected);
+        setCallerRunsWhenRejected(Boolean.toString(callerRunsWhenRejected));
         return this;
     }
 
@@ -103,7 +103,7 @@ public class DelayDefinition extends ExpressionNode implements ExecutorServiceAw
      * while delaying.
      */
     public DelayDefinition asyncDelayed() {
-        setAsyncDelayed(true);
+        setAsyncDelayed(Boolean.toString(true));
         return this;
     }
 
@@ -112,7 +112,7 @@ public class DelayDefinition extends ExpressionNode implements ExecutorServiceAw
      * while delaying.
      */
     public DelayDefinition syncDelayed() {
-        setAsyncDelayed(false);
+        setAsyncDelayed(Boolean.toString(false));
         return this;
     }
 
@@ -146,19 +146,19 @@ public class DelayDefinition extends ExpressionNode implements ExecutorServiceAw
         super.setExpression(expression);
     }
 
-    public Boolean getAsyncDelayed() {
+    public String getAsyncDelayed() {
         return asyncDelayed;
     }
 
-    public void setAsyncDelayed(Boolean asyncDelayed) {
+    public void setAsyncDelayed(String asyncDelayed) {
         this.asyncDelayed = asyncDelayed;
     }
 
-    public Boolean getCallerRunsWhenRejected() {
+    public String getCallerRunsWhenRejected() {
         return callerRunsWhenRejected;
     }
 
-    public void setCallerRunsWhenRejected(Boolean callerRunsWhenRejected) {
+    public void setCallerRunsWhenRejected(String callerRunsWhenRejected) {
         this.callerRunsWhenRejected = callerRunsWhenRejected;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/DynamicRouterDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/DynamicRouterDefinition.java
index c15df79..cef0095 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/DynamicRouterDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/DynamicRouterDefinition.java
@@ -42,9 +42,9 @@ public class DynamicRouterDefinition<Type extends ProcessorDefinition<Type>> ext
     @Metadata(defaultValue = ",")
     private String uriDelimiter;
     @XmlAttribute
-    private Boolean ignoreInvalidEndpoints;
+    private String ignoreInvalidEndpoints;
     @XmlAttribute
-    private Integer cacheSize;
+    private String cacheSize;
 
     public DynamicRouterDefinition() {
     }
@@ -95,22 +95,22 @@ public class DynamicRouterDefinition<Type extends ProcessorDefinition<Type>> ext
         return uriDelimiter;
     }
 
-    public void setIgnoreInvalidEndpoints(Boolean ignoreInvalidEndpoints) {
+    public void setIgnoreInvalidEndpoints(String ignoreInvalidEndpoints) {
         this.ignoreInvalidEndpoints = ignoreInvalidEndpoints;
     }
 
-    public Boolean getIgnoreInvalidEndpoints() {
+    public String getIgnoreInvalidEndpoints() {
         return ignoreInvalidEndpoints;
     }
 
     // Fluent API
     // -------------------------------------------------------------------------
 
-    public Integer getCacheSize() {
+    public String getCacheSize() {
         return cacheSize;
     }
 
-    public void setCacheSize(Integer cacheSize) {
+    public void setCacheSize(String cacheSize) {
         this.cacheSize = cacheSize;
     }
 
@@ -128,7 +128,7 @@ public class DynamicRouterDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder
      */
     public DynamicRouterDefinition<Type> ignoreInvalidEndpoints() {
-        setIgnoreInvalidEndpoints(true);
+        setIgnoreInvalidEndpoints(Boolean.toString(true));
         return this;
     }
 
@@ -153,7 +153,7 @@ public class DynamicRouterDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder
      */
     public DynamicRouterDefinition<Type> cacheSize(int cacheSize) {
-        setCacheSize(cacheSize);
+        setCacheSize(Integer.toString(cacheSize));
         return this;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/EnrichDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/EnrichDefinition.java
index 16acea8..13ad4ad 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/EnrichDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/EnrichDefinition.java
@@ -42,17 +42,17 @@ public class EnrichDefinition extends ExpressionNode {
     @XmlAttribute(name = "strategyMethodName")
     private String aggregationStrategyMethodName;
     @XmlAttribute(name = "strategyMethodAllowNull")
-    private Boolean aggregationStrategyMethodAllowNull;
+    private String aggregationStrategyMethodAllowNull;
     @XmlAttribute
-    private Boolean aggregateOnException;
+    private String aggregateOnException;
     @XmlTransient
     private AggregationStrategy aggregationStrategy;
     @XmlAttribute
-    private Boolean shareUnitOfWork;
+    private String shareUnitOfWork;
     @XmlAttribute
-    private Integer cacheSize;
+    private String cacheSize;
     @XmlAttribute
-    private Boolean ignoreInvalidEndpoint;
+    private String ignoreInvalidEndpoint;
 
     public EnrichDefinition() {
         this(null);
@@ -126,7 +126,7 @@ public class EnrichDefinition extends ExpressionNode {
      * AggregationStrategy.
      */
     public EnrichDefinition aggregationStrategyMethodAllowNull(boolean aggregationStrategyMethodAllowNull) {
-        setAggregationStrategyMethodAllowNull(aggregationStrategyMethodAllowNull);
+        setAggregationStrategyMethodAllowNull(Boolean.toString(aggregationStrategyMethodAllowNull));
         return this;
     }
 
@@ -138,7 +138,7 @@ public class EnrichDefinition extends ExpressionNode {
      * to suppress the exception or set a custom message body etc.
      */
     public EnrichDefinition aggregateOnException(boolean aggregateOnException) {
-        setAggregateOnException(aggregateOnException);
+        setAggregateOnException(Boolean.toString(aggregateOnException));
         return this;
     }
 
@@ -149,7 +149,7 @@ public class EnrichDefinition extends ExpressionNode {
      * resource exchange has its own individual unit of work.
      */
     public EnrichDefinition shareUnitOfWork() {
-        setShareUnitOfWork(true);
+        setShareUnitOfWork(Boolean.toString(true));
         return this;
     }
 
@@ -163,7 +163,7 @@ public class EnrichDefinition extends ExpressionNode {
      * @return the builder
      */
     public EnrichDefinition cacheSize(int cacheSize) {
-        setCacheSize(cacheSize);
+        setCacheSize(Integer.toString(cacheSize));
         return this;
     }
 
@@ -174,7 +174,7 @@ public class EnrichDefinition extends ExpressionNode {
      * @return the builder
      */
     public EnrichDefinition ignoreInvalidEndpoint() {
-        setIgnoreInvalidEndpoint(true);
+        setIgnoreInvalidEndpoint(Boolean.toString(true));
         return this;
     }
 
@@ -207,11 +207,11 @@ public class EnrichDefinition extends ExpressionNode {
         this.aggregationStrategyMethodName = aggregationStrategyMethodName;
     }
 
-    public Boolean getAggregationStrategyMethodAllowNull() {
+    public String getAggregationStrategyMethodAllowNull() {
         return aggregationStrategyMethodAllowNull;
     }
 
-    public void setAggregationStrategyMethodAllowNull(Boolean aggregationStrategyMethodAllowNull) {
+    public void setAggregationStrategyMethodAllowNull(String aggregationStrategyMethodAllowNull) {
         this.aggregationStrategyMethodAllowNull = aggregationStrategyMethodAllowNull;
     }
 
@@ -223,35 +223,35 @@ public class EnrichDefinition extends ExpressionNode {
         this.aggregationStrategy = aggregationStrategy;
     }
 
-    public Boolean getAggregateOnException() {
+    public String getAggregateOnException() {
         return aggregateOnException;
     }
 
-    public void setAggregateOnException(Boolean aggregateOnException) {
+    public void setAggregateOnException(String aggregateOnException) {
         this.aggregateOnException = aggregateOnException;
     }
 
-    public Boolean getShareUnitOfWork() {
+    public String getShareUnitOfWork() {
         return shareUnitOfWork;
     }
 
-    public void setShareUnitOfWork(Boolean shareUnitOfWork) {
+    public void setShareUnitOfWork(String shareUnitOfWork) {
         this.shareUnitOfWork = shareUnitOfWork;
     }
 
-    public Integer getCacheSize() {
+    public String getCacheSize() {
         return cacheSize;
     }
 
-    public void setCacheSize(Integer cacheSize) {
+    public void setCacheSize(String cacheSize) {
         this.cacheSize = cacheSize;
     }
 
-    public Boolean getIgnoreInvalidEndpoint() {
+    public String getIgnoreInvalidEndpoint() {
         return ignoreInvalidEndpoint;
     }
 
-    public void setIgnoreInvalidEndpoint(Boolean ignoreInvalidEndpoint) {
+    public void setIgnoreInvalidEndpoint(String ignoreInvalidEndpoint) {
         this.ignoreInvalidEndpoint = ignoreInvalidEndpoint;
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/HystrixConfigurationCommon.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/HystrixConfigurationCommon.java
index d2aa456..9d6a8bb 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/HystrixConfigurationCommon.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/HystrixConfigurationCommon.java
@@ -38,94 +38,94 @@ public class HystrixConfigurationCommon extends IdentifiedType {
     private String threadPoolKey;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "true")
-    private Boolean circuitBreakerEnabled;
+    private String circuitBreakerEnabled;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "50")
-    private Integer circuitBreakerErrorThresholdPercentage;
+    private String circuitBreakerErrorThresholdPercentage;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "false")
-    private Boolean circuitBreakerForceClosed;
+    private String circuitBreakerForceClosed;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "false")
-    private Boolean circuitBreakerForceOpen;
+    private String circuitBreakerForceOpen;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "20")
-    private Integer circuitBreakerRequestVolumeThreshold;
+    private String circuitBreakerRequestVolumeThreshold;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "5000")
-    private Integer circuitBreakerSleepWindowInMilliseconds;
+    private String circuitBreakerSleepWindowInMilliseconds;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "20")
-    private Integer executionIsolationSemaphoreMaxConcurrentRequests;
+    private String executionIsolationSemaphoreMaxConcurrentRequests;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "THREAD", enums = "THREAD,SEMAPHORE")
     private String executionIsolationStrategy;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "true")
-    private Boolean executionIsolationThreadInterruptOnTimeout;
+    private String executionIsolationThreadInterruptOnTimeout;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "1000")
-    private Integer executionTimeoutInMilliseconds;
+    private String executionTimeoutInMilliseconds;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "true")
-    private Boolean executionTimeoutEnabled;
+    private String executionTimeoutEnabled;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "10")
-    private Integer fallbackIsolationSemaphoreMaxConcurrentRequests;
+    private String fallbackIsolationSemaphoreMaxConcurrentRequests;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "true")
-    private Boolean fallbackEnabled;
+    private String fallbackEnabled;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "500")
-    private Integer metricsHealthSnapshotIntervalInMilliseconds;
+    private String metricsHealthSnapshotIntervalInMilliseconds;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "10")
-    private Integer metricsRollingPercentileBucketSize;
+    private String metricsRollingPercentileBucketSize;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "true")
-    private Boolean metricsRollingPercentileEnabled;
+    private String metricsRollingPercentileEnabled;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "10000")
-    private Integer metricsRollingPercentileWindowInMilliseconds;
+    private String metricsRollingPercentileWindowInMilliseconds;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "6")
-    private Integer metricsRollingPercentileWindowBuckets;
+    private String metricsRollingPercentileWindowBuckets;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "10000")
-    private Integer metricsRollingStatisticalWindowInMilliseconds;
+    private String metricsRollingStatisticalWindowInMilliseconds;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "10")
-    private Integer metricsRollingStatisticalWindowBuckets;
+    private String metricsRollingStatisticalWindowBuckets;
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "true")
-    private Boolean requestLogEnabled;
+    private String requestLogEnabled;
 
     // thread-pool
 
     @XmlAttribute
     @Metadata(label = "threadpool", defaultValue = "10")
-    private Integer corePoolSize;
+    private String corePoolSize;
     @XmlAttribute
     @Metadata(label = "threadpool", defaultValue = "10")
-    private Integer maximumSize;
+    private String maximumSize;
     @XmlAttribute
     @Metadata(label = "threadpool", defaultValue = "1")
-    private Integer keepAliveTime;
+    private String keepAliveTime;
     @XmlAttribute
     @Metadata(label = "threadpool", defaultValue = "-1")
-    private Integer maxQueueSize;
+    private String maxQueueSize;
     @XmlAttribute
     @Metadata(label = "threadpool", defaultValue = "5")
-    private Integer queueSizeRejectionThreshold;
+    private String queueSizeRejectionThreshold;
     @XmlAttribute
     @Metadata(label = "threadpool", defaultValue = "10000")
-    private Integer threadPoolRollingNumberStatisticalWindowInMilliseconds;
+    private String threadPoolRollingNumberStatisticalWindowInMilliseconds;
     @XmlAttribute
     @Metadata(label = "threadpool", defaultValue = "10")
-    private Integer threadPoolRollingNumberStatisticalWindowBuckets;
+    private String threadPoolRollingNumberStatisticalWindowBuckets;
     @XmlAttribute
     @Metadata(label = "threadpool", defaultValue = "false")
-    private Boolean allowMaximumSizeToDivergeFromCoreSize;
+    private String allowMaximumSizeToDivergeFromCoreSize;
 
     // Getter/Setter
     // -------------------------------------------------------------------------
@@ -153,7 +153,7 @@ public class HystrixConfigurationCommon extends IdentifiedType {
         this.threadPoolKey = threadPoolKey;
     }
 
-    public Boolean getCircuitBreakerEnabled() {
+    public String getCircuitBreakerEnabled() {
         return circuitBreakerEnabled;
     }
 
@@ -165,11 +165,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * continues tracking metrics and knowing whether it should be open/closed,
      * this property results in not even instantiating a circuit-breaker.
      */
-    public void setCircuitBreakerEnabled(Boolean circuitBreakerEnabled) {
+    public void setCircuitBreakerEnabled(String circuitBreakerEnabled) {
         this.circuitBreakerEnabled = circuitBreakerEnabled;
     }
 
-    public Integer getCircuitBreakerErrorThresholdPercentage() {
+    public String getCircuitBreakerErrorThresholdPercentage() {
         return circuitBreakerErrorThresholdPercentage;
     }
 
@@ -183,11 +183,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * The error percentage this is compared against comes from
      * HystrixCommandMetrics.getHealthCounts().
      */
-    public void setCircuitBreakerErrorThresholdPercentage(Integer circuitBreakerErrorThresholdPercentage) {
+    public void setCircuitBreakerErrorThresholdPercentage(String circuitBreakerErrorThresholdPercentage) {
         this.circuitBreakerErrorThresholdPercentage = circuitBreakerErrorThresholdPercentage;
     }
 
-    public Boolean getCircuitBreakerForceClosed() {
+    public String getCircuitBreakerForceClosed() {
         return circuitBreakerForceClosed;
     }
 
@@ -199,11 +199,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * The circuitBreakerForceOpen() property takes precedence so if it set to
      * true this property does nothing.
      */
-    public void setCircuitBreakerForceClosed(Boolean circuitBreakerForceClosed) {
+    public void setCircuitBreakerForceClosed(String circuitBreakerForceClosed) {
         this.circuitBreakerForceClosed = circuitBreakerForceClosed;
     }
 
-    public Boolean getCircuitBreakerForceOpen() {
+    public String getCircuitBreakerForceOpen() {
         return circuitBreakerForceOpen;
     }
 
@@ -213,11 +213,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * <p>
      * This property takes precedence over circuitBreakerForceClosed();
      */
-    public void setCircuitBreakerForceOpen(Boolean circuitBreakerForceOpen) {
+    public void setCircuitBreakerForceOpen(String circuitBreakerForceOpen) {
         this.circuitBreakerForceOpen = circuitBreakerForceOpen;
     }
 
-    public Integer getCircuitBreakerRequestVolumeThreshold() {
+    public String getCircuitBreakerRequestVolumeThreshold() {
         return circuitBreakerRequestVolumeThreshold;
     }
 
@@ -229,11 +229,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * If below this number the circuit will not trip regardless of error
      * percentage.
      */
-    public void setCircuitBreakerRequestVolumeThreshold(Integer circuitBreakerRequestVolumeThreshold) {
+    public void setCircuitBreakerRequestVolumeThreshold(String circuitBreakerRequestVolumeThreshold) {
         this.circuitBreakerRequestVolumeThreshold = circuitBreakerRequestVolumeThreshold;
     }
 
-    public Integer getCircuitBreakerSleepWindowInMilliseconds() {
+    public String getCircuitBreakerSleepWindowInMilliseconds() {
         return circuitBreakerSleepWindowInMilliseconds;
     }
 
@@ -241,11 +241,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * The time in milliseconds after a HystrixCircuitBreaker trips open that it
      * should wait before trying requests again.
      */
-    public void setCircuitBreakerSleepWindowInMilliseconds(Integer circuitBreakerSleepWindowInMilliseconds) {
+    public void setCircuitBreakerSleepWindowInMilliseconds(String circuitBreakerSleepWindowInMilliseconds) {
         this.circuitBreakerSleepWindowInMilliseconds = circuitBreakerSleepWindowInMilliseconds;
     }
 
-    public Integer getExecutionIsolationSemaphoreMaxConcurrentRequests() {
+    public String getExecutionIsolationSemaphoreMaxConcurrentRequests() {
         return executionIsolationSemaphoreMaxConcurrentRequests;
     }
 
@@ -255,7 +255,7 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * <p>
      * Applicable only when executionIsolationStrategy == SEMAPHORE.
      */
-    public void setExecutionIsolationSemaphoreMaxConcurrentRequests(Integer executionIsolationSemaphoreMaxConcurrentRequests) {
+    public void setExecutionIsolationSemaphoreMaxConcurrentRequests(String executionIsolationSemaphoreMaxConcurrentRequests) {
         this.executionIsolationSemaphoreMaxConcurrentRequests = executionIsolationSemaphoreMaxConcurrentRequests;
     }
 
@@ -276,7 +276,7 @@ public class HystrixConfigurationCommon extends IdentifiedType {
         this.executionIsolationStrategy = executionIsolationStrategy;
     }
 
-    public Boolean getExecutionIsolationThreadInterruptOnTimeout() {
+    public String getExecutionIsolationThreadInterruptOnTimeout() {
         return executionIsolationThreadInterruptOnTimeout;
     }
 
@@ -286,11 +286,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * <p>
      * Applicable only when executionIsolationStrategy() == THREAD.
      */
-    public void setExecutionIsolationThreadInterruptOnTimeout(Boolean executionIsolationThreadInterruptOnTimeout) {
+    public void setExecutionIsolationThreadInterruptOnTimeout(String executionIsolationThreadInterruptOnTimeout) {
         this.executionIsolationThreadInterruptOnTimeout = executionIsolationThreadInterruptOnTimeout;
     }
 
-    public Integer getExecutionTimeoutInMilliseconds() {
+    public String getExecutionTimeoutInMilliseconds() {
         return executionTimeoutInMilliseconds;
     }
 
@@ -303,22 +303,22 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * the command is semaphore-isolated and a HystrixObservableCommand, that
      * command will get unsubscribed.
      */
-    public void setExecutionTimeoutInMilliseconds(Integer executionTimeoutInMilliseconds) {
+    public void setExecutionTimeoutInMilliseconds(String executionTimeoutInMilliseconds) {
         this.executionTimeoutInMilliseconds = executionTimeoutInMilliseconds;
     }
 
-    public Boolean getExecutionTimeoutEnabled() {
+    public String getExecutionTimeoutEnabled() {
         return executionTimeoutEnabled;
     }
 
     /**
      * Whether the timeout mechanism is enabled for this command
      */
-    public void setExecutionTimeoutEnabled(Boolean executionTimeoutEnabled) {
+    public void setExecutionTimeoutEnabled(String executionTimeoutEnabled) {
         this.executionTimeoutEnabled = executionTimeoutEnabled;
     }
 
-    public Integer getFallbackIsolationSemaphoreMaxConcurrentRequests() {
+    public String getFallbackIsolationSemaphoreMaxConcurrentRequests() {
         return fallbackIsolationSemaphoreMaxConcurrentRequests;
     }
 
@@ -327,11 +327,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * Requests beyond the concurrent limit will fail-fast and not attempt
      * retrieving a fallback.
      */
-    public void setFallbackIsolationSemaphoreMaxConcurrentRequests(Integer fallbackIsolationSemaphoreMaxConcurrentRequests) {
+    public void setFallbackIsolationSemaphoreMaxConcurrentRequests(String fallbackIsolationSemaphoreMaxConcurrentRequests) {
         this.fallbackIsolationSemaphoreMaxConcurrentRequests = fallbackIsolationSemaphoreMaxConcurrentRequests;
     }
 
-    public Boolean getFallbackEnabled() {
+    public String getFallbackEnabled() {
         return fallbackEnabled;
     }
 
@@ -339,11 +339,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * Whether HystrixCommand.getFallback() should be attempted when failure
      * occurs.
      */
-    public void setFallbackEnabled(Boolean fallbackEnabled) {
+    public void setFallbackEnabled(String fallbackEnabled) {
         this.fallbackEnabled = fallbackEnabled;
     }
 
-    public Integer getMetricsHealthSnapshotIntervalInMilliseconds() {
+    public String getMetricsHealthSnapshotIntervalInMilliseconds() {
         return metricsHealthSnapshotIntervalInMilliseconds;
     }
 
@@ -355,11 +355,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * On high-volume circuits the continual calculation of error percentage can
      * become CPU intensive thus this controls how often it is calculated.
      */
-    public void setMetricsHealthSnapshotIntervalInMilliseconds(Integer metricsHealthSnapshotIntervalInMilliseconds) {
+    public void setMetricsHealthSnapshotIntervalInMilliseconds(String metricsHealthSnapshotIntervalInMilliseconds) {
         this.metricsHealthSnapshotIntervalInMilliseconds = metricsHealthSnapshotIntervalInMilliseconds;
     }
 
-    public Integer getMetricsRollingPercentileBucketSize() {
+    public String getMetricsRollingPercentileBucketSize() {
         return metricsRollingPercentileBucketSize;
     }
 
@@ -368,11 +368,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * This is passed into HystrixRollingPercentile inside
      * HystrixCommandMetrics.
      */
-    public void setMetricsRollingPercentileBucketSize(Integer metricsRollingPercentileBucketSize) {
+    public void setMetricsRollingPercentileBucketSize(String metricsRollingPercentileBucketSize) {
         this.metricsRollingPercentileBucketSize = metricsRollingPercentileBucketSize;
     }
 
-    public Boolean getMetricsRollingPercentileEnabled() {
+    public String getMetricsRollingPercentileEnabled() {
         return metricsRollingPercentileEnabled;
     }
 
@@ -380,11 +380,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * Whether percentile metrics should be captured using
      * HystrixRollingPercentile inside HystrixCommandMetrics.
      */
-    public void setMetricsRollingPercentileEnabled(Boolean metricsRollingPercentileEnabled) {
+    public void setMetricsRollingPercentileEnabled(String metricsRollingPercentileEnabled) {
         this.metricsRollingPercentileEnabled = metricsRollingPercentileEnabled;
     }
 
-    public Integer getMetricsRollingPercentileWindowInMilliseconds() {
+    public String getMetricsRollingPercentileWindowInMilliseconds() {
         return metricsRollingPercentileWindowInMilliseconds;
     }
 
@@ -392,11 +392,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * Duration of percentile rolling window in milliseconds. This is passed
      * into HystrixRollingPercentile inside HystrixCommandMetrics.
      */
-    public void setMetricsRollingPercentileWindowInMilliseconds(Integer metricsRollingPercentileWindowInMilliseconds) {
+    public void setMetricsRollingPercentileWindowInMilliseconds(String metricsRollingPercentileWindowInMilliseconds) {
         this.metricsRollingPercentileWindowInMilliseconds = metricsRollingPercentileWindowInMilliseconds;
     }
 
-    public Integer getMetricsRollingPercentileWindowBuckets() {
+    public String getMetricsRollingPercentileWindowBuckets() {
         return metricsRollingPercentileWindowBuckets;
     }
 
@@ -404,11 +404,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * Number of buckets the rolling percentile window is broken into. This is
      * passed into HystrixRollingPercentile inside HystrixCommandMetrics.
      */
-    public void setMetricsRollingPercentileWindowBuckets(Integer metricsRollingPercentileWindowBuckets) {
+    public void setMetricsRollingPercentileWindowBuckets(String metricsRollingPercentileWindowBuckets) {
         this.metricsRollingPercentileWindowBuckets = metricsRollingPercentileWindowBuckets;
     }
 
-    public Integer getMetricsRollingStatisticalWindowInMilliseconds() {
+    public String getMetricsRollingStatisticalWindowInMilliseconds() {
         return metricsRollingStatisticalWindowInMilliseconds;
     }
 
@@ -417,11 +417,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * milliseconds. This is how long metrics are kept for the thread pool. The
      * window is divided into buckets and “rolls” by those increments.
      */
-    public void setMetricsRollingStatisticalWindowInMilliseconds(Integer metricsRollingStatisticalWindowInMilliseconds) {
+    public void setMetricsRollingStatisticalWindowInMilliseconds(String metricsRollingStatisticalWindowInMilliseconds) {
         this.metricsRollingStatisticalWindowInMilliseconds = metricsRollingStatisticalWindowInMilliseconds;
     }
 
-    public Integer getMetricsRollingStatisticalWindowBuckets() {
+    public String getMetricsRollingStatisticalWindowBuckets() {
         return metricsRollingStatisticalWindowBuckets;
     }
 
@@ -429,11 +429,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * Number of buckets the rolling statistical window is broken into. This is
      * passed into HystrixRollingNumber inside HystrixCommandMetrics.
      */
-    public void setMetricsRollingStatisticalWindowBuckets(Integer metricsRollingStatisticalWindowBuckets) {
+    public void setMetricsRollingStatisticalWindowBuckets(String metricsRollingStatisticalWindowBuckets) {
         this.metricsRollingStatisticalWindowBuckets = metricsRollingStatisticalWindowBuckets;
     }
 
-    public Boolean getRequestLogEnabled() {
+    public String getRequestLogEnabled() {
         return requestLogEnabled;
     }
 
@@ -441,11 +441,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * Whether HystrixCommand execution and events should be logged to
      * HystrixRequestLog.
      */
-    public void setRequestLogEnabled(Boolean requestLogEnabled) {
+    public void setRequestLogEnabled(String requestLogEnabled) {
         this.requestLogEnabled = requestLogEnabled;
     }
 
-    public Integer getCorePoolSize() {
+    public String getCorePoolSize() {
         return corePoolSize;
     }
 
@@ -453,11 +453,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * Core thread-pool size that gets passed to
      * {@link java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int)}
      */
-    public void setCorePoolSize(Integer corePoolSize) {
+    public void setCorePoolSize(String corePoolSize) {
         this.corePoolSize = corePoolSize;
     }
 
-    public Integer getMaximumSize() {
+    public String getMaximumSize() {
         return maximumSize;
     }
 
@@ -468,11 +468,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * HystrixCommands. Please note that this setting only takes effect if you
      * also set allowMaximumSizeToDivergeFromCoreSize
      */
-    public void setMaximumSize(Integer maximumSize) {
+    public void setMaximumSize(String maximumSize) {
         this.maximumSize = maximumSize;
     }
 
-    public Integer getKeepAliveTime() {
+    public String getKeepAliveTime() {
         return keepAliveTime;
     }
 
@@ -480,11 +480,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * Keep-alive time in minutes that gets passed to
      * {@link ThreadPoolExecutor#setKeepAliveTime(long, TimeUnit)}
      */
-    public void setKeepAliveTime(Integer keepAliveTime) {
+    public void setKeepAliveTime(String keepAliveTime) {
         this.keepAliveTime = keepAliveTime;
     }
 
-    public Integer getMaxQueueSize() {
+    public String getMaxQueueSize() {
         return maxQueueSize;
     }
 
@@ -494,11 +494,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * the instantiation of a threadpool - it is not eliglible to change a queue
      * size on the fly. For that, use queueSizeRejectionThreshold().
      */
-    public void setMaxQueueSize(Integer maxQueueSize) {
+    public void setMaxQueueSize(String maxQueueSize) {
         this.maxQueueSize = maxQueueSize;
     }
 
-    public Integer getQueueSizeRejectionThreshold() {
+    public String getQueueSizeRejectionThreshold() {
         return queueSizeRejectionThreshold;
     }
 
@@ -511,11 +511,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * <p>
      * This is used by HystrixCommand when queuing a thread for execution.
      */
-    public void setQueueSizeRejectionThreshold(Integer queueSizeRejectionThreshold) {
+    public void setQueueSizeRejectionThreshold(String queueSizeRejectionThreshold) {
         this.queueSizeRejectionThreshold = queueSizeRejectionThreshold;
     }
 
-    public Integer getThreadPoolRollingNumberStatisticalWindowInMilliseconds() {
+    public String getThreadPoolRollingNumberStatisticalWindowInMilliseconds() {
         return threadPoolRollingNumberStatisticalWindowInMilliseconds;
     }
 
@@ -523,11 +523,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * Duration of statistical rolling window in milliseconds. This is passed
      * into HystrixRollingNumber inside each HystrixThreadPoolMetrics instance.
      */
-    public void setThreadPoolRollingNumberStatisticalWindowInMilliseconds(Integer threadPoolRollingNumberStatisticalWindowInMilliseconds) {
+    public void setThreadPoolRollingNumberStatisticalWindowInMilliseconds(String threadPoolRollingNumberStatisticalWindowInMilliseconds) {
         this.threadPoolRollingNumberStatisticalWindowInMilliseconds = threadPoolRollingNumberStatisticalWindowInMilliseconds;
     }
 
-    public Integer getThreadPoolRollingNumberStatisticalWindowBuckets() {
+    public String getThreadPoolRollingNumberStatisticalWindowBuckets() {
         return threadPoolRollingNumberStatisticalWindowBuckets;
     }
 
@@ -536,11 +536,11 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * passed into HystrixRollingNumber inside each HystrixThreadPoolMetrics
      * instance.
      */
-    public void setThreadPoolRollingNumberStatisticalWindowBuckets(Integer threadPoolRollingNumberStatisticalWindowBuckets) {
+    public void setThreadPoolRollingNumberStatisticalWindowBuckets(String threadPoolRollingNumberStatisticalWindowBuckets) {
         this.threadPoolRollingNumberStatisticalWindowBuckets = threadPoolRollingNumberStatisticalWindowBuckets;
     }
 
-    public Boolean getAllowMaximumSizeToDivergeFromCoreSize() {
+    public String getAllowMaximumSizeToDivergeFromCoreSize() {
         return allowMaximumSizeToDivergeFromCoreSize;
     }
 
@@ -548,7 +548,7 @@ public class HystrixConfigurationCommon extends IdentifiedType {
      * Allows the configuration for maximumSize to take effect. That value can
      * then be equal to, or higher, than coreSize
      */
-    public void setAllowMaximumSizeToDivergeFromCoreSize(Boolean allowMaximumSizeToDivergeFromCoreSize) {
+    public void setAllowMaximumSizeToDivergeFromCoreSize(String allowMaximumSizeToDivergeFromCoreSize) {
         this.allowMaximumSizeToDivergeFromCoreSize = allowMaximumSizeToDivergeFromCoreSize;
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java
index 45bf23f..a16b29e 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java
@@ -73,8 +73,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * continues tracking metrics and knowing whether it should be open/closed,
      * this property results in not even instantiating a circuit-breaker.
      */
-    public HystrixConfigurationDefinition circuitBreakerEnabled(Boolean circuitBreakerEnabled) {
-        setCircuitBreakerEnabled(circuitBreakerEnabled);
+    public HystrixConfigurationDefinition circuitBreakerEnabled(boolean circuitBreakerEnabled) {
+        setCircuitBreakerEnabled(Boolean.toString(circuitBreakerEnabled));
         return this;
     }
 
@@ -88,8 +88,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * The error percentage this is compared against comes from
      * HystrixCommandMetrics.getHealthCounts().
      */
-    public HystrixConfigurationDefinition circuitBreakerErrorThresholdPercentage(Integer circuitBreakerErrorThresholdPercentage) {
-        setCircuitBreakerErrorThresholdPercentage(circuitBreakerErrorThresholdPercentage);
+    public HystrixConfigurationDefinition circuitBreakerErrorThresholdPercentage(int circuitBreakerErrorThresholdPercentage) {
+        setCircuitBreakerErrorThresholdPercentage(Integer.toString(circuitBreakerErrorThresholdPercentage));
         return this;
     }
 
@@ -101,8 +101,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * The circuitBreakerForceOpen() property takes precedence so if it set to
      * true this property does nothing.
      */
-    public HystrixConfigurationDefinition circuitBreakerForceClosed(Boolean circuitBreakerForceClosed) {
-        setCircuitBreakerForceClosed(circuitBreakerForceClosed);
+    public HystrixConfigurationDefinition circuitBreakerForceClosed(boolean circuitBreakerForceClosed) {
+        setCircuitBreakerForceClosed(Boolean.toString(circuitBreakerForceClosed));
         return this;
     }
 
@@ -113,7 +113,7 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * This property takes precedence over circuitBreakerForceClosed();
      */
     public HystrixConfigurationDefinition circuitBreakerForceOpen(Boolean circuitBreakerForceOpen) {
-        setCircuitBreakerForceOpen(circuitBreakerForceOpen);
+        setCircuitBreakerForceOpen(Boolean.toString(circuitBreakerForceOpen));
         return this;
     }
 
@@ -125,8 +125,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * If below this number the circuit will not trip regardless of error
      * percentage.
      */
-    public HystrixConfigurationDefinition circuitBreakerRequestVolumeThreshold(Integer circuitBreakerRequestVolumeThreshold) {
-        setCircuitBreakerRequestVolumeThreshold(circuitBreakerRequestVolumeThreshold);
+    public HystrixConfigurationDefinition circuitBreakerRequestVolumeThreshold(int circuitBreakerRequestVolumeThreshold) {
+        setCircuitBreakerRequestVolumeThreshold(Integer.toString(circuitBreakerRequestVolumeThreshold));
         return this;
     }
 
@@ -134,8 +134,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * The time in milliseconds after a HystrixCircuitBreaker trips open that it
      * should wait before trying requests again.
      */
-    public HystrixConfigurationDefinition circuitBreakerSleepWindowInMilliseconds(Integer circuitBreakerSleepWindowInMilliseconds) {
-        setCircuitBreakerSleepWindowInMilliseconds(circuitBreakerSleepWindowInMilliseconds);
+    public HystrixConfigurationDefinition circuitBreakerSleepWindowInMilliseconds(int circuitBreakerSleepWindowInMilliseconds) {
+        setCircuitBreakerSleepWindowInMilliseconds(Integer.toString(circuitBreakerSleepWindowInMilliseconds));
         return this;
     }
 
@@ -145,8 +145,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * <p>
      * Applicable only when executionIsolationStrategy is SEMAPHORE.
      */
-    public HystrixConfigurationDefinition executionIsolationSemaphoreMaxConcurrentRequests(Integer executionIsolationSemaphoreMaxConcurrentRequests) {
-        setExecutionIsolationSemaphoreMaxConcurrentRequests(executionIsolationSemaphoreMaxConcurrentRequests);
+    public HystrixConfigurationDefinition executionIsolationSemaphoreMaxConcurrentRequests(int executionIsolationSemaphoreMaxConcurrentRequests) {
+        setExecutionIsolationSemaphoreMaxConcurrentRequests(Integer.toString(executionIsolationSemaphoreMaxConcurrentRequests));
         return this;
     }
 
@@ -170,8 +170,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * <p>
      * Applicable only when executionIsolationStrategy() is set to THREAD.
      */
-    public HystrixConfigurationDefinition executionIsolationThreadInterruptOnTimeout(Boolean executionIsolationThreadInterruptOnTimeout) {
-        setExecutionIsolationThreadInterruptOnTimeout(executionIsolationThreadInterruptOnTimeout);
+    public HystrixConfigurationDefinition executionIsolationThreadInterruptOnTimeout(boolean executionIsolationThreadInterruptOnTimeout) {
+        setExecutionIsolationThreadInterruptOnTimeout(Boolean.toString(executionIsolationThreadInterruptOnTimeout));
         return this;
     }
 
@@ -184,16 +184,16 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * is semaphore-isolated and a HystrixObservableCommand, that command will
      * get unsubscribed.
      */
-    public HystrixConfigurationDefinition executionTimeoutInMilliseconds(Integer executionTimeoutInMilliseconds) {
-        setExecutionTimeoutInMilliseconds(executionTimeoutInMilliseconds);
+    public HystrixConfigurationDefinition executionTimeoutInMilliseconds(int executionTimeoutInMilliseconds) {
+        setExecutionTimeoutInMilliseconds(Integer.toString(executionTimeoutInMilliseconds));
         return this;
     }
 
     /**
      * Whether the timeout mechanism is enabled for this command
      */
-    public HystrixConfigurationDefinition executionTimeoutEnabled(Boolean executionTimeoutEnabled) {
-        setExecutionTimeoutEnabled(executionTimeoutEnabled);
+    public HystrixConfigurationDefinition executionTimeoutEnabled(boolean executionTimeoutEnabled) {
+        setExecutionTimeoutEnabled(Boolean.toString(executionTimeoutEnabled));
         return this;
     }
 
@@ -202,8 +202,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * Requests beyond the concurrent limit will fail-fast and not attempt
      * retrieving a fallback.
      */
-    public HystrixConfigurationDefinition fallbackIsolationSemaphoreMaxConcurrentRequests(Integer fallbackIsolationSemaphoreMaxConcurrentRequests) {
-        setFallbackIsolationSemaphoreMaxConcurrentRequests(fallbackIsolationSemaphoreMaxConcurrentRequests);
+    public HystrixConfigurationDefinition fallbackIsolationSemaphoreMaxConcurrentRequests(int fallbackIsolationSemaphoreMaxConcurrentRequests) {
+        setFallbackIsolationSemaphoreMaxConcurrentRequests(Integer.toString(fallbackIsolationSemaphoreMaxConcurrentRequests));
         return this;
     }
 
@@ -211,8 +211,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * Whether HystrixCommand.getFallback() should be attempted when failure
      * occurs.
      */
-    public HystrixConfigurationDefinition fallbackEnabled(Boolean fallbackEnabled) {
-        setFallbackEnabled(fallbackEnabled);
+    public HystrixConfigurationDefinition fallbackEnabled(boolean fallbackEnabled) {
+        setFallbackEnabled(Boolean.toString(fallbackEnabled));
         return this;
     }
 
@@ -224,8 +224,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * On high-volume circuits the continual calculation of error percentage can
      * become CPU intensive thus this controls how often it is calculated.
      */
-    public HystrixConfigurationDefinition metricsHealthSnapshotIntervalInMilliseconds(Integer metricsHealthSnapshotIntervalInMilliseconds) {
-        setMetricsHealthSnapshotIntervalInMilliseconds(metricsHealthSnapshotIntervalInMilliseconds);
+    public HystrixConfigurationDefinition metricsHealthSnapshotIntervalInMilliseconds(int metricsHealthSnapshotIntervalInMilliseconds) {
+        setMetricsHealthSnapshotIntervalInMilliseconds(Integer.toString(metricsHealthSnapshotIntervalInMilliseconds));
         return this;
     }
 
@@ -234,8 +234,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * This is passed into HystrixRollingPercentile inside
      * HystrixCommandMetrics.
      */
-    public HystrixConfigurationDefinition metricsRollingPercentileBucketSize(Integer metricsRollingPercentileBucketSize) {
-        setMetricsRollingPercentileBucketSize(metricsRollingPercentileBucketSize);
+    public HystrixConfigurationDefinition metricsRollingPercentileBucketSize(int metricsRollingPercentileBucketSize) {
+        setMetricsRollingPercentileBucketSize(Integer.toString(metricsRollingPercentileBucketSize));
         return this;
     }
 
@@ -243,8 +243,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * Whether percentile metrics should be captured using
      * HystrixRollingPercentile inside HystrixCommandMetrics.
      */
-    public HystrixConfigurationDefinition metricsRollingPercentileEnabled(Boolean metricsRollingPercentileEnabled) {
-        setMetricsRollingPercentileEnabled(metricsRollingPercentileEnabled);
+    public HystrixConfigurationDefinition metricsRollingPercentileEnabled(boolean metricsRollingPercentileEnabled) {
+        setMetricsRollingPercentileEnabled(Boolean.toString(metricsRollingPercentileEnabled));
         return this;
     }
 
@@ -252,8 +252,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * Duration of percentile rolling window in milliseconds. This is passed
      * into HystrixRollingPercentile inside HystrixCommandMetrics.
      */
-    public HystrixConfigurationDefinition metricsRollingPercentileWindowInMilliseconds(Integer metricsRollingPercentileWindowInMilliseconds) {
-        setMetricsRollingPercentileWindowInMilliseconds(metricsRollingPercentileWindowInMilliseconds);
+    public HystrixConfigurationDefinition metricsRollingPercentileWindowInMilliseconds(int metricsRollingPercentileWindowInMilliseconds) {
+        setMetricsRollingPercentileWindowInMilliseconds(Integer.toString(metricsRollingPercentileWindowInMilliseconds));
         return this;
     }
 
@@ -261,8 +261,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * Number of buckets the rolling percentile window is broken into. This is
      * passed into HystrixRollingPercentile inside HystrixCommandMetrics.
      */
-    public HystrixConfigurationDefinition metricsRollingPercentileWindowBuckets(Integer metricsRollingPercentileWindowBuckets) {
-        setMetricsRollingPercentileWindowBuckets(metricsRollingPercentileWindowBuckets);
+    public HystrixConfigurationDefinition metricsRollingPercentileWindowBuckets(int metricsRollingPercentileWindowBuckets) {
+        setMetricsRollingPercentileWindowBuckets(Integer.toString(metricsRollingPercentileWindowBuckets));
         return this;
     }
 
@@ -271,8 +271,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * milliseconds. This is how long metrics are kept for the thread pool. The
      * window is divided into buckets and “rolls” by those increments.
      */
-    public HystrixConfigurationDefinition metricsRollingStatisticalWindowInMilliseconds(Integer metricsRollingStatisticalWindowInMilliseconds) {
-        setMetricsRollingStatisticalWindowInMilliseconds(metricsRollingStatisticalWindowInMilliseconds);
+    public HystrixConfigurationDefinition metricsRollingStatisticalWindowInMilliseconds(int metricsRollingStatisticalWindowInMilliseconds) {
+        setMetricsRollingStatisticalWindowInMilliseconds(Integer.toString(metricsRollingStatisticalWindowInMilliseconds));
         return this;
     }
 
@@ -280,8 +280,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * Number of buckets the rolling statistical window is broken into. This is
      * passed into HystrixRollingNumber inside HystrixCommandMetrics.
      */
-    public HystrixConfigurationDefinition metricsRollingStatisticalWindowBuckets(Integer metricsRollingStatisticalWindowBuckets) {
-        setMetricsRollingStatisticalWindowBuckets(metricsRollingStatisticalWindowBuckets);
+    public HystrixConfigurationDefinition metricsRollingStatisticalWindowBuckets(int metricsRollingStatisticalWindowBuckets) {
+        setMetricsRollingStatisticalWindowBuckets(Integer.toString(metricsRollingStatisticalWindowBuckets));
         return this;
     }
 
@@ -289,24 +289,24 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * Whether HystrixCommand execution and events should be logged to
      * HystrixRequestLog.
      */
-    public HystrixConfigurationDefinition requestLogEnabled(Boolean requestLogEnabled) {
-        setRequestLogEnabled(requestLogEnabled);
+    public HystrixConfigurationDefinition requestLogEnabled(boolean requestLogEnabled) {
+        setRequestLogEnabled(Boolean.toString(requestLogEnabled));
         return this;
     }
 
     /**
      * Core thread-pool size.
      */
-    public HystrixConfigurationDefinition corePoolSize(Integer corePoolSize) {
-        setCorePoolSize(corePoolSize);
+    public HystrixConfigurationDefinition corePoolSize(int corePoolSize) {
+        setCorePoolSize(Integer.toString(corePoolSize));
         return this;
     }
 
     /**
      * Keep-alive time in minutes.
      */
-    public HystrixConfigurationDefinition keepAliveTime(Integer keepAliveTime) {
-        setKeepAliveTime(keepAliveTime);
+    public HystrixConfigurationDefinition keepAliveTime(int keepAliveTime) {
+        setKeepAliveTime(Integer.toString(keepAliveTime));
         return this;
     }
 
@@ -314,8 +314,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * Max queue size. This should only affect the instantiation of the
      * thread-pool - it is not eligible to change a queue size on the fly.
      */
-    public HystrixConfigurationDefinition maxQueueSize(Integer maxQueueSize) {
-        setMaxQueueSize(maxQueueSize);
+    public HystrixConfigurationDefinition maxQueueSize(int maxQueueSize) {
+        setMaxQueueSize(Integer.toString(maxQueueSize));
         return this;
     }
 
@@ -326,8 +326,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * HystrixCommands. Please note that this setting only takes effect if you
      * also set allowMaximumSizeToDivergeFromCoreSize
      */
-    public HystrixConfigurationDefinition maximumSize(Integer maximumSize) {
-        setMaximumSize(maximumSize);
+    public HystrixConfigurationDefinition maximumSize(int maximumSize) {
+        setMaximumSize(Integer.toString(maximumSize));
         return this;
     }
 
@@ -340,8 +340,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * <p>
      * This is used by HystrixCommand when queuing a thread for execution.
      */
-    public HystrixConfigurationDefinition queueSizeRejectionThreshold(Integer queueSizeRejectionThreshold) {
-        setQueueSizeRejectionThreshold(queueSizeRejectionThreshold);
+    public HystrixConfigurationDefinition queueSizeRejectionThreshold(int queueSizeRejectionThreshold) {
+        setQueueSizeRejectionThreshold(Integer.toString(queueSizeRejectionThreshold));
         return this;
     }
 
@@ -349,8 +349,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * Duration of statistical rolling window in milliseconds. This is passed
      * into HystrixRollingNumber inside each HystrixThreadPoolMetrics instance.
      */
-    public HystrixConfigurationDefinition threadPoolRollingNumberStatisticalWindowInMilliseconds(Integer threadPoolRollingNumberStatisticalWindowInMilliseconds) {
-        setThreadPoolRollingNumberStatisticalWindowInMilliseconds(threadPoolRollingNumberStatisticalWindowInMilliseconds);
+    public HystrixConfigurationDefinition threadPoolRollingNumberStatisticalWindowInMilliseconds(int threadPoolRollingNumberStatisticalWindowInMilliseconds) {
+        setThreadPoolRollingNumberStatisticalWindowInMilliseconds(Integer.toString(threadPoolRollingNumberStatisticalWindowInMilliseconds));
         return this;
     }
 
@@ -359,8 +359,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * passed into HystrixRollingNumber inside each HystrixThreadPoolMetrics
      * instance.
      */
-    public HystrixConfigurationDefinition threadPoolRollingNumberStatisticalWindowBuckets(Integer threadPoolRollingNumberStatisticalWindowBuckets) {
-        setThreadPoolRollingNumberStatisticalWindowBuckets(threadPoolRollingNumberStatisticalWindowBuckets);
+    public HystrixConfigurationDefinition threadPoolRollingNumberStatisticalWindowBuckets(int threadPoolRollingNumberStatisticalWindowBuckets) {
+        setThreadPoolRollingNumberStatisticalWindowBuckets(Integer.toString(threadPoolRollingNumberStatisticalWindowBuckets));
         return this;
     }
 
@@ -368,8 +368,8 @@ public class HystrixConfigurationDefinition extends HystrixConfigurationCommon {
      * Allows the configuration for maximumSize to take effect. That value can
      * then be equal to, or higher, than coreSize
      */
-    public HystrixConfigurationDefinition allowMaximumSizeToDivergeFromCoreSize(Boolean allowMaximumSizeToDivergeFromCoreSize) {
-        setAllowMaximumSizeToDivergeFromCoreSize(allowMaximumSizeToDivergeFromCoreSize);
+    public HystrixConfigurationDefinition allowMaximumSizeToDivergeFromCoreSize(boolean allowMaximumSizeToDivergeFromCoreSize) {
+        setAllowMaximumSizeToDivergeFromCoreSize(Boolean.toString(allowMaximumSizeToDivergeFromCoreSize));
         return this;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java
index 6e1e565..fee98fc 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java
@@ -41,15 +41,15 @@ public class IdempotentConsumerDefinition extends OutputExpressionNode {
     private String messageIdRepositoryRef;
     @XmlAttribute
     @Metadata(defaultValue = "true")
-    private Boolean eager;
+    private String eager;
     @XmlAttribute
-    private Boolean completionEager;
+    private String completionEager;
     @XmlAttribute
     @Metadata(defaultValue = "true")
-    private Boolean skipDuplicate;
+    private String skipDuplicate;
     @XmlAttribute
     @Metadata(defaultValue = "true")
-    private Boolean removeOnFailure;
+    private String removeOnFailure;
     @XmlTransient
     private IdempotentRepository idempotentRepository;
 
@@ -121,7 +121,7 @@ public class IdempotentConsumerDefinition extends OutputExpressionNode {
      * @return builder
      */
     public IdempotentConsumerDefinition eager(boolean eager) {
-        setEager(eager);
+        setEager(Boolean.toString(eager));
         return this;
     }
 
@@ -147,7 +147,7 @@ public class IdempotentConsumerDefinition extends OutputExpressionNode {
      * @return builder
      */
     public IdempotentConsumerDefinition completionEager(boolean completionEager) {
-        setCompletionEager(completionEager);
+        setCompletionEager(Boolean.toString(completionEager));
         return this;
     }
 
@@ -161,7 +161,7 @@ public class IdempotentConsumerDefinition extends OutputExpressionNode {
      * @return builder
      */
     public IdempotentConsumerDefinition removeOnFailure(boolean removeOnFailure) {
-        setRemoveOnFailure(removeOnFailure);
+        setRemoveOnFailure(Boolean.toString(removeOnFailure));
         return this;
     }
 
@@ -180,7 +180,7 @@ public class IdempotentConsumerDefinition extends OutputExpressionNode {
      * @return builder
      */
     public IdempotentConsumerDefinition skipDuplicate(boolean skipDuplicate) {
-        setSkipDuplicate(skipDuplicate);
+        setSkipDuplicate(Boolean.toString(skipDuplicate));
         return this;
     }
 
@@ -211,35 +211,35 @@ public class IdempotentConsumerDefinition extends OutputExpressionNode {
         this.idempotentRepository = idempotentRepository;
     }
 
-    public Boolean getEager() {
+    public String getEager() {
         return eager;
     }
 
-    public void setEager(Boolean eager) {
+    public void setEager(String eager) {
         this.eager = eager;
     }
 
-    public Boolean getSkipDuplicate() {
+    public String getSkipDuplicate() {
         return skipDuplicate;
     }
 
-    public void setSkipDuplicate(Boolean skipDuplicate) {
+    public void setSkipDuplicate(String skipDuplicate) {
         this.skipDuplicate = skipDuplicate;
     }
 
-    public Boolean getRemoveOnFailure() {
+    public String getRemoveOnFailure() {
         return removeOnFailure;
     }
 
-    public void setRemoveOnFailure(Boolean removeOnFailure) {
+    public void setRemoveOnFailure(String removeOnFailure) {
         this.removeOnFailure = removeOnFailure;
     }
 
-    public Boolean getCompletionEager() {
+    public String getCompletionEager() {
         return completionEager;
     }
 
-    public void setCompletionEager(Boolean completionEager) {
+    public void setCompletionEager(String completionEager) {
         this.completionEager = completionEager;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/InOnlyDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/InOnlyDefinition.java
index e03d60b..b7313a1 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/InOnlyDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/InOnlyDefinition.java
@@ -59,7 +59,7 @@ public class InOnlyDefinition extends SendDefinition<InOnlyDefinition> {
     }
 
     @Override
-    public ExchangePattern getPattern() {
-        return ExchangePattern.InOnly;
+    public String getPattern() {
+        return ExchangePattern.InOnly.name();
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/InOutDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/InOutDefinition.java
index a7a3ebd..65e9e45 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/InOutDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/InOutDefinition.java
@@ -59,7 +59,7 @@ public class InOutDefinition extends SendDefinition<InOutDefinition> {
     }
 
     @Override
-    public ExchangePattern getPattern() {
-        return ExchangePattern.InOut;
+    public String getPattern() {
+        return ExchangePattern.InOut.name();
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/InputTypeDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/InputTypeDefinition.java
index ff0de02..b2d4c8b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/InputTypeDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/InputTypeDefinition.java
@@ -45,11 +45,26 @@ public class InputTypeDefinition extends OptionalIdentifiedDefinition<InputTypeD
     private String urn;
     @XmlAttribute
     @Metadata(defaultValue = "false")
-    private Boolean validate = false;
+    private String validate = "false";
 
     public InputTypeDefinition() {
     }
 
+    public InputTypeDefinition urn(String urn) {
+        setUrn(urn);
+        return this;
+    }
+
+    public InputTypeDefinition javaClass(Class<?> clazz) {
+        setJavaClass(clazz);
+        return this;
+    }
+
+    public InputTypeDefinition validate(boolean validate) {
+        setValidate(Boolean.toString(validate));
+        return this;
+    }
+
     /**
      * Get input type URN.
      * 
@@ -82,7 +97,7 @@ public class InputTypeDefinition extends OptionalIdentifiedDefinition<InputTypeD
      * 
      * @return true if validate
      */
-    public boolean isValidate() {
+    public String getValidate() {
         return this.validate;
     }
 
@@ -91,7 +106,7 @@ public class InputTypeDefinition extends OptionalIdentifiedDefinition<InputTypeD
      * 
      * @param validate true if validate
      */
-    public void setValidate(boolean validate) {
+    public void setValidate(String validate) {
         this.validate = validate;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java
index ba2cc2f..1cb0d13 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/InterceptSendToEndpointDefinition.java
@@ -36,7 +36,7 @@ public class InterceptSendToEndpointDefinition extends OutputDefinition<Intercep
     @XmlAttribute(required = true)
     private String uri;
     @XmlAttribute
-    private Boolean skipSendToOriginalEndpoint;
+    private String skipSendToOriginalEndpoint;
     @XmlAttribute
     private String afterUri;
 
@@ -91,7 +91,7 @@ public class InterceptSendToEndpointDefinition extends OutputDefinition<Intercep
      * @return the builder
      */
     public InterceptSendToEndpointDefinition skipSendToOriginalEndpoint() {
-        setSkipSendToOriginalEndpoint(Boolean.TRUE);
+        setSkipSendToOriginalEndpoint(Boolean.toString(true));
         return this;
     }
 
@@ -150,7 +150,7 @@ public class InterceptSendToEndpointDefinition extends OutputDefinition<Intercep
         }
     }
 
-    public Boolean getSkipSendToOriginalEndpoint() {
+    public String getSkipSendToOriginalEndpoint() {
         return skipSendToOriginalEndpoint;
     }
 
@@ -159,7 +159,7 @@ public class InterceptSendToEndpointDefinition extends OutputDefinition<Intercep
      * default (false) the message is both intercepted and then sent to the
      * original endpoint.
      */
-    public void setSkipSendToOriginalEndpoint(Boolean skipSendToOriginalEndpoint) {
+    public void setSkipSendToOriginalEndpoint(String skipSendToOriginalEndpoint) {
         this.skipSendToOriginalEndpoint = skipSendToOriginalEndpoint;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java
index 7f57160..5fa0735 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/LoadBalanceDefinition.java
@@ -19,6 +19,7 @@ package org.apache.camel.model;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
@@ -37,7 +38,6 @@ import org.apache.camel.model.loadbalancer.TopicLoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.WeightedLoadBalancerDefinition;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.util.CollectionStringBuffer;
 
 /**
  * Balances message processing among a number of nodes
@@ -167,9 +167,9 @@ public class LoadBalanceDefinition extends ProcessorDefinition<LoadBalanceDefini
     public LoadBalanceDefinition failover(int maximumFailoverAttempts, boolean inheritErrorHandler, boolean roundRobin, boolean sticky, Class<?>... exceptions) {
         FailoverLoadBalancerDefinition def = new FailoverLoadBalancerDefinition();
         def.setExceptionTypes(Arrays.asList(exceptions));
-        def.setMaximumFailoverAttempts(maximumFailoverAttempts);
-        def.setRoundRobin(roundRobin);
-        def.setSticky(sticky);
+        def.setMaximumFailoverAttempts(Integer.toString(maximumFailoverAttempts));
+        def.setRoundRobin(Boolean.toString(roundRobin));
+        def.setSticky(Boolean.toString(sticky));
         setLoadBalancerType(def);
         this.setInheritErrorHandler(inheritErrorHandler);
         return this;
@@ -199,7 +199,7 @@ public class LoadBalanceDefinition extends ProcessorDefinition<LoadBalanceDefini
      */
     public LoadBalanceDefinition weighted(boolean roundRobin, String distributionRatio, String distributionRatioDelimiter) {
         WeightedLoadBalancerDefinition def = new WeightedLoadBalancerDefinition();
-        def.setRoundRobin(roundRobin);
+        def.setRoundRobin(Boolean.toString(roundRobin));
         def.setDistributionRatio(distributionRatio);
         def.setDistributionRatioDelimiter(distributionRatioDelimiter);
         setLoadBalancerType(def);
@@ -270,13 +270,8 @@ public class LoadBalanceDefinition extends ProcessorDefinition<LoadBalanceDefini
 
     @Override
     public String getLabel() {
-        CollectionStringBuffer buffer = new CollectionStringBuffer("loadBalance[");
-        List<ProcessorDefinition<?>> list = getOutputs();
-        for (ProcessorDefinition<?> processorType : list) {
-            buffer.append(processorType.getLabel());
-        }
-        buffer.append("]");
-        return buffer.toString();
+        return getOutputs().stream().map(ProcessorDefinition::getLabel)
+                .collect(Collectors.joining(",", getShortName() + "[", "]"));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/LogDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/LogDefinition.java
index 856a0ae..59597db 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/LogDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/LogDefinition.java
@@ -38,7 +38,7 @@ public class LogDefinition extends NoOutputDefinition<LogDefinition> {
     private String message;
     @XmlAttribute
     @Metadata(defaultValue = "INFO")
-    private LoggingLevel loggingLevel;
+    private String loggingLevel;
     @XmlAttribute
     private String logName;
     @XmlAttribute
@@ -71,7 +71,7 @@ public class LogDefinition extends NoOutputDefinition<LogDefinition> {
         return "log";
     }
 
-    public LoggingLevel getLoggingLevel() {
+    public String getLoggingLevel() {
         return loggingLevel;
     }
 
@@ -80,7 +80,7 @@ public class LogDefinition extends NoOutputDefinition<LogDefinition> {
      * <p/>
      * The default value is INFO
      */
-    public void setLoggingLevel(LoggingLevel loggingLevel) {
+    public void setLoggingLevel(String loggingLevel) {
         this.loggingLevel = loggingLevel;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/LoopDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/LoopDefinition.java
index 30dafc2..465f816 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/LoopDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/LoopDefinition.java
@@ -35,9 +35,9 @@ import org.apache.camel.spi.Metadata;
 public class LoopDefinition extends OutputExpressionNode {
 
     @XmlAttribute
-    private Boolean copy;
+    private String copy;
     @XmlAttribute
-    private Boolean doWhile;
+    private String doWhile;
 
     public LoopDefinition() {
     }
@@ -48,7 +48,7 @@ public class LoopDefinition extends OutputExpressionNode {
 
     public LoopDefinition(Predicate predicate) {
         super(predicate);
-        setDoWhile(true);
+        setDoWhile(Boolean.toString(true));
     }
 
     public LoopDefinition(ExpressionDefinition expression) {
@@ -62,15 +62,15 @@ public class LoopDefinition extends OutputExpressionNode {
      * @return the builder
      */
     public LoopDefinition copy() {
-        setCopy(true);
+        setCopy(Boolean.toString(true));
         return this;
     }
 
-    public Boolean getCopy() {
+    public String getCopy() {
         return copy;
     }
 
-    public Boolean getDoWhile() {
+    public String getDoWhile() {
         return doWhile;
     }
 
@@ -78,7 +78,7 @@ public class LoopDefinition extends OutputExpressionNode {
      * Enables the while loop that loops until the predicate evaluates to false
      * or null.
      */
-    public void setDoWhile(Boolean doWhile) {
+    public void setDoWhile(String doWhile) {
         this.doWhile = doWhile;
     }
 
@@ -90,7 +90,7 @@ public class LoopDefinition extends OutputExpressionNode {
      * By default loop will loop the same exchange all over, so each iteration
      * may have different message content.
      */
-    public void setCopy(Boolean copy) {
+    public void setCopy(String copy) {
         this.copy = copy;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/MulticastDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/MulticastDefinition.java
index 8a72687..937491d 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/MulticastDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/MulticastDefinition.java
@@ -39,24 +39,24 @@ import org.apache.camel.spi.Metadata;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class MulticastDefinition extends OutputDefinition<MulticastDefinition> implements ExecutorServiceAwareDefinition<MulticastDefinition> {
     @XmlAttribute
-    private Boolean parallelProcessing;
+    private String parallelProcessing;
     @XmlAttribute
     private String strategyRef;
     @XmlAttribute
     private String strategyMethodName;
     @XmlAttribute
-    private Boolean strategyMethodAllowNull;
+    private String strategyMethodAllowNull;
     @XmlTransient
     private ExecutorService executorService;
     @XmlAttribute
     private String executorServiceRef;
     @XmlAttribute
-    private Boolean streaming;
+    private String streaming;
     @XmlAttribute
-    private Boolean stopOnException;
+    private String stopOnException;
     @XmlAttribute
     @Metadata(defaultValue = "0")
-    private Long timeout;
+    private String timeout;
     @XmlTransient
     private AggregationStrategy aggregationStrategy;
     @XmlAttribute
@@ -64,11 +64,11 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
     @XmlTransient
     private Processor onPrepare;
     @XmlAttribute
-    private Boolean shareUnitOfWork;
+    private String shareUnitOfWork;
     @XmlAttribute
-    private Boolean parallelAggregate;
+    private String parallelAggregate;
     @XmlAttribute
-    private Boolean stopOnAggregateException;
+    private String stopOnAggregateException;
 
     public MulticastDefinition() {
     }
@@ -166,7 +166,7 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
      * @return the builder
      */
     public MulticastDefinition aggregationStrategyMethodAllowNull() {
-        setStrategyMethodAllowNull(true);
+        setStrategyMethodAllowNull(Boolean.toString(true));
         return this;
     }
 
@@ -179,7 +179,7 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
      * @return the builder
      */
     public MulticastDefinition parallelProcessing() {
-        setParallelProcessing(true);
+        setParallelProcessing(Boolean.toString(true));
         return this;
     }
 
@@ -192,7 +192,7 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
      * @return the builder
      */
     public MulticastDefinition parallelProcessing(boolean parallelProcessing) {
-        setParallelProcessing(parallelProcessing);
+        setParallelProcessing(Boolean.toString(parallelProcessing));
         return this;
     }
 
@@ -207,7 +207,7 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
      * @return the builder
      */
     public MulticastDefinition parallelAggregate() {
-        setParallelAggregate(true);
+        setParallelAggregate(Boolean.toString(true));
         return this;
     }
 
@@ -222,7 +222,7 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
      * @return the builder
      */
     public MulticastDefinition stopOnAggregateException() {
-        setStopOnAggregateException(true);
+        setStopOnAggregateException(Boolean.toString(true));
         return this;
     }
 
@@ -234,7 +234,7 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
      * @return the builder
      */
     public MulticastDefinition streaming() {
-        setStreaming(true);
+        setStreaming(Boolean.toString(true));
         return this;
     }
 
@@ -255,7 +255,7 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
      * @return the builder
      */
     public MulticastDefinition stopOnException() {
-        setStopOnException(true);
+        setStopOnException(Boolean.toString(true));
         return this;
     }
 
@@ -349,7 +349,7 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
      * @return the builder
      */
     public MulticastDefinition timeout(long timeout) {
-        setTimeout(timeout);
+        setTimeout(Long.toString(timeout));
         return this;
     }
 
@@ -362,7 +362,7 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
      * @return the builder.
      */
     public MulticastDefinition shareUnitOfWork() {
-        setShareUnitOfWork(true);
+        setShareUnitOfWork(Boolean.toString(true));
         return this;
     }
 
@@ -375,27 +375,27 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
         return this;
     }
 
-    public Boolean getParallelProcessing() {
+    public String getParallelProcessing() {
         return parallelProcessing;
     }
 
-    public void setParallelProcessing(Boolean parallelProcessing) {
+    public void setParallelProcessing(String parallelProcessing) {
         this.parallelProcessing = parallelProcessing;
     }
 
-    public Boolean getStreaming() {
+    public String getStreaming() {
         return streaming;
     }
 
-    public void setStreaming(Boolean streaming) {
+    public void setStreaming(String streaming) {
         this.streaming = streaming;
     }
 
-    public Boolean getStopOnException() {
+    public String getStopOnException() {
         return stopOnException;
     }
 
-    public void setStopOnException(Boolean stopOnException) {
+    public void setStopOnException(String stopOnException) {
         this.stopOnException = stopOnException;
     }
 
@@ -435,7 +435,7 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
         this.strategyMethodName = strategyMethodName;
     }
 
-    public Boolean getStrategyMethodAllowNull() {
+    public String getStrategyMethodAllowNull() {
         return strategyMethodAllowNull;
     }
 
@@ -445,7 +445,7 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
      * the oldExchange (when no data to enrich), when using POJOs as the
      * AggregationStrategy
      */
-    public void setStrategyMethodAllowNull(Boolean strategyMethodAllowNull) {
+    public void setStrategyMethodAllowNull(String strategyMethodAllowNull) {
         this.strategyMethodAllowNull = strategyMethodAllowNull;
     }
 
@@ -464,11 +464,11 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
         this.executorServiceRef = executorServiceRef;
     }
 
-    public Long getTimeout() {
+    public String getTimeout() {
         return timeout;
     }
 
-    public void setTimeout(Long timeout) {
+    public void setTimeout(String timeout) {
         this.timeout = timeout;
     }
 
@@ -488,27 +488,27 @@ public class MulticastDefinition extends OutputDefinition<MulticastDefinition> i
         this.onPrepare = onPrepare;
     }
 
-    public Boolean getShareUnitOfWork() {
+    public String getShareUnitOfWork() {
         return shareUnitOfWork;
     }
 
-    public void setShareUnitOfWork(Boolean shareUnitOfWork) {
+    public void setShareUnitOfWork(String shareUnitOfWork) {
         this.shareUnitOfWork = shareUnitOfWork;
     }
 
-    public Boolean getParallelAggregate() {
+    public String getParallelAggregate() {
         return parallelAggregate;
     }
 
-    public void setParallelAggregate(Boolean parallelAggregate) {
+    public void setParallelAggregate(String parallelAggregate) {
         this.parallelAggregate = parallelAggregate;
     }
 
-    public Boolean getStopOnAggregateException() {
+    public String getStopOnAggregateException() {
         return stopOnAggregateException;
     }
 
-    public void setStopOnAggregateException(Boolean stopOnAggregateException) {
+    public void setStopOnAggregateException(String stopOnAggregateException) {
         this.stopOnAggregateException = stopOnAggregateException;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/OnCompletionDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
index cd445b1..f82d93f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
@@ -43,18 +43,18 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
     @Metadata(defaultValue = "AfterConsumer")
     private OnCompletionMode mode;
     @XmlAttribute
-    private Boolean onCompleteOnly;
+    private String onCompleteOnly;
     @XmlAttribute
-    private Boolean onFailureOnly;
+    private String onFailureOnly;
     @XmlElement(name = "onWhen")
     @AsPredicate
     private WhenDefinition onWhen;
     @XmlAttribute
-    private Boolean parallelProcessing;
+    private String parallelProcessing;
     @XmlAttribute
     private String executorServiceRef;
     @XmlAttribute(name = "useOriginalMessage")
-    private Boolean useOriginalMessagePolicy;
+    private String useOriginalMessage;
     @XmlElementRef
     private List<ProcessorDefinition<?>> outputs = new ArrayList<>();
     @XmlTransient
@@ -156,15 +156,15 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
      * @return the builder
      */
     public OnCompletionDefinition onCompleteOnly() {
-        boolean isOnFailureOnly = getOnFailureOnly() != null && getOnFailureOnly();
+        boolean isOnFailureOnly = Boolean.toString(true).equals(onFailureOnly);
         if (isOnFailureOnly) {
             throw new IllegalArgumentException("Both onCompleteOnly and onFailureOnly cannot be true. Only one of them can be true. On node: " + this);
         }
         // must define return type as OutputDefinition and not this type to
         // avoid end user being able
         // to invoke onFailureOnly/onCompleteOnly more than once
-        setOnCompleteOnly(Boolean.TRUE);
-        setOnFailureOnly(Boolean.FALSE);
+        setOnCompleteOnly(Boolean.toString(true));
+        setOnFailureOnly(Boolean.toString(false));
         return this;
     }
 
@@ -175,15 +175,15 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
      * @return the builder
      */
     public OnCompletionDefinition onFailureOnly() {
-        boolean isOnCompleteOnly = getOnCompleteOnly() != null && getOnCompleteOnly();
+        boolean isOnCompleteOnly = Boolean.toString(true).equals(onCompleteOnly);
         if (isOnCompleteOnly) {
             throw new IllegalArgumentException("Both onCompleteOnly and onFailureOnly cannot be true. Only one of them can be true. On node: " + this);
         }
         // must define return type as OutputDefinition and not this type to
         // avoid end user being able
         // to invoke onFailureOnly/onCompleteOnly more than once
-        setOnCompleteOnly(Boolean.FALSE);
-        setOnFailureOnly(Boolean.TRUE);
+        setOnCompleteOnly(Boolean.toString(false));
+        setOnFailureOnly(Boolean.toString(true));
         return this;
     }
 
@@ -211,7 +211,7 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
      * @return the builder
      */
     public OnCompletionDefinition useOriginalBody() {
-        setUseOriginalMessagePolicy(Boolean.TRUE);
+        setUseOriginalMessage(Boolean.toString(true));
         return this;
     }
 
@@ -246,7 +246,7 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
      * @return the builder
      */
     public OnCompletionDefinition parallelProcessing() {
-        setParallelProcessing(true);
+        setParallelProcessing(Boolean.toString(true));
         return this;
     }
 
@@ -259,7 +259,7 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
      * @return the builder
      */
     public OnCompletionDefinition parallelProcessing(boolean parallelProcessing) {
-        setParallelProcessing(parallelProcessing);
+        setParallelProcessing(Boolean.toString(parallelProcessing));
         return this;
     }
 
@@ -285,19 +285,19 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
         this.mode = mode;
     }
 
-    public Boolean getOnCompleteOnly() {
+    public String getOnCompleteOnly() {
         return onCompleteOnly;
     }
 
-    public void setOnCompleteOnly(Boolean onCompleteOnly) {
+    public void setOnCompleteOnly(String onCompleteOnly) {
         this.onCompleteOnly = onCompleteOnly;
     }
 
-    public Boolean getOnFailureOnly() {
+    public String getOnFailureOnly() {
         return onFailureOnly;
     }
 
-    public void setOnFailureOnly(Boolean onFailureOnly) {
+    public void setOnFailureOnly(String onFailureOnly) {
         this.onFailureOnly = onFailureOnly;
     }
 
@@ -329,8 +329,8 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
         this.executorServiceRef = executorServiceRef;
     }
 
-    public Boolean getUseOriginalMessagePolicy() {
-        return useOriginalMessagePolicy;
+    public String getUseOriginalMessage() {
+        return useOriginalMessage;
     }
 
     /**
@@ -339,15 +339,15 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi
      * <p/>
      * By default this feature is off.
      */
-    public void setUseOriginalMessagePolicy(Boolean useOriginalMessagePolicy) {
-        this.useOriginalMessagePolicy = useOriginalMessagePolicy;
+    public void setUseOriginalMessage(String useOriginalMessage) {
+        this.useOriginalMessage = useOriginalMessage;
     }
 
-    public Boolean getParallelProcessing() {
+    public String getParallelProcessing() {
         return parallelProcessing;
     }
 
-    public void setParallelProcessing(Boolean parallelProcessing) {
+    public void setParallelProcessing(String parallelProcessing) {
         this.parallelProcessing = parallelProcessing;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/OnExceptionDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
index b2df247..a842798 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
@@ -69,9 +69,9 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
     @XmlAttribute(name = "onExceptionOccurredRef")
     private String onExceptionOccurredRef;
     @XmlAttribute(name = "useOriginalMessage")
-    private Boolean useOriginalMessagePolicy;
+    private String useOriginalMessage;
     @XmlAttribute(name = "useOriginalBody")
-    private Boolean useOriginalBodyPolicy;
+    private String useOriginalBody;
     @XmlElementRef
     private List<ProcessorDefinition<?>> outputs = new ArrayList<>();
     @XmlTransient
@@ -155,7 +155,8 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
         }
 
         // you cannot turn on both of them
-        if (useOriginalMessagePolicy != null && useOriginalMessagePolicy && useOriginalBodyPolicy != null && useOriginalBodyPolicy) {
+        if (Boolean.toString(true).equals(useOriginalMessage)
+                && Boolean.toString(true).equals(useOriginalBody)) {
             throw new IllegalArgumentException("Cannot set both useOriginalMessage and useOriginalBody on: " + this);
         }
 
@@ -163,7 +164,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
         // onException(Exception.class);
         if (outputs == null || getOutputs().isEmpty()) {
             // no outputs so there should be some sort of configuration
-            ObjectHelper.firstNotNull(handledPolicy, continuedPolicy, retryWhilePolicy, redeliveryPolicyType, useOriginalMessagePolicy, useOriginalBodyPolicy, onRedeliveryRef,
+            ObjectHelper.firstNotNull(handledPolicy, continuedPolicy, retryWhilePolicy, redeliveryPolicyType, useOriginalMessage, useOriginalBody, onRedeliveryRef,
                                       onRedelivery, onExceptionOccurred)
                 .orElseThrow(() -> new IllegalArgumentException(this + " is not configured."));
         }
@@ -695,7 +696,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
      * @see #useOriginalBody()
      */
     public OnExceptionDefinition useOriginalMessage() {
-        setUseOriginalMessagePolicy(Boolean.TRUE);
+        setUseOriginalMessage(Boolean.toString(true));
         return this;
     }
 
@@ -744,7 +745,7 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
      * @see #useOriginalMessage()
      */
     public OnExceptionDefinition useOriginalBody() {
-        setUseOriginalBodyPolicy(Boolean.TRUE);
+        setUseOriginalBody(Boolean.toString(true));
         return this;
     }
 
@@ -929,20 +930,20 @@ public class OnExceptionDefinition extends ProcessorDefinition<OnExceptionDefini
         this.onExceptionOccurredRef = onExceptionOccurredRef;
     }
 
-    public Boolean getUseOriginalMessagePolicy() {
-        return useOriginalMessagePolicy;
+    public String getUseOriginalMessage() {
+        return useOriginalMessage;
     }
 
-    public void setUseOriginalMessagePolicy(Boolean useOriginalMessagePolicy) {
-        this.useOriginalMessagePolicy = useOriginalMessagePolicy;
+    public void setUseOriginalMessage(String useOriginalMessage) {
+        this.useOriginalMessage = useOriginalMessage;
     }
 
-    public Boolean getUseOriginalBodyPolicy() {
-        return useOriginalBodyPolicy;
+    public String getUseOriginalBody() {
+        return useOriginalBody;
     }
 
-    public void setUseOriginalBodyPolicy(Boolean useOriginalBodyPolicy) {
-        this.useOriginalBodyPolicy = useOriginalBodyPolicy;
+    public void setUseOriginalBody(String useOriginalBody) {
+        this.useOriginalBody = useOriginalBody;
     }
 
     // Implementation methods
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/OnFallbackDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/OnFallbackDefinition.java
index 9dab082..29e2f5e 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/OnFallbackDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/OnFallbackDefinition.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
@@ -24,7 +25,6 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.util.CollectionStringBuffer;
 
 /**
  * Route to be executed when Hystrix EIP executes fallback
@@ -36,17 +36,19 @@ public class OnFallbackDefinition extends OutputDefinition<OnFallbackDefinition>
 
     @XmlAttribute
     @Metadata(label = "command", defaultValue = "false")
-    private Boolean fallbackViaNetwork;
+    private String fallbackViaNetwork;
 
     public OnFallbackDefinition() {
     }
 
     @Override
     public String toString() {
-        if (fallbackViaNetwork != null && fallbackViaNetwork) {
+        if (Boolean.toString(true).equals(fallbackViaNetwork)) {
             return "OnFallbackViaNetwork[" + getOutputs() + "]";
+        } else if (fallbackViaNetwork == null || Boolean.toString(false).equals(fallbackViaNetwork)) {
+            return "OnFallback["  + getOutputs() + "]";
         } else {
-            return "OnFallback[" + getOutputs() + "]";
+            return "OnFallback[viaNetwork=" + fallbackViaNetwork + "," + getOutputs() + "]";
         }
     }
 
@@ -57,18 +59,19 @@ public class OnFallbackDefinition extends OutputDefinition<OnFallbackDefinition>
 
     @Override
     public String getLabel() {
-        String name = fallbackViaNetwork != null && fallbackViaNetwork ? "onFallbackViaNetwork" : "onFallback";
-        CollectionStringBuffer buffer = new CollectionStringBuffer(name);
-        buffer.append("[");
-        List<ProcessorDefinition<?>> list = getOutputs();
-        for (ProcessorDefinition<?> type : list) {
-            buffer.append(type.getLabel());
+        String name;
+        if (Boolean.toString(true).equals(fallbackViaNetwork)) {
+            name = "OnFallbackViaNetwork";
+        } else if (fallbackViaNetwork == null || Boolean.toString(false).equals(fallbackViaNetwork)) {
+            name = "onFallback";
+        } else {
+            name = "onFallback(viaNetwork=" + fallbackViaNetwork + ")";
         }
-        buffer.append("]");
-        return buffer.toString();
+        return getOutputs().stream().map(ProcessorDefinition::getLabel)
+                .collect(Collectors.joining(",", name + "[", "]"));
     }
 
-    public Boolean getFallbackViaNetwork() {
+    public String getFallbackViaNetwork() {
         return fallbackViaNetwork;
     }
 
@@ -82,13 +85,8 @@ public class OnFallbackDefinition extends OutputDefinition<OnFallbackDefinition>
      * thread-pool this would prevent the fallback from running if the two
      * commands share the same pool.
      */
-    public void setFallbackViaNetwork(Boolean fallbackViaNetwork) {
+    public void setFallbackViaNetwork(String fallbackViaNetwork) {
         this.fallbackViaNetwork = fallbackViaNetwork;
     }
 
-    public boolean isFallbackViaNetwork() {
-        // is default false
-        return fallbackViaNetwork != null && fallbackViaNetwork;
-    }
-
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/OptimisticLockRetryPolicyDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/OptimisticLockRetryPolicyDefinition.java
index 370cb65..7c143b3 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/OptimisticLockRetryPolicyDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/OptimisticLockRetryPolicyDefinition.java
@@ -31,18 +31,18 @@ import org.apache.camel.spi.Metadata;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class OptimisticLockRetryPolicyDefinition {
     @XmlAttribute
-    private Integer maximumRetries;
+    private String maximumRetries;
     @XmlAttribute
     @Metadata(defaultValue = "50")
-    private Long retryDelay;
+    private String retryDelay;
     @XmlAttribute
     @Metadata(defaultValue = "1000")
-    private Long maximumRetryDelay;
+    private String maximumRetryDelay;
     @XmlAttribute
     @Metadata(defaultValue = "true")
-    private Boolean exponentialBackOff;
+    private String exponentialBackOff;
     @XmlAttribute
-    private Boolean randomBackOff;
+    private String randomBackOff;
 
     public OptimisticLockRetryPolicyDefinition() {
     }
@@ -51,15 +51,19 @@ public class OptimisticLockRetryPolicyDefinition {
      * Sets the maximum number of retries
      */
     public OptimisticLockRetryPolicyDefinition maximumRetries(int maximumRetries) {
+        return maximumRetries(String.valueOf(maximumRetries));
+    }
+
+    public OptimisticLockRetryPolicyDefinition maximumRetries(String maximumRetries) {
         setMaximumRetries(maximumRetries);
         return this;
     }
 
-    public Integer getMaximumRetries() {
+    public String getMaximumRetries() {
         return maximumRetries;
     }
 
-    public void setMaximumRetries(Integer maximumRetries) {
+    public void setMaximumRetries(String maximumRetries) {
         this.maximumRetries = maximumRetries;
     }
 
@@ -67,15 +71,22 @@ public class OptimisticLockRetryPolicyDefinition {
      * Sets the delay in millis between retries
      */
     public OptimisticLockRetryPolicyDefinition retryDelay(long retryDelay) {
+        return retryDelay(Long.toString(retryDelay));
+    }
+
+    /**
+     * Sets the delay in millis between retries
+     */
+    public OptimisticLockRetryPolicyDefinition retryDelay(String retryDelay) {
         setRetryDelay(retryDelay);
         return this;
     }
 
-    public Long getRetryDelay() {
+    public String getRetryDelay() {
         return retryDelay;
     }
 
-    public void setRetryDelay(Long retryDelay) {
+    public void setRetryDelay(String retryDelay) {
         this.retryDelay = retryDelay;
     }
 
@@ -84,15 +95,23 @@ public class OptimisticLockRetryPolicyDefinition {
      * exponential or random backoff
      */
     public OptimisticLockRetryPolicyDefinition maximumRetryDelay(long maximumRetryDelay) {
+        return maximumRetryDelay(Long.toString(maximumRetryDelay));
+    }
+
+    /**
+     * Sets the upper value of retry in millis between retries, when using
+     * exponential or random backoff
+     */
+    public OptimisticLockRetryPolicyDefinition maximumRetryDelay(String maximumRetryDelay) {
         setMaximumRetryDelay(maximumRetryDelay);
         return this;
     }
 
-    public Long getMaximumRetryDelay() {
+    public String getMaximumRetryDelay() {
         return maximumRetryDelay;
     }
 
-    public void setMaximumRetryDelay(Long maximumRetryDelay) {
+    public void setMaximumRetryDelay(String maximumRetryDelay) {
         this.maximumRetryDelay = maximumRetryDelay;
     }
 
@@ -104,15 +123,19 @@ public class OptimisticLockRetryPolicyDefinition {
     }
 
     public OptimisticLockRetryPolicyDefinition exponentialBackOff(boolean exponentialBackOff) {
+        return exponentialBackOff(Boolean.toString(exponentialBackOff));
+    }
+
+    public OptimisticLockRetryPolicyDefinition exponentialBackOff(String exponentialBackOff) {
         setExponentialBackOff(exponentialBackOff);
         return this;
     }
 
-    public Boolean getExponentialBackOff() {
+    public String getExponentialBackOff() {
         return exponentialBackOff;
     }
 
-    public void setExponentialBackOff(Boolean exponentialBackOff) {
+    public void setExponentialBackOff(String exponentialBackOff) {
         this.exponentialBackOff = exponentialBackOff;
     }
 
@@ -124,15 +147,19 @@ public class OptimisticLockRetryPolicyDefinition {
      * Enables random backoff
      */
     public OptimisticLockRetryPolicyDefinition randomBackOff(boolean randomBackOff) {
+        return randomBackOff(String.valueOf(randomBackOff));
+    }
+
+    public OptimisticLockRetryPolicyDefinition randomBackOff(String randomBackOff) {
         setRandomBackOff(randomBackOff);
         return this;
     }
 
-    public Boolean getRandomBackOff() {
+    public String getRandomBackOff() {
         return randomBackOff;
     }
 
-    public void setRandomBackOff(Boolean randomBackOff) {
+    public void setRandomBackOff(String randomBackOff) {
         this.randomBackOff = randomBackOff;
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/OtherwiseDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/OtherwiseDefinition.java
index 53985db..e998ac7 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/OtherwiseDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/OtherwiseDefinition.java
@@ -17,13 +17,13 @@
 package org.apache.camel.model;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.util.CollectionStringBuffer;
 
 /**
  * Route to be executed when all other choices evaluate to <tt>false</tt>
@@ -48,12 +48,7 @@ public class OtherwiseDefinition extends OutputDefinition<OtherwiseDefinition> {
 
     @Override
     public String getLabel() {
-        CollectionStringBuffer buffer = new CollectionStringBuffer("otherwise[");
-        List<ProcessorDefinition<?>> list = getOutputs();
-        for (ProcessorDefinition<?> type : list) {
-            buffer.append(type.getLabel());
-        }
-        buffer.append("]");
-        return buffer.toString();
+        return getOutputs().stream().map(ProcessorDefinition::getLabel)
+                .collect(Collectors.joining(",", getShortName() + "[", "]"));
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/OutputTypeDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/OutputTypeDefinition.java
index 3bc0a65..ccc988b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/OutputTypeDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/OutputTypeDefinition.java
@@ -45,11 +45,26 @@ public class OutputTypeDefinition extends OptionalIdentifiedDefinition<OutputTyp
     private String urn;
     @XmlAttribute
     @Metadata(defaultValue = "false")
-    private Boolean validate = false;
+    private String validate = "false";
 
     public OutputTypeDefinition() {
     }
 
+    public OutputTypeDefinition urn(String urn) {
+        setUrn(urn);
+        return this;
+    }
+
+    public OutputTypeDefinition javaClass(Class<?> clazz) {
+        setJavaClass(clazz);
+        return this;
+    }
+
+    public OutputTypeDefinition validate(boolean validate) {
+        setValidate(Boolean.toString(validate));
+        return this;
+    }
+
     /**
      * Get output type URN.
      * 
@@ -83,7 +98,7 @@ public class OutputTypeDefinition extends OptionalIdentifiedDefinition<OutputTyp
      * 
      * @return true if validate
      */
-    public boolean isValidate() {
+    public String getValidate() {
         return this.validate;
     }
 
@@ -92,7 +107,7 @@ public class OutputTypeDefinition extends OptionalIdentifiedDefinition<OutputTyp
      * 
      * @param validate true if validate
      */
-    public void setValidate(boolean validate) {
+    public void setValidate(String validate) {
         this.validate = validate;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/PollEnrichDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/PollEnrichDefinition.java
index 7f51ee5..8fdda8e 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/PollEnrichDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/PollEnrichDefinition.java
@@ -39,28 +39,28 @@ import org.apache.camel.spi.Metadata;
 public class PollEnrichDefinition extends ExpressionNode {
     @XmlAttribute
     @Metadata(defaultValue = "-1")
-    private Long timeout;
+    private String timeout;
     @XmlAttribute(name = "strategyRef")
     private String aggregationStrategyRef;
     @XmlAttribute(name = "strategyMethodName")
     private String aggregationStrategyMethodName;
     @XmlAttribute(name = "strategyMethodAllowNull")
-    private Boolean aggregationStrategyMethodAllowNull;
+    private String aggregationStrategyMethodAllowNull;
     @XmlAttribute
-    private Boolean aggregateOnException;
+    private String aggregateOnException;
     @XmlTransient
     private AggregationStrategy aggregationStrategy;
     @XmlAttribute
-    private Integer cacheSize;
+    private String cacheSize;
     @XmlAttribute
-    private Boolean ignoreInvalidEndpoint;
+    private String ignoreInvalidEndpoint;
 
     public PollEnrichDefinition() {
     }
 
     public PollEnrichDefinition(AggregationStrategy aggregationStrategy, long timeout) {
         this.aggregationStrategy = aggregationStrategy;
-        this.timeout = timeout;
+        this.timeout = Long.toString(timeout);
     }
 
     @Override
@@ -101,7 +101,7 @@ public class PollEnrichDefinition extends ExpressionNode {
      * indefinitely, and therefore its recommended to use a timeout value
      */
     public PollEnrichDefinition timeout(long timeout) {
-        setTimeout(timeout);
+        setTimeout(Long.toString(timeout));
         return this;
     }
 
@@ -151,7 +151,7 @@ public class PollEnrichDefinition extends ExpressionNode {
      * AggregationStrategy.
      */
     public PollEnrichDefinition aggregationStrategyMethodAllowNull(boolean aggregationStrategyMethodAllowNull) {
-        setAggregationStrategyMethodAllowNull(aggregationStrategyMethodAllowNull);
+        setAggregationStrategyMethodAllowNull(Boolean.toString(aggregationStrategyMethodAllowNull));
         return this;
     }
 
@@ -163,7 +163,7 @@ public class PollEnrichDefinition extends ExpressionNode {
      * to suppress the exception or set a custom message body etc.
      */
     public PollEnrichDefinition aggregateOnException(boolean aggregateOnException) {
-        setAggregateOnException(aggregateOnException);
+        setAggregateOnException(Boolean.toString(aggregateOnException));
         return this;
     }
 
@@ -177,7 +177,7 @@ public class PollEnrichDefinition extends ExpressionNode {
      * @return the builder
      */
     public PollEnrichDefinition cacheSize(int cacheSize) {
-        setCacheSize(cacheSize);
+        setCacheSize(Integer.toString(cacheSize));
         return this;
     }
 
@@ -188,7 +188,7 @@ public class PollEnrichDefinition extends ExpressionNode {
      * @return the builder
      */
     public PollEnrichDefinition ignoreInvalidEndpoint() {
-        setIgnoreInvalidEndpoint(true);
+        setIgnoreInvalidEndpoint(Boolean.toString(true));
         return this;
     }
 
@@ -205,11 +205,11 @@ public class PollEnrichDefinition extends ExpressionNode {
         super.setExpression(expression);
     }
 
-    public Long getTimeout() {
+    public String getTimeout() {
         return timeout;
     }
 
-    public void setTimeout(Long timeout) {
+    public void setTimeout(String timeout) {
         this.timeout = timeout;
     }
 
@@ -229,11 +229,11 @@ public class PollEnrichDefinition extends ExpressionNode {
         this.aggregationStrategyMethodName = aggregationStrategyMethodName;
     }
 
-    public Boolean getAggregationStrategyMethodAllowNull() {
+    public String getAggregationStrategyMethodAllowNull() {
         return aggregationStrategyMethodAllowNull;
     }
 
-    public void setAggregationStrategyMethodAllowNull(Boolean aggregationStrategyMethodAllowNull) {
+    public void setAggregationStrategyMethodAllowNull(String aggregationStrategyMethodAllowNull) {
         this.aggregationStrategyMethodAllowNull = aggregationStrategyMethodAllowNull;
     }
 
@@ -245,27 +245,27 @@ public class PollEnrichDefinition extends ExpressionNode {
         this.aggregationStrategy = aggregationStrategy;
     }
 
-    public Boolean getAggregateOnException() {
+    public String getAggregateOnException() {
         return aggregateOnException;
     }
 
-    public void setAggregateOnException(Boolean aggregateOnException) {
+    public void setAggregateOnException(String aggregateOnException) {
         this.aggregateOnException = aggregateOnException;
     }
 
-    public Integer getCacheSize() {
+    public String getCacheSize() {
         return cacheSize;
     }
 
-    public void setCacheSize(Integer cacheSize) {
+    public void setCacheSize(String cacheSize) {
         this.cacheSize = cacheSize;
     }
 
-    public Boolean getIgnoreInvalidEndpoint() {
+    public String getIgnoreInvalidEndpoint() {
         return ignoreInvalidEndpoint;
     }
 
-    public void setIgnoreInvalidEndpoint(Boolean ignoreInvalidEndpoint) {
+    public void setIgnoreInvalidEndpoint(String ignoreInvalidEndpoint) {
         this.ignoreInvalidEndpoint = ignoreInvalidEndpoint;
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/ProcessorDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/ProcessorDefinition.java
index d28282f..db2574d 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/ProcessorDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/ProcessorDefinition.java
@@ -297,7 +297,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
     public Type toD(@AsEndpointUri String uri, int cacheSize) {
         ToDynamicDefinition answer = new ToDynamicDefinition();
         answer.setUri(uri);
-        answer.setCacheSize(cacheSize);
+        answer.setCacheSize(Integer.toString(cacheSize));
         addOutput(answer);
         return asType();
     }
@@ -315,7 +315,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
     public Type toD(@AsEndpointUri EndpointProducerBuilder endpointProducerBuilder, int cacheSize) {
         ToDynamicDefinition answer = new ToDynamicDefinition();
         answer.setEndpointProducerBuilder(endpointProducerBuilder);
-        answer.setCacheSize(cacheSize);
+        answer.setCacheSize(Integer.toString(cacheSize));
         addOutput(answer);
         return asType();
     }
@@ -332,7 +332,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
     public Type toD(@AsEndpointUri String uri, boolean ignoreInvalidEndpoint) {
         ToDynamicDefinition answer = new ToDynamicDefinition();
         answer.setUri(uri);
-        answer.setIgnoreInvalidEndpoint(ignoreInvalidEndpoint);
+        answer.setIgnoreInvalidEndpoint(Boolean.toString(ignoreInvalidEndpoint));
         addOutput(answer);
         return asType();
     }
@@ -349,7 +349,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
     public Type toD(@AsEndpointUri EndpointProducerBuilder endpointProducerBuilder, boolean ignoreInvalidEndpoint) {
         ToDynamicDefinition answer = new ToDynamicDefinition();
         answer.setEndpointProducerBuilder(endpointProducerBuilder);
-        answer.setIgnoreInvalidEndpoint(ignoreInvalidEndpoint);
+        answer.setIgnoreInvalidEndpoint(Boolean.toString(ignoreInvalidEndpoint));
         addOutput(answer);
         return asType();
     }
@@ -891,7 +891,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
         MulticastDefinition answer = new MulticastDefinition();
         addOutput(answer);
         answer.setAggregationStrategy(aggregationStrategy);
-        answer.setParallelProcessing(parallelProcessing);
+        answer.setParallelProcessing(Boolean.toString(parallelProcessing));
         return answer;
     }
 
@@ -1025,7 +1025,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public ThreadsDefinition threads(int poolSize) {
         ThreadsDefinition answer = new ThreadsDefinition();
-        answer.setPoolSize(poolSize);
+        answer.setPoolSize(Integer.toString(poolSize));
         addOutput(answer);
         return answer;
     }
@@ -1040,8 +1040,8 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public ThreadsDefinition threads(int poolSize, int maxPoolSize) {
         ThreadsDefinition answer = new ThreadsDefinition();
-        answer.setPoolSize(poolSize);
-        answer.setMaxPoolSize(maxPoolSize);
+        answer.setPoolSize(Integer.toString(poolSize));
+        answer.setMaxPoolSize(Integer.toString(maxPoolSize));
         addOutput(answer);
         return answer;
     }
@@ -1057,8 +1057,8 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public ThreadsDefinition threads(int poolSize, int maxPoolSize, String threadName) {
         ThreadsDefinition answer = new ThreadsDefinition();
-        answer.setPoolSize(poolSize);
-        answer.setMaxPoolSize(maxPoolSize);
+        answer.setPoolSize(Integer.toString(poolSize));
+        answer.setMaxPoolSize(Integer.toString(maxPoolSize));
         answer.setThreadName(threadName);
         addOutput(answer);
         return answer;
@@ -1413,7 +1413,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public Type log(LoggingLevel loggingLevel, String message) {
         LogDefinition answer = new LogDefinition(message);
-        answer.setLoggingLevel(loggingLevel);
+        answer.setLoggingLevel(loggingLevel.name());
         addOutput(answer);
         return asType();
     }
@@ -1430,7 +1430,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public Type log(LoggingLevel loggingLevel, String logName, String message) {
         LogDefinition answer = new LogDefinition(message);
-        answer.setLoggingLevel(loggingLevel);
+        answer.setLoggingLevel(loggingLevel.name());
         answer.setLogName(logName);
         addOutput(answer);
         return asType();
@@ -1449,7 +1449,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public Type log(LoggingLevel loggingLevel, Logger logger, String message) {
         LogDefinition answer = new LogDefinition(message);
-        answer.setLoggingLevel(loggingLevel);
+        answer.setLoggingLevel(loggingLevel.name());
         answer.setLogger(logger);
         addOutput(answer);
         return asType();
@@ -1468,7 +1468,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public Type log(LoggingLevel loggingLevel, String logName, String marker, String message) {
         LogDefinition answer = new LogDefinition(message);
-        answer.setLoggingLevel(loggingLevel);
+        answer.setLoggingLevel(loggingLevel.name());
         answer.setLogName(logName);
         answer.setMarker(marker);
         addOutput(answer);
@@ -1489,7 +1489,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public Type log(LoggingLevel loggingLevel, Logger logger, String marker, String message) {
         LogDefinition answer = new LogDefinition(message);
-        answer.setLoggingLevel(loggingLevel);
+        answer.setLoggingLevel(loggingLevel.name());
         answer.setLogger(logger);
         answer.setMarker(marker);
         addOutput(answer);
@@ -2083,7 +2083,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public ExpressionClause<LoopDefinition> loopDoWhile() {
         LoopDefinition loop = new LoopDefinition();
-        loop.setDoWhile(true);
+        loop.setDoWhile(Boolean.toString(true));
         addOutput(loop);
         return createAndSetExpression(loop);
     }
@@ -2144,7 +2144,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public Type markRollbackOnly() {
         RollbackDefinition answer = new RollbackDefinition();
-        answer.setMarkRollbackOnly(true);
+        answer.setMarkRollbackOnly(Boolean.toString(true));
         addOutput(answer);
         return asType();
     }
@@ -2167,7 +2167,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public Type markRollbackOnlyLast() {
         RollbackDefinition answer = new RollbackDefinition();
-        answer.setMarkRollbackOnlyLast(true);
+        answer.setMarkRollbackOnlyLast(Boolean.toString(true));
         addOutput(answer);
         return asType();
     }
@@ -2540,7 +2540,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
         } else {
             answer.setBean(bean);
         }
-        answer.setCache(cache);
+        answer.setCache(Boolean.toString(cache));
         addOutput(answer);
         return asType();
     }
@@ -2567,7 +2567,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
             answer.setBean(bean);
         }
         answer.setMethod(method);
-        answer.setCache(cache);
+        answer.setCache(Boolean.toString(cache));
         addOutput(answer);
         return asType();
     }
@@ -2625,7 +2625,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
         BeanDefinition answer = new BeanDefinition();
         answer.setBeanType(beanType);
         answer.setMethod(method);
-        answer.setCache(cache);
+        answer.setCache(Boolean.toString(cache));
         addOutput(answer);
         return asType();
     }
@@ -2975,7 +2975,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public Type claimCheck(ClaimCheckOperation operation) {
         ClaimCheckDefinition answer = new ClaimCheckDefinition();
-        answer.setOperation(operation);
+        answer.setOperation(operation.name());
         addOutput(answer);
         return asType();
     }
@@ -3008,7 +3008,7 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
      */
     public Type claimCheck(ClaimCheckOperation operation, String key, String filter) {
         ClaimCheckDefinition answer = new ClaimCheckDefinition();
-        answer.setOperation(operation);
+        answer.setOperation(operation.name());
         answer.setKey(key);
         answer.setFilter(filter);
         addOutput(answer);
@@ -3222,8 +3222,8 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
         EnrichDefinition answer = new EnrichDefinition();
         answer.setExpression(new ConstantExpression(resourceUri));
         answer.setAggregationStrategy(aggregationStrategy);
-        answer.setAggregateOnException(aggregateOnException);
-        answer.setShareUnitOfWork(shareUnitOfWork);
+        answer.setAggregateOnException(Boolean.toString(aggregateOnException));
+        answer.setShareUnitOfWork(Boolean.toString(shareUnitOfWork));
         addOutput(answer);
         return asType();
     }
@@ -3267,8 +3267,8 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
         EnrichDefinition answer = new EnrichDefinition();
         answer.setExpression(resourceUri.expr());
         answer.setAggregationStrategy(aggregationStrategy);
-        answer.setAggregateOnException(aggregateOnException);
-        answer.setShareUnitOfWork(shareUnitOfWork);
+        answer.setAggregateOnException(Boolean.toString(aggregateOnException));
+        answer.setShareUnitOfWork(Boolean.toString(shareUnitOfWork));
         addOutput(answer);
         return asType();
     }
@@ -3777,9 +3777,9 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
     public Type pollEnrich(@AsEndpointUri Expression expression, long timeout, String aggregationStrategyRef, boolean aggregateOnException) {
         PollEnrichDefinition pollEnrich = new PollEnrichDefinition();
         pollEnrich.setExpression(expression);
-        pollEnrich.setTimeout(timeout);
+        pollEnrich.setTimeout(Long.toString(timeout));
         pollEnrich.setAggregationStrategyRef(aggregationStrategyRef);
-        pollEnrich.setAggregateOnException(aggregateOnException);
+        pollEnrich.setAggregateOnException(Boolean.toString(aggregateOnException));
         addOutput(pollEnrich);
         return asType();
     }
@@ -3814,9 +3814,9 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
     public Type pollEnrich(@AsEndpointUri Expression expression, long timeout, AggregationStrategy aggregationStrategy, boolean aggregateOnException) {
         PollEnrichDefinition pollEnrich = new PollEnrichDefinition();
         pollEnrich.setExpression(expression);
-        pollEnrich.setTimeout(timeout);
+        pollEnrich.setTimeout(Long.toString(timeout));
         pollEnrich.setAggregationStrategy(aggregationStrategy);
-        pollEnrich.setAggregateOnException(aggregateOnException);
+        pollEnrich.setAggregateOnException(Boolean.toString(aggregateOnException));
         addOutput(pollEnrich);
         return asType();
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/RecipientListDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/RecipientListDefinition.java
index 27a34b5..d85d462 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/RecipientListDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/RecipientListDefinition.java
@@ -47,36 +47,36 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
     @Metadata(defaultValue = ",")
     private String delimiter;
     @XmlAttribute
-    private Boolean parallelProcessing;
+    private String parallelProcessing;
     @XmlAttribute
     private String strategyRef;
     @XmlAttribute
     private String strategyMethodName;
     @XmlAttribute
-    private Boolean strategyMethodAllowNull;
+    private String strategyMethodAllowNull;
     @XmlAttribute
     private String executorServiceRef;
     @XmlAttribute
-    private Boolean stopOnException;
+    private String stopOnException;
     @XmlAttribute
-    private Boolean ignoreInvalidEndpoints;
+    private String ignoreInvalidEndpoints;
     @XmlAttribute
-    private Boolean streaming;
+    private String streaming;
     @XmlAttribute
     @Metadata(defaultValue = "0")
-    private Long timeout;
+    private String timeout;
     @XmlAttribute
     private String onPrepareRef;
     @XmlTransient
     private Processor onPrepare;
     @XmlAttribute
-    private Boolean shareUnitOfWork;
+    private String shareUnitOfWork;
     @XmlAttribute
-    private Integer cacheSize;
+    private String cacheSize;
     @XmlAttribute
-    private Boolean parallelAggregate;
+    private String parallelAggregate;
     @XmlAttribute
-    private Boolean stopOnAggregateException;
+    private String stopOnAggregateException;
 
     public RecipientListDefinition() {
     }
@@ -182,7 +182,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder
      */
     public RecipientListDefinition<Type> aggregationStrategyMethodAllowNull() {
-        setStrategyMethodAllowNull(true);
+        setStrategyMethodAllowNull(Boolean.toString(true));
         return this;
     }
 
@@ -193,7 +193,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder
      */
     public RecipientListDefinition<Type> ignoreInvalidEndpoints() {
-        setIgnoreInvalidEndpoints(true);
+        setIgnoreInvalidEndpoints(Boolean.toString(true));
         return this;
     }
 
@@ -206,7 +206,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder
      */
     public RecipientListDefinition<Type> parallelProcessing() {
-        setParallelProcessing(true);
+        setParallelProcessing(Boolean.toString(true));
         return this;
     }
 
@@ -219,7 +219,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder
      */
     public RecipientListDefinition<Type> parallelProcessing(boolean parallelProcessing) {
-        setParallelProcessing(parallelProcessing);
+        setParallelProcessing(Boolean.toString(parallelProcessing));
         return this;
     }
 
@@ -234,7 +234,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder
      */
     public RecipientListDefinition<Type> parallelAggregate() {
-        setParallelAggregate(true);
+        setParallelAggregate(Boolean.toString(true));
         return this;
     }
 
@@ -249,7 +249,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder
      */
     public RecipientListDefinition<Type> stopOnAggregateException() {
-        setStopOnAggregateException(true);
+        setStopOnAggregateException(Boolean.toString(true));
         return this;
     }
 
@@ -261,7 +261,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder
      */
     public RecipientListDefinition<Type> streaming() {
-        setStreaming(true);
+        setStreaming(Boolean.toString(true));
         return this;
     }
 
@@ -282,7 +282,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder
      */
     public RecipientListDefinition<Type> stopOnException() {
-        setStopOnException(true);
+        setStopOnException(Boolean.toString(true));
         return this;
     }
 
@@ -376,7 +376,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder
      */
     public RecipientListDefinition<Type> timeout(long timeout) {
-        setTimeout(timeout);
+        setTimeout(Long.toString(timeout));
         return this;
     }
 
@@ -389,7 +389,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder.
      */
     public RecipientListDefinition<Type> shareUnitOfWork() {
-        setShareUnitOfWork(true);
+        setShareUnitOfWork(Boolean.toString(true));
         return this;
     }
 
@@ -403,7 +403,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
      * @return the builder
      */
     public RecipientListDefinition<Type> cacheSize(int cacheSize) {
-        setCacheSize(cacheSize);
+        setCacheSize(Integer.toString(cacheSize));
         return this;
     }
 
@@ -429,11 +429,11 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
         this.delimiter = delimiter;
     }
 
-    public Boolean getParallelProcessing() {
+    public String getParallelProcessing() {
         return parallelProcessing;
     }
 
-    public void setParallelProcessing(Boolean parallelProcessing) {
+    public void setParallelProcessing(String parallelProcessing) {
         this.parallelProcessing = parallelProcessing;
     }
 
@@ -463,7 +463,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
         this.strategyMethodName = strategyMethodName;
     }
 
-    public Boolean getStrategyMethodAllowNull() {
+    public String getStrategyMethodAllowNull() {
         return strategyMethodAllowNull;
     }
 
@@ -473,7 +473,7 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
      * the oldExchange (when no data to enrich), when using POJOs as the
      * AggregationStrategy
      */
-    public void setStrategyMethodAllowNull(Boolean strategyMethodAllowNull) {
+    public void setStrategyMethodAllowNull(String strategyMethodAllowNull) {
         this.strategyMethodAllowNull = strategyMethodAllowNull;
     }
 
@@ -487,19 +487,19 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
         this.executorServiceRef = executorServiceRef;
     }
 
-    public Boolean getIgnoreInvalidEndpoints() {
+    public String getIgnoreInvalidEndpoints() {
         return ignoreInvalidEndpoints;
     }
 
-    public void setIgnoreInvalidEndpoints(Boolean ignoreInvalidEndpoints) {
+    public void setIgnoreInvalidEndpoints(String ignoreInvalidEndpoints) {
         this.ignoreInvalidEndpoints = ignoreInvalidEndpoints;
     }
 
-    public Boolean getStopOnException() {
+    public String getStopOnException() {
         return stopOnException;
     }
 
-    public void setStopOnException(Boolean stopOnException) {
+    public void setStopOnException(String stopOnException) {
         this.stopOnException = stopOnException;
     }
 
@@ -527,19 +527,19 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
         this.executorService = executorService;
     }
 
-    public Boolean getStreaming() {
+    public String getStreaming() {
         return streaming;
     }
 
-    public void setStreaming(Boolean streaming) {
+    public void setStreaming(String streaming) {
         this.streaming = streaming;
     }
 
-    public Long getTimeout() {
+    public String getTimeout() {
         return timeout;
     }
 
-    public void setTimeout(Long timeout) {
+    public void setTimeout(String timeout) {
         this.timeout = timeout;
     }
 
@@ -559,35 +559,35 @@ public class RecipientListDefinition<Type extends ProcessorDefinition<Type>> ext
         this.onPrepare = onPrepare;
     }
 
-    public Boolean getShareUnitOfWork() {
+    public String getShareUnitOfWork() {
         return shareUnitOfWork;
     }
 
-    public void setShareUnitOfWork(Boolean shareUnitOfWork) {
+    public void setShareUnitOfWork(String shareUnitOfWork) {
         this.shareUnitOfWork = shareUnitOfWork;
     }
 
-    public Integer getCacheSize() {
+    public String getCacheSize() {
         return cacheSize;
     }
 
-    public void setCacheSize(Integer cacheSize) {
+    public void setCacheSize(String cacheSize) {
         this.cacheSize = cacheSize;
     }
 
-    public Boolean getParallelAggregate() {
+    public String getParallelAggregate() {
         return parallelAggregate;
     }
 
-    public void setParallelAggregate(Boolean parallelAggregate) {
+    public void setParallelAggregate(String parallelAggregate) {
         this.parallelAggregate = parallelAggregate;
     }
 
-    public Boolean getStopOnAggregateException() {
+    public String getStopOnAggregateException() {
         return stopOnAggregateException;
     }
 
-    public void setStopOnAggregateException(Boolean stopOnAggregateException) {
+    public void setStopOnAggregateException(String stopOnAggregateException) {
         this.stopOnAggregateException = stopOnAggregateException;
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java
index 76eac65..6f845fe 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java
@@ -48,9 +48,9 @@ public class RedeliveryPolicyDefinition {
     @XmlAttribute
     private String maximumRedeliveryDelay;
     @XmlAttribute
-    private LoggingLevel retriesExhaustedLogLevel;
+    private String retriesExhaustedLogLevel;
     @XmlAttribute
-    private LoggingLevel retryAttemptedLogLevel;
+    private String retryAttemptedLogLevel;
     @XmlAttribute
     private String retryAttemptedLogInterval;
     @XmlAttribute
@@ -206,6 +206,16 @@ public class RedeliveryPolicyDefinition {
      * @return the builder
      */
     public RedeliveryPolicyDefinition retriesExhaustedLogLevel(LoggingLevel retriesExhaustedLogLevel) {
+        return retriesExhaustedLogLevel(retriesExhaustedLogLevel.name());
+    }
+
+    /**
+     * Sets the logging level to use when retries has exhausted
+     *
+     * @param retriesExhaustedLogLevel the logging level
+     * @return the builder
+     */
+    public RedeliveryPolicyDefinition retriesExhaustedLogLevel(String retriesExhaustedLogLevel) {
         setRetriesExhaustedLogLevel(retriesExhaustedLogLevel);
         return this;
     }
@@ -217,6 +227,16 @@ public class RedeliveryPolicyDefinition {
      * @return the builder
      */
     public RedeliveryPolicyDefinition retryAttemptedLogLevel(LoggingLevel retryAttemptedLogLevel) {
+        return retryAttemptedLogLevel(retryAttemptedLogLevel.name());
+    }
+
+    /**
+     * Sets the logging level to use for logging retry attempts
+     *
+     * @param retryAttemptedLogLevel the logging level
+     * @return the builder
+     */
+    public RedeliveryPolicyDefinition retryAttemptedLogLevel(String retryAttemptedLogLevel) {
         setRetryAttemptedLogLevel(retryAttemptedLogLevel);
         return this;
     }
@@ -623,19 +643,19 @@ public class RedeliveryPolicyDefinition {
         this.maximumRedeliveryDelay = maximumRedeliveryDelay;
     }
 
-    public LoggingLevel getRetriesExhaustedLogLevel() {
+    public String getRetriesExhaustedLogLevel() {
         return retriesExhaustedLogLevel;
     }
 
-    public void setRetriesExhaustedLogLevel(LoggingLevel retriesExhaustedLogLevel) {
+    public void setRetriesExhaustedLogLevel(String retriesExhaustedLogLevel) {
         this.retriesExhaustedLogLevel = retriesExhaustedLogLevel;
     }
 
-    public LoggingLevel getRetryAttemptedLogLevel() {
+    public String getRetryAttemptedLogLevel() {
         return retryAttemptedLogLevel;
     }
 
-    public void setRetryAttemptedLogLevel(LoggingLevel retryAttemptedLogLevel) {
+    public void setRetryAttemptedLogLevel(String retryAttemptedLogLevel) {
         this.retryAttemptedLogLevel = retryAttemptedLogLevel;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/ResequenceDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/ResequenceDefinition.java
index 90a6cf0..4bd193d 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/ResequenceDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/ResequenceDefinition.java
@@ -129,13 +129,13 @@ public class ResequenceDefinition extends ProcessorDefinition<ResequenceDefiniti
      */
     public ResequenceDefinition timeout(long timeout) {
         if (streamConfig != null) {
-            streamConfig.setTimeout(timeout);
+            streamConfig.setTimeout(Long.toString(timeout));
         } else {
             // initialize batch mode as its default mode
             if (batchConfig == null) {
                 batch();
             }
-            batchConfig.setBatchTimeout(timeout);
+            batchConfig.setBatchTimeout(Long.toString(timeout));
         }
         return this;
     }
@@ -151,7 +151,7 @@ public class ResequenceDefinition extends ProcessorDefinition<ResequenceDefiniti
         if (streamConfig == null) {
             throw new IllegalStateException("deliveryAttemptInterval() only supported for stream resequencer");
         }
-        streamConfig.setDeliveryAttemptInterval(deliveryAttemptInterval);
+        streamConfig.setDeliveryAttemptInterval(Long.toString(deliveryAttemptInterval));
         return this;
     }
 
@@ -165,7 +165,7 @@ public class ResequenceDefinition extends ProcessorDefinition<ResequenceDefiniti
         if (streamConfig == null) {
             throw new IllegalStateException("rejectOld() only supported for stream resequencer");
         }
-        streamConfig.setRejectOld(true);
+        streamConfig.setRejectOld(Boolean.toString(true));
         return this;
     }
 
@@ -183,7 +183,7 @@ public class ResequenceDefinition extends ProcessorDefinition<ResequenceDefiniti
         if (batchConfig == null) {
             batch();
         }
-        batchConfig.setBatchSize(batchSize);
+        batchConfig.setBatchSize(Integer.toString(batchSize));
         return this;
     }
 
@@ -197,7 +197,7 @@ public class ResequenceDefinition extends ProcessorDefinition<ResequenceDefiniti
         if (streamConfig == null) {
             throw new IllegalStateException("capacity() only supported for stream resequencer");
         }
-        streamConfig.setCapacity(capacity);
+        streamConfig.setCapacity(Integer.toString(capacity));
         return this;
 
     }
@@ -215,7 +215,7 @@ public class ResequenceDefinition extends ProcessorDefinition<ResequenceDefiniti
         if (batchConfig == null) {
             batch();
         }
-        batchConfig.setAllowDuplicates(true);
+        batchConfig.setAllowDuplicates(Boolean.toString(true));
         return this;
     }
 
@@ -235,7 +235,7 @@ public class ResequenceDefinition extends ProcessorDefinition<ResequenceDefiniti
         if (batchConfig == null) {
             batch();
         }
-        batchConfig.setReverse(true);
+        batchConfig.setReverse(Boolean.toString(true));
         return this;
     }
 
@@ -247,13 +247,13 @@ public class ResequenceDefinition extends ProcessorDefinition<ResequenceDefiniti
      */
     public ResequenceDefinition ignoreInvalidExchanges() {
         if (streamConfig != null) {
-            streamConfig.setIgnoreInvalidExchanges(true);
+            streamConfig.setIgnoreInvalidExchanges(Boolean.toString(true));
         } else {
             // initialize batch mode as its default mode
             if (batchConfig == null) {
                 batch();
             }
-            batchConfig.setIgnoreInvalidExchanges(true);
+            batchConfig.setIgnoreInvalidExchanges(Boolean.toString(true));
         }
         return this;
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/RollbackDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/RollbackDefinition.java
index fd9b1dc..336e49d 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/RollbackDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/RollbackDefinition.java
@@ -31,9 +31,9 @@ import org.apache.camel.spi.Metadata;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class RollbackDefinition extends NoOutputDefinition<RollbackDefinition> {
     @XmlAttribute
-    private Boolean markRollbackOnly;
+    private String markRollbackOnly;
     @XmlAttribute
-    private Boolean markRollbackOnlyLast;
+    private String markRollbackOnlyLast;
     @XmlAttribute
     private String message;
 
@@ -74,18 +74,18 @@ public class RollbackDefinition extends NoOutputDefinition<RollbackDefinition> {
         this.message = message;
     }
 
-    public Boolean getMarkRollbackOnly() {
+    public String getMarkRollbackOnly() {
         return markRollbackOnly;
     }
 
     /**
      * Mark the transaction for rollback only (cannot be overruled to commit)
      */
-    public void setMarkRollbackOnly(Boolean markRollbackOnly) {
+    public void setMarkRollbackOnly(String markRollbackOnly) {
         this.markRollbackOnly = markRollbackOnly;
     }
 
-    public Boolean getMarkRollbackOnlyLast() {
+    public String getMarkRollbackOnlyLast() {
         return markRollbackOnlyLast;
     }
 
@@ -94,7 +94,7 @@ public class RollbackDefinition extends NoOutputDefinition<RollbackDefinition> {
      * <p/>
      * When using sub transactions (if the transaction manager support this)
      */
-    public void setMarkRollbackOnlyLast(Boolean markRollbackOnlyLast) {
+    public void setMarkRollbackOnlyLast(String markRollbackOnlyLast) {
         this.markRollbackOnlyLast = markRollbackOnlyLast;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/RouteDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/RouteDefinition.java
index 747631b..7e839eb 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/RouteDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/RouteDefinition.java
@@ -528,9 +528,7 @@ public class RouteDefinition extends ProcessorDefinition<RouteDefinition> implem
      * @return the builder
      */
     public RouteDefinition inputType(String urn) {
-        inputType = new InputTypeDefinition();
-        inputType.setUrn(urn);
-        inputType.setValidate(false);
+        inputType = new InputTypeDefinition().urn(urn).validate(false);
         return this;
     }
 
@@ -549,9 +547,7 @@ public class RouteDefinition extends ProcessorDefinition<RouteDefinition> implem
      * @return the builder
      */
     public RouteDefinition inputTypeWithValidate(String urn) {
-        inputType = new InputTypeDefinition();
-        inputType.setUrn(urn);
-        inputType.setValidate(true);
+        inputType = new InputTypeDefinition().urn(urn).validate(true);
         return this;
     }
 
@@ -565,9 +561,7 @@ public class RouteDefinition extends ProcessorDefinition<RouteDefinition> implem
      * @return the builder
      */
     public RouteDefinition inputType(Class clazz) {
-        inputType = new InputTypeDefinition();
-        inputType.setJavaClass(clazz);
-        inputType.setValidate(false);
+        inputType = new InputTypeDefinition().javaClass(clazz).validate(false);
         return this;
     }
 
@@ -584,9 +578,7 @@ public class RouteDefinition extends ProcessorDefinition<RouteDefinition> implem
      * @return the builder
      */
     public RouteDefinition inputTypeWithValidate(Class clazz) {
-        inputType = new InputTypeDefinition();
-        inputType.setJavaClass(clazz);
-        inputType.setValidate(true);
+        inputType = new InputTypeDefinition().javaClass(clazz).validate(true);
         return this;
     }
 
@@ -603,9 +595,7 @@ public class RouteDefinition extends ProcessorDefinition<RouteDefinition> implem
      * @return the builder
      */
     public RouteDefinition outputType(String urn) {
-        outputType = new OutputTypeDefinition();
-        outputType.setUrn(urn);
-        outputType.setValidate(false);
+        outputType = new OutputTypeDefinition().urn(urn).validate(false);
         return this;
     }
 
@@ -624,9 +614,7 @@ public class RouteDefinition extends ProcessorDefinition<RouteDefinition> implem
      * @return the builder
      */
     public RouteDefinition outputTypeWithValidate(String urn) {
-        outputType = new OutputTypeDefinition();
-        outputType.setUrn(urn);
-        outputType.setValidate(true);
+        outputType = new OutputTypeDefinition().urn(urn).validate(true);
         return this;
     }
 
@@ -640,9 +628,7 @@ public class RouteDefinition extends ProcessorDefinition<RouteDefinition> implem
      * @return the builder
      */
     public RouteDefinition outputType(Class clazz) {
-        outputType = new OutputTypeDefinition();
-        outputType.setJavaClass(clazz);
-        outputType.setValidate(false);
+        outputType = new OutputTypeDefinition().javaClass(clazz).validate(false);
         return this;
     }
 
@@ -659,9 +645,7 @@ public class RouteDefinition extends ProcessorDefinition<RouteDefinition> implem
      * @return the builder
      */
     public RouteDefinition outputTypeWithValidate(Class clazz) {
-        outputType = new OutputTypeDefinition();
-        outputType.setJavaClass(clazz);
-        outputType.setValidate(true);
+        outputType = new OutputTypeDefinition().javaClass(clazz).validate(true);
         return this;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/RoutingSlipDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/RoutingSlipDefinition.java
index 40e2959..a57342e 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/RoutingSlipDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/RoutingSlipDefinition.java
@@ -42,9 +42,9 @@ public class RoutingSlipDefinition<Type extends ProcessorDefinition<Type>> exten
     @Metadata(defaultValue = ",")
     private String uriDelimiter;
     @XmlAttribute
-    private Boolean ignoreInvalidEndpoints;
+    private String ignoreInvalidEndpoints;
     @XmlAttribute
-    private Integer cacheSize;
+    private String cacheSize;
 
     public RoutingSlipDefinition() {
         this((String)null, DEFAULT_DELIMITER);
@@ -108,19 +108,19 @@ public class RoutingSlipDefinition<Type extends ProcessorDefinition<Type>> exten
         return uriDelimiter;
     }
 
-    public void setIgnoreInvalidEndpoints(Boolean ignoreInvalidEndpoints) {
+    public void setIgnoreInvalidEndpoints(String ignoreInvalidEndpoints) {
         this.ignoreInvalidEndpoints = ignoreInvalidEndpoints;
     }
 
-    public Boolean getIgnoreInvalidEndpoints() {
+    public String getIgnoreInvalidEndpoints() {
         return ignoreInvalidEndpoints;
     }
 
-    public Integer getCacheSize() {
+    public String getCacheSize() {
         return cacheSize;
     }
 
-    public void setCacheSize(Integer cacheSize) {
+    public void setCacheSize(String cacheSize) {
         this.cacheSize = cacheSize;
     }
 
@@ -141,7 +141,7 @@ public class RoutingSlipDefinition<Type extends ProcessorDefinition<Type>> exten
      * @return the builder
      */
     public RoutingSlipDefinition<Type> ignoreInvalidEndpoints() {
-        setIgnoreInvalidEndpoints(true);
+        setIgnoreInvalidEndpoints(Boolean.toString(true));
         return this;
     }
 
@@ -166,7 +166,7 @@ public class RoutingSlipDefinition<Type extends ProcessorDefinition<Type>> exten
      * @return the builder
      */
     public RoutingSlipDefinition<Type> cacheSize(int cacheSize) {
-        setCacheSize(cacheSize);
+        setCacheSize(Integer.toString(cacheSize));
         return this;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/SendDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/SendDefinition.java
index 239db7a..e7e6242 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/SendDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/SendDefinition.java
@@ -98,7 +98,7 @@ public abstract class SendDefinition<Type extends ProcessorDefinition<Type>> ext
         this.endpointProducerBuilder = endpointProducerBuilder;
     }
 
-    public ExchangePattern getPattern() {
+    public String getPattern() {
         return null;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/ThreadPoolProfileDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/ThreadPoolProfileDefinition.java
index 2454b32..a5e328b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/ThreadPoolProfileDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/ThreadPoolProfileDefinition.java
@@ -51,7 +51,7 @@ public class ThreadPoolProfileDefinition extends OptionalIdentifiedDefinition<Th
     @XmlAttribute
     private String allowCoreThreadTimeOut;
     @XmlAttribute
-    private ThreadPoolRejectedPolicy rejectedPolicy;
+    private String rejectedPolicy;
 
     public ThreadPoolProfileDefinition() {
     }
@@ -67,7 +67,7 @@ public class ThreadPoolProfileDefinition extends OptionalIdentifiedDefinition<Th
     }
 
     public ThreadPoolProfileDefinition poolSize(int poolSize) {
-        return poolSize("" + poolSize);
+        return poolSize(Integer.toString(poolSize));
     }
 
     public ThreadPoolProfileDefinition poolSize(String poolSize) {
@@ -76,20 +76,20 @@ public class ThreadPoolProfileDefinition extends OptionalIdentifiedDefinition<Th
     }
 
     public ThreadPoolProfileDefinition maxPoolSize(int maxPoolSize) {
-        return maxPoolSize("" + maxQueueSize);
+        return maxPoolSize(Integer.toString(maxPoolSize));
     }
 
     public ThreadPoolProfileDefinition maxPoolSize(String maxPoolSize) {
-        setMaxPoolSize("" + maxPoolSize);
+        setMaxPoolSize(maxPoolSize);
         return this;
     }
 
     public ThreadPoolProfileDefinition keepAliveTime(long keepAliveTime) {
-        return keepAliveTime("" + keepAliveTime);
+        return keepAliveTime(Long.toString(keepAliveTime));
     }
 
     public ThreadPoolProfileDefinition keepAliveTime(String keepAliveTime) {
-        setKeepAliveTime("" + keepAliveTime);
+        setKeepAliveTime(keepAliveTime);
         return this;
     }
 
@@ -99,15 +99,20 @@ public class ThreadPoolProfileDefinition extends OptionalIdentifiedDefinition<Th
     }
 
     public ThreadPoolProfileDefinition maxQueueSize(int maxQueueSize) {
-        return maxQueueSize("" + maxQueueSize);
+        return maxQueueSize(Integer.toString(maxQueueSize));
     }
 
     public ThreadPoolProfileDefinition maxQueueSize(String maxQueueSize) {
-        setMaxQueueSize("" + maxQueueSize);
+        setMaxQueueSize(maxQueueSize);
         return this;
     }
 
     public ThreadPoolProfileDefinition rejectedPolicy(ThreadPoolRejectedPolicy rejectedPolicy) {
+        setRejectedPolicy(rejectedPolicy.name());
+        return this;
+    }
+
+    public ThreadPoolProfileDefinition rejectedPolicy(String rejectedPolicy) {
         setRejectedPolicy(rejectedPolicy);
         return this;
     }
@@ -203,21 +208,14 @@ public class ThreadPoolProfileDefinition extends OptionalIdentifiedDefinition<Th
         this.timeUnit = timeUnit;
     }
 
-    public ThreadPoolRejectedPolicy getRejectedPolicy() {
+    public String getRejectedPolicy() {
         return rejectedPolicy;
     }
 
-    public RejectedExecutionHandler getRejectedExecutionHandler() {
-        if (rejectedPolicy != null) {
-            return rejectedPolicy.asRejectedExecutionHandler();
-        }
-        return null;
-    }
-
     /**
      * Sets the handler for tasks which cannot be executed by the thread pool.
      */
-    public void setRejectedPolicy(ThreadPoolRejectedPolicy rejectedPolicy) {
+    public void setRejectedPolicy(String rejectedPolicy) {
         this.rejectedPolicy = rejectedPolicy;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/ThreadsDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/ThreadsDefinition.java
index c20991a..2a45445 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/ThreadsDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/ThreadsDefinition.java
@@ -42,18 +42,17 @@ public class ThreadsDefinition extends NoOutputDefinition<ThreadsDefinition> imp
     @XmlAttribute
     private String executorServiceRef;
     @XmlAttribute
-    private Integer poolSize;
+    private String poolSize;
     @XmlAttribute
-    private Integer maxPoolSize;
+    private String maxPoolSize;
     @XmlAttribute
-    private Long keepAliveTime;
+    private String keepAliveTime;
     @XmlAttribute
-    @XmlJavaTypeAdapter(TimeUnitAdapter.class)
-    private TimeUnit timeUnit;
+    private String timeUnit;
     @XmlAttribute
-    private Integer maxQueueSize;
+    private String maxQueueSize;
     @XmlAttribute
-    private Boolean allowCoreThreadTimeOut;
+    private String allowCoreThreadTimeOut;
     @XmlAttribute
     @Metadata(defaultValue = "Threads")
     private String threadName;
@@ -61,7 +60,7 @@ public class ThreadsDefinition extends NoOutputDefinition<ThreadsDefinition> imp
     private ThreadPoolRejectedPolicy rejectedPolicy;
     @XmlAttribute
     @Metadata(defaultValue = "true")
-    private Boolean callerRunsWhenRejected;
+    private String callerRunsWhenRejected;
 
     public ThreadsDefinition() {
         this.threadName = "Threads";
@@ -108,7 +107,7 @@ public class ThreadsDefinition extends NoOutputDefinition<ThreadsDefinition> imp
      * @return the builder
      */
     public ThreadsDefinition poolSize(int poolSize) {
-        setPoolSize(poolSize);
+        setPoolSize(Integer.toString(poolSize));
         return this;
     }
 
@@ -119,7 +118,7 @@ public class ThreadsDefinition extends NoOutputDefinition<ThreadsDefinition> imp
      * @return the builder
      */
     public ThreadsDefinition maxPoolSize(int maxPoolSize) {
-        setMaxPoolSize(maxPoolSize);
+        setMaxPoolSize(Integer.toString(maxPoolSize));
         return this;
     }
 
@@ -130,7 +129,7 @@ public class ThreadsDefinition extends NoOutputDefinition<ThreadsDefinition> imp
      * @return the builder
      */
     public ThreadsDefinition keepAliveTime(long keepAliveTime) {
-        setKeepAliveTime(keepAliveTime);
+        setKeepAliveTime(Long.toString(keepAliveTime));
         return this;
     }
 
@@ -141,7 +140,7 @@ public class ThreadsDefinition extends NoOutputDefinition<ThreadsDefinition> imp
      * @return the builder
      */
     public ThreadsDefinition timeUnit(TimeUnit keepAliveTimeUnits) {
-        setTimeUnit(keepAliveTimeUnits);
+        setTimeUnit(keepAliveTimeUnits.name());
         return this;
     }
 
@@ -154,7 +153,7 @@ public class ThreadsDefinition extends NoOutputDefinition<ThreadsDefinition> imp
      * @return the builder
      */
     public ThreadsDefinition maxQueueSize(int maxQueueSize) {
-        setMaxQueueSize(maxQueueSize);
+        setMaxQueueSize(Integer.toString(maxQueueSize));
         return this;
     }
 
@@ -192,7 +191,7 @@ public class ThreadsDefinition extends NoOutputDefinition<ThreadsDefinition> imp
      * @return the builder
      */
     public ThreadsDefinition callerRunsWhenRejected(boolean callerRunsWhenRejected) {
-        setCallerRunsWhenRejected(callerRunsWhenRejected);
+        setCallerRunsWhenRejected(Boolean.toString(callerRunsWhenRejected));
         return this;
     }
 
@@ -206,7 +205,7 @@ public class ThreadsDefinition extends NoOutputDefinition<ThreadsDefinition> imp
      * @return the builder
      */
     public ThreadsDefinition allowCoreThreadTimeOut(boolean allowCoreThreadTimeOut) {
-        setAllowCoreThreadTimeOut(allowCoreThreadTimeOut);
+        setAllowCoreThreadTimeOut(Boolean.toString(allowCoreThreadTimeOut));
         return this;
     }
 
@@ -230,43 +229,43 @@ public class ThreadsDefinition extends NoOutputDefinition<ThreadsDefinition> imp
         this.executorServiceRef = executorServiceRef;
     }
 
-    public Integer getPoolSize() {
+    public String getPoolSize() {
         return poolSize;
     }
 
-    public void setPoolSize(Integer poolSize) {
+    public void setPoolSize(String poolSize) {
         this.poolSize = poolSize;
     }
 
-    public Integer getMaxPoolSize() {
+    public String getMaxPoolSize() {
         return maxPoolSize;
     }
 
-    public void setMaxPoolSize(Integer maxPoolSize) {
+    public void setMaxPoolSize(String maxPoolSize) {
         this.maxPoolSize = maxPoolSize;
     }
 
-    public Long getKeepAliveTime() {
+    public String getKeepAliveTime() {
         return keepAliveTime;
     }
 
-    public void setKeepAliveTime(Long keepAliveTime) {
+    public void setKeepAliveTime(String keepAliveTime) {
         this.keepAliveTime = keepAliveTime;
     }
 
-    public TimeUnit getTimeUnit() {
+    public String getTimeUnit() {
         return timeUnit;
     }
 
-    public void setTimeUnit(TimeUnit timeUnit) {
+    public void setTimeUnit(String timeUnit) {
         this.timeUnit = timeUnit;
     }
 
-    public Integer getMaxQueueSize() {
+    public String getMaxQueueSize() {
         return maxQueueSize;
     }
 
-    public void setMaxQueueSize(Integer maxQueueSize) {
+    public void setMaxQueueSize(String maxQueueSize) {
         this.maxQueueSize = maxQueueSize;
     }
 
@@ -286,19 +285,19 @@ public class ThreadsDefinition extends NoOutputDefinition<ThreadsDefinition> imp
         this.rejectedPolicy = rejectedPolicy;
     }
 
-    public Boolean getCallerRunsWhenRejected() {
+    public String getCallerRunsWhenRejected() {
         return callerRunsWhenRejected;
     }
 
-    public void setCallerRunsWhenRejected(Boolean callerRunsWhenRejected) {
+    public void setCallerRunsWhenRejected(String callerRunsWhenRejected) {
         this.callerRunsWhenRejected = callerRunsWhenRejected;
     }
 
-    public Boolean getAllowCoreThreadTimeOut() {
+    public String getAllowCoreThreadTimeOut() {
         return allowCoreThreadTimeOut;
     }
 
-    public void setAllowCoreThreadTimeOut(Boolean allowCoreThreadTimeOut) {
+    public void setAllowCoreThreadTimeOut(String allowCoreThreadTimeOut) {
         this.allowCoreThreadTimeOut = allowCoreThreadTimeOut;
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/ToDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/ToDefinition.java
index e6402ee..bc27d3c 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/ToDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/ToDefinition.java
@@ -34,7 +34,7 @@ import org.apache.camel.spi.Metadata;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class ToDefinition extends SendDefinition<ToDefinition> {
     @XmlAttribute
-    private ExchangePattern pattern;
+    private String pattern;
 
     public ToDefinition() {
     }
@@ -56,17 +56,17 @@ public class ToDefinition extends SendDefinition<ToDefinition> {
 
     public ToDefinition(String uri, ExchangePattern pattern) {
         this(uri);
-        this.pattern = pattern;
+        this.pattern = pattern.name();
     }
 
     public ToDefinition(Endpoint endpoint, ExchangePattern pattern) {
         this(endpoint);
-        this.pattern = pattern;
+        this.pattern = pattern.name();
     }
 
     public ToDefinition(EndpointProducerBuilder endpoint, ExchangePattern pattern) {
         this(endpoint);
-        this.pattern = pattern;
+        this.pattern = pattern.name();
     }
 
     @Override
@@ -80,14 +80,14 @@ public class ToDefinition extends SendDefinition<ToDefinition> {
     }
 
     @Override
-    public ExchangePattern getPattern() {
+    public String getPattern() {
         return pattern;
     }
 
     /**
      * Sets the optional {@link ExchangePattern} used to invoke this endpoint
      */
-    public void setPattern(ExchangePattern pattern) {
+    public void setPattern(String pattern) {
         this.pattern = pattern;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/ToDynamicDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/ToDynamicDefinition.java
index b6c5c49..ff5a109 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/ToDynamicDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/ToDynamicDefinition.java
@@ -49,14 +49,14 @@ public class ToDynamicDefinition extends NoOutputDefinition<ToDynamicDefinition>
     @Metadata(required = true)
     private String uri;
     @XmlAttribute
-    private ExchangePattern pattern;
+    private String pattern;
     @XmlAttribute
-    private Integer cacheSize;
+    private String cacheSize;
     @XmlAttribute
-    private Boolean ignoreInvalidEndpoint;
+    private String ignoreInvalidEndpoint;
     @XmlAttribute
     @Metadata(defaultValue = "true")
-    private Boolean allowOptimisedComponents;
+    private String allowOptimisedComponents;
 
     public ToDynamicDefinition() {
     }
@@ -87,7 +87,7 @@ public class ToDynamicDefinition extends NoOutputDefinition<ToDynamicDefinition>
      * Sets the optional {@link ExchangePattern} used to invoke this endpoint
      */
     public ToDynamicDefinition pattern(ExchangePattern pattern) {
-        setPattern(pattern);
+        setPattern(pattern.name());
         return this;
     }
 
@@ -101,7 +101,7 @@ public class ToDynamicDefinition extends NoOutputDefinition<ToDynamicDefinition>
      * @return the builder
      */
     public ToDynamicDefinition cacheSize(int cacheSize) {
-        setCacheSize(cacheSize);
+        setCacheSize(Integer.toString(cacheSize));
         return this;
     }
 
@@ -112,7 +112,7 @@ public class ToDynamicDefinition extends NoOutputDefinition<ToDynamicDefinition>
      * @return the builder
      */
     public ToDynamicDefinition ignoreInvalidEndpoint() {
-        setIgnoreInvalidEndpoint(true);
+        setIgnoreInvalidEndpoint(Boolean.toString(true));
         return this;
     }
 
@@ -123,7 +123,7 @@ public class ToDynamicDefinition extends NoOutputDefinition<ToDynamicDefinition>
      * @return the builder
      */
     public ToDynamicDefinition allowOptimisedComponents(boolean allowOptimisedComponents) {
-        setAllowOptimisedComponents(allowOptimisedComponents);
+        setAllowOptimisedComponents(Boolean.toString(allowOptimisedComponents));
         return this;
     }
 
@@ -150,35 +150,35 @@ public class ToDynamicDefinition extends NoOutputDefinition<ToDynamicDefinition>
         this.endpointProducerBuilder = endpointProducerBuilder;
     }
 
-    public ExchangePattern getPattern() {
+    public String getPattern() {
         return pattern;
     }
 
-    public void setPattern(ExchangePattern pattern) {
+    public void setPattern(String pattern) {
         this.pattern = pattern;
     }
 
-    public Integer getCacheSize() {
+    public String getCacheSize() {
         return cacheSize;
     }
 
-    public void setCacheSize(Integer cacheSize) {
+    public void setCacheSize(String cacheSize) {
         this.cacheSize = cacheSize;
     }
 
-    public Boolean getIgnoreInvalidEndpoint() {
+    public String getIgnoreInvalidEndpoint() {
         return ignoreInvalidEndpoint;
     }
 
-    public void setIgnoreInvalidEndpoint(Boolean ignoreInvalidEndpoint) {
+    public void setIgnoreInvalidEndpoint(String ignoreInvalidEndpoint) {
         this.ignoreInvalidEndpoint = ignoreInvalidEndpoint;
     }
 
-    public Boolean getAllowOptimisedComponents() {
+    public String getAllowOptimisedComponents() {
         return allowOptimisedComponents;
     }
 
-    public void setAllowOptimisedComponents(Boolean allowOptimisedComponents) {
+    public void setAllowOptimisedComponents(String allowOptimisedComponents) {
         this.allowOptimisedComponents = allowOptimisedComponents;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/WireTapDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/WireTapDefinition.java
index b3ece35..d135d85 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/WireTapDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/WireTapDefinition.java
@@ -56,10 +56,10 @@ public class WireTapDefinition<Type extends ProcessorDefinition<Type>> extends T
     private String executorServiceRef;
     @XmlAttribute
     @Metadata(defaultValue = "true")
-    private Boolean copy;
+    private String copy;
     @XmlAttribute
     @Metadata(defaultValue = "true")
-    private Boolean dynamicUri;
+    private String dynamicUri;
     @XmlAttribute
     private String onPrepareRef;
     @XmlTransient
@@ -68,14 +68,9 @@ public class WireTapDefinition<Type extends ProcessorDefinition<Type>> extends T
     public WireTapDefinition() {
     }
 
-    public boolean isDynamic() {
-        // its dynamic by default
-        return dynamicUri == null || dynamicUri;
-    }
-
     @Override
-    public ExchangePattern getPattern() {
-        return ExchangePattern.InOnly;
+    public String getPattern() {
+        return ExchangePattern.InOnly.name();
     }
 
     @Override
@@ -142,7 +137,7 @@ public class WireTapDefinition<Type extends ProcessorDefinition<Type>> extends T
      * @return the builder
      */
     public WireTapDefinition<Type> copy() {
-        setCopy(true);
+        setCopy(Boolean.toString(true));
         return this;
     }
 
@@ -154,7 +149,7 @@ public class WireTapDefinition<Type extends ProcessorDefinition<Type>> extends T
      * @return the builder
      */
     public WireTapDefinition<Type> copy(boolean copy) {
-        setCopy(copy);
+        setCopy(Boolean.toString(copy));
         return this;
     }
 
@@ -169,7 +164,7 @@ public class WireTapDefinition<Type extends ProcessorDefinition<Type>> extends T
      * @return the builder
      */
     public WireTapDefinition<Type> dynamicUri(boolean dynamicUri) {
-        setDynamicUri(dynamicUri);
+        setDynamicUri(Boolean.toString(dynamicUri));
         return this;
     }
 
@@ -297,7 +292,7 @@ public class WireTapDefinition<Type extends ProcessorDefinition<Type>> extends T
      */
     @Override
     public WireTapDefinition<Type> cacheSize(int cacheSize) {
-        setCacheSize(cacheSize);
+        setCacheSize(Integer.toString(cacheSize));
         return this;
     }
 
@@ -309,7 +304,7 @@ public class WireTapDefinition<Type extends ProcessorDefinition<Type>> extends T
      */
     @Override
     public WireTapDefinition<Type> ignoreInvalidEndpoint() {
-        setIgnoreInvalidEndpoint(true);
+        setIgnoreInvalidEndpoint(Boolean.toString(true));
         return this;
     }
 
@@ -387,19 +382,19 @@ public class WireTapDefinition<Type extends ProcessorDefinition<Type>> extends T
         this.executorServiceRef = executorServiceRef;
     }
 
-    public Boolean getCopy() {
+    public String getCopy() {
         return copy;
     }
 
-    public void setCopy(Boolean copy) {
+    public void setCopy(String copy) {
         this.copy = copy;
     }
 
-    public Boolean getDynamicUri() {
+    public String getDynamicUri() {
         return dynamicUri;
     }
 
-    public void setDynamicUri(Boolean dynamicUri) {
+    public void setDynamicUri(String dynamicUri) {
         this.dynamicUri = dynamicUri;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/cloud/CachingServiceCallServiceDiscoveryConfiguration.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/cloud/CachingServiceCallServiceDiscoveryConfiguration.java
index fc1c3bf..fdb18a1 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/cloud/CachingServiceCallServiceDiscoveryConfiguration.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/cloud/CachingServiceCallServiceDiscoveryConfiguration.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElements;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.camel.CamelContext;
@@ -36,8 +37,8 @@ import org.apache.camel.spi.Metadata;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class CachingServiceCallServiceDiscoveryConfiguration extends ServiceCallServiceDiscoveryConfiguration {
     @XmlAttribute
-    @Metadata(defaultValue = "60")
-    private Integer timeout = 60;
+    @Metadata(defaultValue = "60", javaType = "java.lang.Integer")
+    private String timeout = Integer.toString(60);
     @XmlAttribute
     @XmlJavaTypeAdapter(TimeUnitAdapter.class)
     @Metadata(defaultValue = "SECONDS")
@@ -62,14 +63,14 @@ public class CachingServiceCallServiceDiscoveryConfiguration extends ServiceCall
     // Properties
     // *************************************************************************
 
-    public Integer getTimeout() {
+    public String getTimeout() {
         return timeout;
     }
 
     /**
      * Set the time the services will be retained.
      */
-    public void setTimeout(Integer timeout) {
+    public void setTimeout(String timeout) {
         this.timeout = timeout;
     }
 
@@ -102,8 +103,8 @@ public class CachingServiceCallServiceDiscoveryConfiguration extends ServiceCall
     /**
      * Set the time the services will be retained.
      */
-    public CachingServiceCallServiceDiscoveryConfiguration timeout(Integer timeout) {
-        setTimeout(timeout);
+    public CachingServiceCallServiceDiscoveryConfiguration timeout(int timeout) {
+        setTimeout(Integer.toString(timeout));
         return this;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/cloud/ZooKeeperServiceCallServiceDiscoveryConfiguration.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/cloud/ZooKeeperServiceCallServiceDiscoveryConfiguration.java
index 1887d3b..6698fd1 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/cloud/ZooKeeperServiceCallServiceDiscoveryConfiguration.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/cloud/ZooKeeperServiceCallServiceDiscoveryConfiguration.java
@@ -36,7 +36,7 @@ public class ZooKeeperServiceCallServiceDiscoveryConfiguration extends ServiceCa
     @XmlAttribute
     private String reconnectMaxSleepTime;
     @XmlAttribute
-    private Integer reconnectMaxRetries;
+    private String reconnectMaxRetries;
     @XmlAttribute
     private String sessionTimeout;
     @XmlAttribute
@@ -102,14 +102,14 @@ public class ZooKeeperServiceCallServiceDiscoveryConfiguration extends ServiceCa
         this.reconnectMaxSleepTime = reconnectMaxSleepTime;
     }
 
-    public Integer getReconnectMaxRetries() {
+    public String getReconnectMaxRetries() {
         return reconnectMaxRetries;
     }
 
     /**
      * Max number of times to retry
      */
-    public void setReconnectMaxRetries(Integer reconnectMaxRetries) {
+    public void setReconnectMaxRetries(String reconnectMaxRetries) {
         this.reconnectMaxRetries = reconnectMaxRetries;
     }
 
@@ -171,7 +171,7 @@ public class ZooKeeperServiceCallServiceDiscoveryConfiguration extends ServiceCa
     }
 
     public ZooKeeperServiceCallServiceDiscoveryConfiguration reconnectMaxRetries(int reconnectMaxRetries) {
-        setReconnectMaxRetries(reconnectMaxRetries);
+        setReconnectMaxRetries(Integer.toString(reconnectMaxRetries));
         return this;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/config/BatchResequencerConfig.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/config/BatchResequencerConfig.java
index 89827e2..0c6ac4e 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/config/BatchResequencerConfig.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/config/BatchResequencerConfig.java
@@ -20,6 +20,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 
 import org.apache.camel.spi.Metadata;
 
@@ -29,19 +30,23 @@ import org.apache.camel.spi.Metadata;
 @Metadata(label = "eip,routing,resequence")
 @XmlRootElement(name = "batch-config")
 @XmlAccessorType(XmlAccessType.FIELD)
-public class BatchResequencerConfig extends ResequencerConfig {
+public class
+BatchResequencerConfig extends ResequencerConfig {
     @XmlAttribute
-    @Metadata(defaultValue = "100")
-    private Integer batchSize;
+    @Metadata(defaultValue = "100", javaType = "java.lang.Integer")
+    private String batchSize;
     @XmlAttribute
-    @Metadata(defaultValue = "1000")
-    private Long batchTimeout;
+    @Metadata(defaultValue = "1000", javaType = "java.lang.Long")
+    private String batchTimeout;
     @XmlAttribute
-    private Boolean allowDuplicates;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String allowDuplicates;
     @XmlAttribute
-    private Boolean reverse;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String reverse;
     @XmlAttribute
-    private Boolean ignoreInvalidExchanges;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String ignoreInvalidExchanges;
 
     /**
      * Creates a new {@link BatchResequencerConfig} instance using default
@@ -60,8 +65,8 @@ public class BatchResequencerConfig extends ResequencerConfig {
      * @param batchTimeout timeout for collecting elements to be re-ordered.
      */
     public BatchResequencerConfig(int batchSize, long batchTimeout) {
-        this.batchSize = batchSize;
-        this.batchTimeout = batchTimeout;
+        this.batchSize = Integer.toString(batchSize);
+        this.batchTimeout = Long.toString(batchTimeout);
     }
 
     /**
@@ -75,18 +80,18 @@ public class BatchResequencerConfig extends ResequencerConfig {
         return new BatchResequencerConfig();
     }
 
-    public int getBatchSize() {
+    public String getBatchSize() {
         return batchSize;
     }
 
     /**
      * Sets the size of the batch to be re-ordered. The default size is 100.
      */
-    public void setBatchSize(int batchSize) {
+    public void setBatchSize(String batchSize) {
         this.batchSize = batchSize;
     }
 
-    public long getBatchTimeout() {
+    public String getBatchTimeout() {
         return batchTimeout;
     }
 
@@ -94,40 +99,40 @@ public class BatchResequencerConfig extends ResequencerConfig {
      * Sets the timeout for collecting elements to be re-ordered. The default
      * timeout is 1000 msec.
      */
-    public void setBatchTimeout(long batchTimeout) {
+    public void setBatchTimeout(String batchTimeout) {
         this.batchTimeout = batchTimeout;
     }
 
-    public Boolean getAllowDuplicates() {
+    public String getAllowDuplicates() {
         return allowDuplicates;
     }
 
     /**
      * Whether to allow duplicates.
      */
-    public void setAllowDuplicates(Boolean allowDuplicates) {
+    public void setAllowDuplicates(String allowDuplicates) {
         this.allowDuplicates = allowDuplicates;
     }
 
-    public Boolean getReverse() {
+    public String getReverse() {
         return reverse;
     }
 
     /**
      * Whether to reverse the ordering.
      */
-    public void setReverse(Boolean reverse) {
+    public void setReverse(String reverse) {
         this.reverse = reverse;
     }
 
-    public Boolean getIgnoreInvalidExchanges() {
+    public String getIgnoreInvalidExchanges() {
         return ignoreInvalidExchanges;
     }
 
     /**
      * Whether to ignore invalid exchanges
      */
-    public void setIgnoreInvalidExchanges(Boolean ignoreInvalidExchanges) {
+    public void setIgnoreInvalidExchanges(String ignoreInvalidExchanges) {
         this.ignoreInvalidExchanges = ignoreInvalidExchanges;
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/config/StreamResequencerConfig.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/config/StreamResequencerConfig.java
index e18705a..3f3e8fa 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/config/StreamResequencerConfig.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/config/StreamResequencerConfig.java
@@ -20,6 +20,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.processor.resequencer.ExpressionResultComparator;
@@ -33,22 +34,24 @@ import org.apache.camel.spi.Metadata;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class StreamResequencerConfig extends ResequencerConfig {
     @XmlAttribute
-    @Metadata(defaultValue = "100")
-    private Integer capacity;
+    @Metadata(defaultValue = "100", javaType = "java.lang.Integer")
+    private String capacity;
     @XmlAttribute
-    @Metadata(defaultValue = "1000")
-    private Long timeout;
+    @Metadata(defaultValue = "1000", javaType = "java.lang.Long")
+    private String timeout;
     @XmlAttribute
-    @Metadata(defaultValue = "1000")
-    private Long deliveryAttemptInterval;
+    @Metadata(defaultValue = "1000", javaType = "java.lang.Long")
+    private String deliveryAttemptInterval;
     @XmlAttribute
-    private Boolean ignoreInvalidExchanges;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String ignoreInvalidExchanges;
     @XmlTransient
     private ExpressionResultComparator comparator;
     @XmlAttribute
     private String comparatorRef;
     @XmlAttribute
-    private Boolean rejectOld;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String rejectOld;
 
     /**
      * Creates a new {@link StreamResequencerConfig} instance using default
@@ -115,9 +118,9 @@ public class StreamResequencerConfig extends ResequencerConfig {
      * @param comparator comparator for sequence comparision
      */
     public StreamResequencerConfig(int capacity, long timeout, Boolean rejectOld, ExpressionResultComparator comparator) {
-        this.capacity = capacity;
-        this.timeout = timeout;
-        this.rejectOld = rejectOld;
+        this.capacity = Integer.toString(capacity);
+        this.timeout = Long.toString(timeout);
+        this.rejectOld = rejectOld != null ? Boolean.toString(rejectOld) : null;
         this.comparator = comparator;
     }
 
@@ -133,29 +136,29 @@ public class StreamResequencerConfig extends ResequencerConfig {
         return new StreamResequencerConfig();
     }
 
-    public int getCapacity() {
+    public String getCapacity() {
         return capacity;
     }
 
     /**
      * Sets the capacity of the resequencer's inbound queue.
      */
-    public void setCapacity(int capacity) {
+    public void setCapacity(String capacity) {
         this.capacity = capacity;
     }
 
-    public long getTimeout() {
+    public String getTimeout() {
         return timeout;
     }
 
     /**
      * Sets minimum time to wait for missing elements (messages).
      */
-    public void setTimeout(long timeout) {
+    public void setTimeout(String timeout) {
         this.timeout = timeout;
     }
 
-    public Long getDeliveryAttemptInterval() {
+    public String getDeliveryAttemptInterval() {
         return deliveryAttemptInterval;
     }
 
@@ -163,18 +166,18 @@ public class StreamResequencerConfig extends ResequencerConfig {
      * Sets the interval in milli seconds the stream resequencer will at most
      * wait while waiting for condition of being able to deliver.
      */
-    public void setDeliveryAttemptInterval(Long deliveryAttemptInterval) {
+    public void setDeliveryAttemptInterval(String deliveryAttemptInterval) {
         this.deliveryAttemptInterval = deliveryAttemptInterval;
     }
 
-    public Boolean getIgnoreInvalidExchanges() {
+    public String getIgnoreInvalidExchanges() {
         return ignoreInvalidExchanges;
     }
 
     /**
      * Whether to ignore invalid exchanges
      */
-    public void setIgnoreInvalidExchanges(Boolean ignoreInvalidExchanges) {
+    public void setIgnoreInvalidExchanges(String ignoreInvalidExchanges) {
         this.ignoreInvalidExchanges = ignoreInvalidExchanges;
     }
 
@@ -204,11 +207,11 @@ public class StreamResequencerConfig extends ResequencerConfig {
      * If true, throws an exception when messages older than the last delivered
      * message are processed
      */
-    public void setRejectOld(boolean value) {
+    public void setRejectOld(String value) {
         this.rejectOld = value;
     }
 
-    public Boolean getRejectOld() {
+    public String getRejectOld() {
         return rejectOld;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/ASN1DataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/ASN1DataFormat.java
index 5e5bc63..bb3eb77 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/ASN1DataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/ASN1DataFormat.java
@@ -20,6 +20,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.Metadata;
@@ -33,7 +34,8 @@ import org.apache.camel.spi.Metadata;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class ASN1DataFormat extends DataFormatDefinition {
     @XmlAttribute
-    private Boolean usingIterator;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String usingIterator;
     @XmlAttribute
     private String clazzName;
 
@@ -43,16 +45,16 @@ public class ASN1DataFormat extends DataFormatDefinition {
 
     public ASN1DataFormat(Boolean usingIterator) {
         this();
-        setUsingIterator(usingIterator);
+        setUsingIterator(usingIterator != null ? usingIterator.toString() : null);
     }
 
     public ASN1DataFormat(String clazzName) {
         this();
-        setUsingIterator(Boolean.TRUE);
+        setUsingIterator(Boolean.toString(true));
         setClazzName(clazzName);
     }
 
-    public Boolean getUsingIterator() {
+    public String getUsingIterator() {
         return usingIterator;
     }
 
@@ -61,7 +63,7 @@ public class ASN1DataFormat extends DataFormatDefinition {
      * true, allows to work with the splitter EIP, to split the data using an
      * iterator in a streaming mode.
      */
-    public void setUsingIterator(Boolean usingIterator) {
+    public void setUsingIterator(String usingIterator) {
         this.usingIterator = usingIterator;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/Any23DataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/Any23DataFormat.java
index c65afac..97676a2 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/Any23DataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/Any23DataFormat.java
@@ -40,8 +40,9 @@ import org.apache.camel.spi.Metadata;
 public class Any23DataFormat extends DataFormatDefinition {
 
     @XmlAttribute
-    @Metadata(defaultValue = "RDF4JMODEL")
-    private Any23Type outputFormat;
+    @Metadata(defaultValue = "RDF4JMODEL", enums = "NTRIPLES,TURTLE,NQUADS,RDFXML,JSONLD,RDFJSON,RDF4JMODEL",
+              javaType="org.apache.camel.model.dataformat.Any23Type")
+    private String outputFormat;
     @XmlJavaTypeAdapter(PropertyDescriptionsAdapter.class)
     private Map<String, String> configuration = new HashMap<>();
     @XmlElement
@@ -60,23 +61,23 @@ public class Any23DataFormat extends DataFormatDefinition {
 
     public Any23DataFormat(String baseuri, Any23Type outputFormat) {
         this(baseuri);
-        this.outputFormat = outputFormat;
+        this.outputFormat = outputFormat.name();
     }
 
     public Any23DataFormat(String baseuri, Any23Type outputFormat, Map<String, String> configurations) {
         this(baseuri, outputFormat);
-        this.outputFormat = outputFormat;
+        this.outputFormat = outputFormat.name();
         this.configuration = configurations;
     }
 
     public Any23DataFormat(String baseuri, Any23Type outputFormat, Map<String, String> configurations, List<String> extractors) {
         this(baseuri, outputFormat, configurations);
-        this.outputFormat = outputFormat;
+        this.outputFormat = outputFormat.name();
         this.configuration = configurations;
         this.extractors = extractors;
     }
 
-    public Any23Type getOutputFormat() {
+    public String getOutputFormat() {
         return outputFormat;
     }
 
@@ -84,7 +85,7 @@ public class Any23DataFormat extends DataFormatDefinition {
      * What RDF syntax to unmarshal as, can be: NTRIPLES, TURTLE, NQUADS,
      * RDFXML, JSONLD, RDFJSON, RDF4JMODEL. It is by default: RDF4JMODEL.
      */
-    public void setOutputFormat(Any23Type outputFormat) {
+    public void setOutputFormat(String outputFormat) {
         this.outputFormat = outputFormat;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/BarcodeDataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/BarcodeDataFormat.java
index c5167bc..93bf062 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/BarcodeDataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/BarcodeDataFormat.java
@@ -20,6 +20,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.Metadata;
@@ -33,9 +34,11 @@ import org.apache.camel.spi.Metadata;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class BarcodeDataFormat extends DataFormatDefinition {
     @XmlAttribute
-    private Integer width;
+    @Metadata(javaType = "java.lang.Integer")
+    private String width;
     @XmlAttribute
-    private Integer height;
+    @Metadata(javaType = "java.lang.Integer")
+    private String height;
     @XmlAttribute
     private String imageType;
     @XmlAttribute
@@ -45,25 +48,25 @@ public class BarcodeDataFormat extends DataFormatDefinition {
         super("barcode");
     }
 
-    public Integer getWidth() {
+    public String getWidth() {
         return width;
     }
 
     /**
      * Width of the barcode
      */
-    public void setWidth(Integer width) {
+    public void setWidth(String width) {
         this.width = width;
     }
 
-    public Integer getHeight() {
+    public String getHeight() {
         return height;
     }
 
     /**
      * Height of the barcode
      */
-    public void setHeight(Integer height) {
+    public void setHeight(String height) {
         this.height = height;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java
index bd7c8b1..83c57d4 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java
@@ -20,6 +20,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.Metadata;
@@ -33,18 +34,19 @@ import org.apache.camel.spi.Metadata;
 public class Base64DataFormat extends DataFormatDefinition {
 
     @XmlAttribute
-    @Metadata(defaultValue = "76")
-    private Integer lineLength;
+    @Metadata(defaultValue = "76", javaType = "java.lang.Integer")
+    private String lineLength;
     @XmlAttribute
     private String lineSeparator;
     @XmlAttribute
-    private Boolean urlSafe;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String urlSafe;
 
     public Base64DataFormat() {
         super("base64");
     }
 
-    public Integer getLineLength() {
+    public String getLineLength() {
         return lineLength;
     }
 
@@ -53,7 +55,7 @@ public class Base64DataFormat extends DataFormatDefinition {
      * <p/>
      * By default 76 is used.
      */
-    public void setLineLength(Integer lineLength) {
+    public void setLineLength(String lineLength) {
         this.lineLength = lineLength;
     }
 
@@ -70,7 +72,7 @@ public class Base64DataFormat extends DataFormatDefinition {
         this.lineSeparator = lineSeparator;
     }
 
-    public Boolean getUrlSafe() {
+    public String getUrlSafe() {
         return urlSafe;
     }
 
@@ -79,7 +81,7 @@ public class Base64DataFormat extends DataFormatDefinition {
      * is only applied to encode operations. Decoding seamlessly handles both
      * modes. Is by default false.
      */
-    public void setUrlSafe(Boolean urlSafe) {
+    public void setUrlSafe(String urlSafe) {
         this.urlSafe = urlSafe;
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java
index 98afc2d..0ca7bff 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java
@@ -20,6 +20,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.Metadata;
@@ -38,19 +39,22 @@ public class BeanioDataFormat extends DataFormatDefinition {
     @XmlAttribute(required = true)
     private String streamName;
     @XmlAttribute
-    private Boolean ignoreUnidentifiedRecords;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String ignoreUnidentifiedRecords;
     @XmlAttribute
-    private Boolean ignoreUnexpectedRecords;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String ignoreUnexpectedRecords;
     @XmlAttribute
-    private Boolean ignoreInvalidRecords;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String ignoreInvalidRecords;
     @XmlAttribute
     private String encoding;
     @XmlAttribute
     @Metadata(label = "advanced")
     private String beanReaderErrorHandlerType;
     @XmlAttribute
-    @Metadata(label = "advanced")
-    private Boolean unmarshalSingleObject;
+    @Metadata(label = "advanced", javaType = "java.lang.Boolean")
+    private String unmarshalSingleObject;
 
     public BeanioDataFormat() {
         super("beanio");
@@ -80,36 +84,36 @@ public class BeanioDataFormat extends DataFormatDefinition {
         this.streamName = streamName;
     }
 
-    public Boolean getIgnoreUnidentifiedRecords() {
+    public String getIgnoreUnidentifiedRecords() {
         return ignoreUnidentifiedRecords;
     }
 
     /**
      * Whether to ignore unidentified records.
      */
-    public void setIgnoreUnidentifiedRecords(Boolean ignoreUnidentifiedRecords) {
+    public void setIgnoreUnidentifiedRecords(String ignoreUnidentifiedRecords) {
         this.ignoreUnidentifiedRecords = ignoreUnidentifiedRecords;
     }
 
-    public Boolean getIgnoreUnexpectedRecords() {
+    public String getIgnoreUnexpectedRecords() {
         return ignoreUnexpectedRecords;
     }
 
     /**
      * Whether to ignore unexpected records.
      */
-    public void setIgnoreUnexpectedRecords(Boolean ignoreUnexpectedRecords) {
+    public void setIgnoreUnexpectedRecords(String ignoreUnexpectedRecords) {
         this.ignoreUnexpectedRecords = ignoreUnexpectedRecords;
     }
 
-    public Boolean getIgnoreInvalidRecords() {
+    public String getIgnoreInvalidRecords() {
         return ignoreInvalidRecords;
     }
 
     /**
      * Whether to ignore invalid records.
      */
-    public void setIgnoreInvalidRecords(Boolean ignoreInvalidRecords) {
+    public void setIgnoreInvalidRecords(String ignoreInvalidRecords) {
         this.ignoreInvalidRecords = ignoreInvalidRecords;
     }
 
@@ -141,7 +145,7 @@ public class BeanioDataFormat extends DataFormatDefinition {
         this.beanReaderErrorHandlerType = beanReaderErrorHandlerType;
     }
 
-    public Boolean getUnmarshalSingleObject() {
+    public String getUnmarshalSingleObject() {
         return unmarshalSingleObject;
     }
 
@@ -151,7 +155,7 @@ public class BeanioDataFormat extends DataFormatDefinition {
      * only intended in special use-cases where beanio maps the Camel message to
      * a single POJO bean.
      */
-    public void setUnmarshalSingleObject(Boolean unmarshalSingleObject) {
+    public void setUnmarshalSingleObject(String unmarshalSingleObject) {
         this.unmarshalSingleObject = unmarshalSingleObject;
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/CBORDataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/CBORDataFormat.java
index 2fbbac6..724b6cd 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/CBORDataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/CBORDataFormat.java
@@ -36,8 +36,8 @@ public class CBORDataFormat extends DataFormatDefinition {
     @XmlAttribute
     private String objectMapper;
     @XmlAttribute
-    @Metadata(defaultValue = "true")
-    private Boolean useDefaultObjectMapper;
+    @Metadata(defaultValue = "true", javaType = "java.lang.Boolean")
+    private String useDefaultObjectMapper;
     @XmlAttribute
     private String unmarshalTypeName;
     @XmlTransient
@@ -47,13 +47,17 @@ public class CBORDataFormat extends DataFormatDefinition {
     @XmlTransient
     private Class<?> collectionType;
     @XmlAttribute
-    private Boolean useList;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String useList;
     @XmlAttribute
-    private Boolean allowUnmarshallType;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String allowUnmarshallType;
     @XmlAttribute
-    private Boolean prettyPrint;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String prettyPrint;
     @XmlAttribute
-    private Boolean allowJmsType;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String allowJmsType;
     @XmlAttribute
     private String enableFeatures;
     @XmlAttribute
@@ -75,7 +79,7 @@ public class CBORDataFormat extends DataFormatDefinition {
         this.objectMapper = objectMapper;
     }
 
-    public Boolean getUseDefaultObjectMapper() {
+    public String getUseDefaultObjectMapper() {
         return useDefaultObjectMapper;
     }
 
@@ -83,7 +87,7 @@ public class CBORDataFormat extends DataFormatDefinition {
      * Whether to lookup and use default Jackson CBOR ObjectMapper from the
      * registry.
      */
-    public void setUseDefaultObjectMapper(Boolean useDefaultObjectMapper) {
+    public void setUseDefaultObjectMapper(String useDefaultObjectMapper) {
         this.useDefaultObjectMapper = useDefaultObjectMapper;
     }
 
@@ -102,7 +106,7 @@ public class CBORDataFormat extends DataFormatDefinition {
         return unmarshalType;
     }
 
-    public Boolean getPrettyPrint() {
+    public String getPrettyPrint() {
         return prettyPrint;
     }
 
@@ -111,11 +115,11 @@ public class CBORDataFormat extends DataFormatDefinition {
      * <p/>
      * Is by default false.
      */
-    public void setPrettyPrint(Boolean prettyPrint) {
+    public void setPrettyPrint(String prettyPrint) {
         this.prettyPrint = prettyPrint;
     }
 
-    public Boolean getAllowJmsType() {
+    public String getAllowJmsType() {
         return allowJmsType;
     }
 
@@ -123,7 +127,7 @@ public class CBORDataFormat extends DataFormatDefinition {
      * Used for JMS users to allow the JMSType header from the JMS spec to
      * specify a FQN classname to use to unmarshal to.
      */
-    public void setAllowJmsType(Boolean allowJmsType) {
+    public void setAllowJmsType(String allowJmsType) {
         this.allowJmsType = allowJmsType;
     }
 
@@ -155,18 +159,18 @@ public class CBORDataFormat extends DataFormatDefinition {
         this.collectionType = collectionType;
     }
 
-    public Boolean getUseList() {
+    public String getUseList() {
         return useList;
     }
 
     /**
      * To unarmshal to a List of Map or a List of Pojo.
      */
-    public void setUseList(Boolean useList) {
+    public void setUseList(String useList) {
         this.useList = useList;
     }
 
-    public Boolean getAllowUnmarshallType() {
+    public String getAllowUnmarshallType() {
         return allowUnmarshallType;
     }
 
@@ -176,7 +180,7 @@ public class CBORDataFormat extends DataFormatDefinition {
      * <p/>
      * This should only be enabled when desired to be used.
      */
-    public void setAllowUnmarshallType(Boolean allowUnmarshallType) {
+    public void setAllowUnmarshallType(String allowUnmarshallType) {
         this.allowUnmarshallType = allowUnmarshallType;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
index f6fab9d..614317f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
@@ -43,14 +43,17 @@ public class CryptoDataFormat extends DataFormatDefinition {
     @XmlAttribute
     private String algorithmParameterRef;
     @XmlAttribute
-    private Integer buffersize;
+    @Metadata(javaType = "java.lang.Integer")
+    private String buffersize;
     @XmlAttribute
     @Metadata(defaultValue = "HmacSHA1")
     private String macAlgorithm = "HmacSHA1";
     @XmlAttribute
-    private Boolean shouldAppendHMAC;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String shouldAppendHMAC;
     @XmlAttribute
-    private Boolean inline;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String inline;
 
     public CryptoDataFormat() {
         super("crypto");
@@ -117,14 +120,14 @@ public class CryptoDataFormat extends DataFormatDefinition {
         this.algorithmParameterRef = algorithmParameterRef;
     }
 
-    public Integer getBuffersize() {
+    public String getBuffersize() {
         return buffersize;
     }
 
     /**
      * The size of the buffer used in the signature process.
      */
-    public void setBuffersize(Integer buffersize) {
+    public void setBuffersize(String buffersize) {
         this.buffersize = buffersize;
     }
 
@@ -139,7 +142,7 @@ public class CryptoDataFormat extends DataFormatDefinition {
         this.macAlgorithm = macAlgorithm;
     }
 
-    public Boolean getShouldAppendHMAC() {
+    public String getShouldAppendHMAC() {
         return shouldAppendHMAC;
     }
 
@@ -147,11 +150,11 @@ public class CryptoDataFormat extends DataFormatDefinition {
      * Flag indicating that a Message Authentication Code should be calculated
      * and appended to the encrypted data.
      */
-    public void setShouldAppendHMAC(Boolean shouldAppendHMAC) {
+    public void setShouldAppendHMAC(String shouldAppendHMAC) {
         this.shouldAppendHMAC = shouldAppendHMAC;
     }
 
-    public Boolean getInline() {
+    public String getInline() {
         return inline;
     }
 
@@ -161,7 +164,7 @@ public class CryptoDataFormat extends DataFormatDefinition {
      * <p/>
      * Is by default false.
      */
-    public void setInline(Boolean inline) {
+    public void setInline(String inline) {
         this.inline = inline;
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
index 0d69fd8..80a11e3 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
@@ -36,7 +36,8 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
     @XmlAttribute
     private String xmlMapper;
     @XmlAttribute
-    private Boolean prettyPrint;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String prettyPrint;
     @XmlAttribute
     private String unmarshalTypeName;
     @XmlTransient
@@ -46,15 +47,18 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
     @XmlAttribute
     private String include;
     @XmlAttribute
-    private Boolean allowJmsType;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String allowJmsType;
     @XmlAttribute
     private String collectionTypeName;
     @XmlTransient
     private Class<?> collectionType;
     @XmlAttribute
-    private Boolean useList;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String useList;
     @XmlAttribute
-    private Boolean enableJaxbAnnotationModule;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String enableJaxbAnnotationModule;
     @XmlAttribute
     private String moduleClassNames;
     @XmlAttribute
@@ -64,7 +68,8 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
     @XmlAttribute
     private String disableFeatures;
     @XmlAttribute
-    private Boolean allowUnmarshallType;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String allowUnmarshallType;
 
     public JacksonXMLDataFormat() {
         super("jacksonxml");
@@ -81,7 +86,7 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
         this.xmlMapper = xmlMapper;
     }
 
-    public Boolean getPrettyPrint() {
+    public String getPrettyPrint() {
         return prettyPrint;
     }
 
@@ -90,7 +95,7 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
      * <p/>
      * Is by default false.
      */
-    public void setPrettyPrint(Boolean prettyPrint) {
+    public void setPrettyPrint(String prettyPrint) {
         this.prettyPrint = prettyPrint;
     }
 
@@ -143,7 +148,7 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
         this.include = include;
     }
 
-    public Boolean getAllowJmsType() {
+    public String getAllowJmsType() {
         return allowJmsType;
     }
 
@@ -151,7 +156,7 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
      * Used for JMS users to allow the JMSType header from the JMS spec to
      * specify a FQN classname to use to unmarshal to.
      */
-    public void setAllowJmsType(Boolean allowJmsType) {
+    public void setAllowJmsType(String allowJmsType) {
         this.allowJmsType = allowJmsType;
     }
 
@@ -176,18 +181,18 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
         this.collectionType = collectionType;
     }
 
-    public Boolean getUseList() {
+    public String getUseList() {
         return useList;
     }
 
     /**
      * To unarmshal to a List of Map or a List of Pojo.
      */
-    public void setUseList(Boolean useList) {
+    public void setUseList(String useList) {
         this.useList = useList;
     }
 
-    public Boolean getEnableJaxbAnnotationModule() {
+    public String getEnableJaxbAnnotationModule() {
         return enableJaxbAnnotationModule;
     }
 
@@ -195,7 +200,7 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
      * Whether to enable the JAXB annotations module when using jackson. When
      * enabled then JAXB annotations can be used by Jackson.
      */
-    public void setEnableJaxbAnnotationModule(Boolean enableJaxbAnnotationModule) {
+    public void setEnableJaxbAnnotationModule(String enableJaxbAnnotationModule) {
         this.enableJaxbAnnotationModule = enableJaxbAnnotationModule;
     }
 
@@ -262,7 +267,7 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
         this.disableFeatures = disableFeatures;
     }
 
-    public Boolean getAllowUnmarshallType() {
+    public String getAllowUnmarshallType() {
         return allowUnmarshallType;
     }
 
@@ -272,7 +277,7 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
      * <p/>
      * This should only be enabled when desired to be used.
      */
-    public void setAllowUnmarshallType(Boolean allowUnmarshallType) {
+    public void setAllowUnmarshallType(String allowUnmarshallType) {
         this.allowUnmarshallType = allowUnmarshallType;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java
index 5d9b2ca..4ab88ae 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java
@@ -47,18 +47,22 @@ public class PGPDataFormat extends DataFormatDefinition {
     @XmlAttribute
     private String signatureKeyRing;
     @XmlAttribute
-    private Boolean armored;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String armored;
     @XmlAttribute
-    @Metadata(defaultValue = "true")
-    private Boolean integrity;
+    @Metadata(defaultValue = "true", javaType = "java.lang.Boolean")
+    private String integrity;
     @XmlAttribute
     private String provider;
     @XmlAttribute
-    private Integer algorithm;
+    @Metadata(javaType = "java.lang.Integer")
+    private String algorithm;
     @XmlAttribute
-    private Integer compressionAlgorithm;
+    @Metadata(javaType = "java.lang.Integer")
+    private String compressionAlgorithm;
     @XmlAttribute
-    private Integer hashAlgorithm;
+    @Metadata(javaType = "java.lang.Integer")
+    private String hashAlgorithm;
     @XmlAttribute
     private String signatureVerificationOption;
 
@@ -123,7 +127,7 @@ public class PGPDataFormat extends DataFormatDefinition {
         this.signatureKeyRing = signatureKeyRing;
     }
 
-    public Integer getHashAlgorithm() {
+    public String getHashAlgorithm() {
         return hashAlgorithm;
     }
 
@@ -133,11 +137,11 @@ public class PGPDataFormat extends DataFormatDefinition {
      * SHA256), 9 (= SHA384), 10 (= SHA512), 11 (=SHA224). Only relevant for
      * signing.
      */
-    public void setHashAlgorithm(Integer hashAlgorithm) {
+    public void setHashAlgorithm(String hashAlgorithm) {
         this.hashAlgorithm = hashAlgorithm;
     }
 
-    public Boolean getArmored() {
+    public String getArmored() {
         return armored;
     }
 
@@ -145,11 +149,11 @@ public class PGPDataFormat extends DataFormatDefinition {
      * This option will cause PGP to base64 encode the encrypted text, making it
      * available for copy/paste, etc.
      */
-    public void setArmored(Boolean armored) {
+    public void setArmored(String armored) {
         this.armored = armored;
     }
 
-    public Boolean getIntegrity() {
+    public String getIntegrity() {
         return integrity;
     }
 
@@ -158,7 +162,7 @@ public class PGPDataFormat extends DataFormatDefinition {
      * <p/>
      * The default value is true.
      */
-    public void setIntegrity(Boolean integrity) {
+    public void setIntegrity(String integrity) {
         this.integrity = integrity;
     }
 
@@ -193,7 +197,7 @@ public class PGPDataFormat extends DataFormatDefinition {
         return password;
     }
 
-    public Integer getAlgorithm() {
+    public String getAlgorithm() {
         return algorithm;
     }
 
@@ -203,11 +207,11 @@ public class PGPDataFormat extends DataFormatDefinition {
      * DES), 3 (= CAST5), 4 (= BLOWFISH), 6 (= DES), 7 (= AES_128). Only
      * relevant for encrypting.
      */
-    public void setAlgorithm(Integer algorithm) {
+    public void setAlgorithm(String algorithm) {
         this.algorithm = algorithm;
     }
 
-    public Integer getCompressionAlgorithm() {
+    public String getCompressionAlgorithm() {
         return compressionAlgorithm;
     }
 
@@ -217,7 +221,7 @@ public class PGPDataFormat extends DataFormatDefinition {
      * UNCOMPRESSED), 1 (= ZIP), 2 (= ZLIB), 3 (= BZIP2). Only relevant for
      * encrypting.
      */
-    public void setCompressionAlgorithm(Integer compressionAlgorithm) {
+    public void setCompressionAlgorithm(String compressionAlgorithm) {
         this.compressionAlgorithm = compressionAlgorithm;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/UniVocityHeader.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/UniVocityHeader.java
index dff7715..a813a6b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/UniVocityHeader.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/UniVocityHeader.java
@@ -34,7 +34,7 @@ public class UniVocityHeader {
     @XmlValue
     private String name;
     @XmlAttribute
-    private Integer length;
+    private String length;
 
     public String getName() {
         return name;
@@ -47,14 +47,14 @@ public class UniVocityHeader {
         this.name = name;
     }
 
-    public Integer getLength() {
+    public String getLength() {
         return length;
     }
 
     /**
      * Header length
      */
-    public void setLength(Integer length) {
+    public void setLength(String length) {
         this.length = length;
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
index a73b6fe..e81c4cf 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAnyAttribute;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlID;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlValue;
@@ -64,8 +65,8 @@ public class ExpressionDefinition implements Expression, Predicate, OtherAttribu
     @Metadata(required = true)
     private String expression;
     @XmlAttribute
-    @Metadata(defaultValue = "true")
-    private Boolean trim;
+    @Metadata(defaultValue = "true", javaType = "java.lang.Boolean")
+    private String trim;
     @XmlTransient
     private Predicate predicate;
     @XmlTransient
@@ -171,7 +172,7 @@ public class ExpressionDefinition implements Expression, Predicate, OtherAttribu
                 }
                 String exp = getExpression();
                 // should be true by default
-                boolean isTrim = getTrim() == null || getTrim();
+                boolean isTrim = getTrim() == null || Boolean.parseBoolean(getTrim());
                 // trim if configured to trim
                 if (exp != null && isTrim) {
                     exp = exp.trim();
@@ -208,7 +209,7 @@ public class ExpressionDefinition implements Expression, Predicate, OtherAttribu
                 }
                 String exp = getExpression();
                 // should be true by default
-                boolean isTrim = getTrim() == null || getTrim();
+                boolean isTrim = getTrim() == null || Boolean.parseBoolean(getTrim());
                 // trim if configured to trim
                 if (exp != null && isTrim) {
                     exp = exp.trim();
@@ -266,7 +267,7 @@ public class ExpressionDefinition implements Expression, Predicate, OtherAttribu
         return expressionType;
     }
 
-    public Boolean getTrim() {
+    public String getTrim() {
         return trim;
     }
 
@@ -274,7 +275,7 @@ public class ExpressionDefinition implements Expression, Predicate, OtherAttribu
      * Whether to trim the value to remove leading and trailing whitespaces and
      * line breaks
      */
-    public void setTrim(Boolean trim) {
+    public void setTrim(String trim) {
         this.trim = trim;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/JsonPathExpression.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/JsonPathExpression.java
index e853b7f..6c40c64 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/JsonPathExpression.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/JsonPathExpression.java
@@ -20,6 +20,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.CamelContext;
@@ -41,17 +42,17 @@ public class JsonPathExpression extends ExpressionDefinition {
     @XmlTransient
     private Class<?> resultType;
     @XmlAttribute
-    @Metadata(defaultValue = "false")
-    private Boolean suppressExceptions;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String suppressExceptions;
     @XmlAttribute
-    @Metadata(defaultValue = "true")
-    private Boolean allowSimple;
+    @Metadata(defaultValue = "true", javaType = "java.lang.Boolean")
+    private String allowSimple;
     @XmlAttribute
-    @Metadata(defaultValue = "true")
-    private Boolean allowEasyPredicate;
+    @Metadata(defaultValue = "true", javaType = "java.lang.Boolean")
+    private String allowEasyPredicate;
     @XmlAttribute
-    @Metadata(defaultValue = "false")
-    private Boolean writeAsString;
+    @Metadata(defaultValue = "false", javaType = "java.lang.Boolean")
+    private String writeAsString;
     @XmlAttribute
     private String headerName;
 
@@ -84,40 +85,40 @@ public class JsonPathExpression extends ExpressionDefinition {
         this.resultType = resultType;
     }
 
-    public Boolean getSuppressExceptions() {
+    public String getSuppressExceptions() {
         return suppressExceptions;
     }
 
-    public Boolean getAllowSimple() {
+    public String getAllowSimple() {
         return allowSimple;
     }
 
     /**
      * Whether to allow in inlined simple exceptions in the JsonPath expression
      */
-    public void setAllowSimple(Boolean allowSimple) {
+    public void setAllowSimple(String allowSimple) {
         this.allowSimple = allowSimple;
     }
 
-    public Boolean getAllowEasyPredicate() {
+    public String getAllowEasyPredicate() {
         return allowEasyPredicate;
     }
 
     /**
      * Whether to allow using the easy predicate parser to pre-parse predicates.
      */
-    public void setAllowEasyPredicate(Boolean allowEasyPredicate) {
+    public void setAllowEasyPredicate(String allowEasyPredicate) {
         this.allowEasyPredicate = allowEasyPredicate;
     }
 
     /**
      * Whether to suppress exceptions such as PathNotFoundException.
      */
-    public void setSuppressExceptions(Boolean suppressExceptions) {
+    public void setSuppressExceptions(String suppressExceptions) {
         this.suppressExceptions = suppressExceptions;
     }
 
-    public Boolean getWriteAsString() {
+    public String getWriteAsString() {
         return writeAsString;
     }
 
@@ -125,7 +126,7 @@ public class JsonPathExpression extends ExpressionDefinition {
      * Whether to write the output of each row/element as a JSON String value
      * instead of a Map/POJO value.
      */
-    public void setWriteAsString(Boolean writeAsString) {
+    public void setWriteAsString(String writeAsString) {
         this.writeAsString = writeAsString;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/SimpleExpression.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/SimpleExpression.java
index 45644b4..ba19330 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/SimpleExpression.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/SimpleExpression.java
@@ -91,7 +91,7 @@ public class SimpleExpression extends ExpressionDefinition {
 
         String exp = getExpression();
         // should be true by default
-        boolean isTrim = getTrim() == null || getTrim();
+        boolean isTrim = getTrim() == null || Boolean.parseBoolean(getTrim());
         if (exp != null && isTrim) {
             exp = exp.trim();
         }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/TokenizerExpression.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/TokenizerExpression.java
index 2f6f761..ea1c1ea 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/TokenizerExpression.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/TokenizerExpression.java
@@ -20,6 +20,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
@@ -47,17 +48,21 @@ public class TokenizerExpression extends ExpressionDefinition {
     @XmlAttribute
     private String headerName;
     @XmlAttribute
-    private Boolean regex;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String regex;
     @XmlAttribute
-    private Boolean xml;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String xml;
     @XmlAttribute
-    private Boolean includeTokens;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String includeTokens;
     @XmlAttribute
     private String group;
     @XmlAttribute
     private String groupDelimiter;
     @XmlAttribute
-    private Boolean skipFirst;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String skipFirst;
 
     public TokenizerExpression() {
     }
@@ -112,11 +117,11 @@ public class TokenizerExpression extends ExpressionDefinition {
      * <p/>
      * The default value is false
      */
-    public void setRegex(boolean regex) {
+    public void setRegex(String regex) {
         this.regex = regex;
     }
 
-    public Boolean getRegex() {
+    public String getRegex() {
         return regex;
     }
 
@@ -132,7 +137,7 @@ public class TokenizerExpression extends ExpressionDefinition {
         this.inheritNamespaceTagName = inheritNamespaceTagName;
     }
 
-    public Boolean getXml() {
+    public String getXml() {
         return xml;
     }
 
@@ -140,11 +145,11 @@ public class TokenizerExpression extends ExpressionDefinition {
      * Whether the input is XML messages. This option must be set to true if
      * working with XML payloads.
      */
-    public void setXml(Boolean xml) {
+    public void setXml(String xml) {
         this.xml = xml;
     }
 
-    public Boolean getIncludeTokens() {
+    public String getIncludeTokens() {
         return includeTokens;
     }
 
@@ -153,7 +158,7 @@ public class TokenizerExpression extends ExpressionDefinition {
      * <p/>
      * The default value is false
      */
-    public void setIncludeTokens(Boolean includeTokens) {
+    public void setIncludeTokens(String includeTokens) {
         this.includeTokens = includeTokens;
     }
 
@@ -182,14 +187,14 @@ public class TokenizerExpression extends ExpressionDefinition {
         this.groupDelimiter = groupDelimiter;
     }
 
-    public Boolean getSkipFirst() {
+    public String getSkipFirst() {
         return skipFirst;
     }
 
     /**
      * To skip the very first element
      */
-    public void setSkipFirst(Boolean skipFirst) {
+    public void setSkipFirst(String skipFirst) {
         this.skipFirst = skipFirst;
     }
 
@@ -208,20 +213,20 @@ public class TokenizerExpression extends ExpressionDefinition {
         language.setHeaderName(headerName);
         language.setGroupDelimiter(groupDelimiter);
         if (regex != null) {
-            language.setRegex(regex);
+            language.setRegex(Boolean.parseBoolean(regex));
         }
         if (xml != null) {
-            language.setXml(xml);
+            language.setXml(Boolean.parseBoolean(xml));
         }
         if (includeTokens != null) {
-            language.setIncludeTokens(includeTokens);
+            language.setIncludeTokens(Boolean.parseBoolean(includeTokens));
         }
         if (group != null && !"0".equals(group)) {
             language.setGroup(group);
         }
 
         if (skipFirst != null) {
-            language.setSkipFirst(skipFirst);
+            language.setSkipFirst(Boolean.parseBoolean(skipFirst));
         }
         return language.createExpression();
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
index 2696f9b..5c6e410 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
@@ -20,6 +20,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
@@ -41,7 +42,8 @@ public class XMLTokenizerExpression extends NamespaceAwareExpression {
     @XmlAttribute
     private String mode;
     @XmlAttribute
-    private Integer group;
+    @Metadata(javaType = "java.lang.Integer")
+    private String group;
 
     public XMLTokenizerExpression() {
     }
@@ -84,14 +86,14 @@ public class XMLTokenizerExpression extends NamespaceAwareExpression {
         this.mode = mode;
     }
 
-    public Integer getGroup() {
+    public String getGroup() {
         return group;
     }
 
     /**
      * To group N parts together
      */
-    public void setGroup(Integer group) {
+    public void setGroup(String group) {
         this.group = group;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/XPathExpression.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/XPathExpression.java
index 1dfbf36..8e130df 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/language/XPathExpression.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/language/XPathExpression.java
@@ -20,6 +20,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.xpath.XPathFactory;
 
@@ -44,7 +45,8 @@ public class XPathExpression extends NamespaceAwareExpression {
     @Metadata(defaultValue = "NODESET", enums = "NUMBER,STRING,BOOLEAN,NODESET,NODE")
     private String resultTypeName;
     @XmlAttribute
-    private Boolean saxon;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String saxon;
     @XmlAttribute
     @Metadata(label = "advanced")
     private String factoryRef;
@@ -52,7 +54,8 @@ public class XPathExpression extends NamespaceAwareExpression {
     @Metadata(label = "advanced")
     private String objectModel;
     @XmlAttribute
-    private Boolean logNamespaces;
+    @Metadata(javaType = "java.lang.Boolean")
+    private String logNamespaces;
     @XmlAttribute
     private String headerName;
     @XmlTransient
@@ -62,8 +65,8 @@ public class XPathExpression extends NamespaceAwareExpression {
     @XmlTransient
     private XPathFactory xpathFactory;
     @XmlAttribute
-    @Metadata(label = "advanced")
-    private Boolean threadSafety;
+    @Metadata(label = "advanced", javaType = "java.lang.Boolean")
+    private String threadSafety;
 
     public XPathExpression() {
     }
@@ -136,11 +139,11 @@ public class XPathExpression extends NamespaceAwareExpression {
     /**
      * Whether to use Saxon.
      */
-    public void setSaxon(Boolean saxon) {
+    public void setSaxon(String saxon) {
         this.saxon = saxon;
     }
 
-    public Boolean getSaxon() {
+    public String getSaxon() {
         return saxon;
     }
 
@@ -169,11 +172,11 @@ public class XPathExpression extends NamespaceAwareExpression {
     /**
      * Whether to log namespaces which can assist during trouble shooting
      */
-    public void setLogNamespaces(Boolean logNamespaces) {
+    public void setLogNamespaces(String logNamespaces) {
         this.logNamespaces = logNamespaces;
     }
 
-    public Boolean getLogNamespaces() {
+    public String getLogNamespaces() {
         return logNamespaces;
     }
 
@@ -188,7 +191,7 @@ public class XPathExpression extends NamespaceAwareExpression {
         this.headerName = headerName;
     }
 
-    public Boolean getThreadSafety() {
+    public String getThreadSafety() {
         return threadSafety;
     }
 
@@ -204,7 +207,7 @@ public class XPathExpression extends NamespaceAwareExpression {
      * Saxon in your application. Saxon has thread-safety issues which can be
      * prevented by turning this option on.
      */
-    public void setThreadSafety(Boolean threadSafety) {
+    public void setThreadSafety(String threadSafety) {
         this.threadSafety = threadSafety;
     }
 
@@ -243,8 +246,8 @@ public class XPathExpression extends NamespaceAwareExpression {
 
     @Override
     protected void configureExpression(CamelContext camelContext, Expression expression) {
-        boolean isSaxon = getSaxon() != null && getSaxon();
-        boolean isLogNamespaces = getLogNamespaces() != null && getLogNamespaces();
+        boolean isSaxon = getSaxon() != null && Boolean.parseBoolean(getSaxon());
+        boolean isLogNamespaces = getLogNamespaces() != null && Boolean.parseBoolean(getLogNamespaces());
 
         if (documentType != null) {
             setProperty(camelContext, expression, "documentType", documentType);
@@ -277,8 +280,8 @@ public class XPathExpression extends NamespaceAwareExpression {
 
     @Override
     protected void configurePredicate(CamelContext camelContext, Predicate predicate) {
-        boolean isSaxon = getSaxon() != null && getSaxon();
-        boolean isLogNamespaces = getLogNamespaces() != null && getLogNamespaces();
+        boolean isSaxon = getSaxon() != null && Boolean.parseBoolean(getSaxon());
+        boolean isLogNamespaces = getLogNamespaces() != null && Boolean.parseBoolean(getLogNamespaces());
 
         if (documentType != null) {
             setProperty(camelContext, predicate, "documentType", documentType);
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java
index 6f2470b..fbe8ac8 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java
@@ -46,12 +46,12 @@ public class FailoverLoadBalancerDefinition extends LoadBalancerDefinition {
     @XmlElement(name = "exception")
     private List<String> exceptions = new ArrayList<>();
     @XmlAttribute
-    private Boolean roundRobin;
+    private String roundRobin;
     @XmlAttribute
-    private Boolean sticky;
+    private String sticky;
     @XmlAttribute
     @Metadata(defaultValue = "-1")
-    private Integer maximumFailoverAttempts;
+    private String maximumFailoverAttempts;
 
     public FailoverLoadBalancerDefinition() {
     }
@@ -80,7 +80,7 @@ public class FailoverLoadBalancerDefinition extends LoadBalancerDefinition {
         this.exceptionTypes = exceptionTypes;
     }
 
-    public Boolean getRoundRobin() {
+    public String getRoundRobin() {
         return roundRobin;
     }
 
@@ -95,11 +95,11 @@ public class FailoverLoadBalancerDefinition extends LoadBalancerDefinition {
      * will pick the last known good endpoint to use when starting the load
      * balancing (instead of using the next when starting).
      */
-    public void setRoundRobin(Boolean roundRobin) {
+    public void setRoundRobin(String roundRobin) {
         this.roundRobin = roundRobin;
     }
 
-    public Boolean getSticky() {
+    public String getSticky() {
         return sticky;
     }
 
@@ -114,11 +114,11 @@ public class FailoverLoadBalancerDefinition extends LoadBalancerDefinition {
      * will pick the last known good endpoint to use when starting the load
      * balancing (instead of using the next when starting).
      */
-    public void setSticky(Boolean sticky) {
+    public void setSticky(String sticky) {
         this.sticky = sticky;
     }
 
-    public Integer getMaximumFailoverAttempts() {
+    public String getMaximumFailoverAttempts() {
         return maximumFailoverAttempts;
     }
 
@@ -129,7 +129,7 @@ public class FailoverLoadBalancerDefinition extends LoadBalancerDefinition {
      * before giving up. his option can be used whether or not roundRobin is
      * enabled or not.
      */
-    public void setMaximumFailoverAttempts(Integer maximumFailoverAttempts) {
+    public void setMaximumFailoverAttempts(String maximumFailoverAttempts) {
         this.maximumFailoverAttempts = maximumFailoverAttempts;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/loadbalancer/WeightedLoadBalancerDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/loadbalancer/WeightedLoadBalancerDefinition.java
index 4930844..575035e 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/loadbalancer/WeightedLoadBalancerDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/loadbalancer/WeightedLoadBalancerDefinition.java
@@ -35,7 +35,7 @@ import org.apache.camel.spi.Metadata;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class WeightedLoadBalancerDefinition extends LoadBalancerDefinition {
     @XmlAttribute
-    private Boolean roundRobin;
+    private String roundRobin;
     @XmlAttribute(required = true)
     private String distributionRatio;
     @XmlAttribute
@@ -45,7 +45,7 @@ public class WeightedLoadBalancerDefinition extends LoadBalancerDefinition {
     public WeightedLoadBalancerDefinition() {
     }
 
-    public Boolean getRoundRobin() {
+    public String getRoundRobin() {
         return roundRobin;
     }
 
@@ -55,7 +55,7 @@ public class WeightedLoadBalancerDefinition extends LoadBalancerDefinition {
      * <p/>
      * The default value is false.
      */
-    public void setRoundRobin(Boolean roundRobin) {
+    public void setRoundRobin(String roundRobin) {
         this.roundRobin = roundRobin;
     }
 
@@ -88,11 +88,12 @@ public class WeightedLoadBalancerDefinition extends LoadBalancerDefinition {
 
     @Override
     public String toString() {
-        boolean isRoundRobin = getRoundRobin() != null && getRoundRobin();
-        if (isRoundRobin) {
+        if (roundRobin == null || Boolean.FALSE.toString().equals(roundRobin)) {
+            return "WeightedRandomLoadBalancer[" + distributionRatio + "]";
+        } else if (roundRobin != null && Boolean.TRUE.toString().equals(roundRobin)) {
             return "WeightedRoundRobinLoadBalancer[" + distributionRatio + "]";
         } else {
-            return "WeightedRandomLoadBalancer[" + distributionRatio + "]";
+            return "WeightedLoadBalancer[roundRobin=" + roundRobin + "," + distributionRatio + "]";
         }
     }
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestBindingDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestBindingDefinition.java
index 0187b51..8c7ffc0 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestBindingDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestBindingDefinition.java
@@ -58,7 +58,7 @@ public class RestBindingDefinition extends OptionalIdentifiedDefinition<RestBind
 
     @XmlAttribute
     @Metadata(defaultValue = "off")
-    private RestBindingMode bindingMode;
+    private String bindingMode;
 
     @XmlAttribute
     private String type;
@@ -67,13 +67,13 @@ public class RestBindingDefinition extends OptionalIdentifiedDefinition<RestBind
     private String outType;
 
     @XmlAttribute
-    private Boolean skipBindingOnErrorCode;
+    private String skipBindingOnErrorCode;
 
     @XmlAttribute
-    private Boolean clientRequestValidation;
+    private String clientRequestValidation;
 
     @XmlAttribute
-    private Boolean enableCORS;
+    private String enableCORS;
 
     @XmlAttribute
     private String component;
@@ -181,7 +181,7 @@ public class RestBindingDefinition extends OptionalIdentifiedDefinition<RestBind
         this.produces = produces;
     }
 
-    public RestBindingMode getBindingMode() {
+    public String getBindingMode() {
         return bindingMode;
     }
 
@@ -190,7 +190,7 @@ public class RestBindingDefinition extends OptionalIdentifiedDefinition<RestBind
      * <p/>
      * The default value is off
      */
-    public void setBindingMode(RestBindingMode bindingMode) {
+    public void setBindingMode(String bindingMode) {
         this.bindingMode = bindingMode;
     }
 
@@ -224,7 +224,7 @@ public class RestBindingDefinition extends OptionalIdentifiedDefinition<RestBind
         this.outType = outType;
     }
 
-    public Boolean getSkipBindingOnErrorCode() {
+    public String getSkipBindingOnErrorCode() {
         return skipBindingOnErrorCode;
     }
 
@@ -233,11 +233,11 @@ public class RestBindingDefinition extends OptionalIdentifiedDefinition<RestBind
      * header. This allows to build custom error messages that do not bind to
      * json / xml etc, as success messages otherwise will do.
      */
-    public void setSkipBindingOnErrorCode(Boolean skipBindingOnErrorCode) {
+    public void setSkipBindingOnErrorCode(String skipBindingOnErrorCode) {
         this.skipBindingOnErrorCode = skipBindingOnErrorCode;
     }
 
-    public Boolean getClientRequestValidation() {
+    public String getClientRequestValidation() {
         return clientRequestValidation;
     }
 
@@ -251,11 +251,11 @@ public class RestBindingDefinition extends OptionalIdentifiedDefinition<RestBind
      * <p/>
      * The default value is false.
      */
-    public void setClientRequestValidation(Boolean clientRequestValidation) {
+    public void setClientRequestValidation(String clientRequestValidation) {
         this.clientRequestValidation = clientRequestValidation;
     }
 
-    public Boolean getEnableCORS() {
+    public String getEnableCORS() {
         return enableCORS;
     }
 
@@ -264,7 +264,7 @@ public class RestBindingDefinition extends OptionalIdentifiedDefinition<RestBind
      * <p/>
      * The default value is false.
      */
-    public void setEnableCORS(Boolean enableCORS) {
+    public void setEnableCORS(String enableCORS) {
         this.enableCORS = enableCORS;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestDefinition.java
index 8e25341..84db31f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestDefinition.java
@@ -72,19 +72,19 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
 
     @XmlAttribute
     @Metadata(defaultValue = "auto")
-    private RestBindingMode bindingMode;
+    private String bindingMode;
 
     @XmlAttribute
-    private Boolean skipBindingOnErrorCode;
+    private String skipBindingOnErrorCode;
 
     @XmlAttribute
-    private Boolean clientRequestValidation;
+    private String clientRequestValidation;
 
     @XmlAttribute
-    private Boolean enableCORS;
+    private String enableCORS;
 
     @XmlAttribute
-    private Boolean apiDocs;
+    private String apiDocs;
 
     @XmlElement(name = "securityDefinitions") // use the name swagger uses
     private RestSecuritiesDefinition securityDefinitions;
@@ -151,7 +151,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
         this.produces = produces;
     }
 
-    public RestBindingMode getBindingMode() {
+    public String getBindingMode() {
         return bindingMode;
     }
 
@@ -161,7 +161,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
      * <p/>
      * The default value is auto
      */
-    public void setBindingMode(RestBindingMode bindingMode) {
+    public void setBindingMode(String bindingMode) {
         this.bindingMode = bindingMode;
     }
 
@@ -187,7 +187,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
         this.verbs = verbs;
     }
 
-    public Boolean getSkipBindingOnErrorCode() {
+    public String getSkipBindingOnErrorCode() {
         return skipBindingOnErrorCode;
     }
 
@@ -197,11 +197,11 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
      * json / xml etc, as success messages otherwise will do. This option will
      * override what may be configured on a parent level
      */
-    public void setSkipBindingOnErrorCode(Boolean skipBindingOnErrorCode) {
+    public void setSkipBindingOnErrorCode(String skipBindingOnErrorCode) {
         this.skipBindingOnErrorCode = skipBindingOnErrorCode;
     }
 
-    public Boolean getClientRequestValidation() {
+    public String getClientRequestValidation() {
         return clientRequestValidation;
     }
 
@@ -215,11 +215,11 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
      * <p/>
      * The default value is false.
      */
-    public void setClientRequestValidation(Boolean clientRequestValidation) {
+    public void setClientRequestValidation(String clientRequestValidation) {
         this.clientRequestValidation = clientRequestValidation;
     }
 
-    public Boolean getEnableCORS() {
+    public String getEnableCORS() {
         return enableCORS;
     }
 
@@ -229,11 +229,11 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
      * <p/>
      * The default value is false.
      */
-    public void setEnableCORS(Boolean enableCORS) {
+    public void setEnableCORS(String enableCORS) {
         this.enableCORS = enableCORS;
     }
 
-    public Boolean getApiDocs() {
+    public String getApiDocs() {
         return apiDocs;
     }
 
@@ -243,7 +243,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
      * <p/>
      * The default value is true.
      */
-    public void setApiDocs(Boolean apiDocs) {
+    public void setApiDocs(String apiDocs) {
         this.apiDocs = apiDocs;
     }
 
@@ -479,27 +479,27 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
 
     public RestDefinition bindingMode(RestBindingMode mode) {
         if (getVerbs().isEmpty()) {
-            this.bindingMode = mode;
+            this.bindingMode = mode.name();
         } else {
             // add on last verb as that is how the Java DSL works
             VerbDefinition verb = getVerbs().get(getVerbs().size() - 1);
-            verb.setBindingMode(mode);
+            verb.setBindingMode(mode.name());
         }
 
         return this;
     }
 
     public RestDefinition bindingMode(String mode) {
-        return bindingMode(RestBindingMode.valueOf(mode.toLowerCase()));
+        return bindingMode(mode.toLowerCase());
     }
 
     public RestDefinition skipBindingOnErrorCode(boolean skipBindingOnErrorCode) {
         if (getVerbs().isEmpty()) {
-            this.skipBindingOnErrorCode = skipBindingOnErrorCode;
+            this.skipBindingOnErrorCode = Boolean.toString(skipBindingOnErrorCode);
         } else {
             // add on last verb as that is how the Java DSL works
             VerbDefinition verb = getVerbs().get(getVerbs().size() - 1);
-            verb.setSkipBindingOnErrorCode(skipBindingOnErrorCode);
+            verb.setSkipBindingOnErrorCode(Boolean.toString(skipBindingOnErrorCode));
         }
 
         return this;
@@ -507,11 +507,11 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
 
     public RestDefinition clientRequestValidation(boolean clientRequestValidation) {
         if (getVerbs().isEmpty()) {
-            this.clientRequestValidation = clientRequestValidation;
+            this.clientRequestValidation = Boolean.toString(clientRequestValidation);
         } else {
             // add on last verb as that is how the Java DSL works
             VerbDefinition verb = getVerbs().get(getVerbs().size() - 1);
-            verb.setClientRequestValidation(clientRequestValidation);
+            verb.setClientRequestValidation(Boolean.toString(clientRequestValidation));
         }
 
         return this;
@@ -519,11 +519,11 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
 
     public RestDefinition enableCORS(boolean enableCORS) {
         if (getVerbs().isEmpty()) {
-            this.enableCORS = enableCORS;
+            this.enableCORS = Boolean.toString(enableCORS);
         } else {
             // add on last verb as that is how the Java DSL works
             VerbDefinition verb = getVerbs().get(getVerbs().size() - 1);
-            verb.setEnableCORS(enableCORS);
+            verb.setEnableCORS(Boolean.toString(enableCORS));
         }
 
         return this;
@@ -536,11 +536,11 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
      */
     public RestDefinition apiDocs(Boolean apiDocs) {
         if (getVerbs().isEmpty()) {
-            this.apiDocs = apiDocs;
+            this.apiDocs = apiDocs != null ? apiDocs.toString() : null;
         } else {
             // add on last verb as that is how the Java DSL works
             VerbDefinition verb = getVerbs().get(getVerbs().size() - 1);
-            verb.setApiDocs(apiDocs);
+            verb.setApiDocs(apiDocs != null ? apiDocs.toString() : null);
         }
 
         return this;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/VerbDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/VerbDefinition.java
index e2f3efc..065ac5e 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/VerbDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/VerbDefinition.java
@@ -65,16 +65,16 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition>
 
     @XmlAttribute
     @Metadata(defaultValue = "auto")
-    private RestBindingMode bindingMode;
+    private String bindingMode;
 
     @XmlAttribute
-    private Boolean skipBindingOnErrorCode;
+    private String skipBindingOnErrorCode;
 
     @XmlAttribute
-    private Boolean clientRequestValidation;
+    private String clientRequestValidation;
 
     @XmlAttribute
-    private Boolean enableCORS;
+    private String enableCORS;
 
     @XmlAttribute
     private String type;
@@ -102,7 +102,7 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition>
     @XmlAttribute
     private String routeId;
     @XmlAttribute
-    private Boolean apiDocs;
+    private String apiDocs;
 
     @XmlTransient
     private Boolean usedForGeneratingNodeId = Boolean.FALSE;
@@ -202,7 +202,7 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition>
         this.produces = produces;
     }
 
-    public RestBindingMode getBindingMode() {
+    public String getBindingMode() {
         return bindingMode;
     }
 
@@ -212,11 +212,11 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition>
      * <p/>
      * The default value is auto
      */
-    public void setBindingMode(RestBindingMode bindingMode) {
+    public void setBindingMode(String bindingMode) {
         this.bindingMode = bindingMode;
     }
 
-    public Boolean getSkipBindingOnErrorCode() {
+    public String getSkipBindingOnErrorCode() {
         return skipBindingOnErrorCode;
     }
 
@@ -226,11 +226,11 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition>
      * json / xml etc, as success messages otherwise will do. This option will
      * override what may be configured on a parent level
      */
-    public void setSkipBindingOnErrorCode(Boolean skipBindingOnErrorCode) {
+    public void setSkipBindingOnErrorCode(String skipBindingOnErrorCode) {
         this.skipBindingOnErrorCode = skipBindingOnErrorCode;
     }
 
-    public Boolean getClientRequestValidation() {
+    public String getClientRequestValidation() {
         return clientRequestValidation;
     }
 
@@ -244,11 +244,11 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition>
      * <p/>
      * The default value is false.
      */
-    public void setClientRequestValidation(Boolean clientRequestValidation) {
+    public void setClientRequestValidation(String clientRequestValidation) {
         this.clientRequestValidation = clientRequestValidation;
     }
 
-    public Boolean getEnableCORS() {
+    public String getEnableCORS() {
         return enableCORS;
     }
 
@@ -258,7 +258,7 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition>
      * <p/>
      * The default value is false.
      */
-    public void setEnableCORS(Boolean enableCORS) {
+    public void setEnableCORS(String enableCORS) {
         this.enableCORS = enableCORS;
     }
 
@@ -305,7 +305,7 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition>
         this.routeId = routeId;
     }
 
-    public Boolean getApiDocs() {
+    public String getApiDocs() {
         return apiDocs;
     }
 
@@ -314,7 +314,7 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition>
      * <p/>
      * The default value is true.
      */
-    public void setApiDocs(Boolean apiDocs) {
+    public void setApiDocs(String apiDocs) {
         this.apiDocs = apiDocs;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AbstractReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AbstractReifier.java
new file mode 100644
index 0000000..eb16998
--- /dev/null
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AbstractReifier.java
@@ -0,0 +1,29 @@
+package org.apache.camel.reifier;
+
+import org.apache.camel.spi.RouteContext;
+import org.apache.camel.support.CamelContextHelper;
+
+public abstract class AbstractReifier {
+
+    protected static String parseString(RouteContext routeContext, String text) {
+        return CamelContextHelper.parseText(routeContext.getCamelContext(), text);
+    }
+
+    protected static boolean parseBoolean(RouteContext routeContext, String text) {
+        Boolean b = CamelContextHelper.parseBoolean(routeContext.getCamelContext(), text);
+        return b != null && b;
+    }
+
+    protected static Long parseLong(RouteContext routeContext, String text) {
+        return CamelContextHelper.parseLong(routeContext.getCamelContext(), text);
+    }
+
+    protected static Integer parseInt(RouteContext routeContext, String text) {
+        return CamelContextHelper.parseInteger(routeContext.getCamelContext(), text);
+    }
+
+    protected static <T> T parse(RouteContext routeContext, Class<T> clazz, String text) {
+        return CamelContextHelper.parse(routeContext.getCamelContext(), clazz, text);
+    }
+
+}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AggregateReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AggregateReifier.java
index 3df4431..dcb5622 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AggregateReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AggregateReifier.java
@@ -35,6 +35,7 @@ import org.apache.camel.processor.aggregate.AggregationStrategyBeanAdapter;
 import org.apache.camel.processor.aggregate.OptimisticLockRetryPolicy;
 import org.apache.camel.spi.AggregationRepository;
 import org.apache.camel.spi.RouteContext;
+import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.util.concurrent.SynchronousExecutorService;
 
 public class AggregateReifier extends ProcessorReifier<AggregateDefinition> {
@@ -58,7 +59,7 @@ public class AggregateReifier extends ProcessorReifier<AggregateDefinition> {
         Expression correlation = definition.getExpression().createExpression(routeContext);
         AggregationStrategy strategy = createAggregationStrategy(routeContext);
 
-        boolean parallel = definition.getParallelProcessing() != null && definition.getParallelProcessing();
+        boolean parallel = parseBoolean(routeContext, definition.getParallelProcessing());
         boolean shutdownThreadPool = ProcessorDefinitionHelper.willCreateNewThreadPool(routeContext, definition, parallel);
         ExecutorService threadPool = ProcessorDefinitionHelper.getConfiguredExecutorService(routeContext, "Aggregator", definition, parallel);
         if (threadPool == null && !parallel) {
@@ -102,15 +103,15 @@ public class AggregateReifier extends ProcessorReifier<AggregateDefinition> {
         answer.setTimeoutCheckerExecutorService(timeoutThreadPool);
         answer.setShutdownTimeoutCheckerExecutorService(shutdownTimeoutThreadPool);
 
-        if (definition.getCompletionFromBatchConsumer() != null && definition.getCompletionFromBatchConsumer() && definition.getDiscardOnAggregationFailure() != null
-            && definition.getDiscardOnAggregationFailure()) {
+        if (parseBoolean(routeContext, definition.getCompletionFromBatchConsumer())
+                && parseBoolean(routeContext, definition.getDiscardOnAggregationFailure())) {
             throw new IllegalArgumentException("Cannot use both completionFromBatchConsumer and discardOnAggregationFailure on: " + definition);
         }
 
         // set other options
         answer.setParallelProcessing(parallel);
         if (definition.getOptimisticLocking() != null) {
-            answer.setOptimisticLocking(definition.getOptimisticLocking());
+            answer.setOptimisticLocking(parseBoolean(routeContext, definition.getOptimisticLocking()));
         }
         if (definition.getCompletionPredicate() != null) {
             Predicate predicate = definition.getCompletionPredicate().createPredicate(routeContext);
@@ -126,48 +127,48 @@ public class AggregateReifier extends ProcessorReifier<AggregateDefinition> {
             answer.setCompletionTimeoutExpression(expression);
         }
         if (definition.getCompletionTimeout() != null) {
-            answer.setCompletionTimeout(definition.getCompletionTimeout());
+            answer.setCompletionTimeout(parseLong(routeContext, definition.getCompletionTimeout()));
         }
         if (definition.getCompletionInterval() != null) {
-            answer.setCompletionInterval(definition.getCompletionInterval());
+            answer.setCompletionInterval(parseLong(routeContext, definition.getCompletionInterval()));
         }
         if (definition.getCompletionSizeExpression() != null) {
             Expression expression = definition.getCompletionSizeExpression().createExpression(routeContext);
             answer.setCompletionSizeExpression(expression);
         }
         if (definition.getCompletionSize() != null) {
-            answer.setCompletionSize(definition.getCompletionSize());
+            answer.setCompletionSize(parseInt(routeContext, definition.getCompletionSize()));
         }
         if (definition.getCompletionFromBatchConsumer() != null) {
-            answer.setCompletionFromBatchConsumer(definition.getCompletionFromBatchConsumer());
+            answer.setCompletionFromBatchConsumer(parseBoolean(routeContext, definition.getCompletionFromBatchConsumer()));
         }
         if (definition.getCompletionOnNewCorrelationGroup() != null) {
-            answer.setCompletionOnNewCorrelationGroup(definition.getCompletionOnNewCorrelationGroup());
+            answer.setCompletionOnNewCorrelationGroup(parseBoolean(routeContext, definition.getCompletionOnNewCorrelationGroup()));
         }
         if (definition.getEagerCheckCompletion() != null) {
-            answer.setEagerCheckCompletion(definition.getEagerCheckCompletion());
+            answer.setEagerCheckCompletion(parseBoolean(routeContext, definition.getEagerCheckCompletion()));
         }
         if (definition.getIgnoreInvalidCorrelationKeys() != null) {
-            answer.setIgnoreInvalidCorrelationKeys(definition.getIgnoreInvalidCorrelationKeys());
+            answer.setIgnoreInvalidCorrelationKeys(parseBoolean(routeContext, definition.getIgnoreInvalidCorrelationKeys()));
         }
         if (definition.getCloseCorrelationKeyOnCompletion() != null) {
-            answer.setCloseCorrelationKeyOnCompletion(definition.getCloseCorrelationKeyOnCompletion());
+            answer.setCloseCorrelationKeyOnCompletion(parseInt(routeContext, definition.getCloseCorrelationKeyOnCompletion()));
         }
         if (definition.getDiscardOnCompletionTimeout() != null) {
-            answer.setDiscardOnCompletionTimeout(definition.getDiscardOnCompletionTimeout());
+            answer.setDiscardOnCompletionTimeout(parseBoolean(routeContext, definition.getDiscardOnCompletionTimeout()));
         }
         if (definition.getDiscardOnAggregationFailure() != null) {
-            answer.setDiscardOnAggregationFailure(definition.getDiscardOnAggregationFailure());
+            answer.setDiscardOnAggregationFailure(parseBoolean(routeContext, definition.getDiscardOnAggregationFailure()));
         }
         if (definition.getForceCompletionOnStop() != null) {
-            answer.setForceCompletionOnStop(definition.getForceCompletionOnStop());
+            answer.setForceCompletionOnStop(parseBoolean(routeContext, definition.getForceCompletionOnStop()));
         }
         if (definition.getCompleteAllOnStop() != null) {
-            answer.setCompleteAllOnStop(definition.getCompleteAllOnStop());
+            answer.setCompleteAllOnStop(parseBoolean(routeContext, definition.getCompleteAllOnStop()));
         }
         if (definition.getOptimisticLockRetryPolicy() == null) {
             if (definition.getOptimisticLockRetryPolicyDefinition() != null) {
-                answer.setOptimisticLockRetryPolicy(createOptimisticLockRetryPolicy(definition.getOptimisticLockRetryPolicyDefinition()));
+                answer.setOptimisticLockRetryPolicy(createOptimisticLockRetryPolicy(routeContext, definition.getOptimisticLockRetryPolicyDefinition()));
             }
         } else {
             answer.setOptimisticLockRetryPolicy(definition.getOptimisticLockRetryPolicy());
@@ -176,27 +177,27 @@ public class AggregateReifier extends ProcessorReifier<AggregateDefinition> {
             answer.setAggregateController(definition.getAggregateController());
         }
         if (definition.getCompletionTimeoutCheckerInterval() != null) {
-            answer.setCompletionTimeoutCheckerInterval(definition.getCompletionTimeoutCheckerInterval());
+            answer.setCompletionTimeoutCheckerInterval(parseLong(routeContext, definition.getCompletionTimeoutCheckerInterval()));
         }
         return answer;
     }
 
-    public static OptimisticLockRetryPolicy createOptimisticLockRetryPolicy(OptimisticLockRetryPolicyDefinition definition) {
+    public static OptimisticLockRetryPolicy createOptimisticLockRetryPolicy(RouteContext routeContext, OptimisticLockRetryPolicyDefinition definition) {
         OptimisticLockRetryPolicy policy = new OptimisticLockRetryPolicy();
         if (definition.getMaximumRetries() != null) {
-            policy.setMaximumRetries(definition.getMaximumRetries());
+            policy.setMaximumRetries(parseInt(routeContext, definition.getMaximumRetries()));
         }
         if (definition.getRetryDelay() != null) {
-            policy.setRetryDelay(definition.getRetryDelay());
+            policy.setRetryDelay(parseLong(routeContext, definition.getRetryDelay()));
         }
         if (definition.getMaximumRetryDelay() != null) {
-            policy.setMaximumRetryDelay(definition.getMaximumRetryDelay());
+            policy.setMaximumRetryDelay(parseLong(routeContext, definition.getMaximumRetryDelay()));
         }
         if (definition.getExponentialBackOff() != null) {
-            policy.setExponentialBackOff(definition.getExponentialBackOff());
+            policy.setExponentialBackOff(parseBoolean(routeContext, definition.getExponentialBackOff()));
         }
         if (definition.getRandomBackOff() != null) {
-            policy.setRandomBackOff(definition.getRandomBackOff());
+            policy.setRandomBackOff(parseBoolean(routeContext, definition.getRandomBackOff()));
         }
         return policy;
     }
@@ -210,8 +211,8 @@ public class AggregateReifier extends ProcessorReifier<AggregateDefinition> {
             } else if (aggStrategy != null) {
                 AggregationStrategyBeanAdapter adapter = new AggregationStrategyBeanAdapter(aggStrategy, definition.getAggregationStrategyMethodName());
                 if (definition.getStrategyMethodAllowNull() != null) {
-                    adapter.setAllowNullNewExchange(definition.getStrategyMethodAllowNull());
-                    adapter.setAllowNullOldExchange(definition.getStrategyMethodAllowNull());
+                    adapter.setAllowNullNewExchange(Boolean.parseBoolean(definition.getStrategyMethodAllowNull()));
+                    adapter.setAllowNullOldExchange(Boolean.parseBoolean(definition.getStrategyMethodAllowNull()));
                 }
                 strategy = adapter;
             } else {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/BeanReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/BeanReifier.java
index def1284..e7db558 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/BeanReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/BeanReifier.java
@@ -48,7 +48,7 @@ public class BeanReifier extends ProcessorReifier<BeanDefinition> {
     }
 
     private boolean isCacheBean() {
-        return definition.getCache() == null || definition.getCache();
+        return definition.getCache() == null || Boolean.parseBoolean(definition.getCache());
     }
 
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ClaimCheckReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ClaimCheckReifier.java
index 3c63dba..09368f5 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ClaimCheckReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ClaimCheckReifier.java
@@ -20,6 +20,7 @@ import org.apache.camel.AggregationStrategy;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Processor;
 import org.apache.camel.model.ClaimCheckDefinition;
+import org.apache.camel.model.ClaimCheckOperation;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.ClaimCheckProcessor;
 import org.apache.camel.processor.aggregate.AggregationStrategyBeanAdapter;
@@ -39,7 +40,7 @@ public class ClaimCheckReifier extends ProcessorReifier<ClaimCheckDefinition> {
         notNull(definition.getOperation(), "operation", this);
 
         ClaimCheckProcessor claim = new ClaimCheckProcessor();
-        claim.setOperation(definition.getOperation().name());
+        claim.setOperation(parse(routeContext, ClaimCheckOperation.class, definition.getOperation()).name());
         claim.setKey(definition.getKey());
         claim.setFilter(definition.getFilter());
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DelayReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DelayReifier.java
index 529eda9..c2ff2a2 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DelayReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DelayReifier.java
@@ -38,20 +38,14 @@ public class DelayReifier extends ExpressionReifier<DelayDefinition> {
         Processor childProcessor = this.createChildProcessor(routeContext, false);
         Expression delay = createAbsoluteTimeDelayExpression(routeContext);
 
-        boolean async = definition.getAsyncDelayed() == null || definition.getAsyncDelayed();
+        boolean async = definition.getAsyncDelayed() == null || Boolean.parseBoolean(definition.getAsyncDelayed());
         boolean shutdownThreadPool = ProcessorDefinitionHelper.willCreateNewThreadPool(routeContext, definition, async);
         ScheduledExecutorService threadPool = ProcessorDefinitionHelper.getConfiguredScheduledExecutorService(routeContext, "Delay", definition, async);
 
         Delayer answer = new Delayer(routeContext.getCamelContext(), childProcessor, delay, threadPool, shutdownThreadPool);
-        if (definition.getAsyncDelayed() != null) {
-            answer.setAsyncDelayed(definition.getAsyncDelayed());
-        }
-        if (definition.getCallerRunsWhenRejected() == null) {
-            // should be default true
-            answer.setCallerRunsWhenRejected(true);
-        } else {
-            answer.setCallerRunsWhenRejected(definition.getCallerRunsWhenRejected());
-        }
+        answer.setAsyncDelayed(async);
+        answer.setCallerRunsWhenRejected(definition.getCallerRunsWhenRejected() == null
+                || Boolean.parseBoolean(definition.getCallerRunsWhenRejected()));
         return answer;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DynamicRouterReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DynamicRouterReifier.java
index 0ece244..c19d5b8 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DynamicRouterReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DynamicRouterReifier.java
@@ -39,10 +39,10 @@ public class DynamicRouterReifier extends ExpressionReifier<DynamicRouterDefinit
 
         DynamicRouter dynamicRouter = new DynamicRouter(routeContext.getCamelContext(), expression, delimiter);
         if (definition.getIgnoreInvalidEndpoints() != null) {
-            dynamicRouter.setIgnoreInvalidEndpoints(definition.getIgnoreInvalidEndpoints());
+            dynamicRouter.setIgnoreInvalidEndpoints(Boolean.parseBoolean(definition.getIgnoreInvalidEndpoints()));
         }
         if (definition.getCacheSize() != null) {
-            dynamicRouter.setCacheSize(definition.getCacheSize());
+            dynamicRouter.setCacheSize(Integer.parseInt(definition.getCacheSize()));
         }
 
         // and wrap this in an error handler
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/EnrichReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/EnrichReifier.java
index 0082532..98f4bc4 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/EnrichReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/EnrichReifier.java
@@ -36,8 +36,8 @@ public class EnrichReifier extends ExpressionReifier<EnrichDefinition> {
     public Processor createProcessor(RouteContext routeContext) throws Exception {
 
         Expression exp = definition.getExpression().createExpression(routeContext);
-        boolean isShareUnitOfWork = definition.getShareUnitOfWork() != null && definition.getShareUnitOfWork();
-        boolean isIgnoreInvalidEndpoint = definition.getIgnoreInvalidEndpoint() != null && definition.getIgnoreInvalidEndpoint();
+        boolean isShareUnitOfWork = definition.getShareUnitOfWork() != null && Boolean.parseBoolean(definition.getShareUnitOfWork());
+        boolean isIgnoreInvalidEndpoint = definition.getIgnoreInvalidEndpoint() != null && Boolean.parseBoolean(definition.getIgnoreInvalidEndpoint());
 
         Enricher enricher = new Enricher(exp);
         enricher.setShareUnitOfWork(isShareUnitOfWork);
@@ -47,7 +47,7 @@ public class EnrichReifier extends ExpressionReifier<EnrichDefinition> {
             enricher.setAggregationStrategy(strategy);
         }
         if (definition.getAggregateOnException() != null) {
-            enricher.setAggregateOnException(definition.getAggregateOnException());
+            enricher.setAggregateOnException(Boolean.parseBoolean(definition.getAggregateOnException()));
         }
         return enricher;
     }
@@ -61,8 +61,8 @@ public class EnrichReifier extends ExpressionReifier<EnrichDefinition> {
             } else if (aggStrategy != null) {
                 AggregationStrategyBeanAdapter adapter = new AggregationStrategyBeanAdapter(aggStrategy, definition.getAggregationStrategyMethodName());
                 if (definition.getAggregationStrategyMethodAllowNull() != null) {
-                    adapter.setAllowNullNewExchange(definition.getAggregationStrategyMethodAllowNull());
-                    adapter.setAllowNullOldExchange(definition.getAggregationStrategyMethodAllowNull());
+                    adapter.setAllowNullNewExchange(Boolean.parseBoolean(definition.getAggregationStrategyMethodAllowNull()));
+                    adapter.setAllowNullOldExchange(Boolean.parseBoolean(definition.getAggregationStrategyMethodAllowNull()));
                 }
                 strategy = adapter;
             } else {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/IdempotentConsumerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/IdempotentConsumerReifier.java
index bcdfe46..c1b2c3a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/IdempotentConsumerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/IdempotentConsumerReifier.java
@@ -41,12 +41,12 @@ public class IdempotentConsumerReifier extends ExpressionReifier<IdempotentConsu
         Expression expression = definition.getExpression().createExpression(routeContext);
 
         // these boolean should be true by default
-        boolean eager = definition.getEager() == null || definition.getEager();
-        boolean duplicate = definition.getSkipDuplicate() == null || definition.getSkipDuplicate();
-        boolean remove = definition.getRemoveOnFailure() == null || definition.getRemoveOnFailure();
+        boolean eager = definition.getEager() == null || Boolean.parseBoolean(definition.getEager());
+        boolean duplicate = definition.getSkipDuplicate() == null || Boolean.parseBoolean(definition.getSkipDuplicate());
+        boolean remove = definition.getRemoveOnFailure() == null || Boolean.parseBoolean(definition.getRemoveOnFailure());
 
         // these boolean should be false by default
-        boolean completionEager = definition.getCompletionEager() != null && definition.getCompletionEager();
+        boolean completionEager = definition.getCompletionEager() != null && Boolean.parseBoolean(definition.getCompletionEager());
 
         return new IdempotentConsumer(expression, idempotentRepository, eager, completionEager, duplicate, remove, childProcessor);
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java
index abb1256..1e75e69 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java
@@ -46,7 +46,7 @@ public class InterceptSendToEndpointReifier extends ProcessorReifier<InterceptSe
         // create the after
         Processor afterProcessor = null;
         if (definition.getAfterUri() != null) {
-            ToDefinition to = new ToDefinition(definition.getAfterUri());
+            ToDefinition to = new ToDefinition(parseString(routeContext, definition.getAfterUri()));
             // at first use custom factory
             if (routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getProcessorFactory() != null) {
                 afterProcessor = routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(routeContext, to);
@@ -58,7 +58,7 @@ public class InterceptSendToEndpointReifier extends ProcessorReifier<InterceptSe
             }
         }
         final Processor after = afterProcessor;
-        final String matchURI = definition.getUri();
+        final String matchURI = parseString(routeContext, definition.getUri());
 
         // register endpoint callback so we can proxy the endpoint
         routeContext.getCamelContext().adapt(ExtendedCamelContext.class).registerEndpointCallback(new EndpointStrategy() {
@@ -70,7 +70,7 @@ public class InterceptSendToEndpointReifier extends ProcessorReifier<InterceptSe
                     // only proxy if the uri is matched decorate endpoint with
                     // our proxy
                     // should be false by default
-                    boolean skip = definition.getSkipSendToOriginalEndpoint() != null && definition.getSkipSendToOriginalEndpoint();
+                    boolean skip = definition.getSkipSendToOriginalEndpoint() != null && parseBoolean(routeContext, definition.getSkipSendToOriginalEndpoint());
                     DefaultInterceptSendToEndpoint proxy = new DefaultInterceptSendToEndpoint(endpoint, skip);
                     proxy.setBefore(before);
                     proxy.setAfter(after);
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LogReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LogReifier.java
index 31bf263..28bc849 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LogReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LogReifier.java
@@ -86,7 +86,7 @@ public class LogReifier extends ProcessorReifier<LogDefinition> {
         }
 
         // should be INFO by default
-        LoggingLevel level = definition.getLoggingLevel() != null ? definition.getLoggingLevel() : LoggingLevel.INFO;
+        LoggingLevel level = definition.getLoggingLevel() != null ? parse(routeContext, LoggingLevel.class, definition.getLoggingLevel()) : LoggingLevel.INFO;
         CamelLogger camelLogger = new CamelLogger(logger, level, definition.getMarker());
 
         return new LogProcessor(exp, camelLogger, getMaskingFormatter(routeContext), routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getLogListeners());
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LoopReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LoopReifier.java
index fc7412e..434abc0 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LoopReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LoopReifier.java
@@ -33,8 +33,8 @@ public class LoopReifier extends ExpressionReifier<LoopDefinition> {
     @Override
     public Processor createProcessor(RouteContext routeContext) throws Exception {
         Processor output = this.createChildProcessor(routeContext, true);
-        boolean isCopy = definition.getCopy() != null && definition.getCopy();
-        boolean isWhile = definition.getDoWhile() != null && definition.getDoWhile();
+        boolean isCopy = definition.getCopy() != null && parseBoolean(routeContext, definition.getCopy());
+        boolean isWhile = definition.getDoWhile() != null && parseBoolean(routeContext, definition.getDoWhile());
 
         Predicate predicate = null;
         Expression expression = null;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/MulticastReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/MulticastReifier.java
index 3b47836..4dd6d2a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/MulticastReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/MulticastReifier.java
@@ -57,17 +57,17 @@ public class MulticastReifier extends ProcessorReifier<MulticastDefinition> {
     protected Processor createCompositeProcessor(RouteContext routeContext, List<Processor> list) throws Exception {
         final AggregationStrategy strategy = createAggregationStrategy(routeContext);
 
-        boolean isParallelProcessing = definition.getParallelProcessing() != null && definition.getParallelProcessing();
-        boolean isShareUnitOfWork = definition.getShareUnitOfWork() != null && definition.getShareUnitOfWork();
-        boolean isStreaming = definition.getStreaming() != null && definition.getStreaming();
-        boolean isStopOnException = definition.getStopOnException() != null && definition.getStopOnException();
-        boolean isParallelAggregate = definition.getParallelAggregate() != null && definition.getParallelAggregate();
-        boolean isStopOnAggregateException = definition.getStopOnAggregateException() != null && definition.getStopOnAggregateException();
+        boolean isParallelProcessing = definition.getParallelProcessing() != null && parseBoolean(routeContext, definition.getParallelProcessing());
+        boolean isShareUnitOfWork = definition.getShareUnitOfWork() != null && parseBoolean(routeContext, definition.getShareUnitOfWork());
+        boolean isStreaming = definition.getStreaming() != null && parseBoolean(routeContext, definition.getStreaming());
+        boolean isStopOnException = definition.getStopOnException() != null && parseBoolean(routeContext, definition.getStopOnException());
+        boolean isParallelAggregate = definition.getParallelAggregate() != null && parseBoolean(routeContext, definition.getParallelAggregate());
+        boolean isStopOnAggregateException = definition.getStopOnAggregateException() != null && parseBoolean(routeContext, definition.getStopOnAggregateException());
 
         boolean shutdownThreadPool = ProcessorDefinitionHelper.willCreateNewThreadPool(routeContext, definition, isParallelProcessing);
         ExecutorService threadPool = ProcessorDefinitionHelper.getConfiguredExecutorService(routeContext, "Multicast", definition, isParallelProcessing);
 
-        long timeout = definition.getTimeout() != null ? definition.getTimeout() : 0;
+        long timeout = definition.getTimeout() != null ? parseLong(routeContext, definition.getTimeout()) : 0;
         if (timeout > 0 && !isParallelProcessing) {
             throw new IllegalArgumentException("Timeout is used but ParallelProcessing has not been enabled.");
         }
@@ -90,8 +90,8 @@ public class MulticastReifier extends ProcessorReifier<MulticastDefinition> {
             } else if (aggStrategy != null) {
                 AggregationStrategyBeanAdapter adapter = new AggregationStrategyBeanAdapter(aggStrategy, definition.getStrategyMethodName());
                 if (definition.getStrategyMethodAllowNull() != null) {
-                    adapter.setAllowNullNewExchange(definition.getStrategyMethodAllowNull());
-                    adapter.setAllowNullOldExchange(definition.getStrategyMethodAllowNull());
+                    adapter.setAllowNullNewExchange(parseBoolean(routeContext, definition.getStrategyMethodAllowNull()));
+                    adapter.setAllowNullOldExchange(parseBoolean(routeContext, definition.getStrategyMethodAllowNull()));
                 }
                 strategy = adapter;
             } else {
@@ -108,7 +108,7 @@ public class MulticastReifier extends ProcessorReifier<MulticastDefinition> {
             ((CamelContextAware)strategy).setCamelContext(routeContext.getCamelContext());
         }
 
-        if (definition.getShareUnitOfWork() != null && definition.getShareUnitOfWork()) {
+        if (definition.getShareUnitOfWork() != null && parseBoolean(routeContext, definition.getShareUnitOfWork())) {
             // wrap strategy in share unit of work
             strategy = new ShareUnitOfWorkAggregationStrategy(strategy);
         }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
index e88f173..ab18213 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
@@ -50,10 +50,10 @@ public class OnCompletionReifier extends ProcessorReifier<OnCompletionDefinition
             routeScoped = definition.getParent() != null;
         }
 
-        boolean isOnCompleteOnly = definition.getOnCompleteOnly() != null && definition.getOnCompleteOnly();
-        boolean isOnFailureOnly = definition.getOnFailureOnly() != null && definition.getOnFailureOnly();
-        boolean isParallelProcessing = definition.getParallelProcessing() != null && definition.getParallelProcessing();
-        boolean original = definition.getUseOriginalMessagePolicy() != null && definition.getUseOriginalMessagePolicy();
+        boolean isOnCompleteOnly = definition.getOnCompleteOnly() != null && parseBoolean(routeContext, definition.getOnCompleteOnly());
+        boolean isOnFailureOnly = definition.getOnFailureOnly() != null && parseBoolean(routeContext, definition.getOnFailureOnly());
+        boolean isParallelProcessing = definition.getParallelProcessing() != null && parseBoolean(routeContext, definition.getParallelProcessing());
+        boolean original = definition.getUseOriginalMessage() != null && parseBoolean(routeContext, definition.getUseOriginalMessage());
 
         if (isOnCompleteOnly && isOnFailureOnly) {
             throw new IllegalArgumentException("Both onCompleteOnly and onFailureOnly cannot be true. Only one of them can be true. On node: " + this);
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnExceptionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnExceptionReifier.java
index c9ff27c..5682fba 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnExceptionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnExceptionReifier.java
@@ -60,7 +60,7 @@ public class OnExceptionReifier extends ProcessorReifier<OnExceptionDefinition>
         // must validate configuration before creating processor
         definition.validateConfiguration();
 
-        if (definition.getUseOriginalMessagePolicy() != null && definition.getUseOriginalMessagePolicy()) {
+        if (definition.getUseOriginalMessage() != null && parseBoolean(routeContext, definition.getUseOriginalMessage())) {
             // ensure allow original is turned on
             routeContext.setAllowUseOriginalMessage(true);
         }
@@ -88,7 +88,7 @@ public class OnExceptionReifier extends ProcessorReifier<OnExceptionDefinition>
             classes = createExceptionClasses(routeContext.getCamelContext().getClassResolver());
         }
 
-        if (definition.getUseOriginalMessagePolicy() != null && definition.getUseOriginalMessagePolicy()) {
+        if (definition.getUseOriginalMessage() != null && parseBoolean(routeContext, definition.getUseOriginalMessage())) {
             // ensure allow original is turned on
             routeContext.setAllowUseOriginalMessage(true);
         }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PollEnrichReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PollEnrichReifier.java
index c64a80c..0f0da58 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PollEnrichReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PollEnrichReifier.java
@@ -36,8 +36,8 @@ public class PollEnrichReifier extends ProcessorReifier<PollEnrichDefinition> {
     public Processor createProcessor(RouteContext routeContext) throws Exception {
 
         // if no timeout then we should block, and there use a negative timeout
-        long time = definition.getTimeout() != null ? definition.getTimeout() : -1;
-        boolean isIgnoreInvalidEndpoint = definition.getIgnoreInvalidEndpoint() != null && definition.getIgnoreInvalidEndpoint();
+        long time = definition.getTimeout() != null ? parseLong(routeContext, definition.getTimeout()) : -1;
+        boolean isIgnoreInvalidEndpoint = definition.getIgnoreInvalidEndpoint() != null && parseBoolean(routeContext, definition.getIgnoreInvalidEndpoint());
         Expression exp = definition.getExpression().createExpression(routeContext);
 
         PollEnricher enricher = new PollEnricher(exp, time);
@@ -49,10 +49,10 @@ public class PollEnrichReifier extends ProcessorReifier<PollEnrichDefinition> {
             enricher.setAggregationStrategy(strategy);
         }
         if (definition.getAggregateOnException() != null) {
-            enricher.setAggregateOnException(definition.getAggregateOnException());
+            enricher.setAggregateOnException(parseBoolean(routeContext, definition.getAggregateOnException()));
         }
         if (definition.getCacheSize() != null) {
-            enricher.setCacheSize(definition.getCacheSize());
+            enricher.setCacheSize(parseInt(routeContext, definition.getCacheSize()));
         }
         enricher.setIgnoreInvalidEndpoint(isIgnoreInvalidEndpoint);
 
@@ -68,8 +68,8 @@ public class PollEnrichReifier extends ProcessorReifier<PollEnrichDefinition> {
             } else if (aggStrategy != null) {
                 AggregationStrategyBeanAdapter adapter = new AggregationStrategyBeanAdapter(aggStrategy, definition.getAggregationStrategyMethodName());
                 if (definition.getAggregationStrategyMethodAllowNull() != null) {
-                    adapter.setAllowNullNewExchange(definition.getAggregationStrategyMethodAllowNull());
-                    adapter.setAllowNullOldExchange(definition.getAggregationStrategyMethodAllowNull());
+                    adapter.setAllowNullNewExchange(parseBoolean(routeContext, definition.getAggregationStrategyMethodAllowNull()));
+                    adapter.setAllowNullOldExchange(parseBoolean(routeContext, definition.getAggregationStrategyMethodAllowNull()));
                 }
                 strategy = adapter;
             } else {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessorReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
index 3c327ef..c51f554 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
@@ -106,10 +106,11 @@ import org.apache.camel.spi.IdAware;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.RouteContext;
+import org.apache.camel.support.CamelContextHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> {
+public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends AbstractReifier {
 
     private static final Map<Class<?>, Function<ProcessorDefinition<?>, ProcessorReifier<? extends ProcessorDefinition<?>>>> PROCESSORS;
     static {
@@ -366,7 +367,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> {
             // however if share unit of work is enabled, we need to wrap an
             // error handler on the multicast parent
             MulticastDefinition def = (MulticastDefinition)definition;
-            boolean isShareUnitOfWork = def.getShareUnitOfWork() != null && def.getShareUnitOfWork();
+            boolean isShareUnitOfWork = def.getShareUnitOfWork() != null && parseBoolean(routeContext, def.getShareUnitOfWork());
             if (isShareUnitOfWork && child == null) {
                 // only wrap the parent (not the children of the multicast)
                 wrap = true;
@@ -604,4 +605,5 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> {
     protected String getId(OptionalIdentifiedDefinition<?> def, RouteContext routeContext) {
         return def.idOrCreate(routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getNodeIdFactory());
     }
+
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RecipientListReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RecipientListReifier.java
index 61d6738..a2fe5d2 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RecipientListReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RecipientListReifier.java
@@ -46,13 +46,13 @@ public class RecipientListReifier extends ProcessorReifier<RecipientListDefiniti
     public Processor createProcessor(RouteContext routeContext) throws Exception {
         final Expression expression = definition.getExpression().createExpression(routeContext);
 
-        boolean isParallelProcessing = definition.getParallelProcessing() != null && definition.getParallelProcessing();
-        boolean isStreaming = definition.getStreaming() != null && definition.getStreaming();
-        boolean isParallelAggregate = definition.getParallelAggregate() != null && definition.getParallelAggregate();
-        boolean isShareUnitOfWork = definition.getShareUnitOfWork() != null && definition.getShareUnitOfWork();
-        boolean isStopOnException = definition.getStopOnException() != null && definition.getStopOnException();
-        boolean isIgnoreInvalidEndpoints = definition.getIgnoreInvalidEndpoints() != null && definition.getIgnoreInvalidEndpoints();
-        boolean isStopOnAggregateException = definition.getStopOnAggregateException() != null && definition.getStopOnAggregateException();
+        boolean isParallelProcessing = definition.getParallelProcessing() != null && parseBoolean(routeContext, definition.getParallelProcessing());
+        boolean isStreaming = definition.getStreaming() != null && parseBoolean(routeContext, definition.getStreaming());
+        boolean isParallelAggregate = definition.getParallelAggregate() != null && parseBoolean(routeContext, definition.getParallelAggregate());
+        boolean isShareUnitOfWork = definition.getShareUnitOfWork() != null && parseBoolean(routeContext, definition.getShareUnitOfWork());
+        boolean isStopOnException = definition.getStopOnException() != null && parseBoolean(routeContext, definition.getStopOnException());
+        boolean isIgnoreInvalidEndpoints = definition.getIgnoreInvalidEndpoints() != null && parseBoolean(routeContext, definition.getIgnoreInvalidEndpoints());
+        boolean isStopOnAggregateException = definition.getStopOnAggregateException() != null && parseBoolean(routeContext, definition.getStopOnAggregateException());
 
         RecipientList answer;
         if (definition.getDelimiter() != null) {
@@ -69,7 +69,7 @@ public class RecipientListReifier extends ProcessorReifier<RecipientListDefiniti
         answer.setIgnoreInvalidEndpoints(isIgnoreInvalidEndpoints);
         answer.setStopOnAggregateException(isStopOnAggregateException);
         if (definition.getCacheSize() != null) {
-            answer.setCacheSize(definition.getCacheSize());
+            answer.setCacheSize(parseInt(routeContext, definition.getCacheSize()));
         }
         if (definition.getOnPrepareRef() != null) {
             definition.setOnPrepare(CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), definition.getOnPrepareRef(), Processor.class));
@@ -78,14 +78,14 @@ public class RecipientListReifier extends ProcessorReifier<RecipientListDefiniti
             answer.setOnPrepare(definition.getOnPrepare());
         }
         if (definition.getTimeout() != null) {
-            answer.setTimeout(definition.getTimeout());
+            answer.setTimeout(parseLong(routeContext, definition.getTimeout()));
         }
 
         boolean shutdownThreadPool = ProcessorDefinitionHelper.willCreateNewThreadPool(routeContext, definition, isParallelProcessing);
         ExecutorService threadPool = ProcessorDefinitionHelper.getConfiguredExecutorService(routeContext, "RecipientList", definition, isParallelProcessing);
         answer.setExecutorService(threadPool);
         answer.setShutdownExecutorService(shutdownThreadPool);
-        long timeout = definition.getTimeout() != null ? definition.getTimeout() : 0;
+        long timeout = definition.getTimeout() != null ? parseLong(routeContext, definition.getTimeout()) : 0;
         if (timeout > 0 && !isParallelProcessing) {
             throw new IllegalArgumentException("Timeout is used but ParallelProcessing has not been enabled.");
         }
@@ -126,8 +126,8 @@ public class RecipientListReifier extends ProcessorReifier<RecipientListDefiniti
             } else if (aggStrategy != null) {
                 AggregationStrategyBeanAdapter adapter = new AggregationStrategyBeanAdapter(aggStrategy, definition.getStrategyMethodName());
                 if (definition.getStrategyMethodAllowNull() != null) {
-                    adapter.setAllowNullNewExchange(definition.getStrategyMethodAllowNull());
-                    adapter.setAllowNullOldExchange(definition.getStrategyMethodAllowNull());
+                    adapter.setAllowNullNewExchange(parseBoolean(routeContext, definition.getStrategyMethodAllowNull()));
+                    adapter.setAllowNullOldExchange(parseBoolean(routeContext, definition.getStrategyMethodAllowNull()));
                 }
                 strategy = adapter;
             } else {
@@ -144,7 +144,7 @@ public class RecipientListReifier extends ProcessorReifier<RecipientListDefiniti
             ((CamelContextAware)strategy).setCamelContext(routeContext.getCamelContext());
         }
 
-        if (definition.getShareUnitOfWork() != null && definition.getShareUnitOfWork()) {
+        if (definition.getShareUnitOfWork() != null && parseBoolean(routeContext, definition.getShareUnitOfWork())) {
             // wrap strategy in share unit of work
             strategy = new ShareUnitOfWorkAggregationStrategy(strategy);
         }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ResequenceReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ResequenceReifier.java
index 1ff3a41..612e020 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ResequenceReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ResequenceReifier.java
@@ -81,16 +81,16 @@ public class ResequenceReifier extends ProcessorReifier<ResequenceDefinition> {
         ObjectHelper.notNull(config, "config", this);
         ObjectHelper.notNull(expression, "expression", this);
 
-        boolean isReverse = config.getReverse() != null && config.getReverse();
-        boolean isAllowDuplicates = config.getAllowDuplicates() != null && config.getAllowDuplicates();
+        boolean isReverse = config.getReverse() != null && parseBoolean(routeContext, config.getReverse());
+        boolean isAllowDuplicates = config.getAllowDuplicates() != null && parseBoolean(routeContext, config.getAllowDuplicates());
 
         Resequencer resequencer = new Resequencer(routeContext.getCamelContext(), internal, expression, isAllowDuplicates, isReverse);
-        resequencer.setBatchSize(config.getBatchSize());
-        resequencer.setBatchTimeout(config.getBatchTimeout());
+        resequencer.setBatchSize(parseInt(routeContext, config.getBatchSize()));
+        resequencer.setBatchTimeout(parseLong(routeContext, config.getBatchTimeout()));
         resequencer.setReverse(isReverse);
         resequencer.setAllowDuplicates(isAllowDuplicates);
         if (config.getIgnoreInvalidExchanges() != null) {
-            resequencer.setIgnoreInvalidExchanges(config.getIgnoreInvalidExchanges());
+            resequencer.setIgnoreInvalidExchanges(parseBoolean(routeContext, config.getIgnoreInvalidExchanges()));
         }
         return resequencer;
     }
@@ -126,14 +126,14 @@ public class ResequenceReifier extends ProcessorReifier<ResequenceDefinition> {
         comparator.setExpression(expression);
 
         StreamResequencer resequencer = new StreamResequencer(routeContext.getCamelContext(), internal, comparator, expression);
-        resequencer.setTimeout(config.getTimeout());
+        resequencer.setTimeout(parseLong(routeContext, config.getTimeout()));
         if (config.getDeliveryAttemptInterval() != null) {
-            resequencer.setDeliveryAttemptInterval(config.getDeliveryAttemptInterval());
+            resequencer.setDeliveryAttemptInterval(parseLong(routeContext, config.getDeliveryAttemptInterval()));
         }
-        resequencer.setCapacity(config.getCapacity());
-        resequencer.setRejectOld(config.getRejectOld());
+        resequencer.setCapacity(parseInt(routeContext, config.getCapacity()));
+        resequencer.setRejectOld(parseBoolean(routeContext, config.getRejectOld()));
         if (config.getIgnoreInvalidExchanges() != null) {
-            resequencer.setIgnoreInvalidExchanges(config.getIgnoreInvalidExchanges());
+            resequencer.setIgnoreInvalidExchanges(parseBoolean(routeContext, config.getIgnoreInvalidExchanges()));
         }
         return resequencer;
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RollbackReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RollbackReifier.java
index 86e774b..08c2a59 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RollbackReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RollbackReifier.java
@@ -30,8 +30,8 @@ public class RollbackReifier extends ProcessorReifier<RollbackDefinition> {
 
     @Override
     public Processor createProcessor(RouteContext routeContext) {
-        boolean isMarkRollbackOnly = definition.getMarkRollbackOnly() != null && definition.getMarkRollbackOnly();
-        boolean isMarkRollbackOnlyLast = definition.getMarkRollbackOnlyLast() != null && definition.getMarkRollbackOnlyLast();
+        boolean isMarkRollbackOnly = definition.getMarkRollbackOnly() != null && parseBoolean(routeContext, definition.getMarkRollbackOnly());
+        boolean isMarkRollbackOnlyLast = definition.getMarkRollbackOnlyLast() != null && parseBoolean(routeContext, definition.getMarkRollbackOnlyLast());
 
         // validate that only either mark rollbacks is chosen and not both
         if (isMarkRollbackOnly && isMarkRollbackOnlyLast) {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java
index cf5d223..0c1f808 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java
@@ -399,12 +399,12 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         if (definition.getInputType() != null || definition.getOutputType() != null) {
             Contract contract = new Contract();
             if (definition.getInputType() != null) {
-                contract.setInputType(definition.getInputType().getUrn());
-                contract.setValidateInput(definition.getInputType().isValidate());
+                contract.setInputType(parseString(routeContext, definition.getInputType().getUrn()));
+                contract.setValidateInput(parseBoolean(routeContext, definition.getInputType().getValidate()));
             }
             if (definition.getOutputType() != null) {
-                contract.setOutputType(definition.getOutputType().getUrn());
-                contract.setValidateOutput(definition.getOutputType().isValidate());
+                contract.setOutputType(parseString(routeContext, definition.getOutputType().getUrn()));
+                contract.setValidateOutput(parseBoolean(routeContext, definition.getOutputType().getValidate()));
             }
             routeContext.addAdvice(new ContractAdvice(contract));
             // make sure to enable data type as its in use when using
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RoutingSlipReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RoutingSlipReifier.java
index 4dba822..f88150d 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RoutingSlipReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RoutingSlipReifier.java
@@ -41,10 +41,10 @@ public class RoutingSlipReifier extends ExpressionReifier<RoutingSlipDefinition<
 
         RoutingSlip routingSlip = new RoutingSlip(routeContext.getCamelContext(), expression, delimiter);
         if (definition.getIgnoreInvalidEndpoints() != null) {
-            routingSlip.setIgnoreInvalidEndpoints(definition.getIgnoreInvalidEndpoints());
+            routingSlip.setIgnoreInvalidEndpoints(parseBoolean(routeContext, definition.getIgnoreInvalidEndpoints()));
         }
         if (definition.getCacheSize() != null) {
-            routingSlip.setCacheSize(definition.getCacheSize());
+            routingSlip.setCacheSize(parseInt(routeContext, definition.getCacheSize()));
         }
 
         // and wrap this in an error handler
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SendReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SendReifier.java
index eb534bc..b1a6d3f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SendReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SendReifier.java
@@ -17,6 +17,7 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Endpoint;
+import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SendDefinition;
@@ -32,7 +33,7 @@ public class SendReifier extends ProcessorReifier<SendDefinition<?>> {
     @Override
     public Processor createProcessor(RouteContext routeContext) throws Exception {
         Endpoint endpoint = resolveEndpoint(routeContext);
-        return new SendProcessor(endpoint, definition.getPattern());
+        return new SendProcessor(endpoint, parse(routeContext, ExchangePattern.class, definition.getPattern()));
     }
 
     public Endpoint resolveEndpoint(RouteContext context) {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThreadsReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThreadsReifier.java
index 06079b6..0368904 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThreadsReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThreadsReifier.java
@@ -17,6 +17,7 @@
 package org.apache.camel.reifier;
 
 import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.Processor;
 import org.apache.camel.builder.ThreadPoolProfileBuilder;
@@ -46,7 +47,7 @@ public class ThreadsReifier extends ProcessorReifier<ThreadsDefinition> {
         // resolve what rejected policy to use
         ThreadPoolRejectedPolicy policy = resolveRejectedPolicy(routeContext);
         if (policy == null) {
-            if (definition.getCallerRunsWhenRejected() == null || definition.getCallerRunsWhenRejected()) {
+            if (definition.getCallerRunsWhenRejected() == null || parseBoolean(routeContext, definition.getCallerRunsWhenRejected())) {
                 // should use caller runs by default if not configured
                 policy = ThreadPoolRejectedPolicy.CallerRuns;
             } else {
@@ -59,9 +60,15 @@ public class ThreadsReifier extends ProcessorReifier<ThreadsDefinition> {
         if (threadPool == null) {
             ExecutorServiceManager manager = routeContext.getCamelContext().getExecutorServiceManager();
             // create the thread pool using a builder
-            ThreadPoolProfile profile = new ThreadPoolProfileBuilder(name).poolSize(definition.getPoolSize()).maxPoolSize(definition.getMaxPoolSize())
-                .keepAliveTime(definition.getKeepAliveTime(), definition.getTimeUnit()).maxQueueSize(definition.getMaxQueueSize()).rejectedPolicy(policy)
-                .allowCoreThreadTimeOut(definition.getAllowCoreThreadTimeOut()).build();
+            ThreadPoolProfile profile = new ThreadPoolProfileBuilder(name)
+                .poolSize(definition.getPoolSize() != null ? parseInt(routeContext, definition.getPoolSize()) : null)
+                .maxPoolSize(definition.getMaxPoolSize() != null ? parseInt(routeContext, definition.getMaxPoolSize()) : null)
+                .keepAliveTime(definition.getKeepAliveTime() != null ? parseLong(routeContext, definition.getKeepAliveTime()) : null,
+                               definition.getTimeUnit() != null ? TimeUnit.valueOf(definition.getTimeUnit()) : null)
+                .maxQueueSize(definition.getMaxQueueSize() != null ? parseInt(routeContext, definition.getMaxQueueSize()) : null)
+                .rejectedPolicy(policy)
+                .allowCoreThreadTimeOut(definition.getAllowCoreThreadTimeOut() != null ? parseBoolean(routeContext, definition.getAllowCoreThreadTimeOut()) : null)
+                .build();
             threadPool = manager.newThreadPool(definition, name, profile);
             shutdownThreadPool = true;
         } else {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java
index 922b1fe..687d531 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java
@@ -19,6 +19,7 @@ package org.apache.camel.reifier;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.camel.ExchangePattern;
 import org.apache.camel.Expression;
 import org.apache.camel.NoSuchLanguageException;
 import org.apache.camel.Processor;
@@ -52,12 +53,12 @@ public class ToDynamicReifier<T extends ToDynamicDefinition> extends ProcessorRe
 
         SendDynamicProcessor processor = new SendDynamicProcessor(uri, exp);
         processor.setCamelContext(routeContext.getCamelContext());
-        processor.setPattern(definition.getPattern());
+        processor.setPattern(parse(routeContext, ExchangePattern.class, definition.getPattern()));
         if (definition.getCacheSize() != null) {
-            processor.setCacheSize(definition.getCacheSize());
+            processor.setCacheSize(parseInt(routeContext, definition.getCacheSize()));
         }
         if (definition.getIgnoreInvalidEndpoint() != null) {
-            processor.setIgnoreInvalidEndpoint(definition.getIgnoreInvalidEndpoint());
+            processor.setIgnoreInvalidEndpoint(parseBoolean(routeContext, definition.getIgnoreInvalidEndpoint()));
         }
         return processor;
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WireTapReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WireTapReifier.java
index d42b2b7..7a89b1a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WireTapReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WireTapReifier.java
@@ -45,7 +45,7 @@ public class WireTapReifier extends ToDynamicReifier<WireTapDefinition<?>> {
         ExecutorService threadPool = ProcessorDefinitionHelper.getConfiguredExecutorService(routeContext, "WireTap", definition, true);
 
         // must use InOnly for WireTap
-        definition.setPattern(ExchangePattern.InOnly);
+        definition.setPattern(ExchangePattern.InOnly.name());
 
         // create the send dynamic producer to send to the wire tapped endpoint
         SendDynamicProcessor dynamicTo = (SendDynamicProcessor)super.createProcessor(routeContext);
@@ -58,9 +58,12 @@ public class WireTapReifier extends ToDynamicReifier<WireTapDefinition<?>> {
         internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(routeContext));
 
         // is true by default
-        boolean isCopy = definition.getCopy() == null || definition.getCopy();
+        boolean isCopy = definition.getCopy() == null || parseBoolean(routeContext, definition.getCopy());
 
-        WireTapProcessor answer = new WireTapProcessor(dynamicTo, internal, definition.getPattern(), threadPool, shutdownThreadPool, definition.isDynamic());
+        WireTapProcessor answer = new WireTapProcessor(dynamicTo, internal,
+                parse(routeContext, ExchangePattern.class, definition.getPattern()),
+                threadPool, shutdownThreadPool,
+                definition.getDynamicUri() == null || parseBoolean(routeContext, definition.getDynamicUri()));
         answer.setCopy(isCopy);
         if (definition.getNewExchangeProcessorRef() != null) {
             definition.setNewExchangeProcessor(routeContext.mandatoryLookup(definition.getNewExchangeProcessorRef(), Processor.class));
@@ -90,7 +93,7 @@ public class WireTapReifier extends ToDynamicReifier<WireTapDefinition<?>> {
     @Override
     protected Expression createExpression(RouteContext routeContext, String uri) {
         // whether to use dynamic or static uri
-        if (definition.isDynamic()) {
+        if (definition.getDynamicUri() == null || parseBoolean(routeContext, definition.getDynamicUri())) {
             return super.createExpression(routeContext, uri);
         } else {
             return ExpressionBuilder.constantExpression(uri);
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
index 2098107..96fdeb2 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
@@ -67,12 +67,13 @@ import org.apache.camel.model.dataformat.XmlRpcDataFormat;
 import org.apache.camel.model.dataformat.YAMLDataFormat;
 import org.apache.camel.model.dataformat.ZipDeflaterDataFormat;
 import org.apache.camel.model.dataformat.ZipFileDataFormat;
+import org.apache.camel.reifier.AbstractReifier;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.util.ObjectHelper;
 
 import static org.apache.camel.support.EndpointHelper.isReferenceParameter;
 
-public abstract class DataFormatReifier<T extends DataFormatDefinition> {
+public abstract class DataFormatReifier<T extends DataFormatDefinition> extends AbstractReifier {
 
     private static final Map<Class<? extends DataFormatDefinition>, Function<DataFormatDefinition, DataFormatReifier<? extends DataFormatDefinition>>> DATAFORMATS;
     static {
@@ -192,7 +193,7 @@ public abstract class DataFormatReifier<T extends DataFormatDefinition> {
                 dataFormat = doCreateDataFormat(camelContext);
                 if (dataFormat != null) {
                     // is enabled by default so assume true if null
-                    final boolean contentTypeHeader = definition.getContentTypeHeader() == null || definition.getContentTypeHeader();
+                    final boolean contentTypeHeader = definition.getContentTypeHeader() == null || Boolean.parseBoolean(definition.getContentTypeHeader());
                     try {
                         setProperty(camelContext, dataFormat, "contentTypeHeader", contentTypeHeader);
                     } catch (Exception e) {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/UniVocityFixedWidthDataFormatReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/UniVocityFixedWidthDataFormatReifier.java
index bb2a94b..6ebf229 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/UniVocityFixedWidthDataFormatReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/UniVocityFixedWidthDataFormatReifier.java
@@ -20,6 +20,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.model.dataformat.UniVocityFixedWidthDataFormat;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.support.CamelContextHelper;
 
 public class UniVocityFixedWidthDataFormatReifier extends UniVocityAbstractDataFormatReifier<UniVocityFixedWidthDataFormat> {
 
@@ -34,11 +35,11 @@ public class UniVocityFixedWidthDataFormatReifier extends UniVocityAbstractDataF
         if (definition.getHeaders() != null) {
             int[] lengths = new int[definition.getHeaders().size()];
             for (int i = 0; i < lengths.length; i++) {
-                Integer length = definition.getHeaders().get(i).getLength();
+                String length = definition.getHeaders().get(i).getLength();
                 if (length == null) {
                     throw new IllegalArgumentException("The length of all headers must be defined.");
                 }
-                lengths[i] = length;
+                lengths[i] = CamelContextHelper.parseInteger(camelContext, length);
             }
             setProperty(camelContext, dataFormat, "fieldLengths", lengths);
         }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
index df37929..2dab2d1 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
@@ -23,6 +23,7 @@ import java.util.function.Function;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.LoggingLevel;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
@@ -41,11 +42,12 @@ import org.apache.camel.processor.errorhandler.ExceptionPolicy;
 import org.apache.camel.processor.errorhandler.ExceptionPolicy.RedeliveryOption;
 import org.apache.camel.processor.errorhandler.RedeliveryErrorHandler;
 import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
+import org.apache.camel.reifier.AbstractReifier;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.util.ObjectHelper;
 
-public abstract class ErrorHandlerReifier<T extends ErrorHandlerBuilderSupport> {
+public abstract class ErrorHandlerReifier<T extends ErrorHandlerBuilderSupport> extends AbstractReifier {
 
     public static final String DEFAULT_ERROR_HANDLER_BUILDER = "CamelDefaultErrorHandlerBuilder";
     private static final Map<Class<?>, Function<ErrorHandlerFactory, ErrorHandlerReifier<? extends ErrorHandlerFactory>>> ERROR_HANDLERS;
@@ -88,9 +90,12 @@ public abstract class ErrorHandlerReifier<T extends ErrorHandlerBuilderSupport>
     }
 
     public static ExceptionPolicy createExceptionPolicy(OnExceptionDefinition def, RouteContext routeContext) {
-        return new ExceptionPolicy(def.getId(), CamelContextHelper.getRouteId(def), def.getUseOriginalMessagePolicy() != null && def.getUseOriginalMessagePolicy(),
-                                   def.getUseOriginalBodyPolicy() != null && def.getUseOriginalBodyPolicy(), ObjectHelper.isNotEmpty(def.getOutputs()), def.getHandledPolicy(),
-                                   def.getContinuedPolicy(), def.getRetryWhilePolicy(), def.getOnRedelivery(), def.getOnExceptionOccurred(), def.getRedeliveryPolicyRef(),
+        return new ExceptionPolicy(def.getId(), CamelContextHelper.getRouteId(def),
+                                   def.getUseOriginalMessage() != null && parseBoolean(routeContext, def.getUseOriginalMessage()),
+                                   def.getUseOriginalBody() != null && parseBoolean(routeContext, def.getUseOriginalBody()),
+                                   ObjectHelper.isNotEmpty(def.getOutputs()), def.getHandledPolicy(),
+                                   def.getContinuedPolicy(), def.getRetryWhilePolicy(), def.getOnRedelivery(),
+                                   def.getOnExceptionOccurred(), def.getRedeliveryPolicyRef(),
                                    getRedeliveryPolicy(def.getRedeliveryPolicyType()), def.getExceptions());
     }
 
@@ -283,10 +288,10 @@ public abstract class ErrorHandlerReifier<T extends ErrorHandlerBuilderSupport>
                 answer.setAsyncDelayedRedelivery(CamelContextHelper.parseBoolean(context, definition.getAsyncDelayedRedelivery()));
             }
             if (definition.getRetriesExhaustedLogLevel() != null) {
-                answer.setRetriesExhaustedLogLevel(definition.getRetriesExhaustedLogLevel());
+                answer.setRetriesExhaustedLogLevel(LoggingLevel.valueOf(definition.getRetriesExhaustedLogLevel()));
             }
             if (definition.getRetryAttemptedLogLevel() != null) {
-                answer.setRetryAttemptedLogLevel(definition.getRetryAttemptedLogLevel());
+                answer.setRetryAttemptedLogLevel(LoggingLevel.valueOf(definition.getRetryAttemptedLogLevel()));
             }
             if (definition.getRetryAttemptedLogInterval() != null) {
                 answer.setRetryAttemptedLogInterval(CamelContextHelper.parseInteger(context, definition.getRetryAttemptedLogInterval()));
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/FailoverLoadBalancerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/FailoverLoadBalancerReifier.java
index e44061c..526c84f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/FailoverLoadBalancerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/FailoverLoadBalancerReifier.java
@@ -58,13 +58,13 @@ public class FailoverLoadBalancerReifier extends LoadBalancerReifier<FailoverLoa
         }
 
         if (definition.getMaximumFailoverAttempts() != null) {
-            answer.setMaximumFailoverAttempts(definition.getMaximumFailoverAttempts());
+            answer.setMaximumFailoverAttempts(parseInt(routeContext, definition.getMaximumFailoverAttempts()));
         }
         if (definition.getRoundRobin() != null) {
-            answer.setRoundRobin(definition.getRoundRobin());
+            answer.setRoundRobin(parseBoolean(routeContext, definition.getRoundRobin()));
         }
         if (definition.getSticky() != null) {
-            answer.setSticky(definition.getSticky());
+            answer.setSticky(parseBoolean(routeContext, definition.getSticky()));
         }
 
         return answer;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
index 15d231f..23bc7ee 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
@@ -29,10 +29,11 @@ import org.apache.camel.model.loadbalancer.StickyLoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.TopicLoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.WeightedLoadBalancerDefinition;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
+import org.apache.camel.reifier.AbstractReifier;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.StringHelper;
 
-public class LoadBalancerReifier<T extends LoadBalancerDefinition> {
+public class LoadBalancerReifier<T extends LoadBalancerDefinition> extends AbstractReifier {
 
     private static final Map<Class<?>, Function<LoadBalancerDefinition, LoadBalancerReifier<? extends LoadBalancerDefinition>>> LOAD_BALANCERS;
     static {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/WeightedLoadBalancerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/WeightedLoadBalancerReifier.java
index 74908c0..742f330 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/WeightedLoadBalancerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/WeightedLoadBalancerReifier.java
@@ -42,10 +42,10 @@ public class WeightedLoadBalancerReifier extends LoadBalancerReifier<WeightedLoa
         try {
             String[] ratios = definition.getDistributionRatio().split(definition.getDistributionRatioDelimiter());
             for (String ratio : ratios) {
-                distributionRatioList.add(Integer.parseInt(ratio.trim()));
+                distributionRatioList.add(parseInt(routeContext, ratio.trim()));
             }
 
-            boolean isRoundRobin = definition.getRoundRobin() != null && definition.getRoundRobin();
+            boolean isRoundRobin = definition.getRoundRobin() != null && parseBoolean(routeContext, definition.getRoundRobin());
             if (isRoundRobin) {
                 loadBalancer = new WeightedRoundRobinLoadBalancer(distributionRatioList);
             } else {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
index b0c37d5..b0b8d6d 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
@@ -25,12 +25,13 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.model.rest.RestBindingDefinition;
 import org.apache.camel.processor.RestBindingAdvice;
+import org.apache.camel.reifier.AbstractReifier;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.RestConfiguration;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.PropertyBindingSupport;
 
-public class RestBindingReifier {
+public class RestBindingReifier extends AbstractReifier {
 
     private final RestBindingDefinition definition;
 
@@ -46,19 +47,19 @@ public class RestBindingReifier {
         // these options can be overridden per rest verb
         String mode = config.getBindingMode().name();
         if (definition.getBindingMode() != null) {
-            mode = definition.getBindingMode().name();
+            mode = definition.getBindingMode();
         }
         boolean cors = config.isEnableCORS();
         if (definition.getEnableCORS() != null) {
-            cors = definition.getEnableCORS();
+            cors = parseBoolean(routeContext, definition.getEnableCORS());
         }
         boolean skip = config.isSkipBindingOnErrorCode();
         if (definition.getSkipBindingOnErrorCode() != null) {
-            skip = definition.getSkipBindingOnErrorCode();
+            skip = parseBoolean(routeContext, definition.getSkipBindingOnErrorCode());
         }
         boolean validation = config.isClientRequestValidation();
         if (definition.getClientRequestValidation() != null) {
-            validation = definition.getClientRequestValidation();
+            validation = parseBoolean(routeContext, definition.getClientRequestValidation());
         }
 
         // cors headers
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 f4acf1d..d5c2288 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
@@ -117,6 +117,7 @@ import org.apache.camel.spi.UuidGenerator;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.ObjectHelper;
 import org.apache.camel.util.StringHelper;
+import org.apache.camel.util.concurrent.ThreadPoolRejectedPolicy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -998,7 +999,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
         answer.setKeepAliveTime(CamelContextHelper.parseLong(context, definition.getKeepAliveTime()));
         answer.setMaxQueueSize(CamelContextHelper.parseInteger(context, definition.getMaxQueueSize()));
         answer.setAllowCoreThreadTimeOut(CamelContextHelper.parseBoolean(context, definition.getAllowCoreThreadTimeOut()));
-        answer.setRejectedPolicy(definition.getRejectedPolicy());
+        answer.setRejectedPolicy(CamelContextHelper.parse(context, ThreadPoolRejectedPolicy.class, definition.getRejectedPolicy()));
         answer.setTimeUnit(definition.getTimeUnit());
         return answer;
     }
@@ -1077,7 +1078,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
                 filter.addExcludePattern(exclude);
             }
             // lets be false by default, to skip prototype beans
-            boolean includeNonSingletons = contextScanDef.getIncludeNonSingletons() != null ? contextScanDef.getIncludeNonSingletons() : false;
+            boolean includeNonSingletons = contextScanDef.getIncludeNonSingletons() != null && Boolean.parseBoolean(contextScanDef.getIncludeNonSingletons());
             findRouteBuildersByContextScan(filter, includeNonSingletons, builders);
         }
     }
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java
index dfcc965..84402bb 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelRedeliveryPolicyFactoryBean.java
@@ -60,10 +60,10 @@ public abstract class AbstractCamelRedeliveryPolicyFactoryBean extends AbstractC
     private String maximumRedeliveryDelay;
     @XmlAttribute
     @Metadata(defaultValue = "ERROR", description = "Sets the logging level to use for log messages when retries have been exhausted.")
-    private LoggingLevel retriesExhaustedLogLevel;
+    private String retriesExhaustedLogLevel;
     @XmlAttribute
     @Metadata(defaultValue = "DEBUG", description = "Sets the logging level to use for log messages when retries are attempted.")
-    private LoggingLevel retryAttemptedLogLevel;
+    private String retryAttemptedLogLevel;
     @XmlAttribute
     @Metadata(defaultValue = "0", description = "Sets the interval for log messages when retries are attempted.")
     private String retryAttemptedLogInterval;
@@ -125,10 +125,10 @@ public abstract class AbstractCamelRedeliveryPolicyFactoryBean extends AbstractC
             }
         }
         if (retriesExhaustedLogLevel != null) {
-            answer.setRetriesExhaustedLogLevel(retriesExhaustedLogLevel);
+            answer.setRetriesExhaustedLogLevel(LoggingLevel.valueOf(retriesExhaustedLogLevel));
         }
         if (retryAttemptedLogLevel != null) {
-            answer.setRetryAttemptedLogLevel(retryAttemptedLogLevel);
+            answer.setRetryAttemptedLogLevel(LoggingLevel.valueOf(retryAttemptedLogLevel));
         }
         if (retryAttemptedLogInterval != null) {
             answer.setRetryAttemptedLogInterval(CamelContextHelper.parseInteger(context, retryAttemptedLogInterval));
@@ -262,19 +262,19 @@ public abstract class AbstractCamelRedeliveryPolicyFactoryBean extends AbstractC
         this.maximumRedeliveryDelay = maximumRedeliveryDelay;
     }
 
-    public LoggingLevel getRetriesExhaustedLogLevel() {
+    public String getRetriesExhaustedLogLevel() {
         return retriesExhaustedLogLevel;
     }
 
-    public void setRetriesExhaustedLogLevel(LoggingLevel retriesExhaustedLogLevel) {
+    public void setRetriesExhaustedLogLevel(String retriesExhaustedLogLevel) {
         this.retriesExhaustedLogLevel = retriesExhaustedLogLevel;
     }
 
-    public LoggingLevel getRetryAttemptedLogLevel() {
+    public String getRetryAttemptedLogLevel() {
         return retryAttemptedLogLevel;
     }
 
-    public void setRetryAttemptedLogLevel(LoggingLevel retryAttemptedLogLevel) {
+    public void setRetryAttemptedLogLevel(String retryAttemptedLogLevel) {
         this.retryAttemptedLogLevel = retryAttemptedLogLevel;
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorDtdAccessAbstractTest.java b/core/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorDtdAccessAbstractTest.java
index 30293e8..8b84dda 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorDtdAccessAbstractTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorDtdAccessAbstractTest.java
@@ -34,9 +34,9 @@ public abstract class ValidatorDtdAccessAbstractTest extends ContextTestSupport
 
     protected String payloud = getPayloudPart("Hello world!");
 
-    protected String ssrfPayloud = "<!DOCTYPE roottag PUBLIC \"-//VSR//PENTEST//EN\" \"http://notexisting/test\">\n" + payloud;
+    protected String ssrfPayloud = "<!DOCTYPE roottag PUBLIC \"-//VSR//PENTEST//EN\" \"http://notex.isting/test\">\n" + payloud;
 
-    protected String xxePayloud = "<!DOCTYPE updateProfile [<!ENTITY file SYSTEM \"http://notexistinghost/test\">]>\n" + getPayloudPart("&file;");
+    protected String xxePayloud = "<!DOCTYPE updateProfile [<!ENTITY file SYSTEM \"http://notex.istinghost/test\">]>\n" + getPayloudPart("&file;");
 
     private final boolean accessExternalDTD;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorDtdAccessOnTest.java b/core/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorDtdAccessOnTest.java
index 6108542..636fb50 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorDtdAccessOnTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorDtdAccessOnTest.java
@@ -45,7 +45,7 @@ public class ValidatorDtdAccessOnTest extends ValidatorDtdAccessAbstractTest {
 
     /**
      * Tests that external DTD call is executed for StreamSourceby expecting an
-     * UnkonwHostException.
+     * UnknownHostException.
      */
     @Test
     public void testInvalidMessageWithExternalDTDStreamSource() throws Exception {
diff --git a/core/camel-core/src/test/java/org/apache/camel/model/ChoiceDefinitionTest.java b/core/camel-core/src/test/java/org/apache/camel/model/ChoiceDefinitionTest.java
index 4e3d3f3..8df50e4 100644
--- a/core/camel-core/src/test/java/org/apache/camel/model/ChoiceDefinitionTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/model/ChoiceDefinitionTest.java
@@ -39,6 +39,7 @@ public class ChoiceDefinitionTest extends TestSupport {
         assertEquals(when1, choice.getOutputs().get(0));
         assertEquals(when2, choice.getOutputs().get(1));
         assertEquals(other, choice.getOutputs().get(2));
+        assertEquals("choice[when[{simple{${body}} contains Camel}],when[{simple{${body}} contains Donkey}],otherwise[]]", choice.getLabel());
     }
 
     @Test
diff --git a/core/camel-core/src/test/java/org/apache/camel/model/OnFallbackDefinitionTest.java b/core/camel-core/src/test/java/org/apache/camel/model/OnFallbackDefinitionTest.java
new file mode 100644
index 0000000..2d6447e
--- /dev/null
+++ b/core/camel-core/src/test/java/org/apache/camel/model/OnFallbackDefinitionTest.java
@@ -0,0 +1,17 @@
+package org.apache.camel.model;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class OnFallbackDefinitionTest {
+
+    @Test
+    public void testLabel() {
+        OnFallbackDefinition ofd = new OnFallbackDefinition();
+        ofd.addOutput(new ToDefinition("urn:foo1"));
+        ofd.addOutput(new ToDefinition("urn:foo2"));
+        assertEquals("onFallback[urn:foo1,urn:foo2]", ofd.getLabel());
+    }
+}
diff --git a/core/camel-core/src/test/java/org/apache/camel/model/XmlParseTest.java b/core/camel-core/src/test/java/org/apache/camel/model/XmlParseTest.java
index 7ee1301..d008268 100644
--- a/core/camel-core/src/test/java/org/apache/camel/model/XmlParseTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/model/XmlParseTest.java
@@ -329,8 +329,8 @@ public class XmlParseTest extends XmlTestSupport {
         ResequenceDefinition resequencer = assertOneProcessorInstanceOf(ResequenceDefinition.class, route);
         assertNull(resequencer.getStreamConfig());
         assertNotNull(resequencer.getBatchConfig());
-        assertEquals(500, resequencer.getBatchConfig().getBatchSize());
-        assertEquals(2000L, resequencer.getBatchConfig().getBatchTimeout());
+        assertEquals(Integer.toString(500), resequencer.getBatchConfig().getBatchSize());
+        assertEquals(Long.toString(2000L), resequencer.getBatchConfig().getBatchTimeout());
     }
 
     @Test
@@ -339,8 +339,8 @@ public class XmlParseTest extends XmlTestSupport {
         ResequenceDefinition resequencer = assertOneProcessorInstanceOf(ResequenceDefinition.class, route);
         assertNotNull(resequencer.getStreamConfig());
         assertNull(resequencer.getBatchConfig());
-        assertEquals(1000, resequencer.getStreamConfig().getCapacity());
-        assertEquals(2000L, resequencer.getStreamConfig().getTimeout());
+        assertEquals(Integer.toString(1000), resequencer.getStreamConfig().getCapacity());
+        assertEquals(Long.toString(2000L), resequencer.getStreamConfig().getTimeout());
     }
 
     @Test
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AlbertoAggregatorTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AlbertoAggregatorTest.java
index eb2264a..035cc7f 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AlbertoAggregatorTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AlbertoAggregatorTest.java
@@ -162,8 +162,8 @@ public class AlbertoAggregatorTest extends ContextTestSupport {
                 // Join all brothers lists and remove surname and type headers
                 AggregateDefinition agg = from("direct:joinBrothers").aggregate(header(TYPE_HEADER), brothersAggregator);
 
-                agg.setCompletionTimeout(100L);
-                agg.setCompletionTimeoutCheckerInterval(10L);
+                agg.completionTimeout(100L);
+                agg.completionTimeoutCheckerInterval(10L);
                 agg.removeHeader(SURNAME_HEADER).removeHeader(TYPE_HEADER).to("mock:result");
             }
         };
diff --git a/core/camel-core/src/test/java/org/apache/camel/util/CamelContextHelperTest.java b/core/camel-core/src/test/java/org/apache/camel/util/CamelContextHelperTest.java
index 244d249..81272f9 100644
--- a/core/camel-core/src/test/java/org/apache/camel/util/CamelContextHelperTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/util/CamelContextHelperTest.java
@@ -16,12 +16,15 @@
  */
 package org.apache.camel.util;
 
+import java.util.concurrent.Callable;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.support.CamelContextHelper;
+import org.junit.Assert;
 import org.junit.Test;
 
 public class CamelContextHelperTest extends ContextTestSupport {
@@ -34,6 +37,38 @@ public class CamelContextHelperTest extends ContextTestSupport {
     }
 
     @Test
+    public void testParsing() {
+        eq(() -> CamelContextHelper.parseBoolean(context, "TRUE"), true);
+        eq(() -> CamelContextHelper.parseBoolean(context, "true"), true);
+        eq(() -> CamelContextHelper.parseBoolean(context, "FALSE"), false);
+        eq(() -> CamelContextHelper.parseBoolean(context, "false"), false);
+        eq(() -> CamelContextHelper.parseBoolean(context, "TrUe"), true);
+        eq(() -> CamelContextHelper.parseBoolean(context, "FaLsE"), false);
+        fl(() -> CamelContextHelper.parseBoolean(context, "5"), IllegalArgumentException.class);
+
+        eq(() -> CamelContextHelper.parseInteger(context, "5"), 5);
+        eq(() -> CamelContextHelper.parseInteger(context, "-5"), -5);
+        fl(() -> CamelContextHelper.parseInteger(context, "5.0"), IllegalArgumentException.class);
+    }
+
+    private <T> void eq(Callable<T> r, T value) {
+        try {
+            T t = r.call();
+            assertEquals(value, t);
+        } catch (Throwable t) {
+            Assert.fail("Exception thrown: " + t);
+        }
+    }
+    private <T> void fl(Callable<T> r, Class<? extends Exception> exceptionClass) {
+        try {
+            r.call();
+            fail("Should have thrown an exception");
+        } catch (Throwable t) {
+            assertTrue("Expected a " + exceptionClass + " exception", exceptionClass.isInstance(t));
+        }
+    }
+
+    @Test
     public void testGetMandatoryEndpoint() {
         MockEndpoint mock = CamelContextHelper.getMandatoryEndpoint(context, "mock:foo", MockEndpoint.class);
         assertNotNull(mock);
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedWeightedBalancerMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedWeightedBalancerMBean.java
index 2021011..daecf0e 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedWeightedBalancerMBean.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedWeightedBalancerMBean.java
@@ -24,7 +24,7 @@ public interface ManagedWeightedBalancerMBean extends ManagedProcessorMBean {
     Integer getSize();
 
     @ManagedAttribute(description = "Whether round robin mode is enabled")
-    Boolean isRoundRobin();
+    String getRoundRobin();
 
     @ManagedAttribute(description = "The distribution ratio of integer weights separated by delimiters for example '2,3,5'")
     String getDistributionRatio();
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedWeightedLoadBalancer.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedWeightedLoadBalancer.java
index a7c713e..6883f66 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedWeightedLoadBalancer.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedWeightedLoadBalancer.java
@@ -44,7 +44,7 @@ public class ManagedWeightedLoadBalancer extends ManagedProcessor implements Man
     }
 
     @Override
-    public Boolean isRoundRobin() {
+    public String getRoundRobin() {
         WeightedLoadBalancerDefinition weighted = (WeightedLoadBalancerDefinition) getDefinition().getLoadBalancerType();
         if (weighted != null) {
             return weighted.getRoundRobin();
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedWeightedLoadBalancerTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedWeightedLoadBalancerTest.java
index 63a0f8c..8304253 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedWeightedLoadBalancerTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedWeightedLoadBalancerTest.java
@@ -64,8 +64,8 @@ public class ManagedWeightedLoadBalancerTest extends ManagementTestSupport {
         Integer size = (Integer) mbeanServer.getAttribute(on, "Size");
         assertEquals(2, size.intValue());
 
-        Boolean roundRobin = (Boolean) mbeanServer.getAttribute(on, "RoundRobin");
-        assertEquals(true, roundRobin.booleanValue());
+        String roundRobin = (String) mbeanServer.getAttribute(on, "RoundRobin");
+        assertEquals(Boolean.toString(true), roundRobin);
 
         String ratio = (String) mbeanServer.getAttribute(on, "DistributionRatio");
         assertEquals("1,2", ratio);
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/CamelContextHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/CamelContextHelper.java
index 13bfaf0..ff0fb7a 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/CamelContextHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/CamelContextHelper.java
@@ -20,6 +20,7 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+import java.util.function.Function;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
@@ -28,6 +29,7 @@ import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.NoSuchBeanException;
 import org.apache.camel.NoSuchEndpointException;
+import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.spi.RouteStartupOrder;
 import org.apache.camel.util.ObjectHelper;
 
@@ -356,9 +358,9 @@ public final class CamelContextHelper {
      * @param camelContext the camel context
      * @param text  the text
      * @return the parsed text, or <tt>null</tt> if the text was <tt>null</tt>
-     * @throws Exception is thrown if illegal argument
+     * @throws IllegalStateException is thrown if illegal argument
      */
-    public static String parseText(CamelContext camelContext, String text) throws Exception {
+    public static String parseText(CamelContext camelContext, String text) {
         // ensure we support property placeholders
         return camelContext.resolvePropertyPlaceholders(text);
     }
@@ -369,23 +371,10 @@ public final class CamelContextHelper {
      * @param camelContext the camel context
      * @param text  the text
      * @return the integer vale, or <tt>null</tt> if the text was <tt>null</tt>
-     * @throws Exception is thrown if illegal argument or type conversion not possible
+     * @throws IllegalStateException is thrown if illegal argument or type conversion not possible
      */
-    public static Integer parseInteger(CamelContext camelContext, String text) throws Exception {
-        // ensure we support property placeholders
-        String s = camelContext.resolvePropertyPlaceholders(text);
-        if (s != null) {
-            try {
-                return camelContext.getTypeConverter().mandatoryConvertTo(Integer.class, s);
-            } catch (NumberFormatException e) {
-                if (s.equals(text)) {
-                    throw new IllegalArgumentException("Error parsing [" + s + "] as an Integer.", e);
-                } else {
-                    throw new IllegalArgumentException("Error parsing [" + s + "] from property " + text + " as an Integer.", e);
-                }
-            }
-        }
-        return null;
+    public static Integer parseInteger(CamelContext camelContext, String text) {
+        return parse(camelContext, Integer.class, text);
     }
 
     /**
@@ -394,23 +383,10 @@ public final class CamelContextHelper {
      * @param camelContext the camel context
      * @param text  the text
      * @return the long vale, or <tt>null</tt> if the text was <tt>null</tt>
-     * @throws Exception is thrown if illegal argument or type conversion not possible
+     * @throws IllegalStateException is thrown if illegal argument or type conversion not possible
      */
-    public static Long parseLong(CamelContext camelContext, String text) throws Exception {
-        // ensure we support property placeholders
-        String s = camelContext.resolvePropertyPlaceholders(text);
-        if (s != null) {
-            try {
-                return camelContext.getTypeConverter().mandatoryConvertTo(Long.class, s);
-            } catch (NumberFormatException e) {
-                if (s.equals(text)) {
-                    throw new IllegalArgumentException("Error parsing [" + s + "] as a Long.", e);
-                } else {
-                    throw new IllegalArgumentException("Error parsing [" + s + "] from property " + text + " as a Long.", e);
-                }
-            }
-        }
-        return null;
+    public static Long parseLong(CamelContext camelContext, String text) {
+        return parse(camelContext, Long.class, text);
     }
 
     /**
@@ -419,23 +395,10 @@ public final class CamelContextHelper {
      * @param camelContext the camel context
      * @param text  the text
      * @return the double vale, or <tt>null</tt> if the text was <tt>null</tt>
-     * @throws Exception is thrown if illegal argument or type conversion not possible
+     * @throws IllegalStateException is thrown if illegal argument or type conversion not possible
      */
-    public static Double parseDouble(CamelContext camelContext, String text) throws Exception {
-        // ensure we support property placeholders
-        String s = camelContext.resolvePropertyPlaceholders(text);
-        if (s != null) {
-            try {
-                return camelContext.getTypeConverter().mandatoryConvertTo(Double.class, s);
-            } catch (NumberFormatException e) {
-                if (s.equals(text)) {
-                    throw new IllegalArgumentException("Error parsing [" + s + "] as an Integer.", e);
-                } else {
-                    throw new IllegalArgumentException("Error parsing [" + s + "] from property " + text + " as an Integer.", e);
-                }
-            }
-        }
-        return null;
+    public static Double parseDouble(CamelContext camelContext, String text) {
+        return parse(camelContext, Double.class, text);
     }
 
     /**
@@ -447,17 +410,29 @@ public final class CamelContextHelper {
      * @throws IllegalArgumentException is thrown if illegal argument or type conversion not possible
      */
     public static Boolean parseBoolean(CamelContext camelContext, String text) {
+        return parse(camelContext, Boolean.class, text);
+    }
+
+    /**
+     * Parses the given text and converts it to the specified class and handling property placeholders as well
+     *
+     * @param camelContext the camel context
+     * @param clazz the class to convert the value to
+     * @param text  the text
+     * @return the boolean vale, or <tt>null</tt> if the text was <tt>null</tt>
+     * @throws IllegalArgumentException is thrown if illegal argument or type conversion not possible
+     */
+    public static <T> T parse(CamelContext camelContext, Class<T> clazz, String text) {
         // ensure we support property placeholders
         String s = camelContext.resolvePropertyPlaceholders(text);
         if (s != null) {
-            s = s.trim().toLowerCase(Locale.ENGLISH);
-            if (s.equals("true") || s.equals("false")) {
-                return "true".equals(s) ? Boolean.TRUE : Boolean.FALSE;
-            } else {
+            try {
+                return camelContext.getTypeConverter().mandatoryConvertTo(clazz, s);
+            } catch (Exception e) {
                 if (s.equals(text)) {
-                    throw new IllegalArgumentException("Error parsing [" + s + "] as a Boolean.");
+                    throw new IllegalArgumentException("Error parsing [" + s + "] as a " + clazz.getName() + ".", e);
                 } else {
-                    throw new IllegalArgumentException("Error parsing [" + s + "] from property " + text + " as a Boolean.");
+                    throw new IllegalArgumentException("Error parsing [" + s + "] from property " + text + " as a " + clazz.getName() + ".", e);
                 }
             }
         }
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/springboot/HystrixConfigurationDefinitionCommon.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/springboot/HystrixConfigurationDefinitionCommon.java
index 0f4df78..9cca726 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/springboot/HystrixConfigurationDefinitionCommon.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/springboot/HystrixConfigurationDefinitionCommon.java
@@ -42,7 +42,7 @@ public class HystrixConfigurationDefinitionCommon {
      * tracking metrics and knowing whether it should be open/closed, this
      * property results in not even instantiating a circuit-breaker.
      */
-    private Boolean circuitBreakerEnabled = true;
+    private String circuitBreakerEnabled = "true";
     /**
      * Error percentage threshold (as whole number such as 50) at which point
      * the circuit breaker will trip open and reject requests. It will stay
@@ -50,7 +50,7 @@ public class HystrixConfigurationDefinitionCommon {
      * circuitBreakerSleepWindowInMilliseconds; The error percentage this is
      * compared against comes from HystrixCommandMetrics.getHealthCounts().
      */
-    private Integer circuitBreakerErrorThresholdPercentage = 50;
+    private String circuitBreakerErrorThresholdPercentage = "50";
     /**
      * If true the HystrixCircuitBreaker#allowRequest() will always return true
      * to allow requests regardless of the error percentage from
@@ -58,31 +58,31 @@ public class HystrixConfigurationDefinitionCommon {
      * property takes precedence so if it set to true this property does
      * nothing.
      */
-    private Boolean circuitBreakerForceClosed = false;
+    private String circuitBreakerForceClosed = "false";
     /**
      * If true the HystrixCircuitBreaker.allowRequest() will always return
      * false, causing the circuit to be open (tripped) and reject all requests.
      * This property takes precedence over circuitBreakerForceClosed();
      */
-    private Boolean circuitBreakerForceOpen = false;
+    private String circuitBreakerForceOpen = "false";
     /**
      * Minimum number of requests in the
      * metricsRollingStatisticalWindowInMilliseconds() that must exist before
      * the HystrixCircuitBreaker will trip. If below this number the circuit
      * will not trip regardless of error percentage.
      */
-    private Integer circuitBreakerRequestVolumeThreshold = 20;
+    private String circuitBreakerRequestVolumeThreshold = "20";
     /**
      * The time in milliseconds after a HystrixCircuitBreaker trips open that it
      * should wait before trying requests again.
      */
-    private Integer circuitBreakerSleepWindowInMilliseconds = 5000;
+    private String circuitBreakerSleepWindowInMilliseconds = "5000";
     /**
      * Number of concurrent requests permitted to HystrixCommand.run(). Requests
      * beyond the concurrent limit will be rejected. Applicable only when
      * executionIsolationStrategy == SEMAPHORE.
      */
-    private Integer executionIsolationSemaphoreMaxConcurrentRequests = 20;
+    private String executionIsolationSemaphoreMaxConcurrentRequests = "20";
     /**
      * What isolation strategy HystrixCommand.run() will be executed with. If
      * THREAD then it will be executed on a separate thread and concurrent
@@ -96,7 +96,7 @@ public class HystrixConfigurationDefinitionCommon {
      * Future#cancel) when a thread times out. Applicable only when
      * executionIsolationStrategy() == THREAD.
      */
-    private Boolean executionIsolationThreadInterruptOnTimeout = true;
+    private String executionIsolationThreadInterruptOnTimeout = "true";
     /**
      * Time in milliseconds at which point the command will timeout and halt
      * execution. If executionIsolationThreadInterruptOnTimeout == true and the
@@ -104,22 +104,22 @@ public class HystrixConfigurationDefinitionCommon {
      * the command is semaphore-isolated and a HystrixObservableCommand, that
      * command will get unsubscribed.
      */
-    private Integer executionTimeoutInMilliseconds = 1000;
+    private String executionTimeoutInMilliseconds = "1000";
     /**
      * Whether the timeout mechanism is enabled for this command
      */
-    private Boolean executionTimeoutEnabled = true;
+    private String executionTimeoutEnabled = "true";
     /**
      * Number of concurrent requests permitted to HystrixCommand.getFallback().
      * Requests beyond the concurrent limit will fail-fast and not attempt
      * retrieving a fallback.
      */
-    private Integer fallbackIsolationSemaphoreMaxConcurrentRequests = 10;
+    private String fallbackIsolationSemaphoreMaxConcurrentRequests = "10";
     /**
      * Whether HystrixCommand.getFallback() should be attempted when failure
      * occurs.
      */
-    private Boolean fallbackEnabled = true;
+    private String fallbackEnabled = "true";
     /**
      * Time in milliseconds to wait between allowing health snapshots to be
      * taken that calculate success and error percentages and affect
@@ -127,49 +127,49 @@ public class HystrixConfigurationDefinitionCommon {
      * continual calculation of error percentage can become CPU intensive thus
      * this controls how often it is calculated.
      */
-    private Integer metricsHealthSnapshotIntervalInMilliseconds = 500;
+    private String metricsHealthSnapshotIntervalInMilliseconds = "500";
     /**
      * Maximum number of values stored in each bucket of the rolling percentile.
      * This is passed into HystrixRollingPercentile inside
      * HystrixCommandMetrics.
      */
-    private Integer metricsRollingPercentileBucketSize = 10;
+    private String metricsRollingPercentileBucketSize = "10";
     /**
      * Whether percentile metrics should be captured using
      * HystrixRollingPercentile inside HystrixCommandMetrics.
      */
-    private Boolean metricsRollingPercentileEnabled = true;
+    private String metricsRollingPercentileEnabled = "true";
     /**
      * Duration of percentile rolling window in milliseconds. This is passed
      * into HystrixRollingPercentile inside HystrixCommandMetrics.
      */
-    private Integer metricsRollingPercentileWindowInMilliseconds = 10000;
+    private String metricsRollingPercentileWindowInMilliseconds = "10000";
     /**
      * Number of buckets the rolling percentile window is broken into. This is
      * passed into HystrixRollingPercentile inside HystrixCommandMetrics.
      */
-    private Integer metricsRollingPercentileWindowBuckets = 6;
+    private String metricsRollingPercentileWindowBuckets = "6";
     /**
      * This property sets the duration of the statistical rolling window, in
      * milliseconds. This is how long metrics are kept for the thread pool. The
      * window is divided into buckets and rolls by those increments.
      */
-    private Integer metricsRollingStatisticalWindowInMilliseconds = 10000;
+    private String metricsRollingStatisticalWindowInMilliseconds = "10000";
     /**
      * Number of buckets the rolling statistical window is broken into. This is
      * passed into HystrixRollingNumber inside HystrixCommandMetrics.
      */
-    private Integer metricsRollingStatisticalWindowBuckets = 10;
+    private String metricsRollingStatisticalWindowBuckets = "10";
     /**
      * Whether HystrixCommand execution and events should be logged to
      * HystrixRequestLog.
      */
-    private Boolean requestLogEnabled = true;
+    private String requestLogEnabled = "true";
     /**
      * Core thread-pool size that gets passed to
      * java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int)
      */
-    private Integer corePoolSize = 10;
+    private String corePoolSize = "10";
     /**
      * Maximum thread-pool size that gets passed to
      * ThreadPoolExecutor#setMaximumPoolSize(int). This is the maximum amount of
@@ -177,19 +177,19 @@ public class HystrixConfigurationDefinitionCommon {
      * HystrixCommands. Please note that this setting only takes effect if you
      * also set allowMaximumSizeToDivergeFromCoreSize
      */
-    private Integer maximumSize = 10;
+    private String maximumSize = "10";
     /**
      * Keep-alive time in minutes that gets passed to {link
      * ThreadPoolExecutor#setKeepAliveTime(long, TimeUnit)}
      */
-    private Integer keepAliveTime = 1;
+    private String keepAliveTime = "1";
     /**
      * Max queue size that gets passed to BlockingQueue in
      * HystrixConcurrencyStrategy.getBlockingQueue(int) This should only affect
      * the instantiation of a threadpool - it is not eliglible to change a queue
      * size on the fly. For that, use queueSizeRejectionThreshold().
      */
-    private Integer maxQueueSize = -1;
+    private String maxQueueSize = "-1";
     /**
      * Queue size rejection threshold is an artificial max size at which
      * rejections will occur even if maxQueueSize has not been reached. This is
@@ -198,23 +198,23 @@ public class HystrixConfigurationDefinitionCommon {
      * affects rejections. This is used by HystrixCommand when queuing a thread
      * for execution.
      */
-    private Integer queueSizeRejectionThreshold = 5;
+    private String queueSizeRejectionThreshold = "5";
     /**
      * Duration of statistical rolling window in milliseconds. This is passed
      * into HystrixRollingNumber inside each HystrixThreadPoolMetrics instance.
      */
-    private Integer threadPoolRollingNumberStatisticalWindowInMilliseconds = 10000;
+    private String threadPoolRollingNumberStatisticalWindowInMilliseconds = "10000";
     /**
      * Number of buckets the rolling statistical window is broken into. This is
      * passed into HystrixRollingNumber inside each HystrixThreadPoolMetrics
      * instance.
      */
-    private Integer threadPoolRollingNumberStatisticalWindowBuckets = 10;
+    private String threadPoolRollingNumberStatisticalWindowBuckets = "10";
     /**
      * Allows the configuration for maximumSize to take effect. That value can
      * then be equal to, or higher, than coreSize
      */
-    private Boolean allowMaximumSizeToDivergeFromCoreSize = false;
+    private String allowMaximumSizeToDivergeFromCoreSize = "false";
 
     public String getGroupKey() {
         return groupKey;
@@ -232,63 +232,63 @@ public class HystrixConfigurationDefinitionCommon {
         this.threadPoolKey = threadPoolKey;
     }
 
-    public Boolean getCircuitBreakerEnabled() {
+    public String getCircuitBreakerEnabled() {
         return circuitBreakerEnabled;
     }
 
-    public void setCircuitBreakerEnabled(Boolean circuitBreakerEnabled) {
+    public void setCircuitBreakerEnabled(String circuitBreakerEnabled) {
         this.circuitBreakerEnabled = circuitBreakerEnabled;
     }
 
-    public Integer getCircuitBreakerErrorThresholdPercentage() {
+    public String getCircuitBreakerErrorThresholdPercentage() {
         return circuitBreakerErrorThresholdPercentage;
     }
 
     public void setCircuitBreakerErrorThresholdPercentage(
-            Integer circuitBreakerErrorThresholdPercentage) {
+            String circuitBreakerErrorThresholdPercentage) {
         this.circuitBreakerErrorThresholdPercentage = circuitBreakerErrorThresholdPercentage;
     }
 
-    public Boolean getCircuitBreakerForceClosed() {
+    public String getCircuitBreakerForceClosed() {
         return circuitBreakerForceClosed;
     }
 
-    public void setCircuitBreakerForceClosed(Boolean circuitBreakerForceClosed) {
+    public void setCircuitBreakerForceClosed(String circuitBreakerForceClosed) {
         this.circuitBreakerForceClosed = circuitBreakerForceClosed;
     }
 
-    public Boolean getCircuitBreakerForceOpen() {
+    public String getCircuitBreakerForceOpen() {
         return circuitBreakerForceOpen;
     }
 
-    public void setCircuitBreakerForceOpen(Boolean circuitBreakerForceOpen) {
+    public void setCircuitBreakerForceOpen(String circuitBreakerForceOpen) {
         this.circuitBreakerForceOpen = circuitBreakerForceOpen;
     }
 
-    public Integer getCircuitBreakerRequestVolumeThreshold() {
+    public String getCircuitBreakerRequestVolumeThreshold() {
         return circuitBreakerRequestVolumeThreshold;
     }
 
     public void setCircuitBreakerRequestVolumeThreshold(
-            Integer circuitBreakerRequestVolumeThreshold) {
+            String circuitBreakerRequestVolumeThreshold) {
         this.circuitBreakerRequestVolumeThreshold = circuitBreakerRequestVolumeThreshold;
     }
 
-    public Integer getCircuitBreakerSleepWindowInMilliseconds() {
+    public String getCircuitBreakerSleepWindowInMilliseconds() {
         return circuitBreakerSleepWindowInMilliseconds;
     }
 
     public void setCircuitBreakerSleepWindowInMilliseconds(
-            Integer circuitBreakerSleepWindowInMilliseconds) {
+            String circuitBreakerSleepWindowInMilliseconds) {
         this.circuitBreakerSleepWindowInMilliseconds = circuitBreakerSleepWindowInMilliseconds;
     }
 
-    public Integer getExecutionIsolationSemaphoreMaxConcurrentRequests() {
+    public String getExecutionIsolationSemaphoreMaxConcurrentRequests() {
         return executionIsolationSemaphoreMaxConcurrentRequests;
     }
 
     public void setExecutionIsolationSemaphoreMaxConcurrentRequests(
-            Integer executionIsolationSemaphoreMaxConcurrentRequests) {
+            String executionIsolationSemaphoreMaxConcurrentRequests) {
         this.executionIsolationSemaphoreMaxConcurrentRequests = executionIsolationSemaphoreMaxConcurrentRequests;
     }
 
@@ -300,185 +300,185 @@ public class HystrixConfigurationDefinitionCommon {
         this.executionIsolationStrategy = executionIsolationStrategy;
     }
 
-    public Boolean getExecutionIsolationThreadInterruptOnTimeout() {
+    public String getExecutionIsolationThreadInterruptOnTimeout() {
         return executionIsolationThreadInterruptOnTimeout;
     }
 
     public void setExecutionIsolationThreadInterruptOnTimeout(
-            Boolean executionIsolationThreadInterruptOnTimeout) {
+            String executionIsolationThreadInterruptOnTimeout) {
         this.executionIsolationThreadInterruptOnTimeout = executionIsolationThreadInterruptOnTimeout;
     }
 
-    public Integer getExecutionTimeoutInMilliseconds() {
+    public String getExecutionTimeoutInMilliseconds() {
         return executionTimeoutInMilliseconds;
     }
 
     public void setExecutionTimeoutInMilliseconds(
-            Integer executionTimeoutInMilliseconds) {
+            String executionTimeoutInMilliseconds) {
         this.executionTimeoutInMilliseconds = executionTimeoutInMilliseconds;
     }
 
-    public Boolean getExecutionTimeoutEnabled() {
+    public String getExecutionTimeoutEnabled() {
         return executionTimeoutEnabled;
     }
 
-    public void setExecutionTimeoutEnabled(Boolean executionTimeoutEnabled) {
+    public void setExecutionTimeoutEnabled(String executionTimeoutEnabled) {
         this.executionTimeoutEnabled = executionTimeoutEnabled;
     }
 
-    public Integer getFallbackIsolationSemaphoreMaxConcurrentRequests() {
+    public String getFallbackIsolationSemaphoreMaxConcurrentRequests() {
         return fallbackIsolationSemaphoreMaxConcurrentRequests;
     }
 
     public void setFallbackIsolationSemaphoreMaxConcurrentRequests(
-            Integer fallbackIsolationSemaphoreMaxConcurrentRequests) {
+            String fallbackIsolationSemaphoreMaxConcurrentRequests) {
         this.fallbackIsolationSemaphoreMaxConcurrentRequests = fallbackIsolationSemaphoreMaxConcurrentRequests;
     }
 
-    public Boolean getFallbackEnabled() {
+    public String getFallbackEnabled() {
         return fallbackEnabled;
     }
 
-    public void setFallbackEnabled(Boolean fallbackEnabled) {
+    public void setFallbackEnabled(String fallbackEnabled) {
         this.fallbackEnabled = fallbackEnabled;
     }
 
-    public Integer getMetricsHealthSnapshotIntervalInMilliseconds() {
+    public String getMetricsHealthSnapshotIntervalInMilliseconds() {
         return metricsHealthSnapshotIntervalInMilliseconds;
     }
 
     public void setMetricsHealthSnapshotIntervalInMilliseconds(
-            Integer metricsHealthSnapshotIntervalInMilliseconds) {
+            String metricsHealthSnapshotIntervalInMilliseconds) {
         this.metricsHealthSnapshotIntervalInMilliseconds = metricsHealthSnapshotIntervalInMilliseconds;
     }
 
-    public Integer getMetricsRollingPercentileBucketSize() {
+    public String getMetricsRollingPercentileBucketSize() {
         return metricsRollingPercentileBucketSize;
     }
 
     public void setMetricsRollingPercentileBucketSize(
-            Integer metricsRollingPercentileBucketSize) {
+            String metricsRollingPercentileBucketSize) {
         this.metricsRollingPercentileBucketSize = metricsRollingPercentileBucketSize;
     }
 
-    public Boolean getMetricsRollingPercentileEnabled() {
+    public String getMetricsRollingPercentileEnabled() {
         return metricsRollingPercentileEnabled;
     }
 
     public void setMetricsRollingPercentileEnabled(
-            Boolean metricsRollingPercentileEnabled) {
+            String metricsRollingPercentileEnabled) {
         this.metricsRollingPercentileEnabled = metricsRollingPercentileEnabled;
     }
 
-    public Integer getMetricsRollingPercentileWindowInMilliseconds() {
+    public String getMetricsRollingPercentileWindowInMilliseconds() {
         return metricsRollingPercentileWindowInMilliseconds;
     }
 
     public void setMetricsRollingPercentileWindowInMilliseconds(
-            Integer metricsRollingPercentileWindowInMilliseconds) {
+            String metricsRollingPercentileWindowInMilliseconds) {
         this.metricsRollingPercentileWindowInMilliseconds = metricsRollingPercentileWindowInMilliseconds;
     }
 
-    public Integer getMetricsRollingPercentileWindowBuckets() {
+    public String getMetricsRollingPercentileWindowBuckets() {
         return metricsRollingPercentileWindowBuckets;
     }
 
     public void setMetricsRollingPercentileWindowBuckets(
-            Integer metricsRollingPercentileWindowBuckets) {
+            String metricsRollingPercentileWindowBuckets) {
         this.metricsRollingPercentileWindowBuckets = metricsRollingPercentileWindowBuckets;
     }
 
-    public Integer getMetricsRollingStatisticalWindowInMilliseconds() {
+    public String getMetricsRollingStatisticalWindowInMilliseconds() {
         return metricsRollingStatisticalWindowInMilliseconds;
     }
 
     public void setMetricsRollingStatisticalWindowInMilliseconds(
-            Integer metricsRollingStatisticalWindowInMilliseconds) {
+            String metricsRollingStatisticalWindowInMilliseconds) {
         this.metricsRollingStatisticalWindowInMilliseconds = metricsRollingStatisticalWindowInMilliseconds;
     }
 
-    public Integer getMetricsRollingStatisticalWindowBuckets() {
+    public String getMetricsRollingStatisticalWindowBuckets() {
         return metricsRollingStatisticalWindowBuckets;
     }
 
     public void setMetricsRollingStatisticalWindowBuckets(
-            Integer metricsRollingStatisticalWindowBuckets) {
+            String metricsRollingStatisticalWindowBuckets) {
         this.metricsRollingStatisticalWindowBuckets = metricsRollingStatisticalWindowBuckets;
     }
 
-    public Boolean getRequestLogEnabled() {
+    public String getRequestLogEnabled() {
         return requestLogEnabled;
     }
 
-    public void setRequestLogEnabled(Boolean requestLogEnabled) {
+    public void setRequestLogEnabled(String requestLogEnabled) {
         this.requestLogEnabled = requestLogEnabled;
     }
 
-    public Integer getCorePoolSize() {
+    public String getCorePoolSize() {
         return corePoolSize;
     }
 
-    public void setCorePoolSize(Integer corePoolSize) {
+    public void setCorePoolSize(String corePoolSize) {
         this.corePoolSize = corePoolSize;
     }
 
-    public Integer getMaximumSize() {
+    public String getMaximumSize() {
         return maximumSize;
     }
 
-    public void setMaximumSize(Integer maximumSize) {
+    public void setMaximumSize(String maximumSize) {
         this.maximumSize = maximumSize;
     }
 
-    public Integer getKeepAliveTime() {
+    public String getKeepAliveTime() {
         return keepAliveTime;
     }
 
-    public void setKeepAliveTime(Integer keepAliveTime) {
+    public void setKeepAliveTime(String keepAliveTime) {
         this.keepAliveTime = keepAliveTime;
     }
 
-    public Integer getMaxQueueSize() {
+    public String getMaxQueueSize() {
         return maxQueueSize;
     }
 
-    public void setMaxQueueSize(Integer maxQueueSize) {
+    public void setMaxQueueSize(String maxQueueSize) {
         this.maxQueueSize = maxQueueSize;
     }
 
-    public Integer getQueueSizeRejectionThreshold() {
+    public String getQueueSizeRejectionThreshold() {
         return queueSizeRejectionThreshold;
     }
 
     public void setQueueSizeRejectionThreshold(
-            Integer queueSizeRejectionThreshold) {
+            String queueSizeRejectionThreshold) {
         this.queueSizeRejectionThreshold = queueSizeRejectionThreshold;
     }
 
-    public Integer getThreadPoolRollingNumberStatisticalWindowInMilliseconds() {
+    public String getThreadPoolRollingNumberStatisticalWindowInMilliseconds() {
         return threadPoolRollingNumberStatisticalWindowInMilliseconds;
     }
 
     public void setThreadPoolRollingNumberStatisticalWindowInMilliseconds(
-            Integer threadPoolRollingNumberStatisticalWindowInMilliseconds) {
+            String threadPoolRollingNumberStatisticalWindowInMilliseconds) {
         this.threadPoolRollingNumberStatisticalWindowInMilliseconds = threadPoolRollingNumberStatisticalWindowInMilliseconds;
     }
 
-    public Integer getThreadPoolRollingNumberStatisticalWindowBuckets() {
+    public String getThreadPoolRollingNumberStatisticalWindowBuckets() {
         return threadPoolRollingNumberStatisticalWindowBuckets;
     }
 
     public void setThreadPoolRollingNumberStatisticalWindowBuckets(
-            Integer threadPoolRollingNumberStatisticalWindowBuckets) {
+            String threadPoolRollingNumberStatisticalWindowBuckets) {
         this.threadPoolRollingNumberStatisticalWindowBuckets = threadPoolRollingNumberStatisticalWindowBuckets;
     }
 
-    public Boolean getAllowMaximumSizeToDivergeFromCoreSize() {
+    public String getAllowMaximumSizeToDivergeFromCoreSize() {
         return allowMaximumSizeToDivergeFromCoreSize;
     }
 
     public void setAllowMaximumSizeToDivergeFromCoreSize(
-            Boolean allowMaximumSizeToDivergeFromCoreSize) {
+            String allowMaximumSizeToDivergeFromCoreSize) {
         this.allowMaximumSizeToDivergeFromCoreSize = allowMaximumSizeToDivergeFromCoreSize;
     }
 }
\ No newline at end of file
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreEipAnnotationProcessorHelper.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreEipAnnotationProcessorHelper.java
index b839be6..18a33c3 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreEipAnnotationProcessorHelper.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreEipAnnotationProcessorHelper.java
@@ -393,6 +393,9 @@ public class CoreEipAnnotationProcessorHelper {
         TypeMirror fieldType = fieldElement.asType();
         String fieldTypeName = fieldType.toString();
         TypeElement fieldTypeElement = findTypeElement(processingEnv, roundEnv, fieldTypeName);
+        if (metadata != null && !Strings.isNullOrEmpty(metadata.javaType())) {
+            fieldTypeName = metadata.javaType();
+        }
 
         String defaultValue = findDefaultValue(fieldElement, fieldTypeName);
         String docComment = findJavaDoc(elementUtils, fieldElement, fieldName, name, classElement, true);