You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2019/06/06 07:04:58 UTC

[camel] 05/05: Regen

This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch endpoint-dsl
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 80cfb49d6566f22c74ea8d1eea49b0d8f29b8066
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Thu Jun 6 09:04:27 2019 +0200

    Regen
---
 .../apache/camel/model/endpoint/AMQPEndpoint.java  | 688 +++++++++++++---
 .../apache/camel/model/endpoint/AS2Endpoint.java   | 248 +++++-
 .../camel/model/endpoint/ActiveMQEndpoint.java     | 697 +++++++++++++---
 .../apache/camel/model/endpoint/AhcEndpoint.java   | 114 ++-
 .../apache/camel/model/endpoint/ApnsEndpoint.java  | 166 +++-
 .../camel/model/endpoint/AsteriskEndpoint.java     |  83 +-
 .../apache/camel/model/endpoint/AtmosEndpoint.java | 113 ++-
 .../apache/camel/model/endpoint/AtomEndpoint.java  | 215 ++++-
 .../camel/model/endpoint/AtomixMapEndpoint.java    | 153 +++-
 .../model/endpoint/AtomixMessagingEndpoint.java    | 162 +++-
 .../model/endpoint/AtomixMultiMapEndpoint.java     | 155 +++-
 .../camel/model/endpoint/AtomixQueueEndpoint.java  | 140 +++-
 .../camel/model/endpoint/AtomixSetEndpoint.java    | 146 +++-
 .../camel/model/endpoint/AtomixValueEndpoint.java  | 147 +++-
 .../apache/camel/model/endpoint/AvroEndpoint.java  | 113 ++-
 .../apache/camel/model/endpoint/BeanEndpoint.java  |  50 +-
 .../model/endpoint/BeanValidatorEndpoint.java      |  68 +-
 .../camel/model/endpoint/BeanstalkEndpoint.java    | 214 ++++-
 .../camel/model/endpoint/BlobServiceEndpoint.java  | 162 +++-
 .../camel/model/endpoint/BonitaEndpoint.java       |  85 +-
 .../apache/camel/model/endpoint/BoxEndpoint.java   | 169 +++-
 .../camel/model/endpoint/BraintreeEndpoint.java    | 132 ++-
 .../camel/model/endpoint/BrowseEndpoint.java       |  50 +-
 .../apache/camel/model/endpoint/CMEndpoint.java    |  57 +-
 .../apache/camel/model/endpoint/CMISEndpoint.java  | 113 ++-
 .../model/endpoint/CaffeineCacheEndpoint.java      | 164 +++-
 .../model/endpoint/CaffeineLoadCacheEndpoint.java  | 160 +++-
 .../camel/model/endpoint/CassandraEndpoint.java    | 256 +++++-
 .../camel/model/endpoint/ChatScriptEndpoint.java   |  61 +-
 .../apache/camel/model/endpoint/ChunkEndpoint.java |  71 +-
 .../camel/model/endpoint/CinderEndpoint.java       |  85 +-
 .../apache/camel/model/endpoint/ClassEndpoint.java |  50 +-
 .../camel/model/endpoint/ClientEndpoint.java       | 157 +++-
 .../apache/camel/model/endpoint/CoAPEndpoint.java  | 113 ++-
 .../camel/model/endpoint/CometdEndpoint.java       | 150 +++-
 .../camel/model/endpoint/ConsulEndpoint.java       |  50 +-
 .../camel/model/endpoint/ControlBusEndpoint.java   |  75 +-
 .../apache/camel/model/endpoint/CordaEndpoint.java |  50 +-
 .../camel/model/endpoint/CouchDbEndpoint.java      | 132 ++-
 .../camel/model/endpoint/CouchbaseEndpoint.java    | 378 +++++++--
 .../camel/model/endpoint/CryptoCmsEndpoint.java    | 141 +++-
 .../apache/camel/model/endpoint/CwEndpoint.java    |  99 ++-
 .../apache/camel/model/endpoint/CxfEndpoint.java   | 268 +++++-
 .../apache/camel/model/endpoint/CxfRsEndpoint.java | 241 +++++-
 .../camel/model/endpoint/DataFormatEndpoint.java   |  40 +-
 .../camel/model/endpoint/DataSetEndpoint.java      | 138 +++-
 .../camel/model/endpoint/DataSetTestEndpoint.java  | 125 ++-
 .../apache/camel/model/endpoint/DdbEndpoint.java   | 113 ++-
 .../camel/model/endpoint/DdbStreamEndpoint.java    | 230 +++++-
 .../camel/model/endpoint/DigitalOceanEndpoint.java |  96 ++-
 .../model/endpoint/DigitalSignatureEndpoint.java   | 162 +++-
 .../camel/model/endpoint/DirectEndpoint.java       |  71 +-
 .../camel/model/endpoint/DirectVmEndpoint.java     |  91 ++-
 .../camel/model/endpoint/DisruptorEndpoint.java    | 112 ++-
 .../camel/model/endpoint/DisruptorVmEndpoint.java  | 115 ++-
 .../apache/camel/model/endpoint/DnsEndpoint.java   |  29 +-
 .../camel/model/endpoint/DockerEndpoint.java       | 162 +++-
 .../apache/camel/model/endpoint/DozerEndpoint.java |  71 +-
 .../apache/camel/model/endpoint/DrillEndpoint.java |  57 +-
 .../camel/model/endpoint/DropboxEndpoint.java      | 111 ++-
 .../apache/camel/model/endpoint/EC2Endpoint.java   |  78 +-
 .../apache/camel/model/endpoint/ECSEndpoint.java   |  78 +-
 .../apache/camel/model/endpoint/EKSEndpoint.java   |  78 +-
 .../camel/model/endpoint/EhcacheEndpoint.java      | 146 +++-
 .../apache/camel/model/endpoint/EjbEndpoint.java   |  50 +-
 .../model/endpoint/ElasticsearchEndpoint.java      | 117 ++-
 .../apache/camel/model/endpoint/ElsqlEndpoint.java | 365 +++++++--
 .../model/endpoint/EndpointConfiguration.java      |   2 +-
 .../apache/camel/model/endpoint/EtcdEndpoint.java  | 237 +++++-
 .../camel/model/endpoint/EventAdminEndpoint.java   |  63 +-
 .../apache/camel/model/endpoint/EventEndpoint.java |  50 +-
 .../apache/camel/model/endpoint/ExecEndpoint.java  |  78 +-
 .../camel/model/endpoint/FacebookEndpoint.java     | 742 ++++++++++++++---
 .../apache/camel/model/endpoint/FhirEndpoint.java  | 211 ++++-
 .../apache/camel/model/endpoint/FileEndpoint.java  | 659 ++++++++++++---
 .../camel/model/endpoint/FlatpackEndpoint.java     | 214 ++++-
 .../apache/camel/model/endpoint/FlinkEndpoint.java |  64 +-
 .../apache/camel/model/endpoint/FopEndpoint.java   |  43 +-
 .../camel/model/endpoint/FreemarkerEndpoint.java   |  61 +-
 .../apache/camel/model/endpoint/FtpEndpoint.java   | 810 +++++++++++++++---
 .../apache/camel/model/endpoint/FtpsEndpoint.java  | 904 ++++++++++++++++++---
 .../camel/model/endpoint/GangliaEndpoint.java      | 124 ++-
 .../camel/model/endpoint/GeoCoderEndpoint.java     | 124 ++-
 .../apache/camel/model/endpoint/GitEndpoint.java   | 113 ++-
 .../camel/model/endpoint/GitHubEndpoint.java       | 113 ++-
 .../camel/model/endpoint/GlanceEndpoint.java       |  78 +-
 .../model/endpoint/GoogleBigQueryEndpoint.java     |  61 +-
 .../model/endpoint/GoogleBigQuerySQLEndpoint.java  |  43 +-
 .../model/endpoint/GoogleCalendarEndpoint.java     | 134 ++-
 .../endpoint/GoogleCalendarStreamEndpoint.java     | 245 +++++-
 .../camel/model/endpoint/GoogleDriveEndpoint.java  | 119 ++-
 .../camel/model/endpoint/GoogleMailEndpoint.java   | 105 ++-
 .../model/endpoint/GoogleMailStreamEndpoint.java   | 229 +++++-
 .../camel/model/endpoint/GooglePubsubEndpoint.java |  99 ++-
 .../camel/model/endpoint/GoogleSheetsEndpoint.java | 106 ++-
 .../model/endpoint/GoogleSheetsStreamEndpoint.java | 251 +++++-
 .../apache/camel/model/endpoint/GoraEndpoint.java  | 169 +++-
 .../apache/camel/model/endpoint/GrapeEndpoint.java |  29 +-
 .../camel/model/endpoint/GridFsEndpoint.java       | 142 +++-
 .../apache/camel/model/endpoint/GrpcEndpoint.java  | 214 ++++-
 .../model/endpoint/GuavaEventBusEndpoint.java      |  71 +-
 .../apache/camel/model/endpoint/HBaseEndpoint.java | 134 ++-
 .../endpoint/HazelcastAtomicnumberEndpoint.java    |  92 ++-
 .../model/endpoint/HazelcastInstanceEndpoint.java  | 138 +++-
 .../model/endpoint/HazelcastListEndpoint.java      | 142 +++-
 .../camel/model/endpoint/HazelcastMapEndpoint.java | 142 +++-
 .../model/endpoint/HazelcastMultimapEndpoint.java  | 138 +++-
 .../model/endpoint/HazelcastQueueEndpoint.java     | 142 +++-
 .../endpoint/HazelcastReplicatedmapEndpoint.java   | 138 +++-
 .../endpoint/HazelcastRingbufferEndpoint.java      |  92 ++-
 .../model/endpoint/HazelcastSedaEndpoint.java      | 142 +++-
 .../camel/model/endpoint/HazelcastSetEndpoint.java | 142 +++-
 .../model/endpoint/HazelcastTopicEndpoint.java     | 142 +++-
 .../apache/camel/model/endpoint/HdfsEndpoint.java  | 306 ++++++-
 .../camel/model/endpoint/HipchatEndpoint.java      | 200 ++++-
 .../apache/camel/model/endpoint/HttpEndpoint.java  | 369 +++++++--
 .../apache/camel/model/endpoint/IAMEndpoint.java   |  78 +-
 .../apache/camel/model/endpoint/IOTAEndpoint.java  |  92 ++-
 .../apache/camel/model/endpoint/IPFSEndpoint.java  |  36 +-
 .../camel/model/endpoint/IgniteCacheEndpoint.java  | 145 +++-
 .../model/endpoint/IgniteComputeEndpoint.java      |  86 +-
 .../camel/model/endpoint/IgniteEventsEndpoint.java |  88 +-
 .../camel/model/endpoint/IgniteIdGenEndpoint.java  |  70 +-
 .../model/endpoint/IgniteMessagingEndpoint.java    |  95 ++-
 .../camel/model/endpoint/IgniteQueueEndpoint.java  |  77 +-
 .../camel/model/endpoint/IgniteSetEndpoint.java    |  63 +-
 .../camel/model/endpoint/InfinispanEndpoint.java   | 163 +++-
 .../camel/model/endpoint/InfluxDbEndpoint.java     |  68 +-
 .../apache/camel/model/endpoint/IrcEndpoint.java   | 205 ++++-
 .../camel/model/endpoint/IronMQEndpoint.java       | 236 +++++-
 .../apache/camel/model/endpoint/JBPMEndpoint.java  | 239 +++++-
 .../camel/model/endpoint/JCacheEndpoint.java       | 177 +++-
 .../camel/model/endpoint/JGroupsEndpoint.java      |  69 +-
 .../camel/model/endpoint/JGroupsRaftEndpoint.java  |  64 +-
 .../apache/camel/model/endpoint/JMXEndpoint.java   | 233 +++++-
 .../model/endpoint/JSR356WebSocketEndpoint.java    |  71 +-
 .../camel/model/endpoint/JcloudsEndpoint.java      | 139 +++-
 .../apache/camel/model/endpoint/JcrEndpoint.java   | 128 ++-
 .../apache/camel/model/endpoint/JdbcEndpoint.java  | 114 ++-
 .../camel/model/endpoint/JettyHttpEndpoint9.java   | 417 ++++++++--
 .../apache/camel/model/endpoint/JingEndpoint.java  |  36 +-
 .../apache/camel/model/endpoint/JiraEndpoint.java  | 120 ++-
 .../apache/camel/model/endpoint/JmsEndpoint.java   | 688 +++++++++++++---
 .../apache/camel/model/endpoint/JoltEndpoint.java  |  57 +-
 .../apache/camel/model/endpoint/JooqEndpoint.java  | 180 +++-
 .../apache/camel/model/endpoint/JpaEndpoint.java   | 321 ++++++--
 .../model/endpoint/JsonValidatorEndpoint.java      |  75 +-
 .../apache/camel/model/endpoint/Jt400Endpoint.java | 264 +++++-
 .../apache/camel/model/endpoint/KMSEndpoint.java   |  78 +-
 .../apache/camel/model/endpoint/KafkaEndpoint.java | 695 +++++++++++++---
 .../camel/model/endpoint/KeystoneEndpoint.java     |  82 +-
 .../camel/model/endpoint/KinesisEndpoint.java      | 243 +++++-
 .../model/endpoint/KinesisFirehoseEndpoint.java    |  75 +-
 .../endpoint/KubernetesConfigMapsEndpoint.java     | 162 +++-
 .../endpoint/KubernetesDeploymentsEndpoint.java    | 221 ++++-
 .../model/endpoint/KubernetesHPAEndpoint.java      | 225 ++++-
 .../model/endpoint/KubernetesJobEndpoint.java      | 225 ++++-
 .../endpoint/KubernetesNamespacesEndpoint.java     | 221 ++++-
 .../model/endpoint/KubernetesNodesEndpoint.java    | 225 ++++-
 .../KubernetesPersistentVolumesClaimsEndpoint.java | 163 +++-
 .../KubernetesPersistentVolumesEndpoint.java       | 162 +++-
 .../model/endpoint/KubernetesPodsEndpoint.java     | 225 ++++-
 .../KubernetesReplicationControllersEndpoint.java  | 225 ++++-
 .../endpoint/KubernetesResourcesQuotaEndpoint.java | 162 +++-
 .../model/endpoint/KubernetesSecretsEndpoint.java  | 162 +++-
 .../KubernetesServiceAccountsEndpoint.java         | 162 +++-
 .../model/endpoint/KubernetesServicesEndpoint.java | 221 ++++-
 .../camel/model/endpoint/LambdaEndpoint.java       |  78 +-
 .../camel/model/endpoint/LanguageEndpoint.java     |  75 +-
 .../apache/camel/model/endpoint/LdapEndpoint.java  |  57 +-
 .../apache/camel/model/endpoint/LdifEndpoint.java  |  29 +-
 .../camel/model/endpoint/LinkedInEndpoint.java     | 146 +++-
 .../apache/camel/model/endpoint/LogEndpoint.java   | 204 ++++-
 .../camel/model/endpoint/LuceneEndpoint.java       |  64 +-
 .../camel/model/endpoint/LumberjackEndpoint.java   |  70 +-
 .../apache/camel/model/endpoint/MQEndpoint.java    |  78 +-
 .../apache/camel/model/endpoint/MQTTEndpoint.java  | 296 ++++++-
 .../apache/camel/model/endpoint/MSKEndpoint.java   |  78 +-
 .../apache/camel/model/endpoint/MailEndpoint.java  | 471 +++++++++--
 .../camel/model/endpoint/MasterEndpoint.java       |  57 +-
 .../camel/model/endpoint/MetricsEndpoint.java      |  82 +-
 .../camel/model/endpoint/MicrometerEndpoint.java   |  75 +-
 .../camel/model/endpoint/MiloClientEndpoint.java   | 217 ++++-
 .../camel/model/endpoint/MiloServerEndpoint.java   |  56 +-
 .../apache/camel/model/endpoint/Mina2Endpoint.java | 225 ++++-
 .../apache/camel/model/endpoint/MllpEndpoint.java  | 220 ++++-
 .../apache/camel/model/endpoint/MockEndpoint.java  |  92 ++-
 .../camel/model/endpoint/MongoDbEndpoint.java      | 160 +++-
 .../apache/camel/model/endpoint/MsvEndpoint.java   |  92 ++-
 .../camel/model/endpoint/MustacheEndpoint.java     |  61 +-
 .../apache/camel/model/endpoint/MvelEndpoint.java  |  43 +-
 .../camel/model/endpoint/MyBatisBeanEndpoint.java  |  61 +-
 .../camel/model/endpoint/MyBatisEndpoint.java      | 235 +++++-
 .../camel/model/endpoint/NagiosEndpoint.java       |  79 +-
 .../apache/camel/model/endpoint/NatsEndpoint.java  | 197 ++++-
 .../camel/model/endpoint/NetWeaverEndpoint.java    |  68 +-
 .../apache/camel/model/endpoint/NettyEndpoint.java | 549 +++++++++++--
 .../camel/model/endpoint/NettyHttpEndpoint.java    | 616 ++++++++++++--
 .../camel/model/endpoint/NeutronEndpoint.java      |  89 +-
 .../apache/camel/model/endpoint/NovaEndpoint.java  |  85 +-
 .../apache/camel/model/endpoint/NsqEndpoint.java   | 134 ++-
 .../camel/model/endpoint/Olingo2Endpoint.java      | 139 +++-
 .../camel/model/endpoint/Olingo4Endpoint.java      | 139 +++-
 .../endpoint/OpenshiftBuildConfigsEndpoint.java    | 162 +++-
 .../model/endpoint/OpenshiftBuildsEndpoint.java    | 166 +++-
 .../camel/model/endpoint/OptaPlannerEndpoint.java  |  77 +-
 .../apache/camel/model/endpoint/PahoEndpoint.java  | 127 ++-
 .../camel/model/endpoint/PaxLoggingEndpoint.java   |  56 +-
 .../apache/camel/model/endpoint/PdfEndpoint.java   |  86 +-
 .../camel/model/endpoint/PgEventEndpoint.java      |  97 ++-
 .../camel/model/endpoint/PrinterEndpoint.java      | 117 ++-
 .../camel/model/endpoint/PropertiesEndpoint.java   |  70 +-
 .../camel/model/endpoint/PubNubEndpoint.java       | 120 ++-
 .../camel/model/endpoint/PulsarEndpoint.java       |  99 ++-
 .../camel/model/endpoint/QuartzEndpoint.java       | 162 +++-
 .../camel/model/endpoint/QueueServiceEndpoint.java | 100 ++-
 .../camel/model/endpoint/QuickfixjEndpoint.java    |  69 +-
 .../camel/model/endpoint/RabbitMQEndpoint.java     | 430 ++++++++--
 .../model/endpoint/ReactiveStreamsEndpoint.java    | 104 ++-
 .../apache/camel/model/endpoint/RedisEndpoint.java |  99 ++-
 .../apache/camel/model/endpoint/RefEndpoint.java   |  50 +-
 .../camel/model/endpoint/RestApiEndpoint.java      |  76 +-
 .../apache/camel/model/endpoint/RestEndpoint.java  | 141 +++-
 .../camel/model/endpoint/RestSwaggerEndpoint.java  |  75 +-
 .../camel/model/endpoint/RestletEndpoint.java      | 168 +++-
 .../apache/camel/model/endpoint/RssEndpoint.java   | 214 ++++-
 .../apache/camel/model/endpoint/S3Endpoint.java    | 390 +++++++--
 .../apache/camel/model/endpoint/SWFEndpoint.java   | 240 +++++-
 .../apache/camel/model/endpoint/SagaEndpoint.java  |  29 +-
 .../camel/model/endpoint/SalesforceEndpoint.java   | 343 ++++++--
 .../camel/model/endpoint/SchedulerEndpoint.java    | 172 +++-
 .../camel/model/endpoint/SchematronEndpoint.java   |  54 +-
 .../apache/camel/model/endpoint/ScpEndpoint.java   | 192 ++++-
 .../apache/camel/model/endpoint/SdbEndpoint.java   |  92 ++-
 .../apache/camel/model/endpoint/SedaEndpoint.java  | 143 +++-
 .../camel/model/endpoint/ServerEndpoint.java       | 164 +++-
 .../camel/model/endpoint/ServiceEndpoint.java      |  55 +-
 .../camel/model/endpoint/ServiceNowEndpoint.java   | 335 ++++++--
 .../camel/model/endpoint/ServletEndpoint.java      | 184 ++++-
 .../apache/camel/model/endpoint/SesEndpoint.java   |  99 ++-
 .../apache/camel/model/endpoint/SftpEndpoint.java  | 870 +++++++++++++++++---
 .../apache/camel/model/endpoint/SipEndpoint.java   | 330 ++++++--
 .../apache/camel/model/endpoint/Sjms2Endpoint.java | 292 ++++++-
 .../camel/model/endpoint/SjmsBatchEndpoint.java    | 189 ++++-
 .../apache/camel/model/endpoint/SjmsEndpoint.java  | 270 +++++-
 .../apache/camel/model/endpoint/SlackEndpoint.java | 208 ++++-
 .../apache/camel/model/endpoint/SmppEndpoint.java  | 295 ++++++-
 .../apache/camel/model/endpoint/SnmpEndpoint.java  | 278 ++++++-
 .../apache/camel/model/endpoint/SnsEndpoint.java   | 141 +++-
 .../apache/camel/model/endpoint/SolrEndpoint.java  | 114 ++-
 .../camel/model/endpoint/SoroushBotEndpoint.java   | 171 +++-
 .../apache/camel/model/endpoint/SparkEndpoint.java | 106 ++-
 .../camel/model/endpoint/SplunkEndpoint.java       | 320 ++++++--
 .../camel/model/endpoint/SpringBatchEndpoint.java  |  54 +-
 .../model/endpoint/SpringIntegrationEndpoint.java  |  74 +-
 .../camel/model/endpoint/SpringLdapEndpoint.java   |  47 +-
 .../model/endpoint/SpringWebserviceEndpoint.java   | 200 ++++-
 .../apache/camel/model/endpoint/SqlEndpoint.java   | 342 ++++++--
 .../camel/model/endpoint/SqlStoredEndpoint.java    |  75 +-
 .../apache/camel/model/endpoint/SqsEndpoint.java   | 402 +++++++--
 .../apache/camel/model/endpoint/SshEndpoint.java   | 249 +++++-
 .../apache/camel/model/endpoint/StAXEndpoint.java  |  29 +-
 .../apache/camel/model/endpoint/StompEndpoint.java |  92 ++-
 .../camel/model/endpoint/StreamEndpoint.java       | 176 +++-
 .../model/endpoint/StringTemplateEndpoint.java     |  54 +-
 .../apache/camel/model/endpoint/StubEndpoint.java  | 143 +++-
 .../apache/camel/model/endpoint/SwiftEndpoint.java |  85 +-
 .../camel/model/endpoint/TelegramEndpoint.java     | 207 ++++-
 .../camel/model/endpoint/ThriftEndpoint.java       | 120 ++-
 .../apache/camel/model/endpoint/TikaEndpoint.java  |  58 +-
 .../apache/camel/model/endpoint/TimerEndpoint.java | 106 ++-
 .../camel/model/endpoint/TwilioEndpoint.java       |  64 +-
 .../endpoint/TwitterDirectMessageEndpoint.java     | 329 ++++++--
 .../model/endpoint/TwitterSearchEndpoint.java      | 331 ++++++--
 .../model/endpoint/TwitterStreamingEndpoint.java   | 334 ++++++--
 .../model/endpoint/TwitterTimelineEndpoint.java    | 338 ++++++--
 .../camel/model/endpoint/UndertowEndpoint.java     | 176 +++-
 .../camel/model/endpoint/ValidatorEndpoint.java    |  96 ++-
 .../camel/model/endpoint/VelocityEndpoint.java     |  61 +-
 .../apache/camel/model/endpoint/VertxEndpoint.java |  57 +-
 .../apache/camel/model/endpoint/VmEndpoint.java    | 143 +++-
 .../camel/model/endpoint/WeatherEndpoint.java      | 347 ++++++--
 .../apache/camel/model/endpoint/Web3jEndpoint.java | 288 ++++++-
 .../camel/model/endpoint/WebhookEndpoint.java      |  90 +-
 .../camel/model/endpoint/WebsocketEndpoint.java    | 167 +++-
 .../camel/model/endpoint/WordpressEndpoint.java    | 118 ++-
 .../apache/camel/model/endpoint/WsEndpoint.java    | 128 ++-
 .../camel/model/endpoint/XChangeEndpoint.java      |  61 +-
 .../camel/model/endpoint/XQueryEndpoint.java       | 244 +++++-
 .../camel/model/endpoint/XmlSignatureEndpoint.java | 280 ++++++-
 .../apache/camel/model/endpoint/XmppEndpoint.java  | 162 +++-
 .../apache/camel/model/endpoint/XsltEndpoint.java  | 134 ++-
 .../camel/model/endpoint/YammerEndpoint.java       | 222 ++++-
 .../camel/model/endpoint/ZendeskEndpoint.java      |  97 ++-
 .../camel/model/endpoint/ZooKeeperEndpoint.java    | 120 ++-
 295 files changed, 41642 insertions(+), 7386 deletions(-)

diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AMQPEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AMQPEndpoint.java
index 91a711c..e117a12 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AMQPEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AMQPEndpoint.java
@@ -31,17 +31,73 @@ import org.apache.camel.spi.HeaderFilterStrategy;
 public class AMQPEndpoint {
 
 
-    public static class AMQPCommon extends EndpointConfiguration {
+    public static class AMQPCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String destinationType;
+        private String destinationName;
+        private String clientId;
+        private Object connectionFactory;
+        private Boolean disableReplyTo;
+        private String durableSubscriptionName;
+        private JmsMessageType jmsMessageType;
+        private Boolean testConnectionOnStartup;
+        private Boolean allowSerializedHeaders;
+        private Boolean asyncStartListener;
+        private Boolean asyncStopListener;
+        private Boolean basicPropertyBinding;
+        private Object destinationResolver;
+        private Object errorHandler;
+        private Object exceptionListener;
+        private HeaderFilterStrategy headerFilterStrategy;
+        private Integer idleConsumerLimit;
+        private Integer idleTaskExecutionLimit;
+        private Boolean includeAllJMSXProperties;
+        private Object jmsKeyFormatStrategy;
+        private Boolean mapJmsMessage;
+        private Integer maxMessagesPerTask;
+        private Object messageConverter;
+        private Object messageCreatedStrategy;
+        private Boolean messageIdEnabled;
+        private Object messageListenerContainerFactory;
+        private Boolean messageTimestampEnabled;
+        private Boolean pubSubNoLocal;
+        private Long receiveTimeout;
+        private Long recoveryInterval;
+        private Long requestTimeoutCheckerInterval;
+        private Boolean synchronous;
+        private Boolean transferException;
+        private Boolean transferExchange;
+        private Boolean transferFault;
+        private Boolean useMessageIDAsCorrelationID;
+        private Integer waitForProvisionCorrelationToBeUpdatedCounter;
+        private Long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime;
+        private String password;
+        private String username;
+        private Boolean transacted;
+        private Boolean lazyCreateTransactionManager;
+        private Object transactionManager;
+        private String transactionName;
+        private Integer transactionTimeout;
+
         /**
          * The kind of destination to use. The option is a java.lang.String
          * type.
          */
-        private String destinationType;
+        public T destinationType(String destinationType) {
+            this.destinationType = destinationType;
+            return (T) this;
+        }
+
         /**
          * Name of the queue or topic to use as destination. The option is a
          * java.lang.String type.
          */
-        private String destinationName;
+        public T destinationName(String destinationName) {
+            this.destinationName = destinationName;
+            return (T) this;
+        }
+
         /**
          * Sets the JMS client ID to use. Note that this value, if specified,
          * must be unique and can only be used by a single JMS connection
@@ -49,7 +105,11 @@ public class AMQPEndpoint {
          * subscriptions. If using Apache ActiveMQ you may prefer to use Virtual
          * Topics instead. The option is a java.lang.String type.
          */
-        private String clientId;
+        public T clientId(String clientId) {
+            this.clientId = clientId;
+            return (T) this;
+        }
+
         /**
          * Sets the default connection factory to be used if a connection
          * factory is not specified for either
@@ -57,7 +117,11 @@ public class AMQPEndpoint {
          * setListenerConnectionFactory(ConnectionFactory). The option is a
          * javax.jms.ConnectionFactory type.
          */
-        private Object connectionFactory;
+        public T connectionFactory(Object connectionFactory) {
+            this.connectionFactory = connectionFactory;
+            return (T) this;
+        }
+
         /**
          * Specifies whether Camel ignores the JMSReplyTo header in messages. If
          * true, Camel does not send a reply back to the destination specified
@@ -69,13 +133,21 @@ public class AMQPEndpoint {
          * want to route message from one system to another. The option is a
          * boolean type.
          */
-        private Boolean disableReplyTo;
+        public T disableReplyTo(boolean disableReplyTo) {
+            this.disableReplyTo = disableReplyTo;
+            return (T) this;
+        }
+
         /**
          * The durable subscriber name for specifying durable topic
          * subscriptions. The clientId option must be configured as well. The
          * option is a java.lang.String type.
          */
-        private String durableSubscriptionName;
+        public T durableSubscriptionName(String durableSubscriptionName) {
+            this.durableSubscriptionName = durableSubscriptionName;
+            return (T) this;
+        }
+
         /**
          * Allows you to force the use of a specific javax.jms.Message
          * implementation for sending JMS messages. Possible values are: Bytes,
@@ -84,7 +156,11 @@ public class AMQPEndpoint {
          * to specify it. The option is a
          * org.apache.camel.component.jms.JmsMessageType type.
          */
-        private JmsMessageType jmsMessageType;
+        public T jmsMessageType(JmsMessageType jmsMessageType) {
+            this.jmsMessageType = jmsMessageType;
+            return (T) this;
+        }
+
         /**
          * Specifies whether to test the connection on startup. This ensures
          * that when Camel starts that all the JMS consumers have a valid
@@ -93,14 +169,22 @@ public class AMQPEndpoint {
          * started with failed connections. The JMS producers is tested as well.
          * The option is a boolean type.
          */
-        private Boolean testConnectionOnStartup;
+        public T testConnectionOnStartup(boolean testConnectionOnStartup) {
+            this.testConnectionOnStartup = testConnectionOnStartup;
+            return (T) this;
+        }
+
         /**
          * Controls whether or not to include serialized headers. Applies only
          * when isTransferExchange() is true. This requires that the objects are
          * serializable. Camel will exclude any non-serializable objects and log
          * it at WARN level. The option is a boolean type.
          */
-        private Boolean allowSerializedHeaders;
+        public T allowSerializedHeaders(boolean allowSerializedHeaders) {
+            this.allowSerializedHeaders = allowSerializedHeaders;
+            return (T) this;
+        }
+
         /**
          * Whether to startup the JmsConsumer message listener asynchronously,
          * when starting a route. For example if a JmsConsumer cannot get a
@@ -114,18 +198,30 @@ public class AMQPEndpoint {
          * messages; You can then restart the route to retry. The option is a
          * boolean type.
          */
-        private Boolean asyncStartListener;
+        public T asyncStartListener(boolean asyncStartListener) {
+            this.asyncStartListener = asyncStartListener;
+            return (T) this;
+        }
+
         /**
          * Whether to stop the JmsConsumer message listener asynchronously, when
          * stopping a route. The option is a boolean type.
          */
-        private Boolean asyncStopListener;
+        public T asyncStopListener(boolean asyncStopListener) {
+            this.asyncStopListener = asyncStopListener;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * A pluggable
          * org.springframework.jms.support.destination.DestinationResolver that
@@ -133,7 +229,11 @@ public class AMQPEndpoint {
          * destination in a JNDI registry). The option is a
          * org.springframework.jms.support.destination.DestinationResolver type.
          */
-        private Object destinationResolver;
+        public T destinationResolver(Object destinationResolver) {
+            this.destinationResolver = destinationResolver;
+            return (T) this;
+        }
+
         /**
          * Specifies a org.springframework.util.ErrorHandler to be invoked in
          * case of any uncaught exceptions thrown while processing a Message. By
@@ -144,24 +244,40 @@ public class AMQPEndpoint {
          * configure, than having to code a custom errorHandler. The option is a
          * org.springframework.util.ErrorHandler type.
          */
-        private Object errorHandler;
+        public T errorHandler(Object errorHandler) {
+            this.errorHandler = errorHandler;
+            return (T) this;
+        }
+
         /**
          * Specifies the JMS Exception Listener that is to be notified of any
          * underlying JMS exceptions. The option is a
          * javax.jms.ExceptionListener type.
          */
-        private Object exceptionListener;
+        public T exceptionListener(Object exceptionListener) {
+            this.exceptionListener = exceptionListener;
+            return (T) this;
+        }
+
         /**
          * To use a custom HeaderFilterStrategy to filter header to and from
          * Camel message. The option is a
          * org.apache.camel.spi.HeaderFilterStrategy type.
          */
-        private HeaderFilterStrategy headerFilterStrategy;
+        public T headerFilterStrategy(HeaderFilterStrategy headerFilterStrategy) {
+            this.headerFilterStrategy = headerFilterStrategy;
+            return (T) this;
+        }
+
         /**
          * Specify the limit for the number of consumers that are allowed to be
          * idle at any given time. The option is a int type.
          */
-        private Integer idleConsumerLimit;
+        public T idleConsumerLimit(int idleConsumerLimit) {
+            this.idleConsumerLimit = idleConsumerLimit;
+            return (T) this;
+        }
+
         /**
          * Specifies the limit for idle executions of a receive task, not having
          * received any message within its execution. If this limit is reached,
@@ -170,7 +286,11 @@ public class AMQPEndpoint {
          * setting). There is additional doc available from Spring. The option
          * is a int type.
          */
-        private Integer idleTaskExecutionLimit;
+        public T idleTaskExecutionLimit(int idleTaskExecutionLimit) {
+            this.idleTaskExecutionLimit = idleTaskExecutionLimit;
+            return (T) this;
+        }
+
         /**
          * Whether to include all JMSXxxx properties when mapping from JMS to
          * Camel Message. Setting this to true will include properties such as
@@ -178,7 +298,11 @@ public class AMQPEndpoint {
          * headerFilterStrategy then this option does not apply. The option is a
          * boolean type.
          */
-        private Boolean includeAllJMSXProperties;
+        public T includeAllJMSXProperties(boolean includeAllJMSXProperties) {
+            this.includeAllJMSXProperties = includeAllJMSXProperties;
+            return (T) this;
+        }
+
         /**
          * Pluggable strategy for encoding and decoding JMS keys so they can be
          * compliant with the JMS specification. Camel provides two
@@ -190,34 +314,54 @@ public class AMQPEndpoint {
          * org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it
          * using the # notation. The option is a java.lang.String type.
          */
-        private Object jmsKeyFormatStrategy;
+        public T jmsKeyFormatStrategy(Object jmsKeyFormatStrategy) {
+            this.jmsKeyFormatStrategy = jmsKeyFormatStrategy;
+            return (T) this;
+        }
+
         /**
          * Specifies whether Camel should auto map the received JMS message to a
          * suited payload type, such as javax.jms.TextMessage to a String etc.
          * The option is a boolean type.
          */
-        private Boolean mapJmsMessage;
+        public T mapJmsMessage(boolean mapJmsMessage) {
+            this.mapJmsMessage = mapJmsMessage;
+            return (T) this;
+        }
+
         /**
          * The number of messages per task. -1 is unlimited. If you use a range
          * for concurrent consumers (eg min max), then this option can be used
          * to set a value to eg 100 to control how fast the consumers will
          * shrink when less work is required. The option is a int type.
          */
-        private Integer maxMessagesPerTask;
+        public T maxMessagesPerTask(int maxMessagesPerTask) {
+            this.maxMessagesPerTask = maxMessagesPerTask;
+            return (T) this;
+        }
+
         /**
          * To use a custom Spring
          * org.springframework.jms.support.converter.MessageConverter so you can
          * be in control how to map to/from a javax.jms.Message. The option is a
          * org.springframework.jms.support.converter.MessageConverter type.
          */
-        private Object messageConverter;
+        public T messageConverter(Object messageConverter) {
+            this.messageConverter = messageConverter;
+            return (T) this;
+        }
+
         /**
          * To use the given MessageCreatedStrategy which are invoked when Camel
          * creates new instances of javax.jms.Message objects when Camel is
          * sending a JMS message. The option is a
          * org.apache.camel.component.jms.MessageCreatedStrategy type.
          */
-        private Object messageCreatedStrategy;
+        public T messageCreatedStrategy(Object messageCreatedStrategy) {
+            this.messageCreatedStrategy = messageCreatedStrategy;
+            return (T) this;
+        }
+
         /**
          * When sending, specifies whether message IDs should be added. This is
          * just an hint to the JMS Broker. If the JMS provider accepts this
@@ -225,7 +369,11 @@ public class AMQPEndpoint {
          * provider ignores the hint, the message ID must be set to its normal
          * unique value. The option is a boolean type.
          */
-        private Boolean messageIdEnabled;
+        public T messageIdEnabled(boolean messageIdEnabled) {
+            this.messageIdEnabled = messageIdEnabled;
+            return (T) this;
+        }
+
         /**
          * Registry ID of the MessageListenerContainerFactory used to determine
          * what
@@ -234,7 +382,12 @@ public class AMQPEndpoint {
          * consumerType to Custom. The option is a
          * org.apache.camel.component.jms.MessageListenerContainerFactory type.
          */
-        private Object messageListenerContainerFactory;
+        public T messageListenerContainerFactory(
+                Object messageListenerContainerFactory) {
+            this.messageListenerContainerFactory = messageListenerContainerFactory;
+            return (T) this;
+        }
+
         /**
          * Specifies whether timestamps should be enabled by default on sending
          * messages. This is just an hint to the JMS Broker. If the JMS provider
@@ -242,23 +395,39 @@ public class AMQPEndpoint {
          * zero; if the provider ignores the hint, the timestamp must be set to
          * its normal value. The option is a boolean type.
          */
-        private Boolean messageTimestampEnabled;
+        public T messageTimestampEnabled(boolean messageTimestampEnabled) {
+            this.messageTimestampEnabled = messageTimestampEnabled;
+            return (T) this;
+        }
+
         /**
          * Specifies whether to inhibit the delivery of messages published by
          * its own connection. The option is a boolean type.
          */
-        private Boolean pubSubNoLocal;
+        public T pubSubNoLocal(boolean pubSubNoLocal) {
+            this.pubSubNoLocal = pubSubNoLocal;
+            return (T) this;
+        }
+
         /**
          * The timeout for receiving messages (in milliseconds). The option is a
          * long type.
          */
-        private Long receiveTimeout;
+        public T receiveTimeout(long receiveTimeout) {
+            this.receiveTimeout = receiveTimeout;
+            return (T) this;
+        }
+
         /**
          * Specifies the interval between recovery attempts, i.e. when a
          * connection is being refreshed, in milliseconds. The default is 5000
          * ms, that is, 5 seconds. The option is a long type.
          */
-        private Long recoveryInterval;
+        public T recoveryInterval(long recoveryInterval) {
+            this.recoveryInterval = recoveryInterval;
+            return (T) this;
+        }
+
         /**
          * Configures how often Camel should check for timed out Exchanges when
          * doing request/reply over JMS. By default Camel checks once per
@@ -266,13 +435,22 @@ public class AMQPEndpoint {
          * can lower this interval, to check more frequently. The timeout is
          * determined by the option requestTimeout. The option is a long type.
          */
-        private Long requestTimeoutCheckerInterval;
+        public T requestTimeoutCheckerInterval(
+                long requestTimeoutCheckerInterval) {
+            this.requestTimeoutCheckerInterval = requestTimeoutCheckerInterval;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
+
         /**
          * If enabled and you are using Request Reply messaging (InOut) and an
          * Exchange failed on the consumer side, then the caused Exception will
@@ -286,7 +464,11 @@ public class AMQPEndpoint {
          * org.apache.camel.RuntimeCamelException when returned to the producer.
          * The option is a boolean type.
          */
-        private Boolean transferException;
+        public T transferException(boolean transferException) {
+            this.transferException = transferException;
+            return (T) this;
+        }
+
         /**
          * You can transfer the exchange over the wire instead of just the body
          * and headers. The following fields are transferred: In body, Out body,
@@ -297,7 +479,11 @@ public class AMQPEndpoint {
          * and consumer side, so Camel knows the payloads is an Exchange and not
          * a regular payload. The option is a boolean type.
          */
-        private Boolean transferExchange;
+        public T transferExchange(boolean transferExchange) {
+            this.transferExchange = transferExchange;
+            return (T) this;
+        }
+
         /**
          * If enabled and you are using Request Reply messaging (InOut) and an
          * Exchange failed with a SOAP fault (not exception) on the consumer
@@ -309,62 +495,108 @@ public class AMQPEndpoint {
          * this when using Camel components that support faults such as SOAP
          * based such as cxf or spring-ws. The option is a boolean type.
          */
-        private Boolean transferFault;
+        public T transferFault(boolean transferFault) {
+            this.transferFault = transferFault;
+            return (T) this;
+        }
+
         /**
          * Specifies whether JMSMessageID should always be used as
          * JMSCorrelationID for InOut messages. The option is a boolean type.
          */
-        private Boolean useMessageIDAsCorrelationID;
+        public T useMessageIDAsCorrelationID(boolean useMessageIDAsCorrelationID) {
+            this.useMessageIDAsCorrelationID = useMessageIDAsCorrelationID;
+            return (T) this;
+        }
+
         /**
          * Number of times to wait for provisional correlation id to be updated
          * to the actual correlation id when doing request/reply over JMS and
          * when the option useMessageIDAsCorrelationID is enabled. The option is
          * a int type.
          */
-        private Integer waitForProvisionCorrelationToBeUpdatedCounter;
+        public T waitForProvisionCorrelationToBeUpdatedCounter(
+                int waitForProvisionCorrelationToBeUpdatedCounter) {
+            this.waitForProvisionCorrelationToBeUpdatedCounter = waitForProvisionCorrelationToBeUpdatedCounter;
+            return (T) this;
+        }
+
         /**
          * Interval in millis to sleep each time while waiting for provisional
          * correlation id to be updated. The option is a long type.
          */
-        private Long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime;
+        public T waitForProvisionCorrelationToBeUpdatedThreadSleepingTime(
+                long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime) {
+            this.waitForProvisionCorrelationToBeUpdatedThreadSleepingTime = waitForProvisionCorrelationToBeUpdatedThreadSleepingTime;
+            return (T) this;
+        }
+
         /**
          * Password to use with the ConnectionFactory. You can also configure
          * username/password directly on the ConnectionFactory. The option is a
          * java.lang.String type.
          */
-        private String password;
+        public T password(String password) {
+            this.password = password;
+            return (T) this;
+        }
+
         /**
          * Username to use with the ConnectionFactory. You can also configure
          * username/password directly on the ConnectionFactory. The option is a
          * java.lang.String type.
          */
-        private String username;
+        public T username(String username) {
+            this.username = username;
+            return (T) this;
+        }
+
         /**
          * Specifies whether to use transacted mode. The option is a boolean
          * type.
          */
-        private Boolean transacted;
+        public T transacted(boolean transacted) {
+            this.transacted = transacted;
+            return (T) this;
+        }
+
         /**
          * If true, Camel will create a JmsTransactionManager, if there is no
          * transactionManager injected when option transacted=true. The option
          * is a boolean type.
          */
-        private Boolean lazyCreateTransactionManager;
+        public T lazyCreateTransactionManager(
+                boolean lazyCreateTransactionManager) {
+            this.lazyCreateTransactionManager = lazyCreateTransactionManager;
+            return (T) this;
+        }
+
         /**
          * The Spring transaction manager to use. The option is a
          * org.springframework.transaction.PlatformTransactionManager type.
          */
-        private Object transactionManager;
+        public T transactionManager(Object transactionManager) {
+            this.transactionManager = transactionManager;
+            return (T) this;
+        }
+
         /**
          * The name of the transaction to use. The option is a java.lang.String
          * type.
          */
-        private String transactionName;
+        public T transactionName(String transactionName) {
+            this.transactionName = transactionName;
+            return (T) this;
+        }
+
         /**
          * The timeout value of the transaction (in seconds), if using
          * transacted mode. The option is a int type.
          */
-        private Integer transactionTimeout;
+        public T transactionTimeout(int transactionTimeout) {
+            this.transactionTimeout = transactionTimeout;
+            return (T) this;
+        }
 
         public String getDestinationType() {
             return destinationType;
@@ -734,13 +966,45 @@ public class AMQPEndpoint {
         }
     }
 
-    public static class AMQPConsumer extends AMQPCommon {
+    public static class AMQPConsumer extends AMQPCommon<AMQPConsumer> {
+        private String acknowledgementModeName;
+        private Boolean asyncConsumer;
+        private Boolean autoStartup;
+        private Boolean bridgeErrorHandler;
+        private Integer cacheLevel;
+        private String cacheLevelName;
+        private Integer concurrentConsumers;
+        private Integer maxConcurrentConsumers;
+        private String replyTo;
+        private Boolean replyToDeliveryPersistent;
+        private String selector;
+        private Boolean subscriptionDurable;
+        private String subscriptionName;
+        private Boolean subscriptionShared;
+        private Boolean acceptMessagesWhileStopping;
+        private Boolean allowReplyManagerQuickStop;
+        private ConsumerType consumerType;
+        private DefaultTaskExecutorType defaultTaskExecutorType;
+        private Boolean eagerLoadingOfProperties;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+        private Boolean exposeListenerSession;
+        private Boolean replyToSameDestinationAllowed;
+        private Object taskExecutor;
+        private LoggingLevel errorHandlerLoggingLevel;
+        private Boolean errorHandlerLogStackTrace;
+
         /**
          * The JMS acknowledgement name, which is one of: SESSION_TRANSACTED,
          * CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. The option
          * is a java.lang.String type.
          */
-        private String acknowledgementModeName;
+        public AMQPConsumer acknowledgementModeName(
+                String acknowledgementModeName) {
+            this.acknowledgementModeName = acknowledgementModeName;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Whether the JmsConsumer processes the Exchange asynchronously. If
          * enabled then the JmsConsumer may pickup the next message from the JMS
@@ -753,12 +1017,20 @@ public class AMQPEndpoint {
          * transaction must be executed synchronously (Camel 3.0 may support
          * async transactions). The option is a boolean type.
          */
-        private Boolean asyncConsumer;
+        public AMQPConsumer asyncConsumer(boolean asyncConsumer) {
+            this.asyncConsumer = asyncConsumer;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Specifies whether the consumer container should auto-startup. The
          * option is a boolean type.
          */
-        private Boolean autoStartup;
+        public AMQPConsumer autoStartup(boolean autoStartup) {
+            this.autoStartup = autoStartup;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -768,12 +1040,20 @@ public class AMQPEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public AMQPConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Sets the cache level by ID for the underlying JMS resources. See
          * cacheLevelName option for more details. The option is a int type.
          */
-        private Integer cacheLevel;
+        public AMQPConsumer cacheLevel(int cacheLevel) {
+            this.cacheLevel = cacheLevel;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Sets the cache level by name for the underlying JMS resources.
          * Possible values are: CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER,
@@ -781,7 +1061,11 @@ public class AMQPEndpoint {
          * the Spring documentation and Transactions Cache Levels for more
          * information. The option is a java.lang.String type.
          */
-        private String cacheLevelName;
+        public AMQPConsumer cacheLevelName(String cacheLevelName) {
+            this.cacheLevelName = cacheLevelName;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Specifies the default number of concurrent consumers when consuming
          * from JMS (not for request/reply over JMS). See also the
@@ -790,7 +1074,11 @@ public class AMQPEndpoint {
          * replyToConcurrentConsumers is used to control number of concurrent
          * consumers on the reply message listener. The option is a int type.
          */
-        private Integer concurrentConsumers;
+        public AMQPConsumer concurrentConsumers(int concurrentConsumers) {
+            this.concurrentConsumers = concurrentConsumers;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Specifies the maximum number of concurrent consumers when consuming
          * from JMS (not for request/reply over JMS). See also the
@@ -799,22 +1087,39 @@ public class AMQPEndpoint {
          * replyToMaxConcurrentConsumers is used to control number of concurrent
          * consumers on the reply message listener. The option is a int type.
          */
-        private Integer maxConcurrentConsumers;
+        public AMQPConsumer maxConcurrentConsumers(int maxConcurrentConsumers) {
+            this.maxConcurrentConsumers = maxConcurrentConsumers;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Provides an explicit ReplyTo destination, which overrides any
          * incoming value of Message.getJMSReplyTo(). The option is a
          * java.lang.String type.
          */
-        private String replyTo;
+        public AMQPConsumer replyTo(String replyTo) {
+            this.replyTo = replyTo;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Specifies whether to use persistent delivery by default for replies.
          * The option is a boolean type.
          */
-        private Boolean replyToDeliveryPersistent;
+        public AMQPConsumer replyToDeliveryPersistent(
+                boolean replyToDeliveryPersistent) {
+            this.replyToDeliveryPersistent = replyToDeliveryPersistent;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Sets the JMS selector to use. The option is a java.lang.String type.
          */
-        private String selector;
+        public AMQPConsumer selector(String selector) {
+            this.selector = selector;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Set whether to make the subscription durable. The durable
          * subscription name to be used can be specified through the
@@ -825,7 +1130,11 @@ public class AMQPEndpoint {
          * a topic (pub-sub domain), therefore this method switches the
          * pubSubDomain flag as well. The option is a boolean type.
          */
-        private Boolean subscriptionDurable;
+        public AMQPConsumer subscriptionDurable(boolean subscriptionDurable) {
+            this.subscriptionDurable = subscriptionDurable;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Set the name of a subscription to create. To be applied in case of a
          * topic (pub-sub domain) with a shared or durable subscription. The
@@ -836,7 +1145,11 @@ public class AMQPEndpoint {
          * for a shared subscription (which requires JMS 2.0). The option is a
          * java.lang.String type.
          */
-        private String subscriptionName;
+        public AMQPConsumer subscriptionName(String subscriptionName) {
+            this.subscriptionName = subscriptionName;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Set whether to make the subscription shared. The shared subscription
          * name to be used can be specified through the subscriptionName
@@ -850,7 +1163,11 @@ public class AMQPEndpoint {
          * pubSubDomain flag as well. Requires a JMS 2.0 compatible message
          * broker. The option is a boolean type.
          */
-        private Boolean subscriptionShared;
+        public AMQPConsumer subscriptionShared(boolean subscriptionShared) {
+            this.subscriptionShared = subscriptionShared;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Specifies whether the consumer accept messages while it is stopping.
          * You may consider enabling this option, if you start and stop JMS
@@ -862,7 +1179,12 @@ public class AMQPEndpoint {
          * avoid this its recommended to enable this option. The option is a
          * boolean type.
          */
-        private Boolean acceptMessagesWhileStopping;
+        public AMQPConsumer acceptMessagesWhileStopping(
+                boolean acceptMessagesWhileStopping) {
+            this.acceptMessagesWhileStopping = acceptMessagesWhileStopping;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Whether the DefaultMessageListenerContainer used in the reply
          * managers for request-reply messaging allow the
@@ -873,7 +1195,12 @@ public class AMQPEndpoint {
          * but to enable for reply managers you must enable this flag. The
          * option is a boolean type.
          */
-        private Boolean allowReplyManagerQuickStop;
+        public AMQPConsumer allowReplyManagerQuickStop(
+                boolean allowReplyManagerQuickStop) {
+            this.allowReplyManagerQuickStop = allowReplyManagerQuickStop;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * The consumer type to use, which can be one of: Simple, Default, or
          * Custom. The consumer type determines which Spring JMS listener to
@@ -887,7 +1214,11 @@ public class AMQPEndpoint {
          * use. The option is a org.apache.camel.component.jms.ConsumerType
          * type.
          */
-        private ConsumerType consumerType;
+        public AMQPConsumer consumerType(ConsumerType consumerType) {
+            this.consumerType = consumerType;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Specifies what default TaskExecutor type to use in the
          * DefaultMessageListenerContainer, for both consumer endpoints and the
@@ -901,7 +1232,12 @@ public class AMQPEndpoint {
          * decreasing concurrent consumers. The option is a
          * org.apache.camel.component.jms.DefaultTaskExecutorType type.
          */
-        private DefaultTaskExecutorType defaultTaskExecutorType;
+        public AMQPConsumer defaultTaskExecutorType(
+                DefaultTaskExecutorType defaultTaskExecutorType) {
+            this.defaultTaskExecutorType = defaultTaskExecutorType;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Enables eager loading of JMS properties and payload as soon as a
          * message is loaded which generally is inefficient as the JMS
@@ -909,7 +1245,12 @@ public class AMQPEndpoint {
          * issues with the underlying JMS provider and the use of JMS
          * properties. The option is a boolean type.
          */
-        private Boolean eagerLoadingOfProperties;
+        public AMQPConsumer eagerLoadingOfProperties(
+                boolean eagerLoadingOfProperties) {
+            this.eagerLoadingOfProperties = eagerLoadingOfProperties;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -917,40 +1258,70 @@ public class AMQPEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public AMQPConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public AMQPConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Specifies whether the listener session should be exposed when
          * consuming messages. The option is a boolean type.
          */
-        private Boolean exposeListenerSession;
+        public AMQPConsumer exposeListenerSession(boolean exposeListenerSession) {
+            this.exposeListenerSession = exposeListenerSession;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Whether a JMS consumer is allowed to send a reply message to the same
          * destination that the consumer is using to consume from. This prevents
          * an endless loop by consuming and sending back the same message to
          * itself. The option is a boolean type.
          */
-        private Boolean replyToSameDestinationAllowed;
+        public AMQPConsumer replyToSameDestinationAllowed(
+                boolean replyToSameDestinationAllowed) {
+            this.replyToSameDestinationAllowed = replyToSameDestinationAllowed;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Allows you to specify a custom task executor for consuming messages.
          * The option is a org.springframework.core.task.TaskExecutor type.
          */
-        private Object taskExecutor;
+        public AMQPConsumer taskExecutor(Object taskExecutor) {
+            this.taskExecutor = taskExecutor;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Allows to configure the default errorHandler logging level for
          * logging uncaught exceptions. The option is a
          * org.apache.camel.LoggingLevel type.
          */
-        private LoggingLevel errorHandlerLoggingLevel;
+        public AMQPConsumer errorHandlerLoggingLevel(
+                LoggingLevel errorHandlerLoggingLevel) {
+            this.errorHandlerLoggingLevel = errorHandlerLoggingLevel;
+            return (AMQPConsumer) this;
+        }
+
         /**
          * Allows to control whether stacktraces should be logged or not, by the
          * default errorHandler. The option is a boolean type.
          */
-        private Boolean errorHandlerLogStackTrace;
+        public AMQPConsumer errorHandlerLogStackTrace(
+                boolean errorHandlerLogStackTrace) {
+            this.errorHandlerLogStackTrace = errorHandlerLogStackTrace;
+            return (AMQPConsumer) this;
+        }
 
         public String getAcknowledgementModeName() {
             return acknowledgementModeName;
@@ -1168,18 +1539,50 @@ public class AMQPEndpoint {
         }
     }
 
-    public static class AMQPProducer extends AMQPCommon {
+    public static class AMQPProducer extends AMQPCommon<AMQPProducer> {
+        private Integer deliveryMode;
+        private Boolean deliveryPersistent;
+        private Boolean explicitQosEnabled;
+        private Boolean formatDateHeadersToIso8601;
+        private Boolean preserveMessageQos;
+        private Integer priority;
+        private Integer replyToConcurrentConsumers;
+        private Integer replyToMaxConcurrentConsumers;
+        private Integer replyToOnTimeoutMaxConcurrentConsumers;
+        private String replyToOverride;
+        private ReplyToType replyToType;
+        private Long requestTimeout;
+        private Long timeToLive;
+        private String allowAdditionalHeaders;
+        private Boolean allowNullBody;
+        private Boolean alwaysCopyMessage;
+        private String correlationProperty;
+        private Boolean disableTimeToLive;
+        private Boolean forceSendOriginalMessage;
+        private Boolean includeSentJMSMessageID;
+        private String replyToCacheLevelName;
+        private String replyToDestinationSelectorName;
+        private Boolean streamMessageTypeEnabled;
+
         /**
          * Specifies the delivery mode to be used. Possibles values are those
          * defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT
          * = 2. The option is a java.lang.Integer type.
          */
-        private Integer deliveryMode;
+        public AMQPProducer deliveryMode(Integer deliveryMode) {
+            this.deliveryMode = deliveryMode;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Specifies whether persistent delivery is used by default. The option
          * is a boolean type.
          */
-        private Boolean deliveryPersistent;
+        public AMQPProducer deliveryPersistent(boolean deliveryPersistent) {
+            this.deliveryPersistent = deliveryPersistent;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Set if the deliveryMode, priority or timeToLive qualities of service
          * should be used when sending messages. This option is based on
@@ -1189,12 +1592,21 @@ public class AMQPEndpoint {
          * reading QoS properties exclusively from the Camel In message headers.
          * The option is a java.lang.Boolean type.
          */
-        private Boolean explicitQosEnabled;
+        public AMQPProducer explicitQosEnabled(Boolean explicitQosEnabled) {
+            this.explicitQosEnabled = explicitQosEnabled;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Sets whether date headers should be formatted according to the ISO
          * 8601 standard. The option is a boolean type.
          */
-        private Boolean formatDateHeadersToIso8601;
+        public AMQPProducer formatDateHeadersToIso8601(
+                boolean formatDateHeadersToIso8601) {
+            this.formatDateHeadersToIso8601 = formatDateHeadersToIso8601;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Set to true, if you want to send message using the QoS settings
          * specified on the message, instead of the QoS settings on the JMS
@@ -1206,39 +1618,66 @@ public class AMQPEndpoint {
          * by contrast, will only use options set on the endpoint, and not
          * values from the message header. The option is a boolean type.
          */
-        private Boolean preserveMessageQos;
+        public AMQPProducer preserveMessageQos(boolean preserveMessageQos) {
+            this.preserveMessageQos = preserveMessageQos;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Values greater than 1 specify the message priority when sending
          * (where 0 is the lowest priority and 9 is the highest). The
          * explicitQosEnabled option must also be enabled in order for this
          * option to have any effect. The option is a int type.
          */
-        private Integer priority;
+        public AMQPProducer priority(int priority) {
+            this.priority = priority;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Specifies the default number of concurrent consumers when doing
          * request/reply over JMS. See also the maxMessagesPerTask option to
          * control dynamic scaling up/down of threads. The option is a int type.
          */
-        private Integer replyToConcurrentConsumers;
+        public AMQPProducer replyToConcurrentConsumers(
+                int replyToConcurrentConsumers) {
+            this.replyToConcurrentConsumers = replyToConcurrentConsumers;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Specifies the maximum number of concurrent consumers when using
          * request/reply over JMS. See also the maxMessagesPerTask option to
          * control dynamic scaling up/down of threads. The option is a int type.
          */
-        private Integer replyToMaxConcurrentConsumers;
+        public AMQPProducer replyToMaxConcurrentConsumers(
+                int replyToMaxConcurrentConsumers) {
+            this.replyToMaxConcurrentConsumers = replyToMaxConcurrentConsumers;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Specifies the maximum number of concurrent consumers for continue
          * routing when timeout occurred when using request/reply over JMS. The
          * option is a int type.
          */
-        private Integer replyToOnTimeoutMaxConcurrentConsumers;
+        public AMQPProducer replyToOnTimeoutMaxConcurrentConsumers(
+                int replyToOnTimeoutMaxConcurrentConsumers) {
+            this.replyToOnTimeoutMaxConcurrentConsumers = replyToOnTimeoutMaxConcurrentConsumers;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Provides an explicit ReplyTo destination in the JMS message, which
          * overrides the setting of replyTo. It is useful if you want to forward
          * the message to a remote Queue and receive the reply message from the
          * ReplyTo destination. The option is a java.lang.String type.
          */
-        private String replyToOverride;
+        public AMQPProducer replyToOverride(String replyToOverride) {
+            this.replyToOverride = replyToOverride;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Allows for explicitly specifying which kind of strategy to use for
          * replyTo queues when doing request/reply over JMS. Possible values
@@ -1251,7 +1690,11 @@ public class AMQPEndpoint {
          * lower performance than its alternatives Temporary and Exclusive. The
          * option is a org.apache.camel.component.jms.ReplyToType type.
          */
-        private ReplyToType replyToType;
+        public AMQPProducer replyToType(ReplyToType replyToType) {
+            this.replyToType = replyToType;
+            return (AMQPProducer) this;
+        }
+
         /**
          * The timeout for waiting for a reply when using the InOut Exchange
          * Pattern (in milliseconds). The default is 20 seconds. You can include
@@ -1260,12 +1703,20 @@ public class AMQPEndpoint {
          * timeout values. See also the requestTimeoutCheckerInterval option.
          * The option is a long type.
          */
-        private Long requestTimeout;
+        public AMQPProducer requestTimeout(long requestTimeout) {
+            this.requestTimeout = requestTimeout;
+            return (AMQPProducer) this;
+        }
+
         /**
          * When sending messages, specifies the time-to-live of the message (in
          * milliseconds). The option is a long type.
          */
-        private Long timeToLive;
+        public AMQPProducer timeToLive(long timeToLive) {
+            this.timeToLive = timeToLive;
+            return (AMQPProducer) this;
+        }
+
         /**
          * This option is used to allow additional headers which may have values
          * that are invalid according to JMS specification. For example some
@@ -1275,13 +1726,21 @@ public class AMQPEndpoint {
          * use as suffix for wildcard matching. The option is a java.lang.String
          * type.
          */
-        private String allowAdditionalHeaders;
+        public AMQPProducer allowAdditionalHeaders(String allowAdditionalHeaders) {
+            this.allowAdditionalHeaders = allowAdditionalHeaders;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Whether to allow sending messages with no body. If this option is
          * false and the message body is null, then an JMSException is thrown.
          * The option is a boolean type.
          */
-        private Boolean allowNullBody;
+        public AMQPProducer allowNullBody(boolean allowNullBody) {
+            this.allowNullBody = allowNullBody;
+            return (AMQPProducer) this;
+        }
+
         /**
          * If true, Camel will always make a JMS message copy of the message
          * when it is passed to the producer for sending. Copying the message is
@@ -1290,7 +1749,11 @@ public class AMQPEndpoint {
          * the alwaysCopyMessage option to true, if a
          * replyToDestinationSelectorName is set). The option is a boolean type.
          */
-        private Boolean alwaysCopyMessage;
+        public AMQPProducer alwaysCopyMessage(boolean alwaysCopyMessage) {
+            this.alwaysCopyMessage = alwaysCopyMessage;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Use this JMS property to correlate messages in InOut exchange pattern
          * (request-reply) instead of JMSCorrelationID property. This allows you
@@ -1300,7 +1763,11 @@ public class AMQPEndpoint {
          * generated if not supplied in the header of the message under the same
          * name. The option is a java.lang.String type.
          */
-        private String correlationProperty;
+        public AMQPProducer correlationProperty(String correlationProperty) {
+            this.correlationProperty = correlationProperty;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Use this option to force disabling time to live. For example when you
          * do request/reply over JMS, then Camel will by default use the
@@ -1312,14 +1779,23 @@ public class AMQPEndpoint {
          * on the receiver system. See below in section About time to live for
          * more details. The option is a boolean type.
          */
-        private Boolean disableTimeToLive;
+        public AMQPProducer disableTimeToLive(boolean disableTimeToLive) {
+            this.disableTimeToLive = disableTimeToLive;
+            return (AMQPProducer) this;
+        }
+
         /**
          * When using mapJmsMessage=false Camel will create a new JMS message to
          * send to a new JMS destination if you touch the headers (get or set)
          * during the route. Set this option to true to force Camel to send the
          * original JMS message that was received. The option is a boolean type.
          */
-        private Boolean forceSendOriginalMessage;
+        public AMQPProducer forceSendOriginalMessage(
+                boolean forceSendOriginalMessage) {
+            this.forceSendOriginalMessage = forceSendOriginalMessage;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Only applicable when sending to JMS destination using InOnly (eg fire
          * and forget). Enabling this option will enrich the Camel Exchange with
@@ -1327,7 +1803,12 @@ public class AMQPEndpoint {
          * message was sent to the JMS destination. The option is a boolean
          * type.
          */
-        private Boolean includeSentJMSMessageID;
+        public AMQPProducer includeSentJMSMessageID(
+                boolean includeSentJMSMessageID) {
+            this.includeSentJMSMessageID = includeSentJMSMessageID;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Sets the cache level by name for the reply consumer when doing
          * request/reply over JMS. This option only applies when using fixed
@@ -1340,14 +1821,23 @@ public class AMQPEndpoint {
          * value such as CACHE_CONSUMER or CACHE_SESSION. The option is a
          * java.lang.String type.
          */
-        private String replyToCacheLevelName;
+        public AMQPProducer replyToCacheLevelName(String replyToCacheLevelName) {
+            this.replyToCacheLevelName = replyToCacheLevelName;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Sets the JMS Selector using the fixed name to be used so you can
          * filter out your own replies from the others when using a shared queue
          * (that is, if you are not using a temporary reply queue). The option
          * is a java.lang.String type.
          */
-        private String replyToDestinationSelectorName;
+        public AMQPProducer replyToDestinationSelectorName(
+                String replyToDestinationSelectorName) {
+            this.replyToDestinationSelectorName = replyToDestinationSelectorName;
+            return (AMQPProducer) this;
+        }
+
         /**
          * Sets whether StreamMessage type is enabled or not. Message payloads
          * of streaming kind such as files, InputStream, etc will either by sent
@@ -1358,7 +1848,11 @@ public class AMQPEndpoint {
          * chunk is then written to the StreamMessage until no more data. The
          * option is a boolean type.
          */
-        private Boolean streamMessageTypeEnabled;
+        public AMQPProducer streamMessageTypeEnabled(
+                boolean streamMessageTypeEnabled) {
+            this.streamMessageTypeEnabled = streamMessageTypeEnabled;
+            return (AMQPProducer) this;
+        }
 
         public Integer getDeliveryMode() {
             return deliveryMode;
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AS2Endpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AS2Endpoint.java
index 9f46886..da03add 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AS2Endpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AS2Endpoint.java
@@ -32,168 +32,327 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AS2Endpoint {
 
 
-    public static class AS2Common extends EndpointConfiguration {
+    public static class AS2Common<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private AS2ApiName apiName;
+        private String methodName;
+        private String as2From;
+        private AS2MessageStructure as2MessageStructure;
+        private String as2To;
+        private String as2Version;
+        private String clientFqdn;
+        private AS2CompressionAlgorithm compressionAlgorithm;
+        private PrivateKey decryptingPrivateKey;
+        private String dispositionNotificationTo;
+        private String ediMessageTransferEncoding;
+        private Object ediMessageType;
+        private AS2EncryptionAlgorithm encryptingAlgorithm;
+        private Certificate[] encryptingCertificateChain;
+        private String from;
+        private String inBody;
+        private String mdnMessageTemplate;
+        private String requestUri;
+        private String server;
+        private String serverFqdn;
+        private Integer serverPortNumber;
+        private String[] signedReceiptMicAlgorithms;
+        private AS2SignatureAlgorithm signingAlgorithm;
+        private Certificate[] signingCertificateChain;
+        private PrivateKey signingPrivateKey;
+        private String subject;
+        private String targetHostname;
+        private Integer targetPortNumber;
+        private String userAgent;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * What kind of operation to perform. The option is a
          * org.apache.camel.component.as2.internal.AS2ApiName type.
          */
-        private AS2ApiName apiName;
+        public T apiName(AS2ApiName apiName) {
+            this.apiName = apiName;
+            return (T) this;
+        }
+
         /**
          * What sub operation to use for the selected operation. The option is a
          * java.lang.String type.
          */
-        private String methodName;
+        public T methodName(String methodName) {
+            this.methodName = methodName;
+            return (T) this;
+        }
+
         /**
          * The value of the AS2From header of AS2 message. The option is a
          * java.lang.String type.
          */
-        private String as2From;
+        public T as2From(String as2From) {
+            this.as2From = as2From;
+            return (T) this;
+        }
+
         /**
          * The structure of AS2 Message. One of: PLAIN - No encryption, no
          * signature, SIGNED - No encryption, signature, ENCRYPTED - Encryption,
          * no signature, ENCRYPTED_SIGNED - Encryption, signature. The option is
          * a org.apache.camel.component.as2.api.AS2MessageStructure type.
          */
-        private AS2MessageStructure as2MessageStructure;
+        public T as2MessageStructure(AS2MessageStructure as2MessageStructure) {
+            this.as2MessageStructure = as2MessageStructure;
+            return (T) this;
+        }
+
         /**
          * The value of the AS2To header of AS2 message. The option is a
          * java.lang.String type.
          */
-        private String as2To;
+        public T as2To(String as2To) {
+            this.as2To = as2To;
+            return (T) this;
+        }
+
         /**
          * The version of the AS2 protocol. The option is a java.lang.String
          * type.
          */
-        private String as2Version;
+        public T as2Version(String as2Version) {
+            this.as2Version = as2Version;
+            return (T) this;
+        }
+
         /**
          * The Client Fully Qualified Domain Name (FQDN). Used in message ids
          * sent by endpoint. The option is a java.lang.String type.
          */
-        private String clientFqdn;
+        public T clientFqdn(String clientFqdn) {
+            this.clientFqdn = clientFqdn;
+            return (T) this;
+        }
+
         /**
          * The algorithm used to compress EDI message. The option is a
          * org.apache.camel.component.as2.api.AS2CompressionAlgorithm type.
          */
-        private AS2CompressionAlgorithm compressionAlgorithm;
+        public T compressionAlgorithm(
+                AS2CompressionAlgorithm compressionAlgorithm) {
+            this.compressionAlgorithm = compressionAlgorithm;
+            return (T) this;
+        }
+
         /**
          * The key used to encrypt the EDI message. The option is a
          * java.security.PrivateKey type.
          */
-        private PrivateKey decryptingPrivateKey;
+        public T decryptingPrivateKey(PrivateKey decryptingPrivateKey) {
+            this.decryptingPrivateKey = decryptingPrivateKey;
+            return (T) this;
+        }
+
         /**
          * The value of the Disposition-Notification-To header. Assigning a
          * value to this parameter requests a message disposition notification
          * (MDN) for the AS2 message. The option is a java.lang.String type.
          */
-        private String dispositionNotificationTo;
+        public T dispositionNotificationTo(String dispositionNotificationTo) {
+            this.dispositionNotificationTo = dispositionNotificationTo;
+            return (T) this;
+        }
+
         /**
          * The transfer encoding of EDI message. The option is a
          * java.lang.String type.
          */
-        private String ediMessageTransferEncoding;
+        public T ediMessageTransferEncoding(String ediMessageTransferEncoding) {
+            this.ediMessageTransferEncoding = ediMessageTransferEncoding;
+            return (T) this;
+        }
+
         /**
          * The content type of EDI message. One of application/edifact,
          * application/edi-x12, application/edi-consent. The option is a
          * org.apache.http.entity.ContentType type.
          */
-        private Object ediMessageType;
+        public T ediMessageType(Object ediMessageType) {
+            this.ediMessageType = ediMessageType;
+            return (T) this;
+        }
+
         /**
          * The algorithm used to encrypt EDI message. The option is a
          * org.apache.camel.component.as2.api.AS2EncryptionAlgorithm type.
          */
-        private AS2EncryptionAlgorithm encryptingAlgorithm;
+        public T encryptingAlgorithm(AS2EncryptionAlgorithm encryptingAlgorithm) {
+            this.encryptingAlgorithm = encryptingAlgorithm;
+            return (T) this;
+        }
+
         /**
          * The chain of certificates used to encrypt EDI message. The option is
          * a java.security.cert.Certificate[] type.
          */
-        private Certificate[] encryptingCertificateChain;
+        public T encryptingCertificateChain(
+                Certificate[] encryptingCertificateChain) {
+            this.encryptingCertificateChain = encryptingCertificateChain;
+            return (T) this;
+        }
+
         /**
          * The value of the From header of AS2 message. The option is a
          * java.lang.String type.
          */
-        private String from;
+        public T from(String from) {
+            this.from = from;
+            return (T) this;
+        }
+
         /**
          * Sets the name of a parameter to be passed in the exchange In Body.
          * The option is a java.lang.String type.
          */
-        private String inBody;
+        public T inBody(String inBody) {
+            this.inBody = inBody;
+            return (T) this;
+        }
+
         /**
          * The template used to format MDN message. The option is a
          * java.lang.String type.
          */
-        private String mdnMessageTemplate;
+        public T mdnMessageTemplate(String mdnMessageTemplate) {
+            this.mdnMessageTemplate = mdnMessageTemplate;
+            return (T) this;
+        }
+
         /**
          * The request URI of EDI message. The option is a java.lang.String
          * type.
          */
-        private String requestUri;
+        public T requestUri(String requestUri) {
+            this.requestUri = requestUri;
+            return (T) this;
+        }
+
         /**
          * The value included in the Server message header identifying the AS2
          * Server. The option is a java.lang.String type.
          */
-        private String server;
+        public T server(String server) {
+            this.server = server;
+            return (T) this;
+        }
+
         /**
          * The Server Fully Qualified Domain Name (FQDN). Used in message ids
          * sent by endpoint. The option is a java.lang.String type.
          */
-        private String serverFqdn;
+        public T serverFqdn(String serverFqdn) {
+            this.serverFqdn = serverFqdn;
+            return (T) this;
+        }
+
         /**
          * The port number of server. The option is a java.lang.Integer type.
          */
-        private Integer serverPortNumber;
+        public T serverPortNumber(Integer serverPortNumber) {
+            this.serverPortNumber = serverPortNumber;
+            return (T) this;
+        }
+
         /**
          * The list of algorithms, in order of preference, requested to generate
          * a message integrity check (MIC) returned in message dispostion
          * notification (MDN). The option is a java.lang.String[] type.
          */
-        private String[] signedReceiptMicAlgorithms;
+        public T signedReceiptMicAlgorithms(String[] signedReceiptMicAlgorithms) {
+            this.signedReceiptMicAlgorithms = signedReceiptMicAlgorithms;
+            return (T) this;
+        }
+
         /**
          * The algorithm used to sign EDI message. The option is a
          * org.apache.camel.component.as2.api.AS2SignatureAlgorithm type.
          */
-        private AS2SignatureAlgorithm signingAlgorithm;
+        public T signingAlgorithm(AS2SignatureAlgorithm signingAlgorithm) {
+            this.signingAlgorithm = signingAlgorithm;
+            return (T) this;
+        }
+
         /**
          * The chain of certificates used to sign EDI message. The option is a
          * java.security.cert.Certificate[] type.
          */
-        private Certificate[] signingCertificateChain;
+        public T signingCertificateChain(Certificate[] signingCertificateChain) {
+            this.signingCertificateChain = signingCertificateChain;
+            return (T) this;
+        }
+
         /**
          * The key used to sign the EDI message. The option is a
          * java.security.PrivateKey type.
          */
-        private PrivateKey signingPrivateKey;
+        public T signingPrivateKey(PrivateKey signingPrivateKey) {
+            this.signingPrivateKey = signingPrivateKey;
+            return (T) this;
+        }
+
         /**
          * The value of Subject header of AS2 message. The option is a
          * java.lang.String type.
          */
-        private String subject;
+        public T subject(String subject) {
+            this.subject = subject;
+            return (T) this;
+        }
+
         /**
          * The host name (IP or DNS name) of target host. The option is a
          * java.lang.String type.
          */
-        private String targetHostname;
+        public T targetHostname(String targetHostname) {
+            this.targetHostname = targetHostname;
+            return (T) this;
+        }
+
         /**
          * The port number of target host. -1 indicates the scheme default port.
          * The option is a java.lang.Integer type.
          */
-        private Integer targetPortNumber;
+        public T targetPortNumber(Integer targetPortNumber) {
+            this.targetPortNumber = targetPortNumber;
+            return (T) this;
+        }
+
         /**
          * The value included in the User-Agent message header identifying the
          * AS2 user agent. The option is a java.lang.String type.
          */
-        private String userAgent;
+        public T userAgent(String userAgent) {
+            this.userAgent = userAgent;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public AS2ApiName getApiName() {
             return apiName;
@@ -452,7 +611,11 @@ public class AS2Endpoint {
         }
     }
 
-    public static class AS2Consumer extends AS2Common {
+    public static class AS2Consumer extends AS2Common<AS2Consumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -462,7 +625,11 @@ public class AS2Endpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public AS2Consumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (AS2Consumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -470,12 +637,19 @@ public class AS2Endpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public AS2Consumer exceptionHandler(ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (AS2Consumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public AS2Consumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (AS2Consumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -502,7 +676,7 @@ public class AS2Endpoint {
         }
     }
 
-    public static class AS2Producer extends AS2Common {
+    public static class AS2Producer extends AS2Common<AS2Producer> {
     }
 
     public static enum AS2ApiName {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ActiveMQEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ActiveMQEndpoint.java
index 612f986..d0754b4 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ActiveMQEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ActiveMQEndpoint.java
@@ -32,17 +32,73 @@ import org.apache.camel.spi.HeaderFilterStrategy;
 public class ActiveMQEndpoint {
 
 
-    public static class ActiveMQCommon extends EndpointConfiguration {
+    public static class ActiveMQCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String destinationType;
+        private String destinationName;
+        private String clientId;
+        private Object connectionFactory;
+        private Boolean disableReplyTo;
+        private String durableSubscriptionName;
+        private JmsMessageType jmsMessageType;
+        private Boolean testConnectionOnStartup;
+        private Boolean allowSerializedHeaders;
+        private Boolean asyncStartListener;
+        private Boolean asyncStopListener;
+        private Boolean basicPropertyBinding;
+        private Object destinationResolver;
+        private Object errorHandler;
+        private Object exceptionListener;
+        private HeaderFilterStrategy headerFilterStrategy;
+        private Integer idleConsumerLimit;
+        private Integer idleTaskExecutionLimit;
+        private Boolean includeAllJMSXProperties;
+        private Object jmsKeyFormatStrategy;
+        private Boolean mapJmsMessage;
+        private Integer maxMessagesPerTask;
+        private Object messageConverter;
+        private Object messageCreatedStrategy;
+        private Boolean messageIdEnabled;
+        private Object messageListenerContainerFactory;
+        private Boolean messageTimestampEnabled;
+        private Boolean pubSubNoLocal;
+        private Long receiveTimeout;
+        private Long recoveryInterval;
+        private Long requestTimeoutCheckerInterval;
+        private Boolean synchronous;
+        private Boolean transferException;
+        private Boolean transferExchange;
+        private Boolean transferFault;
+        private Boolean useMessageIDAsCorrelationID;
+        private Integer waitForProvisionCorrelationToBeUpdatedCounter;
+        private Long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime;
+        private String password;
+        private String username;
+        private Boolean transacted;
+        private Boolean lazyCreateTransactionManager;
+        private Object transactionManager;
+        private String transactionName;
+        private Integer transactionTimeout;
+
         /**
          * The kind of destination to use. The option is a java.lang.String
          * type.
          */
-        private String destinationType;
+        public T destinationType(String destinationType) {
+            this.destinationType = destinationType;
+            return (T) this;
+        }
+
         /**
          * Name of the queue or topic to use as destination. The option is a
          * java.lang.String type.
          */
-        private String destinationName;
+        public T destinationName(String destinationName) {
+            this.destinationName = destinationName;
+            return (T) this;
+        }
+
         /**
          * Sets the JMS client ID to use. Note that this value, if specified,
          * must be unique and can only be used by a single JMS connection
@@ -50,7 +106,11 @@ public class ActiveMQEndpoint {
          * subscriptions. If using Apache ActiveMQ you may prefer to use Virtual
          * Topics instead. The option is a java.lang.String type.
          */
-        private String clientId;
+        public T clientId(String clientId) {
+            this.clientId = clientId;
+            return (T) this;
+        }
+
         /**
          * Sets the default connection factory to be used if a connection
          * factory is not specified for either
@@ -58,7 +118,11 @@ public class ActiveMQEndpoint {
          * setListenerConnectionFactory(ConnectionFactory). The option is a
          * javax.jms.ConnectionFactory type.
          */
-        private Object connectionFactory;
+        public T connectionFactory(Object connectionFactory) {
+            this.connectionFactory = connectionFactory;
+            return (T) this;
+        }
+
         /**
          * Specifies whether Camel ignores the JMSReplyTo header in messages. If
          * true, Camel does not send a reply back to the destination specified
@@ -70,13 +134,21 @@ public class ActiveMQEndpoint {
          * want to route message from one system to another. The option is a
          * boolean type.
          */
-        private Boolean disableReplyTo;
+        public T disableReplyTo(boolean disableReplyTo) {
+            this.disableReplyTo = disableReplyTo;
+            return (T) this;
+        }
+
         /**
          * The durable subscriber name for specifying durable topic
          * subscriptions. The clientId option must be configured as well. The
          * option is a java.lang.String type.
          */
-        private String durableSubscriptionName;
+        public T durableSubscriptionName(String durableSubscriptionName) {
+            this.durableSubscriptionName = durableSubscriptionName;
+            return (T) this;
+        }
+
         /**
          * Allows you to force the use of a specific javax.jms.Message
          * implementation for sending JMS messages. Possible values are: Bytes,
@@ -85,7 +157,11 @@ public class ActiveMQEndpoint {
          * to specify it. The option is a
          * org.apache.camel.component.jms.JmsMessageType type.
          */
-        private JmsMessageType jmsMessageType;
+        public T jmsMessageType(JmsMessageType jmsMessageType) {
+            this.jmsMessageType = jmsMessageType;
+            return (T) this;
+        }
+
         /**
          * Specifies whether to test the connection on startup. This ensures
          * that when Camel starts that all the JMS consumers have a valid
@@ -94,14 +170,22 @@ public class ActiveMQEndpoint {
          * started with failed connections. The JMS producers is tested as well.
          * The option is a boolean type.
          */
-        private Boolean testConnectionOnStartup;
+        public T testConnectionOnStartup(boolean testConnectionOnStartup) {
+            this.testConnectionOnStartup = testConnectionOnStartup;
+            return (T) this;
+        }
+
         /**
          * Controls whether or not to include serialized headers. Applies only
          * when isTransferExchange() is true. This requires that the objects are
          * serializable. Camel will exclude any non-serializable objects and log
          * it at WARN level. The option is a boolean type.
          */
-        private Boolean allowSerializedHeaders;
+        public T allowSerializedHeaders(boolean allowSerializedHeaders) {
+            this.allowSerializedHeaders = allowSerializedHeaders;
+            return (T) this;
+        }
+
         /**
          * Whether to startup the JmsConsumer message listener asynchronously,
          * when starting a route. For example if a JmsConsumer cannot get a
@@ -115,18 +199,30 @@ public class ActiveMQEndpoint {
          * messages; You can then restart the route to retry. The option is a
          * boolean type.
          */
-        private Boolean asyncStartListener;
+        public T asyncStartListener(boolean asyncStartListener) {
+            this.asyncStartListener = asyncStartListener;
+            return (T) this;
+        }
+
         /**
          * Whether to stop the JmsConsumer message listener asynchronously, when
          * stopping a route. The option is a boolean type.
          */
-        private Boolean asyncStopListener;
+        public T asyncStopListener(boolean asyncStopListener) {
+            this.asyncStopListener = asyncStopListener;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * A pluggable
          * org.springframework.jms.support.destination.DestinationResolver that
@@ -134,7 +230,11 @@ public class ActiveMQEndpoint {
          * destination in a JNDI registry). The option is a
          * org.springframework.jms.support.destination.DestinationResolver type.
          */
-        private Object destinationResolver;
+        public T destinationResolver(Object destinationResolver) {
+            this.destinationResolver = destinationResolver;
+            return (T) this;
+        }
+
         /**
          * Specifies a org.springframework.util.ErrorHandler to be invoked in
          * case of any uncaught exceptions thrown while processing a Message. By
@@ -145,24 +245,40 @@ public class ActiveMQEndpoint {
          * configure, than having to code a custom errorHandler. The option is a
          * org.springframework.util.ErrorHandler type.
          */
-        private Object errorHandler;
+        public T errorHandler(Object errorHandler) {
+            this.errorHandler = errorHandler;
+            return (T) this;
+        }
+
         /**
          * Specifies the JMS Exception Listener that is to be notified of any
          * underlying JMS exceptions. The option is a
          * javax.jms.ExceptionListener type.
          */
-        private Object exceptionListener;
+        public T exceptionListener(Object exceptionListener) {
+            this.exceptionListener = exceptionListener;
+            return (T) this;
+        }
+
         /**
          * To use a custom HeaderFilterStrategy to filter header to and from
          * Camel message. The option is a
          * org.apache.camel.spi.HeaderFilterStrategy type.
          */
-        private HeaderFilterStrategy headerFilterStrategy;
+        public T headerFilterStrategy(HeaderFilterStrategy headerFilterStrategy) {
+            this.headerFilterStrategy = headerFilterStrategy;
+            return (T) this;
+        }
+
         /**
          * Specify the limit for the number of consumers that are allowed to be
          * idle at any given time. The option is a int type.
          */
-        private Integer idleConsumerLimit;
+        public T idleConsumerLimit(int idleConsumerLimit) {
+            this.idleConsumerLimit = idleConsumerLimit;
+            return (T) this;
+        }
+
         /**
          * Specifies the limit for idle executions of a receive task, not having
          * received any message within its execution. If this limit is reached,
@@ -171,7 +287,11 @@ public class ActiveMQEndpoint {
          * setting). There is additional doc available from Spring. The option
          * is a int type.
          */
-        private Integer idleTaskExecutionLimit;
+        public T idleTaskExecutionLimit(int idleTaskExecutionLimit) {
+            this.idleTaskExecutionLimit = idleTaskExecutionLimit;
+            return (T) this;
+        }
+
         /**
          * Whether to include all JMSXxxx properties when mapping from JMS to
          * Camel Message. Setting this to true will include properties such as
@@ -179,7 +299,11 @@ public class ActiveMQEndpoint {
          * headerFilterStrategy then this option does not apply. The option is a
          * boolean type.
          */
-        private Boolean includeAllJMSXProperties;
+        public T includeAllJMSXProperties(boolean includeAllJMSXProperties) {
+            this.includeAllJMSXProperties = includeAllJMSXProperties;
+            return (T) this;
+        }
+
         /**
          * Pluggable strategy for encoding and decoding JMS keys so they can be
          * compliant with the JMS specification. Camel provides two
@@ -191,34 +315,54 @@ public class ActiveMQEndpoint {
          * org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it
          * using the # notation. The option is a java.lang.String type.
          */
-        private Object jmsKeyFormatStrategy;
+        public T jmsKeyFormatStrategy(Object jmsKeyFormatStrategy) {
+            this.jmsKeyFormatStrategy = jmsKeyFormatStrategy;
+            return (T) this;
+        }
+
         /**
          * Specifies whether Camel should auto map the received JMS message to a
          * suited payload type, such as javax.jms.TextMessage to a String etc.
          * The option is a boolean type.
          */
-        private Boolean mapJmsMessage;
+        public T mapJmsMessage(boolean mapJmsMessage) {
+            this.mapJmsMessage = mapJmsMessage;
+            return (T) this;
+        }
+
         /**
          * The number of messages per task. -1 is unlimited. If you use a range
          * for concurrent consumers (eg min max), then this option can be used
          * to set a value to eg 100 to control how fast the consumers will
          * shrink when less work is required. The option is a int type.
          */
-        private Integer maxMessagesPerTask;
+        public T maxMessagesPerTask(int maxMessagesPerTask) {
+            this.maxMessagesPerTask = maxMessagesPerTask;
+            return (T) this;
+        }
+
         /**
          * To use a custom Spring
          * org.springframework.jms.support.converter.MessageConverter so you can
          * be in control how to map to/from a javax.jms.Message. The option is a
          * org.springframework.jms.support.converter.MessageConverter type.
          */
-        private Object messageConverter;
+        public T messageConverter(Object messageConverter) {
+            this.messageConverter = messageConverter;
+            return (T) this;
+        }
+
         /**
          * To use the given MessageCreatedStrategy which are invoked when Camel
          * creates new instances of javax.jms.Message objects when Camel is
          * sending a JMS message. The option is a
          * org.apache.camel.component.jms.MessageCreatedStrategy type.
          */
-        private Object messageCreatedStrategy;
+        public T messageCreatedStrategy(Object messageCreatedStrategy) {
+            this.messageCreatedStrategy = messageCreatedStrategy;
+            return (T) this;
+        }
+
         /**
          * When sending, specifies whether message IDs should be added. This is
          * just an hint to the JMS Broker. If the JMS provider accepts this
@@ -226,7 +370,11 @@ public class ActiveMQEndpoint {
          * provider ignores the hint, the message ID must be set to its normal
          * unique value. The option is a boolean type.
          */
-        private Boolean messageIdEnabled;
+        public T messageIdEnabled(boolean messageIdEnabled) {
+            this.messageIdEnabled = messageIdEnabled;
+            return (T) this;
+        }
+
         /**
          * Registry ID of the MessageListenerContainerFactory used to determine
          * what
@@ -235,7 +383,12 @@ public class ActiveMQEndpoint {
          * consumerType to Custom. The option is a
          * org.apache.camel.component.jms.MessageListenerContainerFactory type.
          */
-        private Object messageListenerContainerFactory;
+        public T messageListenerContainerFactory(
+                Object messageListenerContainerFactory) {
+            this.messageListenerContainerFactory = messageListenerContainerFactory;
+            return (T) this;
+        }
+
         /**
          * Specifies whether timestamps should be enabled by default on sending
          * messages. This is just an hint to the JMS Broker. If the JMS provider
@@ -243,23 +396,39 @@ public class ActiveMQEndpoint {
          * zero; if the provider ignores the hint, the timestamp must be set to
          * its normal value. The option is a boolean type.
          */
-        private Boolean messageTimestampEnabled;
+        public T messageTimestampEnabled(boolean messageTimestampEnabled) {
+            this.messageTimestampEnabled = messageTimestampEnabled;
+            return (T) this;
+        }
+
         /**
          * Specifies whether to inhibit the delivery of messages published by
          * its own connection. The option is a boolean type.
          */
-        private Boolean pubSubNoLocal;
+        public T pubSubNoLocal(boolean pubSubNoLocal) {
+            this.pubSubNoLocal = pubSubNoLocal;
+            return (T) this;
+        }
+
         /**
          * The timeout for receiving messages (in milliseconds). The option is a
          * long type.
          */
-        private Long receiveTimeout;
+        public T receiveTimeout(long receiveTimeout) {
+            this.receiveTimeout = receiveTimeout;
+            return (T) this;
+        }
+
         /**
          * Specifies the interval between recovery attempts, i.e. when a
          * connection is being refreshed, in milliseconds. The default is 5000
          * ms, that is, 5 seconds. The option is a long type.
          */
-        private Long recoveryInterval;
+        public T recoveryInterval(long recoveryInterval) {
+            this.recoveryInterval = recoveryInterval;
+            return (T) this;
+        }
+
         /**
          * Configures how often Camel should check for timed out Exchanges when
          * doing request/reply over JMS. By default Camel checks once per
@@ -267,13 +436,22 @@ public class ActiveMQEndpoint {
          * can lower this interval, to check more frequently. The timeout is
          * determined by the option requestTimeout. The option is a long type.
          */
-        private Long requestTimeoutCheckerInterval;
+        public T requestTimeoutCheckerInterval(
+                long requestTimeoutCheckerInterval) {
+            this.requestTimeoutCheckerInterval = requestTimeoutCheckerInterval;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
+
         /**
          * If enabled and you are using Request Reply messaging (InOut) and an
          * Exchange failed on the consumer side, then the caused Exception will
@@ -287,7 +465,11 @@ public class ActiveMQEndpoint {
          * org.apache.camel.RuntimeCamelException when returned to the producer.
          * The option is a boolean type.
          */
-        private Boolean transferException;
+        public T transferException(boolean transferException) {
+            this.transferException = transferException;
+            return (T) this;
+        }
+
         /**
          * You can transfer the exchange over the wire instead of just the body
          * and headers. The following fields are transferred: In body, Out body,
@@ -298,7 +480,11 @@ public class ActiveMQEndpoint {
          * and consumer side, so Camel knows the payloads is an Exchange and not
          * a regular payload. The option is a boolean type.
          */
-        private Boolean transferExchange;
+        public T transferExchange(boolean transferExchange) {
+            this.transferExchange = transferExchange;
+            return (T) this;
+        }
+
         /**
          * If enabled and you are using Request Reply messaging (InOut) and an
          * Exchange failed with a SOAP fault (not exception) on the consumer
@@ -310,62 +496,108 @@ public class ActiveMQEndpoint {
          * this when using Camel components that support faults such as SOAP
          * based such as cxf or spring-ws. The option is a boolean type.
          */
-        private Boolean transferFault;
+        public T transferFault(boolean transferFault) {
+            this.transferFault = transferFault;
+            return (T) this;
+        }
+
         /**
          * Specifies whether JMSMessageID should always be used as
          * JMSCorrelationID for InOut messages. The option is a boolean type.
          */
-        private Boolean useMessageIDAsCorrelationID;
+        public T useMessageIDAsCorrelationID(boolean useMessageIDAsCorrelationID) {
+            this.useMessageIDAsCorrelationID = useMessageIDAsCorrelationID;
+            return (T) this;
+        }
+
         /**
          * Number of times to wait for provisional correlation id to be updated
          * to the actual correlation id when doing request/reply over JMS and
          * when the option useMessageIDAsCorrelationID is enabled. The option is
          * a int type.
          */
-        private Integer waitForProvisionCorrelationToBeUpdatedCounter;
+        public T waitForProvisionCorrelationToBeUpdatedCounter(
+                int waitForProvisionCorrelationToBeUpdatedCounter) {
+            this.waitForProvisionCorrelationToBeUpdatedCounter = waitForProvisionCorrelationToBeUpdatedCounter;
+            return (T) this;
+        }
+
         /**
          * Interval in millis to sleep each time while waiting for provisional
          * correlation id to be updated. The option is a long type.
          */
-        private Long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime;
+        public T waitForProvisionCorrelationToBeUpdatedThreadSleepingTime(
+                long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime) {
+            this.waitForProvisionCorrelationToBeUpdatedThreadSleepingTime = waitForProvisionCorrelationToBeUpdatedThreadSleepingTime;
+            return (T) this;
+        }
+
         /**
          * Password to use with the ConnectionFactory. You can also configure
          * username/password directly on the ConnectionFactory. The option is a
          * java.lang.String type.
          */
-        private String password;
+        public T password(String password) {
+            this.password = password;
+            return (T) this;
+        }
+
         /**
          * Username to use with the ConnectionFactory. You can also configure
          * username/password directly on the ConnectionFactory. The option is a
          * java.lang.String type.
          */
-        private String username;
+        public T username(String username) {
+            this.username = username;
+            return (T) this;
+        }
+
         /**
          * Specifies whether to use transacted mode. The option is a boolean
          * type.
          */
-        private Boolean transacted;
+        public T transacted(boolean transacted) {
+            this.transacted = transacted;
+            return (T) this;
+        }
+
         /**
          * If true, Camel will create a JmsTransactionManager, if there is no
          * transactionManager injected when option transacted=true. The option
          * is a boolean type.
          */
-        private Boolean lazyCreateTransactionManager;
+        public T lazyCreateTransactionManager(
+                boolean lazyCreateTransactionManager) {
+            this.lazyCreateTransactionManager = lazyCreateTransactionManager;
+            return (T) this;
+        }
+
         /**
          * The Spring transaction manager to use. The option is a
          * org.springframework.transaction.PlatformTransactionManager type.
          */
-        private Object transactionManager;
+        public T transactionManager(Object transactionManager) {
+            this.transactionManager = transactionManager;
+            return (T) this;
+        }
+
         /**
          * The name of the transaction to use. The option is a java.lang.String
          * type.
          */
-        private String transactionName;
+        public T transactionName(String transactionName) {
+            this.transactionName = transactionName;
+            return (T) this;
+        }
+
         /**
          * The timeout value of the transaction (in seconds), if using
          * transacted mode. The option is a int type.
          */
-        private Integer transactionTimeout;
+        public T transactionTimeout(int transactionTimeout) {
+            this.transactionTimeout = transactionTimeout;
+            return (T) this;
+        }
 
         public String getDestinationType() {
             return destinationType;
@@ -735,13 +967,47 @@ public class ActiveMQEndpoint {
         }
     }
 
-    public static class ActiveMQConsumer extends ActiveMQCommon {
+    public static class ActiveMQConsumer
+            extends
+                ActiveMQCommon<ActiveMQConsumer> {
+        private String acknowledgementModeName;
+        private Boolean asyncConsumer;
+        private Boolean autoStartup;
+        private Boolean bridgeErrorHandler;
+        private Integer cacheLevel;
+        private String cacheLevelName;
+        private Integer concurrentConsumers;
+        private Integer maxConcurrentConsumers;
+        private String replyTo;
+        private Boolean replyToDeliveryPersistent;
+        private String selector;
+        private Boolean subscriptionDurable;
+        private String subscriptionName;
+        private Boolean subscriptionShared;
+        private Boolean acceptMessagesWhileStopping;
+        private Boolean allowReplyManagerQuickStop;
+        private ConsumerType consumerType;
+        private DefaultTaskExecutorType defaultTaskExecutorType;
+        private Boolean eagerLoadingOfProperties;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+        private Boolean exposeListenerSession;
+        private Boolean replyToSameDestinationAllowed;
+        private Object taskExecutor;
+        private LoggingLevel errorHandlerLoggingLevel;
+        private Boolean errorHandlerLogStackTrace;
+
         /**
          * The JMS acknowledgement name, which is one of: SESSION_TRANSACTED,
          * CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. The option
          * is a java.lang.String type.
          */
-        private String acknowledgementModeName;
+        public ActiveMQConsumer acknowledgementModeName(
+                String acknowledgementModeName) {
+            this.acknowledgementModeName = acknowledgementModeName;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Whether the JmsConsumer processes the Exchange asynchronously. If
          * enabled then the JmsConsumer may pickup the next message from the JMS
@@ -754,12 +1020,20 @@ public class ActiveMQEndpoint {
          * transaction must be executed synchronously (Camel 3.0 may support
          * async transactions). The option is a boolean type.
          */
-        private Boolean asyncConsumer;
+        public ActiveMQConsumer asyncConsumer(boolean asyncConsumer) {
+            this.asyncConsumer = asyncConsumer;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Specifies whether the consumer container should auto-startup. The
          * option is a boolean type.
          */
-        private Boolean autoStartup;
+        public ActiveMQConsumer autoStartup(boolean autoStartup) {
+            this.autoStartup = autoStartup;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -769,12 +1043,20 @@ public class ActiveMQEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public ActiveMQConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Sets the cache level by ID for the underlying JMS resources. See
          * cacheLevelName option for more details. The option is a int type.
          */
-        private Integer cacheLevel;
+        public ActiveMQConsumer cacheLevel(int cacheLevel) {
+            this.cacheLevel = cacheLevel;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Sets the cache level by name for the underlying JMS resources.
          * Possible values are: CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER,
@@ -782,7 +1064,11 @@ public class ActiveMQEndpoint {
          * the Spring documentation and Transactions Cache Levels for more
          * information. The option is a java.lang.String type.
          */
-        private String cacheLevelName;
+        public ActiveMQConsumer cacheLevelName(String cacheLevelName) {
+            this.cacheLevelName = cacheLevelName;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Specifies the default number of concurrent consumers when consuming
          * from JMS (not for request/reply over JMS). See also the
@@ -791,7 +1077,11 @@ public class ActiveMQEndpoint {
          * replyToConcurrentConsumers is used to control number of concurrent
          * consumers on the reply message listener. The option is a int type.
          */
-        private Integer concurrentConsumers;
+        public ActiveMQConsumer concurrentConsumers(int concurrentConsumers) {
+            this.concurrentConsumers = concurrentConsumers;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Specifies the maximum number of concurrent consumers when consuming
          * from JMS (not for request/reply over JMS). See also the
@@ -800,22 +1090,40 @@ public class ActiveMQEndpoint {
          * replyToMaxConcurrentConsumers is used to control number of concurrent
          * consumers on the reply message listener. The option is a int type.
          */
-        private Integer maxConcurrentConsumers;
+        public ActiveMQConsumer maxConcurrentConsumers(
+                int maxConcurrentConsumers) {
+            this.maxConcurrentConsumers = maxConcurrentConsumers;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Provides an explicit ReplyTo destination, which overrides any
          * incoming value of Message.getJMSReplyTo(). The option is a
          * java.lang.String type.
          */
-        private String replyTo;
+        public ActiveMQConsumer replyTo(String replyTo) {
+            this.replyTo = replyTo;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Specifies whether to use persistent delivery by default for replies.
          * The option is a boolean type.
          */
-        private Boolean replyToDeliveryPersistent;
+        public ActiveMQConsumer replyToDeliveryPersistent(
+                boolean replyToDeliveryPersistent) {
+            this.replyToDeliveryPersistent = replyToDeliveryPersistent;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Sets the JMS selector to use. The option is a java.lang.String type.
          */
-        private String selector;
+        public ActiveMQConsumer selector(String selector) {
+            this.selector = selector;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Set whether to make the subscription durable. The durable
          * subscription name to be used can be specified through the
@@ -826,7 +1134,11 @@ public class ActiveMQEndpoint {
          * a topic (pub-sub domain), therefore this method switches the
          * pubSubDomain flag as well. The option is a boolean type.
          */
-        private Boolean subscriptionDurable;
+        public ActiveMQConsumer subscriptionDurable(boolean subscriptionDurable) {
+            this.subscriptionDurable = subscriptionDurable;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Set the name of a subscription to create. To be applied in case of a
          * topic (pub-sub domain) with a shared or durable subscription. The
@@ -837,7 +1149,11 @@ public class ActiveMQEndpoint {
          * for a shared subscription (which requires JMS 2.0). The option is a
          * java.lang.String type.
          */
-        private String subscriptionName;
+        public ActiveMQConsumer subscriptionName(String subscriptionName) {
+            this.subscriptionName = subscriptionName;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Set whether to make the subscription shared. The shared subscription
          * name to be used can be specified through the subscriptionName
@@ -851,7 +1167,11 @@ public class ActiveMQEndpoint {
          * pubSubDomain flag as well. Requires a JMS 2.0 compatible message
          * broker. The option is a boolean type.
          */
-        private Boolean subscriptionShared;
+        public ActiveMQConsumer subscriptionShared(boolean subscriptionShared) {
+            this.subscriptionShared = subscriptionShared;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Specifies whether the consumer accept messages while it is stopping.
          * You may consider enabling this option, if you start and stop JMS
@@ -863,7 +1183,12 @@ public class ActiveMQEndpoint {
          * avoid this its recommended to enable this option. The option is a
          * boolean type.
          */
-        private Boolean acceptMessagesWhileStopping;
+        public ActiveMQConsumer acceptMessagesWhileStopping(
+                boolean acceptMessagesWhileStopping) {
+            this.acceptMessagesWhileStopping = acceptMessagesWhileStopping;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Whether the DefaultMessageListenerContainer used in the reply
          * managers for request-reply messaging allow the
@@ -874,7 +1199,12 @@ public class ActiveMQEndpoint {
          * but to enable for reply managers you must enable this flag. The
          * option is a boolean type.
          */
-        private Boolean allowReplyManagerQuickStop;
+        public ActiveMQConsumer allowReplyManagerQuickStop(
+                boolean allowReplyManagerQuickStop) {
+            this.allowReplyManagerQuickStop = allowReplyManagerQuickStop;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * The consumer type to use, which can be one of: Simple, Default, or
          * Custom. The consumer type determines which Spring JMS listener to
@@ -888,7 +1218,11 @@ public class ActiveMQEndpoint {
          * use. The option is a org.apache.camel.component.jms.ConsumerType
          * type.
          */
-        private ConsumerType consumerType;
+        public ActiveMQConsumer consumerType(ConsumerType consumerType) {
+            this.consumerType = consumerType;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Specifies what default TaskExecutor type to use in the
          * DefaultMessageListenerContainer, for both consumer endpoints and the
@@ -902,7 +1236,12 @@ public class ActiveMQEndpoint {
          * decreasing concurrent consumers. The option is a
          * org.apache.camel.component.jms.DefaultTaskExecutorType type.
          */
-        private DefaultTaskExecutorType defaultTaskExecutorType;
+        public ActiveMQConsumer defaultTaskExecutorType(
+                DefaultTaskExecutorType defaultTaskExecutorType) {
+            this.defaultTaskExecutorType = defaultTaskExecutorType;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Enables eager loading of JMS properties and payload as soon as a
          * message is loaded which generally is inefficient as the JMS
@@ -910,7 +1249,12 @@ public class ActiveMQEndpoint {
          * issues with the underlying JMS provider and the use of JMS
          * properties. The option is a boolean type.
          */
-        private Boolean eagerLoadingOfProperties;
+        public ActiveMQConsumer eagerLoadingOfProperties(
+                boolean eagerLoadingOfProperties) {
+            this.eagerLoadingOfProperties = eagerLoadingOfProperties;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -918,40 +1262,72 @@ public class ActiveMQEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public ActiveMQConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public ActiveMQConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Specifies whether the listener session should be exposed when
          * consuming messages. The option is a boolean type.
          */
-        private Boolean exposeListenerSession;
+        public ActiveMQConsumer exposeListenerSession(
+                boolean exposeListenerSession) {
+            this.exposeListenerSession = exposeListenerSession;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Whether a JMS consumer is allowed to send a reply message to the same
          * destination that the consumer is using to consume from. This prevents
          * an endless loop by consuming and sending back the same message to
          * itself. The option is a boolean type.
          */
-        private Boolean replyToSameDestinationAllowed;
+        public ActiveMQConsumer replyToSameDestinationAllowed(
+                boolean replyToSameDestinationAllowed) {
+            this.replyToSameDestinationAllowed = replyToSameDestinationAllowed;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Allows you to specify a custom task executor for consuming messages.
          * The option is a org.springframework.core.task.TaskExecutor type.
          */
-        private Object taskExecutor;
+        public ActiveMQConsumer taskExecutor(Object taskExecutor) {
+            this.taskExecutor = taskExecutor;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Allows to configure the default errorHandler logging level for
          * logging uncaught exceptions. The option is a
          * org.apache.camel.LoggingLevel type.
          */
-        private LoggingLevel errorHandlerLoggingLevel;
+        public ActiveMQConsumer errorHandlerLoggingLevel(
+                LoggingLevel errorHandlerLoggingLevel) {
+            this.errorHandlerLoggingLevel = errorHandlerLoggingLevel;
+            return (ActiveMQConsumer) this;
+        }
+
         /**
          * Allows to control whether stacktraces should be logged or not, by the
          * default errorHandler. The option is a boolean type.
          */
-        private Boolean errorHandlerLogStackTrace;
+        public ActiveMQConsumer errorHandlerLogStackTrace(
+                boolean errorHandlerLogStackTrace) {
+            this.errorHandlerLogStackTrace = errorHandlerLogStackTrace;
+            return (ActiveMQConsumer) this;
+        }
 
         public String getAcknowledgementModeName() {
             return acknowledgementModeName;
@@ -1169,18 +1545,52 @@ public class ActiveMQEndpoint {
         }
     }
 
-    public static class ActiveMQProducer extends ActiveMQCommon {
+    public static class ActiveMQProducer
+            extends
+                ActiveMQCommon<ActiveMQProducer> {
+        private Integer deliveryMode;
+        private Boolean deliveryPersistent;
+        private Boolean explicitQosEnabled;
+        private Boolean formatDateHeadersToIso8601;
+        private Boolean preserveMessageQos;
+        private Integer priority;
+        private Integer replyToConcurrentConsumers;
+        private Integer replyToMaxConcurrentConsumers;
+        private Integer replyToOnTimeoutMaxConcurrentConsumers;
+        private String replyToOverride;
+        private ReplyToType replyToType;
+        private Long requestTimeout;
+        private Long timeToLive;
+        private String allowAdditionalHeaders;
+        private Boolean allowNullBody;
+        private Boolean alwaysCopyMessage;
+        private String correlationProperty;
+        private Boolean disableTimeToLive;
+        private Boolean forceSendOriginalMessage;
+        private Boolean includeSentJMSMessageID;
+        private String replyToCacheLevelName;
+        private String replyToDestinationSelectorName;
+        private Boolean streamMessageTypeEnabled;
+
         /**
          * Specifies the delivery mode to be used. Possibles values are those
          * defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT
          * = 2. The option is a java.lang.Integer type.
          */
-        private Integer deliveryMode;
+        public ActiveMQProducer deliveryMode(Integer deliveryMode) {
+            this.deliveryMode = deliveryMode;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Specifies whether persistent delivery is used by default. The option
          * is a boolean type.
          */
-        private Boolean deliveryPersistent;
+        public ActiveMQProducer deliveryPersistent(boolean deliveryPersistent) {
+            this.deliveryPersistent = deliveryPersistent;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Set if the deliveryMode, priority or timeToLive qualities of service
          * should be used when sending messages. This option is based on
@@ -1190,12 +1600,21 @@ public class ActiveMQEndpoint {
          * reading QoS properties exclusively from the Camel In message headers.
          * The option is a java.lang.Boolean type.
          */
-        private Boolean explicitQosEnabled;
+        public ActiveMQProducer explicitQosEnabled(Boolean explicitQosEnabled) {
+            this.explicitQosEnabled = explicitQosEnabled;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Sets whether date headers should be formatted according to the ISO
          * 8601 standard. The option is a boolean type.
          */
-        private Boolean formatDateHeadersToIso8601;
+        public ActiveMQProducer formatDateHeadersToIso8601(
+                boolean formatDateHeadersToIso8601) {
+            this.formatDateHeadersToIso8601 = formatDateHeadersToIso8601;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Set to true, if you want to send message using the QoS settings
          * specified on the message, instead of the QoS settings on the JMS
@@ -1207,39 +1626,66 @@ public class ActiveMQEndpoint {
          * by contrast, will only use options set on the endpoint, and not
          * values from the message header. The option is a boolean type.
          */
-        private Boolean preserveMessageQos;
+        public ActiveMQProducer preserveMessageQos(boolean preserveMessageQos) {
+            this.preserveMessageQos = preserveMessageQos;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Values greater than 1 specify the message priority when sending
          * (where 0 is the lowest priority and 9 is the highest). The
          * explicitQosEnabled option must also be enabled in order for this
          * option to have any effect. The option is a int type.
          */
-        private Integer priority;
+        public ActiveMQProducer priority(int priority) {
+            this.priority = priority;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Specifies the default number of concurrent consumers when doing
          * request/reply over JMS. See also the maxMessagesPerTask option to
          * control dynamic scaling up/down of threads. The option is a int type.
          */
-        private Integer replyToConcurrentConsumers;
+        public ActiveMQProducer replyToConcurrentConsumers(
+                int replyToConcurrentConsumers) {
+            this.replyToConcurrentConsumers = replyToConcurrentConsumers;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Specifies the maximum number of concurrent consumers when using
          * request/reply over JMS. See also the maxMessagesPerTask option to
          * control dynamic scaling up/down of threads. The option is a int type.
          */
-        private Integer replyToMaxConcurrentConsumers;
+        public ActiveMQProducer replyToMaxConcurrentConsumers(
+                int replyToMaxConcurrentConsumers) {
+            this.replyToMaxConcurrentConsumers = replyToMaxConcurrentConsumers;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Specifies the maximum number of concurrent consumers for continue
          * routing when timeout occurred when using request/reply over JMS. The
          * option is a int type.
          */
-        private Integer replyToOnTimeoutMaxConcurrentConsumers;
+        public ActiveMQProducer replyToOnTimeoutMaxConcurrentConsumers(
+                int replyToOnTimeoutMaxConcurrentConsumers) {
+            this.replyToOnTimeoutMaxConcurrentConsumers = replyToOnTimeoutMaxConcurrentConsumers;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Provides an explicit ReplyTo destination in the JMS message, which
          * overrides the setting of replyTo. It is useful if you want to forward
          * the message to a remote Queue and receive the reply message from the
          * ReplyTo destination. The option is a java.lang.String type.
          */
-        private String replyToOverride;
+        public ActiveMQProducer replyToOverride(String replyToOverride) {
+            this.replyToOverride = replyToOverride;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Allows for explicitly specifying which kind of strategy to use for
          * replyTo queues when doing request/reply over JMS. Possible values
@@ -1252,7 +1698,11 @@ public class ActiveMQEndpoint {
          * lower performance than its alternatives Temporary and Exclusive. The
          * option is a org.apache.camel.component.jms.ReplyToType type.
          */
-        private ReplyToType replyToType;
+        public ActiveMQProducer replyToType(ReplyToType replyToType) {
+            this.replyToType = replyToType;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * The timeout for waiting for a reply when using the InOut Exchange
          * Pattern (in milliseconds). The default is 20 seconds. You can include
@@ -1261,12 +1711,20 @@ public class ActiveMQEndpoint {
          * timeout values. See also the requestTimeoutCheckerInterval option.
          * The option is a long type.
          */
-        private Long requestTimeout;
+        public ActiveMQProducer requestTimeout(long requestTimeout) {
+            this.requestTimeout = requestTimeout;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * When sending messages, specifies the time-to-live of the message (in
          * milliseconds). The option is a long type.
          */
-        private Long timeToLive;
+        public ActiveMQProducer timeToLive(long timeToLive) {
+            this.timeToLive = timeToLive;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * This option is used to allow additional headers which may have values
          * that are invalid according to JMS specification. For example some
@@ -1276,13 +1734,22 @@ public class ActiveMQEndpoint {
          * use as suffix for wildcard matching. The option is a java.lang.String
          * type.
          */
-        private String allowAdditionalHeaders;
+        public ActiveMQProducer allowAdditionalHeaders(
+                String allowAdditionalHeaders) {
+            this.allowAdditionalHeaders = allowAdditionalHeaders;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Whether to allow sending messages with no body. If this option is
          * false and the message body is null, then an JMSException is thrown.
          * The option is a boolean type.
          */
-        private Boolean allowNullBody;
+        public ActiveMQProducer allowNullBody(boolean allowNullBody) {
+            this.allowNullBody = allowNullBody;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * If true, Camel will always make a JMS message copy of the message
          * when it is passed to the producer for sending. Copying the message is
@@ -1291,7 +1758,11 @@ public class ActiveMQEndpoint {
          * the alwaysCopyMessage option to true, if a
          * replyToDestinationSelectorName is set). The option is a boolean type.
          */
-        private Boolean alwaysCopyMessage;
+        public ActiveMQProducer alwaysCopyMessage(boolean alwaysCopyMessage) {
+            this.alwaysCopyMessage = alwaysCopyMessage;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Use this JMS property to correlate messages in InOut exchange pattern
          * (request-reply) instead of JMSCorrelationID property. This allows you
@@ -1301,7 +1772,11 @@ public class ActiveMQEndpoint {
          * generated if not supplied in the header of the message under the same
          * name. The option is a java.lang.String type.
          */
-        private String correlationProperty;
+        public ActiveMQProducer correlationProperty(String correlationProperty) {
+            this.correlationProperty = correlationProperty;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Use this option to force disabling time to live. For example when you
          * do request/reply over JMS, then Camel will by default use the
@@ -1313,14 +1788,23 @@ public class ActiveMQEndpoint {
          * on the receiver system. See below in section About time to live for
          * more details. The option is a boolean type.
          */
-        private Boolean disableTimeToLive;
+        public ActiveMQProducer disableTimeToLive(boolean disableTimeToLive) {
+            this.disableTimeToLive = disableTimeToLive;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * When using mapJmsMessage=false Camel will create a new JMS message to
          * send to a new JMS destination if you touch the headers (get or set)
          * during the route. Set this option to true to force Camel to send the
          * original JMS message that was received. The option is a boolean type.
          */
-        private Boolean forceSendOriginalMessage;
+        public ActiveMQProducer forceSendOriginalMessage(
+                boolean forceSendOriginalMessage) {
+            this.forceSendOriginalMessage = forceSendOriginalMessage;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Only applicable when sending to JMS destination using InOnly (eg fire
          * and forget). Enabling this option will enrich the Camel Exchange with
@@ -1328,7 +1812,12 @@ public class ActiveMQEndpoint {
          * message was sent to the JMS destination. The option is a boolean
          * type.
          */
-        private Boolean includeSentJMSMessageID;
+        public ActiveMQProducer includeSentJMSMessageID(
+                boolean includeSentJMSMessageID) {
+            this.includeSentJMSMessageID = includeSentJMSMessageID;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Sets the cache level by name for the reply consumer when doing
          * request/reply over JMS. This option only applies when using fixed
@@ -1341,14 +1830,24 @@ public class ActiveMQEndpoint {
          * value such as CACHE_CONSUMER or CACHE_SESSION. The option is a
          * java.lang.String type.
          */
-        private String replyToCacheLevelName;
+        public ActiveMQProducer replyToCacheLevelName(
+                String replyToCacheLevelName) {
+            this.replyToCacheLevelName = replyToCacheLevelName;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Sets the JMS Selector using the fixed name to be used so you can
          * filter out your own replies from the others when using a shared queue
          * (that is, if you are not using a temporary reply queue). The option
          * is a java.lang.String type.
          */
-        private String replyToDestinationSelectorName;
+        public ActiveMQProducer replyToDestinationSelectorName(
+                String replyToDestinationSelectorName) {
+            this.replyToDestinationSelectorName = replyToDestinationSelectorName;
+            return (ActiveMQProducer) this;
+        }
+
         /**
          * Sets whether StreamMessage type is enabled or not. Message payloads
          * of streaming kind such as files, InputStream, etc will either by sent
@@ -1359,7 +1858,11 @@ public class ActiveMQEndpoint {
          * chunk is then written to the StreamMessage until no more data. The
          * option is a boolean type.
          */
-        private Boolean streamMessageTypeEnabled;
+        public ActiveMQProducer streamMessageTypeEnabled(
+                boolean streamMessageTypeEnabled) {
+            this.streamMessageTypeEnabled = streamMessageTypeEnabled;
+            return (ActiveMQProducer) this;
+        }
 
         public Integer getDeliveryMode() {
             return deliveryMode;
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AhcEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AhcEndpoint.java
index 29c16dc..5c641d0 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AhcEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AhcEndpoint.java
@@ -30,37 +30,73 @@ import org.apache.camel.spi.HeaderFilterStrategy;
 public class AhcEndpoint {
 
 
-    public static class AhcCommon extends EndpointConfiguration {
+    public static class AhcCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private URI httpUri;
+        private Boolean bridgeEndpoint;
+        private Integer bufferSize;
+        private HeaderFilterStrategy headerFilterStrategy;
+        private Boolean throwExceptionOnFailure;
+        private Boolean transferException;
+        private Boolean basicPropertyBinding;
+        private Object binding;
+        private Object clientConfig;
+        private Map<String, Object> clientConfigOptions;
+        private Boolean synchronous;
+        private Map<String, Object> clientConfigRealmOptions;
+        private Object sslContextParameters;
+
         /**
          * The URI to use such as http://hostname:port/path. The option is a
          * java.net.URI type.
          */
-        private URI httpUri;
+        public T httpUri(URI httpUri) {
+            this.httpUri = httpUri;
+            return (T) this;
+        }
+
         /**
          * If the option is true, then the Exchange.HTTP_URI header is ignored,
          * and use the endpoint's URI for request. You may also set the
          * throwExceptionOnFailure to be false to let the AhcProducer send all
          * the fault response back. The option is a boolean type.
          */
-        private Boolean bridgeEndpoint;
+        public T bridgeEndpoint(boolean bridgeEndpoint) {
+            this.bridgeEndpoint = bridgeEndpoint;
+            return (T) this;
+        }
+
         /**
          * The initial in-memory buffer size used when transferring data between
          * Camel and AHC Client. The option is a int type.
          */
-        private Integer bufferSize;
+        public T bufferSize(int bufferSize) {
+            this.bufferSize = bufferSize;
+            return (T) this;
+        }
+
         /**
          * To use a custom HeaderFilterStrategy to filter header to and from
          * Camel message. The option is a
          * org.apache.camel.spi.HeaderFilterStrategy type.
          */
-        private HeaderFilterStrategy headerFilterStrategy;
+        public T headerFilterStrategy(HeaderFilterStrategy headerFilterStrategy) {
+            this.headerFilterStrategy = headerFilterStrategy;
+            return (T) this;
+        }
+
         /**
          * Option to disable throwing the AhcOperationFailedException in case of
          * failed responses from the remote server. This allows you to get all
          * responses regardless of the HTTP status code. The option is a boolean
          * type.
          */
-        private Boolean throwExceptionOnFailure;
+        public T throwExceptionOnFailure(boolean throwExceptionOnFailure) {
+            this.throwExceptionOnFailure = throwExceptionOnFailure;
+            return (T) this;
+        }
+
         /**
          * If enabled and an Exchange failed processing on the consumer side,
          * and if the caused Exception was send back serialized in the response
@@ -73,43 +109,72 @@ public class AhcEndpoint {
          * to Java and that can be a potential security risk. The option is a
          * boolean type.
          */
-        private Boolean transferException;
+        public T transferException(boolean transferException) {
+            this.transferException = transferException;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * To use a custom AhcBinding which allows to control how to bind
          * between AHC and Camel. The option is a
          * org.apache.camel.component.ahc.AhcBinding type.
          */
-        private Object binding;
+        public T binding(Object binding) {
+            this.binding = binding;
+            return (T) this;
+        }
+
         /**
          * To configure the AsyncHttpClient to use a custom
          * com.ning.http.client.AsyncHttpClientConfig instance. The option is a
          * org.asynchttpclient.AsyncHttpClientConfig type.
          */
-        private Object clientConfig;
+        public T clientConfig(Object clientConfig) {
+            this.clientConfig = clientConfig;
+            return (T) this;
+        }
+
         /**
          * To configure the AsyncHttpClientConfig using the key/values from the
          * Map. The option is a java.util.Map<java.lang.String,java.lang.Object>
          * type.
          */
-        private Map<String, Object> clientConfigOptions;
+        public T clientConfigOptions(Map<String, Object> clientConfigOptions) {
+            this.clientConfigOptions = clientConfigOptions;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
+
         /**
          * To configure the AsyncHttpClientConfig Realm using the key/values
          * from the Map. The option is a
          * java.util.Map<java.lang.String,java.lang.Object> type.
          */
-        private Map<String, Object> clientConfigRealmOptions;
+        public T clientConfigRealmOptions(
+                Map<String, Object> clientConfigRealmOptions) {
+            this.clientConfigRealmOptions = clientConfigRealmOptions;
+            return (T) this;
+        }
+
         /**
          * Reference to a org.apache.camel.support.jsse.SSLContextParameters in
          * the Registry. This reference overrides any configured
@@ -119,7 +184,10 @@ public class AhcEndpoint {
          * clientConfig option at the endpoint or component level. The option is
          * a org.apache.camel.support.jsse.SSLContextParameters type.
          */
-        private Object sslContextParameters;
+        public T sslContextParameters(Object sslContextParameters) {
+            this.sslContextParameters = sslContextParameters;
+            return (T) this;
+        }
 
         public URI getHttpUri() {
             return httpUri;
@@ -229,21 +297,31 @@ public class AhcEndpoint {
         }
     }
 
-    public static class AhcConsumer extends AhcCommon {
+    public static class AhcConsumer extends AhcCommon<AhcConsumer> {
     }
 
-    public static class AhcProducer extends AhcCommon {
+    public static class AhcProducer extends AhcCommon<AhcProducer> {
+        private Boolean connectionClose;
+        private Object cookieHandler;
+
         /**
          * Define if the Connection Close header has to be added to HTTP
          * Request. This parameter is false by default. The option is a boolean
          * type.
          */
-        private Boolean connectionClose;
+        public AhcProducer connectionClose(boolean connectionClose) {
+            this.connectionClose = connectionClose;
+            return (AhcProducer) this;
+        }
+
         /**
          * Configure a cookie handler to maintain a HTTP session. The option is
          * a org.apache.camel.http.common.cookie.CookieHandler type.
          */
-        private Object cookieHandler;
+        public AhcProducer cookieHandler(Object cookieHandler) {
+            this.cookieHandler = cookieHandler;
+            return (AhcProducer) this;
+        }
 
         public Boolean getConnectionClose() {
             return connectionClose;
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ApnsEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ApnsEndpoint.java
index b999659..1cb99cc 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ApnsEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ApnsEndpoint.java
@@ -35,29 +35,51 @@ import org.apache.camel.spi.ScheduledPollConsumerScheduler;
 public class ApnsEndpoint {
 
 
-    public static class ApnsCommon extends EndpointConfiguration {
+    public static class ApnsCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String name;
+        private String tokens;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * Name of the endpoint. The option is a java.lang.String type.
          */
-        private String name;
+        public T name(String name) {
+            this.name = name;
+            return (T) this;
+        }
+
         /**
          * Configure this property in case you want to statically declare tokens
          * related to devices you want to notify. Tokens are separated by comma.
          * The option is a java.lang.String type.
          */
-        private String tokens;
+        public T tokens(String tokens) {
+            this.tokens = tokens;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getName() {
             return name;
@@ -92,7 +114,26 @@ public class ApnsEndpoint {
         }
     }
 
-    public static class ApnsConsumer extends ApnsCommon {
+    public static class ApnsConsumer extends ApnsCommon<ApnsConsumer> {
+        private Boolean bridgeErrorHandler;
+        private Boolean sendEmptyMessageWhenIdle;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+        private PollingConsumerPollStrategy pollStrategy;
+        private Integer backoffErrorThreshold;
+        private Integer backoffIdleThreshold;
+        private Integer backoffMultiplier;
+        private Long delay;
+        private Boolean greedy;
+        private Long initialDelay;
+        private LoggingLevel runLoggingLevel;
+        private ScheduledExecutorService scheduledExecutorService;
+        private ScheduledPollConsumerScheduler scheduler;
+        private Map<String, Object> schedulerProperties;
+        private Boolean startScheduler;
+        private TimeUnit timeUnit;
+        private Boolean useFixedDelay;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -102,13 +143,22 @@ public class ApnsEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public ApnsConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * If the polling consumer did not poll any files, you can enable this
          * option to send an empty message (no body) instead. The option is a
          * boolean type.
          */
-        private Boolean sendEmptyMessageWhenIdle;
+        public ApnsConsumer sendEmptyMessageWhenIdle(
+                boolean sendEmptyMessageWhenIdle) {
+            this.sendEmptyMessageWhenIdle = sendEmptyMessageWhenIdle;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -116,12 +166,20 @@ public class ApnsEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public ApnsConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public ApnsConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing
          * you to provide your custom implementation to control error handling
@@ -129,18 +187,31 @@ public class ApnsEndpoint {
          * been created and being routed in Camel. The option is a
          * org.apache.camel.spi.PollingConsumerPollStrategy type.
          */
-        private PollingConsumerPollStrategy pollStrategy;
+        public ApnsConsumer pollStrategy(
+                PollingConsumerPollStrategy pollStrategy) {
+            this.pollStrategy = pollStrategy;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * The number of subsequent error polls (failed due some error) that
          * should happen before the backoffMultipler should kick-in. The option
          * is a int type.
          */
-        private Integer backoffErrorThreshold;
+        public ApnsConsumer backoffErrorThreshold(int backoffErrorThreshold) {
+            this.backoffErrorThreshold = backoffErrorThreshold;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * The number of subsequent idle polls that should happen before the
          * backoffMultipler should kick-in. The option is a int type.
          */
-        private Integer backoffIdleThreshold;
+        public ApnsConsumer backoffIdleThreshold(int backoffIdleThreshold) {
+            this.backoffIdleThreshold = backoffIdleThreshold;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * To let the scheduled polling consumer backoff if there has been a
          * number of subsequent idles/errors in a row. The multiplier is then
@@ -149,66 +220,111 @@ public class ApnsEndpoint {
          * backoffIdleThreshold and/or backoffErrorThreshold must also be
          * configured. The option is a int type.
          */
-        private Integer backoffMultiplier;
+        public ApnsConsumer backoffMultiplier(int backoffMultiplier) {
+            this.backoffMultiplier = backoffMultiplier;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * Milliseconds before the next poll. You can also specify time values
          * using units, such as 60s (60 seconds), 5m30s (5 minutes and 30
          * seconds), and 1h (1 hour). The option is a long type.
          */
-        private Long delay;
+        public ApnsConsumer delay(long delay) {
+            this.delay = delay;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * If greedy is enabled, then the ScheduledPollConsumer will run
          * immediately again, if the previous run polled 1 or more messages. The
          * option is a boolean type.
          */
-        private Boolean greedy;
+        public ApnsConsumer greedy(boolean greedy) {
+            this.greedy = greedy;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * Milliseconds before the first poll starts. You can also specify time
          * values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30
          * seconds), and 1h (1 hour). The option is a long type.
          */
-        private Long initialDelay;
+        public ApnsConsumer initialDelay(long initialDelay) {
+            this.initialDelay = initialDelay;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * The consumer logs a start/complete log line when it polls. This
          * option allows you to configure the logging level for that. The option
          * is a org.apache.camel.LoggingLevel type.
          */
-        private LoggingLevel runLoggingLevel;
+        public ApnsConsumer runLoggingLevel(LoggingLevel runLoggingLevel) {
+            this.runLoggingLevel = runLoggingLevel;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * Allows for configuring a custom/shared thread pool to use for the
          * consumer. By default each consumer has its own single threaded thread
          * pool. The option is a java.util.concurrent.ScheduledExecutorService
          * type.
          */
-        private ScheduledExecutorService scheduledExecutorService;
+        public ApnsConsumer scheduledExecutorService(
+                ScheduledExecutorService scheduledExecutorService) {
+            this.scheduledExecutorService = scheduledExecutorService;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * To use a cron scheduler from either camel-spring or camel-quartz2
          * component. The option is a
          * org.apache.camel.spi.ScheduledPollConsumerScheduler type.
          */
-        private ScheduledPollConsumerScheduler scheduler;
+        public ApnsConsumer scheduler(ScheduledPollConsumerScheduler scheduler) {
+            this.scheduler = scheduler;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * To configure additional properties when using a custom scheduler or
          * any of the Quartz2, Spring based scheduler. The option is a
          * java.util.Map<java.lang.String,java.lang.Object> type.
          */
-        private Map<String, Object> schedulerProperties;
+        public ApnsConsumer schedulerProperties(
+                Map<String, Object> schedulerProperties) {
+            this.schedulerProperties = schedulerProperties;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * Whether the scheduler should be auto started. The option is a boolean
          * type.
          */
-        private Boolean startScheduler;
+        public ApnsConsumer startScheduler(boolean startScheduler) {
+            this.startScheduler = startScheduler;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * Time unit for initialDelay and delay options. The option is a
          * java.util.concurrent.TimeUnit type.
          */
-        private TimeUnit timeUnit;
+        public ApnsConsumer timeUnit(TimeUnit timeUnit) {
+            this.timeUnit = timeUnit;
+            return (ApnsConsumer) this;
+        }
+
         /**
          * Controls if fixed delay or fixed rate is used. See
          * ScheduledExecutorService in JDK for details. The option is a boolean
          * type.
          */
-        private Boolean useFixedDelay;
+        public ApnsConsumer useFixedDelay(boolean useFixedDelay) {
+            this.useFixedDelay = useFixedDelay;
+            return (ApnsConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -357,6 +473,6 @@ public class ApnsEndpoint {
         }
     }
 
-    public static class ApnsProducer extends ApnsCommon {
+    public static class ApnsProducer extends ApnsCommon<ApnsProducer> {
     }
 }
\ No newline at end of file
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AsteriskEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AsteriskEndpoint.java
index 9f79080..527108f 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AsteriskEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AsteriskEndpoint.java
@@ -29,36 +29,68 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AsteriskEndpoint {
 
 
-    public static class AsteriskCommon extends EndpointConfiguration {
+    public static class AsteriskCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String name;
+        private String hostname;
+        private String password;
+        private String username;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * Logical name. The option is a java.lang.String type.
          */
-        private String name;
+        public T name(String name) {
+            this.name = name;
+            return (T) this;
+        }
+
         /**
          * The hostname of the asterisk server. The option is a java.lang.String
          * type.
          */
-        private String hostname;
+        public T hostname(String hostname) {
+            this.hostname = hostname;
+            return (T) this;
+        }
+
         /**
          * Login password. The option is a java.lang.String type.
          */
-        private String password;
+        public T password(String password) {
+            this.password = password;
+            return (T) this;
+        }
+
         /**
          * Login username. The option is a java.lang.String type.
          */
-        private String username;
+        public T username(String username) {
+            this.username = username;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getName() {
             return name;
@@ -109,7 +141,13 @@ public class AsteriskEndpoint {
         }
     }
 
-    public static class AsteriskConsumer extends AsteriskCommon {
+    public static class AsteriskConsumer
+            extends
+                AsteriskCommon<AsteriskConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -119,7 +157,11 @@ public class AsteriskEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public AsteriskConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (AsteriskConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -127,12 +169,20 @@ public class AsteriskEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public AsteriskConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (AsteriskConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public AsteriskConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (AsteriskConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -159,13 +209,20 @@ public class AsteriskEndpoint {
         }
     }
 
-    public static class AsteriskProducer extends AsteriskCommon {
+    public static class AsteriskProducer
+            extends
+                AsteriskCommon<AsteriskProducer> {
+        private AsteriskAction action;
+
         /**
          * What action to perform such as getting queue status, sip peers or
          * extension state. The option is a
          * org.apache.camel.component.asterisk.AsteriskAction type.
          */
-        private AsteriskAction action;
+        public AsteriskProducer action(AsteriskAction action) {
+            this.action = action;
+            return (AsteriskProducer) this;
+        }
 
         public AsteriskAction getAction() {
             return action;
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtmosEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtmosEndpoint.java
index edadf97..76a8ae5 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtmosEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtmosEndpoint.java
@@ -29,61 +29,123 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtmosEndpoint {
 
 
-    public static class AtmosCommon extends EndpointConfiguration {
+    public static class AtmosCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String name;
+        private AtmosOperation operation;
+        private Boolean enableSslValidation;
+        private String fullTokenId;
+        private String localPath;
+        private String newRemotePath;
+        private String query;
+        private String remotePath;
+        private String secretKey;
+        private String uri;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * Atmos name. The option is a java.lang.String type.
          */
-        private String name;
+        public T name(String name) {
+            this.name = name;
+            return (T) this;
+        }
+
         /**
          * Operation to perform. The option is a
          * org.apache.camel.component.atmos.util.AtmosOperation type.
          */
-        private AtmosOperation operation;
+        public T operation(AtmosOperation operation) {
+            this.operation = operation;
+            return (T) this;
+        }
+
         /**
          * Atmos SSL validation. The option is a boolean type.
          */
-        private Boolean enableSslValidation;
+        public T enableSslValidation(boolean enableSslValidation) {
+            this.enableSslValidation = enableSslValidation;
+            return (T) this;
+        }
+
         /**
          * Atmos client fullTokenId. The option is a java.lang.String type.
          */
-        private String fullTokenId;
+        public T fullTokenId(String fullTokenId) {
+            this.fullTokenId = fullTokenId;
+            return (T) this;
+        }
+
         /**
          * Local path to put files. The option is a java.lang.String type.
          */
-        private String localPath;
+        public T localPath(String localPath) {
+            this.localPath = localPath;
+            return (T) this;
+        }
+
         /**
          * New path on Atmos when moving files. The option is a java.lang.String
          * type.
          */
-        private String newRemotePath;
+        public T newRemotePath(String newRemotePath) {
+            this.newRemotePath = newRemotePath;
+            return (T) this;
+        }
+
         /**
          * Search query on Atmos. The option is a java.lang.String type.
          */
-        private String query;
+        public T query(String query) {
+            this.query = query;
+            return (T) this;
+        }
+
         /**
          * Where to put files on Atmos. The option is a java.lang.String type.
          */
-        private String remotePath;
+        public T remotePath(String remotePath) {
+            this.remotePath = remotePath;
+            return (T) this;
+        }
+
         /**
          * Atmos shared secret. The option is a java.lang.String type.
          */
-        private String secretKey;
+        public T secretKey(String secretKey) {
+            this.secretKey = secretKey;
+            return (T) this;
+        }
+
         /**
          * Atomos server uri. The option is a java.lang.String type.
          */
-        private String uri;
+        public T uri(String uri) {
+            this.uri = uri;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getName() {
             return name;
@@ -182,7 +244,11 @@ public class AtmosEndpoint {
         }
     }
 
-    public static class AtmosConsumer extends AtmosCommon {
+    public static class AtmosConsumer extends AtmosCommon<AtmosConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -192,7 +258,11 @@ public class AtmosEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public AtmosConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (AtmosConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -200,12 +270,19 @@ public class AtmosEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public AtmosConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (AtmosConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public AtmosConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (AtmosConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -232,7 +309,7 @@ public class AtmosEndpoint {
         }
     }
 
-    public static class AtmosProducer extends AtmosCommon {
+    public static class AtmosProducer extends AtmosCommon<AtmosProducer> {
     }
 
     public static enum AtmosOperation {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomEndpoint.java
index d737a2c..7ebf88e 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomEndpoint.java
@@ -36,67 +36,124 @@ import org.apache.camel.spi.ScheduledPollConsumerScheduler;
 public class AtomEndpoint {
 
 
-    public static class AtomCommon extends EndpointConfiguration {
+    public static class AtomCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String feedUri;
+        private Boolean feedHeader;
+        private Boolean filter;
+        private Date lastUpdate;
+        private String password;
+        private Boolean sortEntries;
+        private Boolean splitEntries;
+        private Boolean throttleEntries;
+        private String username;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * The URI to the feed to poll. The option is a java.lang.String type.
          */
-        private String feedUri;
+        public T feedUri(String feedUri) {
+            this.feedUri = feedUri;
+            return (T) this;
+        }
+
         /**
          * Sets whether to add the feed object as a header. The option is a
          * boolean type.
          */
-        private Boolean feedHeader;
+        public T feedHeader(boolean feedHeader) {
+            this.feedHeader = feedHeader;
+            return (T) this;
+        }
+
         /**
          * Sets whether to use filtering or not of the entries. The option is a
          * boolean type.
          */
-        private Boolean filter;
+        public T filter(boolean filter) {
+            this.filter = filter;
+            return (T) this;
+        }
+
         /**
          * Sets the timestamp to be used for filtering entries from the atom
          * feeds. This options is only in conjunction with the splitEntries. The
          * option is a java.util.Date type.
          */
-        private Date lastUpdate;
+        public T lastUpdate(Date lastUpdate) {
+            this.lastUpdate = lastUpdate;
+            return (T) this;
+        }
+
         /**
          * Sets the password to be used for basic authentication when polling
          * from a HTTP feed. The option is a java.lang.String type.
          */
-        private String password;
+        public T password(String password) {
+            this.password = password;
+            return (T) this;
+        }
+
         /**
          * Sets whether to sort entries by published date. Only works when
          * splitEntries = true. The option is a boolean type.
          */
-        private Boolean sortEntries;
+        public T sortEntries(boolean sortEntries) {
+            this.sortEntries = sortEntries;
+            return (T) this;
+        }
+
         /**
          * Sets whether or not entries should be sent individually or whether
          * the entire feed should be sent as a single message. The option is a
          * boolean type.
          */
-        private Boolean splitEntries;
+        public T splitEntries(boolean splitEntries) {
+            this.splitEntries = splitEntries;
+            return (T) this;
+        }
+
         /**
          * Sets whether all entries identified in a single feed poll should be
          * delivered immediately. If true, only one entry is processed per
          * consumer.delay. Only applicable when splitEntries = true. The option
          * is a boolean type.
          */
-        private Boolean throttleEntries;
+        public T throttleEntries(boolean throttleEntries) {
+            this.throttleEntries = throttleEntries;
+            return (T) this;
+        }
+
         /**
          * Sets the username to be used for basic authentication when polling
          * from a HTTP feed. The option is a java.lang.String type.
          */
-        private String username;
+        public T username(String username) {
+            this.username = username;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getFeedUri() {
             return feedUri;
@@ -187,7 +244,26 @@ public class AtomEndpoint {
         }
     }
 
-    public static class AtomConsumer extends AtomCommon {
+    public static class AtomConsumer extends AtomCommon<AtomConsumer> {
+        private Boolean bridgeErrorHandler;
+        private Boolean sendEmptyMessageWhenIdle;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+        private PollingConsumerPollStrategy pollStrategy;
+        private Integer backoffErrorThreshold;
+        private Integer backoffIdleThreshold;
+        private Integer backoffMultiplier;
+        private Long delay;
+        private Boolean greedy;
+        private Long initialDelay;
+        private LoggingLevel runLoggingLevel;
+        private ScheduledExecutorService scheduledExecutorService;
+        private ScheduledPollConsumerScheduler scheduler;
+        private Map<String, Object> schedulerProperties;
+        private Boolean startScheduler;
+        private TimeUnit timeUnit;
+        private Boolean useFixedDelay;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -197,13 +273,22 @@ public class AtomEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public AtomConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (AtomConsumer) this;
+        }
+
         /**
          * If the polling consumer did not poll any files, you can enable this
          * option to send an empty message (no body) instead. The option is a
          * boolean type.
          */
-        private Boolean sendEmptyMessageWhenIdle;
+        public AtomConsumer sendEmptyMessageWhenIdle(
+                boolean sendEmptyMessageWhenIdle) {
+            this.sendEmptyMessageWhenIdle = sendEmptyMessageWhenIdle;
+            return (AtomConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -211,12 +296,20 @@ public class AtomEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public AtomConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (AtomConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public AtomConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (AtomConsumer) this;
+        }
+
         /**
          * A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing
          * you to provide your custom implementation to control error handling
@@ -224,18 +317,31 @@ public class AtomEndpoint {
          * been created and being routed in Camel. The option is a
          * org.apache.camel.spi.PollingConsumerPollStrategy type.
          */
-        private PollingConsumerPollStrategy pollStrategy;
+        public AtomConsumer pollStrategy(
+                PollingConsumerPollStrategy pollStrategy) {
+            this.pollStrategy = pollStrategy;
+            return (AtomConsumer) this;
+        }
+
         /**
          * The number of subsequent error polls (failed due some error) that
          * should happen before the backoffMultipler should kick-in. The option
          * is a int type.
          */
-        private Integer backoffErrorThreshold;
+        public AtomConsumer backoffErrorThreshold(int backoffErrorThreshold) {
+            this.backoffErrorThreshold = backoffErrorThreshold;
+            return (AtomConsumer) this;
+        }
+
         /**
          * The number of subsequent idle polls that should happen before the
          * backoffMultipler should kick-in. The option is a int type.
          */
-        private Integer backoffIdleThreshold;
+        public AtomConsumer backoffIdleThreshold(int backoffIdleThreshold) {
+            this.backoffIdleThreshold = backoffIdleThreshold;
+            return (AtomConsumer) this;
+        }
+
         /**
          * To let the scheduled polling consumer backoff if there has been a
          * number of subsequent idles/errors in a row. The multiplier is then
@@ -244,66 +350,111 @@ public class AtomEndpoint {
          * backoffIdleThreshold and/or backoffErrorThreshold must also be
          * configured. The option is a int type.
          */
-        private Integer backoffMultiplier;
+        public AtomConsumer backoffMultiplier(int backoffMultiplier) {
+            this.backoffMultiplier = backoffMultiplier;
+            return (AtomConsumer) this;
+        }
+
         /**
          * Milliseconds before the next poll. You can also specify time values
          * using units, such as 60s (60 seconds), 5m30s (5 minutes and 30
          * seconds), and 1h (1 hour). The option is a long type.
          */
-        private Long delay;
+        public AtomConsumer delay(long delay) {
+            this.delay = delay;
+            return (AtomConsumer) this;
+        }
+
         /**
          * If greedy is enabled, then the ScheduledPollConsumer will run
          * immediately again, if the previous run polled 1 or more messages. The
          * option is a boolean type.
          */
-        private Boolean greedy;
+        public AtomConsumer greedy(boolean greedy) {
+            this.greedy = greedy;
+            return (AtomConsumer) this;
+        }
+
         /**
          * Milliseconds before the first poll starts. You can also specify time
          * values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30
          * seconds), and 1h (1 hour). The option is a long type.
          */
-        private Long initialDelay;
+        public AtomConsumer initialDelay(long initialDelay) {
+            this.initialDelay = initialDelay;
+            return (AtomConsumer) this;
+        }
+
         /**
          * The consumer logs a start/complete log line when it polls. This
          * option allows you to configure the logging level for that. The option
          * is a org.apache.camel.LoggingLevel type.
          */
-        private LoggingLevel runLoggingLevel;
+        public AtomConsumer runLoggingLevel(LoggingLevel runLoggingLevel) {
+            this.runLoggingLevel = runLoggingLevel;
+            return (AtomConsumer) this;
+        }
+
         /**
          * Allows for configuring a custom/shared thread pool to use for the
          * consumer. By default each consumer has its own single threaded thread
          * pool. The option is a java.util.concurrent.ScheduledExecutorService
          * type.
          */
-        private ScheduledExecutorService scheduledExecutorService;
+        public AtomConsumer scheduledExecutorService(
+                ScheduledExecutorService scheduledExecutorService) {
+            this.scheduledExecutorService = scheduledExecutorService;
+            return (AtomConsumer) this;
+        }
+
         /**
          * To use a cron scheduler from either camel-spring or camel-quartz2
          * component. The option is a
          * org.apache.camel.spi.ScheduledPollConsumerScheduler type.
          */
-        private ScheduledPollConsumerScheduler scheduler;
+        public AtomConsumer scheduler(ScheduledPollConsumerScheduler scheduler) {
+            this.scheduler = scheduler;
+            return (AtomConsumer) this;
+        }
+
         /**
          * To configure additional properties when using a custom scheduler or
          * any of the Quartz2, Spring based scheduler. The option is a
          * java.util.Map<java.lang.String,java.lang.Object> type.
          */
-        private Map<String, Object> schedulerProperties;
+        public AtomConsumer schedulerProperties(
+                Map<String, Object> schedulerProperties) {
+            this.schedulerProperties = schedulerProperties;
+            return (AtomConsumer) this;
+        }
+
         /**
          * Whether the scheduler should be auto started. The option is a boolean
          * type.
          */
-        private Boolean startScheduler;
+        public AtomConsumer startScheduler(boolean startScheduler) {
+            this.startScheduler = startScheduler;
+            return (AtomConsumer) this;
+        }
+
         /**
          * Time unit for initialDelay and delay options. The option is a
          * java.util.concurrent.TimeUnit type.
          */
-        private TimeUnit timeUnit;
+        public AtomConsumer timeUnit(TimeUnit timeUnit) {
+            this.timeUnit = timeUnit;
+            return (AtomConsumer) this;
+        }
+
         /**
          * Controls if fixed delay or fixed rate is used. See
          * ScheduledExecutorService in JDK for details. The option is a boolean
          * type.
          */
-        private Boolean useFixedDelay;
+        public AtomConsumer useFixedDelay(boolean useFixedDelay) {
+            this.useFixedDelay = useFixedDelay;
+            return (AtomConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -452,6 +603,6 @@ public class AtomEndpoint {
         }
     }
 
-    public static class AtomProducer extends AtomCommon {
+    public static class AtomProducer extends AtomCommon<AtomProducer> {
     }
 }
\ No newline at end of file
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixMapEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixMapEndpoint.java
index ff8f65d..a1b3f5d 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixMapEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixMapEndpoint.java
@@ -32,92 +32,179 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtomixMapEndpoint {
 
 
-    public static class AtomixMapCommon extends EndpointConfiguration {
+    public static class AtomixMapCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String resourceName;
+        private Object atomix;
+        private String configurationUri;
+        private Object defaultAction;
+        private Object key;
+        private List<Object> nodes;
+        private String resultHeader;
+        private Class<Object> transport;
+        private Long ttl;
+        private Boolean basicPropertyBinding;
+        private Properties defaultResourceConfig;
+        private Properties defaultResourceOptions;
+        private Boolean ephemeral;
+        private ReadConsistency readConsistency;
+        private Map<String, Properties> resourceConfigs;
+        private Map<String, Properties> resourceOptions;
+        private Boolean synchronous;
+
         /**
          * The distributed resource name. The option is a java.lang.String type.
          */
-        private String resourceName;
+        public T resourceName(String resourceName) {
+            this.resourceName = resourceName;
+            return (T) this;
+        }
+
         /**
          * The Atomix instance to use. The option is a io.atomix.Atomix type.
          */
-        private Object atomix;
+        public T atomix(Object atomix) {
+            this.atomix = atomix;
+            return (T) this;
+        }
+
         /**
          * The Atomix configuration uri. The option is a java.lang.String type.
          */
-        private String configurationUri;
+        public T configurationUri(String configurationUri) {
+            this.configurationUri = configurationUri;
+            return (T) this;
+        }
+
         /**
          * The default action. The option is a
          * org.apache.camel.component.atomix.client.map.AtomixMap.Action type.
          */
-        private Object defaultAction;
+        public T defaultAction(Object defaultAction) {
+            this.defaultAction = defaultAction;
+            return (T) this;
+        }
+
         /**
          * The key to use if none is set in the header or to listen for events
          * for a specific key. The option is a java.lang.Object type.
          */
-        private Object key;
+        public T key(Object key) {
+            this.key = key;
+            return (T) this;
+        }
+
         /**
          * The address of the nodes composing the cluster. The option is a
          * java.lang.String type.
          */
-        private List<Object> nodes;
+        public T nodes(List<Object> nodes) {
+            this.nodes = nodes;
+            return (T) this;
+        }
+
         /**
          * The header that wil carry the result. The option is a
          * java.lang.String type.
          */
-        private String resultHeader;
+        public T resultHeader(String resultHeader) {
+            this.resultHeader = resultHeader;
+            return (T) this;
+        }
+
         /**
          * Sets the Atomix transport. The option is a
          * io.atomix.catalyst.transport.Transport type.
          */
-        private Class<Object> transport;
+        public T transport(Class<Object> transport) {
+            this.transport = transport;
+            return (T) this;
+        }
+
         /**
          * The resource ttl. The option is a long type.
          */
-        private Long ttl;
+        public T ttl(long ttl) {
+            this.ttl = ttl;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * The cluster wide default resource configuration. The option is a
          * java.util.Properties type.
          */
-        private Properties defaultResourceConfig;
+        public T defaultResourceConfig(Properties defaultResourceConfig) {
+            this.defaultResourceConfig = defaultResourceConfig;
+            return (T) this;
+        }
+
         /**
          * The local default resource options. The option is a
          * java.util.Properties type.
          */
-        private Properties defaultResourceOptions;
+        public T defaultResourceOptions(Properties defaultResourceOptions) {
+            this.defaultResourceOptions = defaultResourceOptions;
+            return (T) this;
+        }
+
         /**
          * Sets if the local member should join groups as PersistentMember or
          * not. If set to ephemeral the local member will receive an auto
          * generated ID thus the local one is ignored. The option is a boolean
          * type.
          */
-        private Boolean ephemeral;
+        public T ephemeral(boolean ephemeral) {
+            this.ephemeral = ephemeral;
+            return (T) this;
+        }
+
         /**
          * The read consistency level. The option is a
          * io.atomix.resource.ReadConsistency type.
          */
-        private ReadConsistency readConsistency;
+        public T readConsistency(ReadConsistency readConsistency) {
+            this.readConsistency = readConsistency;
+            return (T) this;
+        }
+
         /**
          * Cluster wide resources configuration. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
-        private Map<String, Properties> resourceConfigs;
+        public T resourceConfigs(Map<String, Properties> resourceConfigs) {
+            this.resourceConfigs = resourceConfigs;
+            return (T) this;
+        }
+
         /**
          * Local resources configurations. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
-        private Map<String, Properties> resourceOptions;
+        public T resourceOptions(Map<String, Properties> resourceOptions) {
+            this.resourceOptions = resourceOptions;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getResourceName() {
             return resourceName;
@@ -256,7 +343,13 @@ public class AtomixMapEndpoint {
         }
     }
 
-    public static class AtomixMapConsumer extends AtomixMapCommon {
+    public static class AtomixMapConsumer
+            extends
+                AtomixMapCommon<AtomixMapConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -266,7 +359,11 @@ public class AtomixMapEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public AtomixMapConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (AtomixMapConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -274,12 +371,20 @@ public class AtomixMapEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public AtomixMapConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (AtomixMapConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public AtomixMapConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (AtomixMapConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -306,7 +411,9 @@ public class AtomixMapEndpoint {
         }
     }
 
-    public static class AtomixMapProducer extends AtomixMapCommon {
+    public static class AtomixMapProducer
+            extends
+                AtomixMapCommon<AtomixMapProducer> {
     }
 
     public static enum ReadConsistency {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixMessagingEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixMessagingEndpoint.java
index 53924b0..2ff047e 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixMessagingEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixMessagingEndpoint.java
@@ -32,96 +32,188 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtomixMessagingEndpoint {
 
 
-    public static class AtomixMessagingCommon extends EndpointConfiguration {
+    public static class AtomixMessagingCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String resourceName;
+        private Object atomix;
+        private Object broadcastType;
+        private String channelName;
+        private String configurationUri;
+        private Object defaultAction;
+        private String memberName;
+        private List<Object> nodes;
+        private String resultHeader;
+        private Class<Object> transport;
+        private Boolean basicPropertyBinding;
+        private Properties defaultResourceConfig;
+        private Properties defaultResourceOptions;
+        private Boolean ephemeral;
+        private ReadConsistency readConsistency;
+        private Map<String, Properties> resourceConfigs;
+        private Map<String, Properties> resourceOptions;
+        private Boolean synchronous;
+
         /**
          * The distributed resource name. The option is a java.lang.String type.
          */
-        private String resourceName;
+        public T resourceName(String resourceName) {
+            this.resourceName = resourceName;
+            return (T) this;
+        }
+
         /**
          * The Atomix instance to use. The option is a io.atomix.Atomix type.
          */
-        private Object atomix;
+        public T atomix(Object atomix) {
+            this.atomix = atomix;
+            return (T) this;
+        }
+
         /**
          * The broadcast type. The option is a
          * org.apache.camel.component.atomix.client.messaging.AtomixMessaging.BroadcastType type.
          */
-        private Object broadcastType;
+        public T broadcastType(Object broadcastType) {
+            this.broadcastType = broadcastType;
+            return (T) this;
+        }
+
         /**
          * The messaging channel name. The option is a java.lang.String type.
          */
-        private String channelName;
+        public T channelName(String channelName) {
+            this.channelName = channelName;
+            return (T) this;
+        }
+
         /**
          * The Atomix configuration uri. The option is a java.lang.String type.
          */
-        private String configurationUri;
+        public T configurationUri(String configurationUri) {
+            this.configurationUri = configurationUri;
+            return (T) this;
+        }
+
         /**
          * The default action. The option is a
          * org.apache.camel.component.atomix.client.messaging.AtomixMessaging.Action type.
          */
-        private Object defaultAction;
+        public T defaultAction(Object defaultAction) {
+            this.defaultAction = defaultAction;
+            return (T) this;
+        }
+
         /**
          * The Atomix Group member name. The option is a java.lang.String type.
          */
-        private String memberName;
+        public T memberName(String memberName) {
+            this.memberName = memberName;
+            return (T) this;
+        }
+
         /**
          * The address of the nodes composing the cluster. The option is a
          * java.lang.String type.
          */
-        private List<Object> nodes;
+        public T nodes(List<Object> nodes) {
+            this.nodes = nodes;
+            return (T) this;
+        }
+
         /**
          * The header that wil carry the result. The option is a
          * java.lang.String type.
          */
-        private String resultHeader;
+        public T resultHeader(String resultHeader) {
+            this.resultHeader = resultHeader;
+            return (T) this;
+        }
+
         /**
          * Sets the Atomix transport. The option is a
          * io.atomix.catalyst.transport.Transport type.
          */
-        private Class<Object> transport;
+        public T transport(Class<Object> transport) {
+            this.transport = transport;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * The cluster wide default resource configuration. The option is a
          * java.util.Properties type.
          */
-        private Properties defaultResourceConfig;
+        public T defaultResourceConfig(Properties defaultResourceConfig) {
+            this.defaultResourceConfig = defaultResourceConfig;
+            return (T) this;
+        }
+
         /**
          * The local default resource options. The option is a
          * java.util.Properties type.
          */
-        private Properties defaultResourceOptions;
+        public T defaultResourceOptions(Properties defaultResourceOptions) {
+            this.defaultResourceOptions = defaultResourceOptions;
+            return (T) this;
+        }
+
         /**
          * Sets if the local member should join groups as PersistentMember or
          * not. If set to ephemeral the local member will receive an auto
          * generated ID thus the local one is ignored. The option is a boolean
          * type.
          */
-        private Boolean ephemeral;
+        public T ephemeral(boolean ephemeral) {
+            this.ephemeral = ephemeral;
+            return (T) this;
+        }
+
         /**
          * The read consistency level. The option is a
          * io.atomix.resource.ReadConsistency type.
          */
-        private ReadConsistency readConsistency;
+        public T readConsistency(ReadConsistency readConsistency) {
+            this.readConsistency = readConsistency;
+            return (T) this;
+        }
+
         /**
          * Cluster wide resources configuration. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
-        private Map<String, Properties> resourceConfigs;
+        public T resourceConfigs(Map<String, Properties> resourceConfigs) {
+            this.resourceConfigs = resourceConfigs;
+            return (T) this;
+        }
+
         /**
          * Local resources configurations. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
-        private Map<String, Properties> resourceOptions;
+        public T resourceOptions(Map<String, Properties> resourceOptions) {
+            this.resourceOptions = resourceOptions;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getResourceName() {
             return resourceName;
@@ -268,7 +360,13 @@ public class AtomixMessagingEndpoint {
         }
     }
 
-    public static class AtomixMessagingConsumer extends AtomixMessagingCommon {
+    public static class AtomixMessagingConsumer
+            extends
+                AtomixMessagingCommon<AtomixMessagingConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -278,7 +376,12 @@ public class AtomixMessagingEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public AtomixMessagingConsumer bridgeErrorHandler(
+                boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (AtomixMessagingConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -286,12 +389,21 @@ public class AtomixMessagingEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public AtomixMessagingConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (AtomixMessagingConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public AtomixMessagingConsumer exchangePattern(
+                ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (AtomixMessagingConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -318,7 +430,9 @@ public class AtomixMessagingEndpoint {
         }
     }
 
-    public static class AtomixMessagingProducer extends AtomixMessagingCommon {
+    public static class AtomixMessagingProducer
+            extends
+                AtomixMessagingCommon<AtomixMessagingProducer> {
     }
 
     public static enum ReadConsistency {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixMultiMapEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixMultiMapEndpoint.java
index ccfac50..5516d83 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixMultiMapEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixMultiMapEndpoint.java
@@ -33,92 +33,179 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtomixMultiMapEndpoint {
 
 
-    public static class AtomixMultiMapCommon extends EndpointConfiguration {
+    public static class AtomixMultiMapCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String resourceName;
+        private Object atomix;
+        private String configurationUri;
+        private Object defaultAction;
+        private Object key;
+        private List<Object> nodes;
+        private String resultHeader;
+        private Class<Object> transport;
+        private Long ttl;
+        private Boolean basicPropertyBinding;
+        private Properties defaultResourceConfig;
+        private Properties defaultResourceOptions;
+        private Boolean ephemeral;
+        private ReadConsistency readConsistency;
+        private Map<String, Properties> resourceConfigs;
+        private Map<String, Properties> resourceOptions;
+        private Boolean synchronous;
+
         /**
          * The distributed resource name. The option is a java.lang.String type.
          */
-        private String resourceName;
+        public T resourceName(String resourceName) {
+            this.resourceName = resourceName;
+            return (T) this;
+        }
+
         /**
          * The Atomix instance to use. The option is a io.atomix.Atomix type.
          */
-        private Object atomix;
+        public T atomix(Object atomix) {
+            this.atomix = atomix;
+            return (T) this;
+        }
+
         /**
          * The Atomix configuration uri. The option is a java.lang.String type.
          */
-        private String configurationUri;
+        public T configurationUri(String configurationUri) {
+            this.configurationUri = configurationUri;
+            return (T) this;
+        }
+
         /**
          * The default action. The option is a
          * org.apache.camel.component.atomix.client.multimap.AtomixMultiMap.Action type.
          */
-        private Object defaultAction;
+        public T defaultAction(Object defaultAction) {
+            this.defaultAction = defaultAction;
+            return (T) this;
+        }
+
         /**
          * The key to use if none is set in the header or to listen for events
          * for a specific key. The option is a java.lang.Object type.
          */
-        private Object key;
+        public T key(Object key) {
+            this.key = key;
+            return (T) this;
+        }
+
         /**
          * The address of the nodes composing the cluster. The option is a
          * java.lang.String type.
          */
-        private List<Object> nodes;
+        public T nodes(List<Object> nodes) {
+            this.nodes = nodes;
+            return (T) this;
+        }
+
         /**
          * The header that wil carry the result. The option is a
          * java.lang.String type.
          */
-        private String resultHeader;
+        public T resultHeader(String resultHeader) {
+            this.resultHeader = resultHeader;
+            return (T) this;
+        }
+
         /**
          * Sets the Atomix transport. The option is a
          * io.atomix.catalyst.transport.Transport type.
          */
-        private Class<Object> transport;
+        public T transport(Class<Object> transport) {
+            this.transport = transport;
+            return (T) this;
+        }
+
         /**
          * The resource ttl. The option is a long type.
          */
-        private Long ttl;
+        public T ttl(long ttl) {
+            this.ttl = ttl;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * The cluster wide default resource configuration. The option is a
          * java.util.Properties type.
          */
-        private Properties defaultResourceConfig;
+        public T defaultResourceConfig(Properties defaultResourceConfig) {
+            this.defaultResourceConfig = defaultResourceConfig;
+            return (T) this;
+        }
+
         /**
          * The local default resource options. The option is a
          * java.util.Properties type.
          */
-        private Properties defaultResourceOptions;
+        public T defaultResourceOptions(Properties defaultResourceOptions) {
+            this.defaultResourceOptions = defaultResourceOptions;
+            return (T) this;
+        }
+
         /**
          * Sets if the local member should join groups as PersistentMember or
          * not. If set to ephemeral the local member will receive an auto
          * generated ID thus the local one is ignored. The option is a boolean
          * type.
          */
-        private Boolean ephemeral;
+        public T ephemeral(boolean ephemeral) {
+            this.ephemeral = ephemeral;
+            return (T) this;
+        }
+
         /**
          * The read consistency level. The option is a
          * io.atomix.resource.ReadConsistency type.
          */
-        private ReadConsistency readConsistency;
+        public T readConsistency(ReadConsistency readConsistency) {
+            this.readConsistency = readConsistency;
+            return (T) this;
+        }
+
         /**
          * Cluster wide resources configuration. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
-        private Map<String, Properties> resourceConfigs;
+        public T resourceConfigs(Map<String, Properties> resourceConfigs) {
+            this.resourceConfigs = resourceConfigs;
+            return (T) this;
+        }
+
         /**
          * Local resources configurations. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
-        private Map<String, Properties> resourceOptions;
+        public T resourceOptions(Map<String, Properties> resourceOptions) {
+            this.resourceOptions = resourceOptions;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getResourceName() {
             return resourceName;
@@ -257,7 +344,13 @@ public class AtomixMultiMapEndpoint {
         }
     }
 
-    public static class AtomixMultiMapConsumer extends AtomixMultiMapCommon {
+    public static class AtomixMultiMapConsumer
+            extends
+                AtomixMultiMapCommon<AtomixMultiMapConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -267,7 +360,12 @@ public class AtomixMultiMapEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public AtomixMultiMapConsumer bridgeErrorHandler(
+                boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (AtomixMultiMapConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -275,12 +373,21 @@ public class AtomixMultiMapEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public AtomixMultiMapConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (AtomixMultiMapConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public AtomixMultiMapConsumer exchangePattern(
+                ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (AtomixMultiMapConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -307,7 +414,9 @@ public class AtomixMultiMapEndpoint {
         }
     }
 
-    public static class AtomixMultiMapProducer extends AtomixMultiMapCommon {
+    public static class AtomixMultiMapProducer
+            extends
+                AtomixMultiMapCommon<AtomixMultiMapProducer> {
     }
 
     public static enum ReadConsistency {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixQueueEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixQueueEndpoint.java
index 738e896..6b74950 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixQueueEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixQueueEndpoint.java
@@ -32,84 +32,161 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtomixQueueEndpoint {
 
 
-    public static class AtomixQueueCommon extends EndpointConfiguration {
+    public static class AtomixQueueCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String resourceName;
+        private Object atomix;
+        private String configurationUri;
+        private Object defaultAction;
+        private List<Object> nodes;
+        private String resultHeader;
+        private Class<Object> transport;
+        private Boolean basicPropertyBinding;
+        private Properties defaultResourceConfig;
+        private Properties defaultResourceOptions;
+        private Boolean ephemeral;
+        private ReadConsistency readConsistency;
+        private Map<String, Properties> resourceConfigs;
+        private Map<String, Properties> resourceOptions;
+        private Boolean synchronous;
+
         /**
          * The distributed resource name. The option is a java.lang.String type.
          */
-        private String resourceName;
+        public T resourceName(String resourceName) {
+            this.resourceName = resourceName;
+            return (T) this;
+        }
+
         /**
          * The Atomix instance to use. The option is a io.atomix.Atomix type.
          */
-        private Object atomix;
+        public T atomix(Object atomix) {
+            this.atomix = atomix;
+            return (T) this;
+        }
+
         /**
          * The Atomix configuration uri. The option is a java.lang.String type.
          */
-        private String configurationUri;
+        public T configurationUri(String configurationUri) {
+            this.configurationUri = configurationUri;
+            return (T) this;
+        }
+
         /**
          * The default action. The option is a
          * org.apache.camel.component.atomix.client.queue.AtomixQueue.Action
          * type.
          */
-        private Object defaultAction;
+        public T defaultAction(Object defaultAction) {
+            this.defaultAction = defaultAction;
+            return (T) this;
+        }
+
         /**
          * The address of the nodes composing the cluster. The option is a
          * java.lang.String type.
          */
-        private List<Object> nodes;
+        public T nodes(List<Object> nodes) {
+            this.nodes = nodes;
+            return (T) this;
+        }
+
         /**
          * The header that wil carry the result. The option is a
          * java.lang.String type.
          */
-        private String resultHeader;
+        public T resultHeader(String resultHeader) {
+            this.resultHeader = resultHeader;
+            return (T) this;
+        }
+
         /**
          * Sets the Atomix transport. The option is a
          * io.atomix.catalyst.transport.Transport type.
          */
-        private Class<Object> transport;
+        public T transport(Class<Object> transport) {
+            this.transport = transport;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * The cluster wide default resource configuration. The option is a
          * java.util.Properties type.
          */
-        private Properties defaultResourceConfig;
+        public T defaultResourceConfig(Properties defaultResourceConfig) {
+            this.defaultResourceConfig = defaultResourceConfig;
+            return (T) this;
+        }
+
         /**
          * The local default resource options. The option is a
          * java.util.Properties type.
          */
-        private Properties defaultResourceOptions;
+        public T defaultResourceOptions(Properties defaultResourceOptions) {
+            this.defaultResourceOptions = defaultResourceOptions;
+            return (T) this;
+        }
+
         /**
          * Sets if the local member should join groups as PersistentMember or
          * not. If set to ephemeral the local member will receive an auto
          * generated ID thus the local one is ignored. The option is a boolean
          * type.
          */
-        private Boolean ephemeral;
+        public T ephemeral(boolean ephemeral) {
+            this.ephemeral = ephemeral;
+            return (T) this;
+        }
+
         /**
          * The read consistency level. The option is a
          * io.atomix.resource.ReadConsistency type.
          */
-        private ReadConsistency readConsistency;
+        public T readConsistency(ReadConsistency readConsistency) {
+            this.readConsistency = readConsistency;
+            return (T) this;
+        }
+
         /**
          * Cluster wide resources configuration. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
-        private Map<String, Properties> resourceConfigs;
+        public T resourceConfigs(Map<String, Properties> resourceConfigs) {
+            this.resourceConfigs = resourceConfigs;
+            return (T) this;
+        }
+
         /**
          * Local resources configurations. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
-        private Map<String, Properties> resourceOptions;
+        public T resourceOptions(Map<String, Properties> resourceOptions) {
+            this.resourceOptions = resourceOptions;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getResourceName() {
             return resourceName;
@@ -232,7 +309,13 @@ public class AtomixQueueEndpoint {
         }
     }
 
-    public static class AtomixQueueConsumer extends AtomixQueueCommon {
+    public static class AtomixQueueConsumer
+            extends
+                AtomixQueueCommon<AtomixQueueConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -242,7 +325,11 @@ public class AtomixQueueEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public AtomixQueueConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (AtomixQueueConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -250,12 +337,21 @@ public class AtomixQueueEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public AtomixQueueConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (AtomixQueueConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public AtomixQueueConsumer exchangePattern(
+                ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (AtomixQueueConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -282,7 +378,9 @@ public class AtomixQueueEndpoint {
         }
     }
 
-    public static class AtomixQueueProducer extends AtomixQueueCommon {
+    public static class AtomixQueueProducer
+            extends
+                AtomixQueueCommon<AtomixQueueProducer> {
     }
 
     public static enum ReadConsistency {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixSetEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixSetEndpoint.java
index a253cbc..b119947 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixSetEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixSetEndpoint.java
@@ -32,87 +32,169 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtomixSetEndpoint {
 
 
-    public static class AtomixSetCommon extends EndpointConfiguration {
+    public static class AtomixSetCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String resourceName;
+        private Object atomix;
+        private String configurationUri;
+        private Object defaultAction;
+        private List<Object> nodes;
+        private String resultHeader;
+        private Class<Object> transport;
+        private Long ttl;
+        private Boolean basicPropertyBinding;
+        private Properties defaultResourceConfig;
+        private Properties defaultResourceOptions;
+        private Boolean ephemeral;
+        private ReadConsistency readConsistency;
+        private Map<String, Properties> resourceConfigs;
+        private Map<String, Properties> resourceOptions;
+        private Boolean synchronous;
+
         /**
          * The distributed resource name. The option is a java.lang.String type.
          */
-        private String resourceName;
+        public T resourceName(String resourceName) {
+            this.resourceName = resourceName;
+            return (T) this;
+        }
+
         /**
          * The Atomix instance to use. The option is a io.atomix.Atomix type.
          */
-        private Object atomix;
+        public T atomix(Object atomix) {
+            this.atomix = atomix;
+            return (T) this;
+        }
+
         /**
          * The Atomix configuration uri. The option is a java.lang.String type.
          */
-        private String configurationUri;
+        public T configurationUri(String configurationUri) {
+            this.configurationUri = configurationUri;
+            return (T) this;
+        }
+
         /**
          * The default action. The option is a
          * org.apache.camel.component.atomix.client.set.AtomixSet.Action type.
          */
-        private Object defaultAction;
+        public T defaultAction(Object defaultAction) {
+            this.defaultAction = defaultAction;
+            return (T) this;
+        }
+
         /**
          * The address of the nodes composing the cluster. The option is a
          * java.lang.String type.
          */
-        private List<Object> nodes;
+        public T nodes(List<Object> nodes) {
+            this.nodes = nodes;
+            return (T) this;
+        }
+
         /**
          * The header that wil carry the result. The option is a
          * java.lang.String type.
          */
-        private String resultHeader;
+        public T resultHeader(String resultHeader) {
+            this.resultHeader = resultHeader;
+            return (T) this;
+        }
+
         /**
          * Sets the Atomix transport. The option is a
          * io.atomix.catalyst.transport.Transport type.
          */
-        private Class<Object> transport;
+        public T transport(Class<Object> transport) {
+            this.transport = transport;
+            return (T) this;
+        }
+
         /**
          * The resource ttl. The option is a long type.
          */
-        private Long ttl;
+        public T ttl(long ttl) {
+            this.ttl = ttl;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * The cluster wide default resource configuration. The option is a
          * java.util.Properties type.
          */
-        private Properties defaultResourceConfig;
+        public T defaultResourceConfig(Properties defaultResourceConfig) {
+            this.defaultResourceConfig = defaultResourceConfig;
+            return (T) this;
+        }
+
         /**
          * The local default resource options. The option is a
          * java.util.Properties type.
          */
-        private Properties defaultResourceOptions;
+        public T defaultResourceOptions(Properties defaultResourceOptions) {
+            this.defaultResourceOptions = defaultResourceOptions;
+            return (T) this;
+        }
+
         /**
          * Sets if the local member should join groups as PersistentMember or
          * not. If set to ephemeral the local member will receive an auto
          * generated ID thus the local one is ignored. The option is a boolean
          * type.
          */
-        private Boolean ephemeral;
+        public T ephemeral(boolean ephemeral) {
+            this.ephemeral = ephemeral;
+            return (T) this;
+        }
+
         /**
          * The read consistency level. The option is a
          * io.atomix.resource.ReadConsistency type.
          */
-        private ReadConsistency readConsistency;
+        public T readConsistency(ReadConsistency readConsistency) {
+            this.readConsistency = readConsistency;
+            return (T) this;
+        }
+
         /**
          * Cluster wide resources configuration. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
-        private Map<String, Properties> resourceConfigs;
+        public T resourceConfigs(Map<String, Properties> resourceConfigs) {
+            this.resourceConfigs = resourceConfigs;
+            return (T) this;
+        }
+
         /**
          * Local resources configurations. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
-        private Map<String, Properties> resourceOptions;
+        public T resourceOptions(Map<String, Properties> resourceOptions) {
+            this.resourceOptions = resourceOptions;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getResourceName() {
             return resourceName;
@@ -243,7 +325,13 @@ public class AtomixSetEndpoint {
         }
     }
 
-    public static class AtomixSetConsumer extends AtomixSetCommon {
+    public static class AtomixSetConsumer
+            extends
+                AtomixSetCommon<AtomixSetConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -253,7 +341,11 @@ public class AtomixSetEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public AtomixSetConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (AtomixSetConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -261,12 +353,20 @@ public class AtomixSetEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public AtomixSetConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (AtomixSetConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public AtomixSetConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (AtomixSetConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -293,7 +393,9 @@ public class AtomixSetEndpoint {
         }
     }
 
-    public static class AtomixSetProducer extends AtomixSetCommon {
+    public static class AtomixSetProducer
+            extends
+                AtomixSetCommon<AtomixSetProducer> {
     }
 
     public static enum ReadConsistency {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixValueEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixValueEndpoint.java
index 5598ac4..c4bccc7 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixValueEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtomixValueEndpoint.java
@@ -32,88 +32,170 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtomixValueEndpoint {
 
 
-    public static class AtomixValueCommon extends EndpointConfiguration {
+    public static class AtomixValueCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String resourceName;
+        private Object atomix;
+        private String configurationUri;
+        private Object defaultAction;
+        private List<Object> nodes;
+        private String resultHeader;
+        private Class<Object> transport;
+        private Long ttl;
+        private Boolean basicPropertyBinding;
+        private Properties defaultResourceConfig;
+        private Properties defaultResourceOptions;
+        private Boolean ephemeral;
+        private ReadConsistency readConsistency;
+        private Map<String, Properties> resourceConfigs;
+        private Map<String, Properties> resourceOptions;
+        private Boolean synchronous;
+
         /**
          * The distributed resource name. The option is a java.lang.String type.
          */
-        private String resourceName;
+        public T resourceName(String resourceName) {
+            this.resourceName = resourceName;
+            return (T) this;
+        }
+
         /**
          * The Atomix instance to use. The option is a io.atomix.Atomix type.
          */
-        private Object atomix;
+        public T atomix(Object atomix) {
+            this.atomix = atomix;
+            return (T) this;
+        }
+
         /**
          * The Atomix configuration uri. The option is a java.lang.String type.
          */
-        private String configurationUri;
+        public T configurationUri(String configurationUri) {
+            this.configurationUri = configurationUri;
+            return (T) this;
+        }
+
         /**
          * The default action. The option is a
          * org.apache.camel.component.atomix.client.value.AtomixValue.Action
          * type.
          */
-        private Object defaultAction;
+        public T defaultAction(Object defaultAction) {
+            this.defaultAction = defaultAction;
+            return (T) this;
+        }
+
         /**
          * The address of the nodes composing the cluster. The option is a
          * java.lang.String type.
          */
-        private List<Object> nodes;
+        public T nodes(List<Object> nodes) {
+            this.nodes = nodes;
+            return (T) this;
+        }
+
         /**
          * The header that wil carry the result. The option is a
          * java.lang.String type.
          */
-        private String resultHeader;
+        public T resultHeader(String resultHeader) {
+            this.resultHeader = resultHeader;
+            return (T) this;
+        }
+
         /**
          * Sets the Atomix transport. The option is a
          * io.atomix.catalyst.transport.Transport type.
          */
-        private Class<Object> transport;
+        public T transport(Class<Object> transport) {
+            this.transport = transport;
+            return (T) this;
+        }
+
         /**
          * The resource ttl. The option is a long type.
          */
-        private Long ttl;
+        public T ttl(long ttl) {
+            this.ttl = ttl;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * The cluster wide default resource configuration. The option is a
          * java.util.Properties type.
          */
-        private Properties defaultResourceConfig;
+        public T defaultResourceConfig(Properties defaultResourceConfig) {
+            this.defaultResourceConfig = defaultResourceConfig;
+            return (T) this;
+        }
+
         /**
          * The local default resource options. The option is a
          * java.util.Properties type.
          */
-        private Properties defaultResourceOptions;
+        public T defaultResourceOptions(Properties defaultResourceOptions) {
+            this.defaultResourceOptions = defaultResourceOptions;
+            return (T) this;
+        }
+
         /**
          * Sets if the local member should join groups as PersistentMember or
          * not. If set to ephemeral the local member will receive an auto
          * generated ID thus the local one is ignored. The option is a boolean
          * type.
          */
-        private Boolean ephemeral;
+        public T ephemeral(boolean ephemeral) {
+            this.ephemeral = ephemeral;
+            return (T) this;
+        }
+
         /**
          * The read consistency level. The option is a
          * io.atomix.resource.ReadConsistency type.
          */
-        private ReadConsistency readConsistency;
+        public T readConsistency(ReadConsistency readConsistency) {
+            this.readConsistency = readConsistency;
+            return (T) this;
+        }
+
         /**
          * Cluster wide resources configuration. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
-        private Map<String, Properties> resourceConfigs;
+        public T resourceConfigs(Map<String, Properties> resourceConfigs) {
+            this.resourceConfigs = resourceConfigs;
+            return (T) this;
+        }
+
         /**
          * Local resources configurations. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
-        private Map<String, Properties> resourceOptions;
+        public T resourceOptions(Map<String, Properties> resourceOptions) {
+            this.resourceOptions = resourceOptions;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getResourceName() {
             return resourceName;
@@ -244,7 +326,13 @@ public class AtomixValueEndpoint {
         }
     }
 
-    public static class AtomixValueConsumer extends AtomixValueCommon {
+    public static class AtomixValueConsumer
+            extends
+                AtomixValueCommon<AtomixValueConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -254,7 +342,11 @@ public class AtomixValueEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public AtomixValueConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (AtomixValueConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -262,12 +354,21 @@ public class AtomixValueEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public AtomixValueConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (AtomixValueConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public AtomixValueConsumer exchangePattern(
+                ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (AtomixValueConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -294,7 +395,9 @@ public class AtomixValueEndpoint {
         }
     }
 
-    public static class AtomixValueProducer extends AtomixValueCommon {
+    public static class AtomixValueProducer
+            extends
+                AtomixValueCommon<AtomixValueProducer> {
     }
 
     public static enum ReadConsistency {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AvroEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AvroEndpoint.java
index 9de579f..9aed0a0 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AvroEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AvroEndpoint.java
@@ -29,67 +29,129 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AvroEndpoint {
 
 
-    public static class AvroCommon extends EndpointConfiguration {
+    public static class AvroCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private AvroTransport transport;
+        private Integer port;
+        private String host;
+        private String messageName;
+        private Object protocol;
+        private String protocolClassName;
+        private String protocolLocation;
+        private Boolean reflectionProtocol;
+        private Boolean singleParameter;
+        private String uriAuthority;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * Transport to use, can be either http or netty. The option is a
          * org.apache.camel.component.avro.AvroTransport type.
          */
-        private AvroTransport transport;
+        public T transport(AvroTransport transport) {
+            this.transport = transport;
+            return (T) this;
+        }
+
         /**
          * Port number to use. The option is a int type.
          */
-        private Integer port;
+        public T port(int port) {
+            this.port = port;
+            return (T) this;
+        }
+
         /**
          * Hostname to use. The option is a java.lang.String type.
          */
-        private String host;
+        public T host(String host) {
+            this.host = host;
+            return (T) this;
+        }
+
         /**
          * The name of the message to send. The option is a java.lang.String
          * type.
          */
-        private String messageName;
+        public T messageName(String messageName) {
+            this.messageName = messageName;
+            return (T) this;
+        }
+
         /**
          * Avro protocol to use. The option is a org.apache.avro.Protocol type.
          */
-        private Object protocol;
+        public T protocol(Object protocol) {
+            this.protocol = protocol;
+            return (T) this;
+        }
+
         /**
          * Avro protocol to use defined by the FQN class name. The option is a
          * java.lang.String type.
          */
-        private String protocolClassName;
+        public T protocolClassName(String protocolClassName) {
+            this.protocolClassName = protocolClassName;
+            return (T) this;
+        }
+
         /**
          * Avro protocol location. The option is a java.lang.String type.
          */
-        private String protocolLocation;
+        public T protocolLocation(String protocolLocation) {
+            this.protocolLocation = protocolLocation;
+            return (T) this;
+        }
+
         /**
          * If protocol object provided is reflection protocol. Should be used
          * only with protocol parameter because for protocolClassName protocol
          * type will be auto detected. The option is a boolean type.
          */
-        private Boolean reflectionProtocol;
+        public T reflectionProtocol(boolean reflectionProtocol) {
+            this.reflectionProtocol = reflectionProtocol;
+            return (T) this;
+        }
+
         /**
          * If true, consumer parameter won't be wrapped into array. Will fail if
          * protocol specifies more then 1 parameter for the message. The option
          * is a boolean type.
          */
-        private Boolean singleParameter;
+        public T singleParameter(boolean singleParameter) {
+            this.singleParameter = singleParameter;
+            return (T) this;
+        }
+
         /**
          * Authority to use (username and password). The option is a
          * java.lang.String type.
          */
-        private String uriAuthority;
+        public T uriAuthority(String uriAuthority) {
+            this.uriAuthority = uriAuthority;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public AvroTransport getTransport() {
             return transport;
@@ -188,7 +250,11 @@ public class AvroEndpoint {
         }
     }
 
-    public static class AvroConsumer extends AvroCommon {
+    public static class AvroConsumer extends AvroCommon<AvroConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -198,7 +264,11 @@ public class AvroEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public AvroConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (AvroConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -206,12 +276,19 @@ public class AvroEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public AvroConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (AvroConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public AvroConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (AvroConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -238,7 +315,7 @@ public class AvroEndpoint {
         }
     }
 
-    public static class AvroProducer extends AvroCommon {
+    public static class AvroProducer extends AvroCommon<AvroProducer> {
     }
 
     public static enum AvroTransport {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BeanEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BeanEndpoint.java
index 0c7bd8e..b1856b7 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BeanEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BeanEndpoint.java
@@ -28,40 +28,72 @@ import javax.annotation.Generated;
 public class BeanEndpoint {
 
 
-    public static class BeanCommon extends EndpointConfiguration {
+    public static class BeanCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String beanName;
+        private String method;
+        private Boolean basicPropertyBinding;
+        private Boolean cache;
+        private Map<String, Object> parameters;
+        private Boolean synchronous;
+
         /**
          * Sets the name of the bean to invoke. The option is a java.lang.String
          * type.
          */
-        private String beanName;
+        public T beanName(String beanName) {
+            this.beanName = beanName;
+            return (T) this;
+        }
+
         /**
          * Sets the name of the method to invoke on the bean. The option is a
          * java.lang.String type.
          */
-        private String method;
+        public T method(String method) {
+            this.method = method;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * If enabled, Camel will cache the result of the first Registry
          * look-up. Cache can be enabled if the bean in the Registry is defined
          * as a singleton scope. The option is a java.lang.Boolean type.
          */
-        private Boolean cache;
+        public T cache(Boolean cache) {
+            this.cache = cache;
+            return (T) this;
+        }
+
         /**
          * Used for configuring additional properties on the bean. The option is
          * a java.util.Map<java.lang.String,java.lang.Object> type.
          */
-        private Map<String, Object> parameters;
+        public T parameters(Map<String, Object> parameters) {
+            this.parameters = parameters;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getBeanName() {
             return beanName;
@@ -112,9 +144,9 @@ public class BeanEndpoint {
         }
     }
 
-    public static class BeanConsumer extends BeanCommon {
+    public static class BeanConsumer extends BeanCommon<BeanConsumer> {
     }
 
-    public static class BeanProducer extends BeanCommon {
+    public static class BeanProducer extends BeanCommon<BeanProducer> {
     }
 }
\ No newline at end of file
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BeanValidatorEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BeanValidatorEndpoint.java
index 4a971fd..c78dca1 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BeanValidatorEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BeanValidatorEndpoint.java
@@ -28,49 +28,91 @@ import javax.annotation.Generated;
 public class BeanValidatorEndpoint {
 
 
-    public static class BeanValidatorCommon extends EndpointConfiguration {
+    public static class BeanValidatorCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String label;
+        private Object constraintValidatorFactory;
+        private String group;
+        private Object messageInterpolator;
+        private Object traversableResolver;
+        private Object validationProviderResolver;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * Where label is an arbitrary text value describing the endpoint. The
          * option is a java.lang.String type.
          */
-        private String label;
+        public T label(String label) {
+            this.label = label;
+            return (T) this;
+        }
+
         /**
          * To use a custom ConstraintValidatorFactory. The option is a
          * javax.validation.ConstraintValidatorFactory type.
          */
-        private Object constraintValidatorFactory;
+        public T constraintValidatorFactory(Object constraintValidatorFactory) {
+            this.constraintValidatorFactory = constraintValidatorFactory;
+            return (T) this;
+        }
+
         /**
          * To use a custom validation group. The option is a java.lang.String
          * type.
          */
-        private String group;
+        public T group(String group) {
+            this.group = group;
+            return (T) this;
+        }
+
         /**
          * To use a custom MessageInterpolator. The option is a
          * javax.validation.MessageInterpolator type.
          */
-        private Object messageInterpolator;
+        public T messageInterpolator(Object messageInterpolator) {
+            this.messageInterpolator = messageInterpolator;
+            return (T) this;
+        }
+
         /**
          * To use a custom TraversableResolver. The option is a
          * javax.validation.TraversableResolver type.
          */
-        private Object traversableResolver;
+        public T traversableResolver(Object traversableResolver) {
+            this.traversableResolver = traversableResolver;
+            return (T) this;
+        }
+
         /**
          * To use a a custom ValidationProviderResolver. The option is a
          * javax.validation.ValidationProviderResolver type.
          */
-        private Object validationProviderResolver;
+        public T validationProviderResolver(Object validationProviderResolver) {
+            this.validationProviderResolver = validationProviderResolver;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getLabel() {
             return label;
@@ -139,9 +181,13 @@ public class BeanValidatorEndpoint {
         }
     }
 
-    public static class BeanValidatorConsumer extends BeanValidatorCommon {
+    public static class BeanValidatorConsumer
+            extends
+                BeanValidatorCommon<BeanValidatorConsumer> {
     }
 
-    public static class BeanValidatorProducer extends BeanValidatorCommon {
+    public static class BeanValidatorProducer
+            extends
+                BeanValidatorCommon<BeanValidatorProducer> {
     }
 }
\ No newline at end of file
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BeanstalkEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BeanstalkEndpoint.java
index a5dc015..e23014c 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BeanstalkEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BeanstalkEndpoint.java
@@ -36,12 +36,26 @@ import org.apache.camel.spi.ScheduledPollConsumerScheduler;
 public class BeanstalkEndpoint {
 
 
-    public static class BeanstalkCommon extends EndpointConfiguration {
+    public static class BeanstalkCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String connectionSettings;
+        private BeanstalkCommand command;
+        private Integer jobDelay;
+        private Long jobPriority;
+        private Integer jobTimeToRun;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * Connection settings host:port/tube. The option is a java.lang.String
          * type.
          */
-        private String connectionSettings;
+        public T connectionSettings(String connectionSettings) {
+            this.connectionSettings = connectionSettings;
+            return (T) this;
+        }
+
         /**
          * put means to put the job into Beanstalk. Job body is specified in the
          * Camel message body. Job ID will be returned in beanstalk.jobId
@@ -52,34 +66,57 @@ public class BeanstalkEndpoint {
          * kicked out in the message header beanstalk.result. The option is a
          * org.apache.camel.component.beanstalk.BeanstalkCommand type.
          */
-        private BeanstalkCommand command;
+        public T command(BeanstalkCommand command) {
+            this.command = command;
+            return (T) this;
+        }
+
         /**
          * Job delay in seconds. The option is a int type.
          */
-        private Integer jobDelay;
+        public T jobDelay(int jobDelay) {
+            this.jobDelay = jobDelay;
+            return (T) this;
+        }
+
         /**
          * Job priority. (0 is the highest, see Beanstalk protocol). The option
          * is a long type.
          */
-        private Long jobPriority;
+        public T jobPriority(long jobPriority) {
+            this.jobPriority = jobPriority;
+            return (T) this;
+        }
+
         /**
          * Job time to run in seconds. (when 0, the beanstalkd daemon raises it
          * to 1 automatically, see Beanstalk protocol). The option is a int
          * type.
          */
-        private Integer jobTimeToRun;
+        public T jobTimeToRun(int jobTimeToRun) {
+            this.jobTimeToRun = jobTimeToRun;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getConnectionSettings() {
             return connectionSettings;
@@ -138,12 +175,40 @@ public class BeanstalkEndpoint {
         }
     }
 
-    public static class BeanstalkConsumer extends BeanstalkCommon {
+    public static class BeanstalkConsumer
+            extends
+                BeanstalkCommon<BeanstalkConsumer> {
+        private Boolean awaitJob;
+        private Boolean bridgeErrorHandler;
+        private BeanstalkCommand onFailure;
+        private Boolean sendEmptyMessageWhenIdle;
+        private Boolean useBlockIO;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+        private PollingConsumerPollStrategy pollStrategy;
+        private Integer backoffErrorThreshold;
+        private Integer backoffIdleThreshold;
+        private Integer backoffMultiplier;
+        private Long delay;
+        private Boolean greedy;
+        private Long initialDelay;
+        private LoggingLevel runLoggingLevel;
+        private ScheduledExecutorService scheduledExecutorService;
+        private ScheduledPollConsumerScheduler scheduler;
+        private Map<String, Object> schedulerProperties;
+        private Boolean startScheduler;
+        private TimeUnit timeUnit;
+        private Boolean useFixedDelay;
+
         /**
          * Whether to wait for job to complete before ack the job from
          * beanstalk. The option is a boolean type.
          */
-        private Boolean awaitJob;
+        public BeanstalkConsumer awaitJob(boolean awaitJob) {
+            this.awaitJob = awaitJob;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -153,22 +218,39 @@ public class BeanstalkEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public BeanstalkConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * Command to use when processing failed. The option is a
          * org.apache.camel.component.beanstalk.BeanstalkCommand type.
          */
-        private BeanstalkCommand onFailure;
+        public BeanstalkConsumer onFailure(BeanstalkCommand onFailure) {
+            this.onFailure = onFailure;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * If the polling consumer did not poll any files, you can enable this
          * option to send an empty message (no body) instead. The option is a
          * boolean type.
          */
-        private Boolean sendEmptyMessageWhenIdle;
+        public BeanstalkConsumer sendEmptyMessageWhenIdle(
+                boolean sendEmptyMessageWhenIdle) {
+            this.sendEmptyMessageWhenIdle = sendEmptyMessageWhenIdle;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * Whether to use blockIO. The option is a boolean type.
          */
-        private Boolean useBlockIO;
+        public BeanstalkConsumer useBlockIO(boolean useBlockIO) {
+            this.useBlockIO = useBlockIO;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -176,12 +258,21 @@ public class BeanstalkEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public BeanstalkConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public BeanstalkConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing
          * you to provide your custom implementation to control error handling
@@ -189,18 +280,31 @@ public class BeanstalkEndpoint {
          * been created and being routed in Camel. The option is a
          * org.apache.camel.spi.PollingConsumerPollStrategy type.
          */
-        private PollingConsumerPollStrategy pollStrategy;
+        public BeanstalkConsumer pollStrategy(
+                PollingConsumerPollStrategy pollStrategy) {
+            this.pollStrategy = pollStrategy;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * The number of subsequent error polls (failed due some error) that
          * should happen before the backoffMultipler should kick-in. The option
          * is a int type.
          */
-        private Integer backoffErrorThreshold;
+        public BeanstalkConsumer backoffErrorThreshold(int backoffErrorThreshold) {
+            this.backoffErrorThreshold = backoffErrorThreshold;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * The number of subsequent idle polls that should happen before the
          * backoffMultipler should kick-in. The option is a int type.
          */
-        private Integer backoffIdleThreshold;
+        public BeanstalkConsumer backoffIdleThreshold(int backoffIdleThreshold) {
+            this.backoffIdleThreshold = backoffIdleThreshold;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * To let the scheduled polling consumer backoff if there has been a
          * number of subsequent idles/errors in a row. The multiplier is then
@@ -209,66 +313,112 @@ public class BeanstalkEndpoint {
          * backoffIdleThreshold and/or backoffErrorThreshold must also be
          * configured. The option is a int type.
          */
-        private Integer backoffMultiplier;
+        public BeanstalkConsumer backoffMultiplier(int backoffMultiplier) {
+            this.backoffMultiplier = backoffMultiplier;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * Milliseconds before the next poll. You can also specify time values
          * using units, such as 60s (60 seconds), 5m30s (5 minutes and 30
          * seconds), and 1h (1 hour). The option is a long type.
          */
-        private Long delay;
+        public BeanstalkConsumer delay(long delay) {
+            this.delay = delay;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * If greedy is enabled, then the ScheduledPollConsumer will run
          * immediately again, if the previous run polled 1 or more messages. The
          * option is a boolean type.
          */
-        private Boolean greedy;
+        public BeanstalkConsumer greedy(boolean greedy) {
+            this.greedy = greedy;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * Milliseconds before the first poll starts. You can also specify time
          * values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30
          * seconds), and 1h (1 hour). The option is a long type.
          */
-        private Long initialDelay;
+        public BeanstalkConsumer initialDelay(long initialDelay) {
+            this.initialDelay = initialDelay;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * The consumer logs a start/complete log line when it polls. This
          * option allows you to configure the logging level for that. The option
          * is a org.apache.camel.LoggingLevel type.
          */
-        private LoggingLevel runLoggingLevel;
+        public BeanstalkConsumer runLoggingLevel(LoggingLevel runLoggingLevel) {
+            this.runLoggingLevel = runLoggingLevel;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * Allows for configuring a custom/shared thread pool to use for the
          * consumer. By default each consumer has its own single threaded thread
          * pool. The option is a java.util.concurrent.ScheduledExecutorService
          * type.
          */
-        private ScheduledExecutorService scheduledExecutorService;
+        public BeanstalkConsumer scheduledExecutorService(
+                ScheduledExecutorService scheduledExecutorService) {
+            this.scheduledExecutorService = scheduledExecutorService;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * To use a cron scheduler from either camel-spring or camel-quartz2
          * component. The option is a
          * org.apache.camel.spi.ScheduledPollConsumerScheduler type.
          */
-        private ScheduledPollConsumerScheduler scheduler;
+        public BeanstalkConsumer scheduler(
+                ScheduledPollConsumerScheduler scheduler) {
+            this.scheduler = scheduler;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * To configure additional properties when using a custom scheduler or
          * any of the Quartz2, Spring based scheduler. The option is a
          * java.util.Map<java.lang.String,java.lang.Object> type.
          */
-        private Map<String, Object> schedulerProperties;
+        public BeanstalkConsumer schedulerProperties(
+                Map<String, Object> schedulerProperties) {
+            this.schedulerProperties = schedulerProperties;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * Whether the scheduler should be auto started. The option is a boolean
          * type.
          */
-        private Boolean startScheduler;
+        public BeanstalkConsumer startScheduler(boolean startScheduler) {
+            this.startScheduler = startScheduler;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * Time unit for initialDelay and delay options. The option is a
          * java.util.concurrent.TimeUnit type.
          */
-        private TimeUnit timeUnit;
+        public BeanstalkConsumer timeUnit(TimeUnit timeUnit) {
+            this.timeUnit = timeUnit;
+            return (BeanstalkConsumer) this;
+        }
+
         /**
          * Controls if fixed delay or fixed rate is used. See
          * ScheduledExecutorService in JDK for details. The option is a boolean
          * type.
          */
-        private Boolean useFixedDelay;
+        public BeanstalkConsumer useFixedDelay(boolean useFixedDelay) {
+            this.useFixedDelay = useFixedDelay;
+            return (BeanstalkConsumer) this;
+        }
 
         public Boolean getAwaitJob() {
             return awaitJob;
@@ -441,7 +591,9 @@ public class BeanstalkEndpoint {
         }
     }
 
-    public static class BeanstalkProducer extends BeanstalkCommon {
+    public static class BeanstalkProducer
+            extends
+                BeanstalkCommon<BeanstalkProducer> {
     }
 
     public static enum BeanstalkCommand {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BlobServiceEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BlobServiceEndpoint.java
index cb1cf7f..221b682 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BlobServiceEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BlobServiceEndpoint.java
@@ -31,69 +31,131 @@ import org.apache.camel.spi.ExceptionHandler;
 public class BlobServiceEndpoint {
 
 
-    public static class BlobServiceCommon extends EndpointConfiguration {
+    public static class BlobServiceCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String containerOrBlobUri;
+        private Object azureBlobClient;
+        private Long blobOffset;
+        private BlobType blobType;
+        private Boolean closeStreamAfterRead;
+        private Object credentials;
+        private Long dataLength;
+        private String fileDir;
+        private Boolean publicForRead;
+        private Integer streamReadSize;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * Container or Blob compact Uri. The option is a java.lang.String type.
          */
-        private String containerOrBlobUri;
+        public T containerOrBlobUri(String containerOrBlobUri) {
+            this.containerOrBlobUri = containerOrBlobUri;
+            return (T) this;
+        }
+
         /**
          * The blob service client. The option is a
          * com.microsoft.azure.storage.blob.CloudBlob type.
          */
-        private Object azureBlobClient;
+        public T azureBlobClient(Object azureBlobClient) {
+            this.azureBlobClient = azureBlobClient;
+            return (T) this;
+        }
+
         /**
          * Set the blob offset for the upload or download operations, default is
          * 0. The option is a java.lang.Long type.
          */
-        private Long blobOffset;
+        public T blobOffset(Long blobOffset) {
+            this.blobOffset = blobOffset;
+            return (T) this;
+        }
+
         /**
          * Set a blob type, 'blockblob' is default. The option is a
          * org.apache.camel.component.azure.blob.BlobType type.
          */
-        private BlobType blobType;
+        public T blobType(BlobType blobType) {
+            this.blobType = blobType;
+            return (T) this;
+        }
+
         /**
          * Close the stream after read or keep it open, default is true. The
          * option is a boolean type.
          */
-        private Boolean closeStreamAfterRead;
+        public T closeStreamAfterRead(boolean closeStreamAfterRead) {
+            this.closeStreamAfterRead = closeStreamAfterRead;
+            return (T) this;
+        }
+
         /**
          * Set the storage credentials, required in most cases. The option is a
          * com.microsoft.azure.storage.StorageCredentials type.
          */
-        private Object credentials;
+        public T credentials(Object credentials) {
+            this.credentials = credentials;
+            return (T) this;
+        }
+
         /**
          * Set the data length for the download or page blob upload operations.
          * The option is a java.lang.Long type.
          */
-        private Long dataLength;
+        public T dataLength(Long dataLength) {
+            this.dataLength = dataLength;
+            return (T) this;
+        }
+
         /**
          * Set the file directory where the downloaded blobs will be saved to.
          * The option is a java.lang.String type.
          */
-        private String fileDir;
+        public T fileDir(String fileDir) {
+            this.fileDir = fileDir;
+            return (T) this;
+        }
+
         /**
          * Storage resources can be public for reading their content, if this
          * property is enabled then the credentials do not have to be set. The
          * option is a boolean type.
          */
-        private Boolean publicForRead;
+        public T publicForRead(boolean publicForRead) {
+            this.publicForRead = publicForRead;
+            return (T) this;
+        }
+
         /**
          * Set the minimum read size in bytes when reading the blob content. The
          * option is a int type.
          */
-        private Integer streamReadSize;
+        public T streamReadSize(int streamReadSize) {
+            this.streamReadSize = streamReadSize;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getContainerOrBlobUri() {
             return containerOrBlobUri;
@@ -192,7 +254,13 @@ public class BlobServiceEndpoint {
         }
     }
 
-    public static class BlobServiceConsumer extends BlobServiceCommon {
+    public static class BlobServiceConsumer
+            extends
+                BlobServiceCommon<BlobServiceConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -202,7 +270,11 @@ public class BlobServiceEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public BlobServiceConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (BlobServiceConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -210,12 +282,21 @@ public class BlobServiceEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public BlobServiceConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (BlobServiceConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public BlobServiceConsumer exchangePattern(
+                ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (BlobServiceConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -242,37 +323,70 @@ public class BlobServiceEndpoint {
         }
     }
 
-    public static class BlobServiceProducer extends BlobServiceCommon {
+    public static class BlobServiceProducer
+            extends
+                BlobServiceCommon<BlobServiceProducer> {
+        private Map<String, String> blobMetadata;
+        private String blobPrefix;
+        private Boolean closeStreamAfterWrite;
+        private BlobServiceOperations operation;
+        private Integer streamWriteSize;
+        private Boolean useFlatListing;
+
         /**
          * Set the blob meta-data. The option is a
          * java.util.Map<java.lang.String,java.lang.String> type.
          */
-        private Map<String, String> blobMetadata;
+        public BlobServiceProducer blobMetadata(Map<String, String> blobMetadata) {
+            this.blobMetadata = blobMetadata;
+            return (BlobServiceProducer) this;
+        }
+
         /**
          * Set a prefix which can be used for listing the blobs. The option is a
          * java.lang.String type.
          */
-        private String blobPrefix;
+        public BlobServiceProducer blobPrefix(String blobPrefix) {
+            this.blobPrefix = blobPrefix;
+            return (BlobServiceProducer) this;
+        }
+
         /**
          * Close the stream after write or keep it open, default is true. The
          * option is a boolean type.
          */
-        private Boolean closeStreamAfterWrite;
+        public BlobServiceProducer closeStreamAfterWrite(
+                boolean closeStreamAfterWrite) {
+            this.closeStreamAfterWrite = closeStreamAfterWrite;
+            return (BlobServiceProducer) this;
+        }
+
         /**
          * Blob service operation hint to the producer. The option is a
          * org.apache.camel.component.azure.blob.BlobServiceOperations type.
          */
-        private BlobServiceOperations operation;
+        public BlobServiceProducer operation(BlobServiceOperations operation) {
+            this.operation = operation;
+            return (BlobServiceProducer) this;
+        }
+
         /**
          * Set the size of the buffer for writing block and page blocks. The
          * option is a int type.
          */
-        private Integer streamWriteSize;
+        public BlobServiceProducer streamWriteSize(int streamWriteSize) {
+            this.streamWriteSize = streamWriteSize;
+            return (BlobServiceProducer) this;
+        }
+
         /**
          * Specify if the flat or hierarchical blob listing should be used. The
          * option is a boolean type.
          */
-        private Boolean useFlatListing;
+        public BlobServiceProducer useFlatListing(boolean useFlatListing) {
+            this.useFlatListing = useFlatListing;
+            return (BlobServiceProducer) this;
+        }
 
         public Map<String, String> getBlobMetadata() {
             return blobMetadata;
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BonitaEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BonitaEndpoint.java
index 2bc4718..0e4cbea 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BonitaEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BonitaEndpoint.java
@@ -29,49 +29,91 @@ import org.apache.camel.spi.ExceptionHandler;
 public class BonitaEndpoint {
 
 
-    public static class BonitaCommon extends EndpointConfiguration {
+    public static class BonitaCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private BonitaOperation operation;
+        private String hostname;
+        private String port;
+        private String processName;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+        private String password;
+        private String username;
+
         /**
          * Operation to use. The option is a
          * org.apache.camel.component.bonita.util.BonitaOperation type.
          */
-        private BonitaOperation operation;
+        public T operation(BonitaOperation operation) {
+            this.operation = operation;
+            return (T) this;
+        }
+
         /**
          * Hostname where Bonita engine runs. The option is a java.lang.String
          * type.
          */
-        private String hostname;
+        public T hostname(String hostname) {
+            this.hostname = hostname;
+            return (T) this;
+        }
+
         /**
          * Port of the server hosting Bonita engine. The option is a
          * java.lang.String type.
          */
-        private String port;
+        public T port(String port) {
+            this.port = port;
+            return (T) this;
+        }
+
         /**
          * Name of the process involved in the operation. The option is a
          * java.lang.String type.
          */
-        private String processName;
+        public T processName(String processName) {
+            this.processName = processName;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
+
         /**
          * Password to authenticate to Bonita engine. The option is a
          * java.lang.String type.
          */
-        private String password;
+        public T password(String password) {
+            this.password = password;
+            return (T) this;
+        }
+
         /**
          * Username to authenticate to Bonita engine. The option is a
          * java.lang.String type.
          */
-        private String username;
+        public T username(String username) {
+            this.username = username;
+            return (T) this;
+        }
 
         public BonitaOperation getOperation() {
             return operation;
@@ -138,7 +180,11 @@ public class BonitaEndpoint {
         }
     }
 
-    public static class BonitaConsumer extends BonitaCommon {
+    public static class BonitaConsumer extends BonitaCommon<BonitaConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -148,7 +194,11 @@ public class BonitaEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public BonitaConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (BonitaConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -156,12 +206,19 @@ public class BonitaEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public BonitaConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (BonitaConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public BonitaConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (BonitaConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -188,7 +245,7 @@ public class BonitaEndpoint {
         }
     }
 
-    public static class BonitaProducer extends BonitaCommon {
+    public static class BonitaProducer extends BonitaCommon<BonitaProducer> {
     }
 
     public static enum BonitaOperation {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BoxEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BoxEndpoint.java
index 2303c19..3083c43 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BoxEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BoxEndpoint.java
@@ -31,110 +31,212 @@ import org.apache.camel.spi.ExceptionHandler;
 public class BoxEndpoint {
 
 
-    public static class BoxCommon extends EndpointConfiguration {
+    public static class BoxCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private BoxApiName apiName;
+        private String methodName;
+        private String clientId;
+        private String enterpriseId;
+        private String inBody;
+        private String userId;
+        private Boolean basicPropertyBinding;
+        private Map<String, Object> httpParams;
+        private Boolean synchronous;
+        private Object accessTokenCache;
+        private String clientSecret;
+        private EncryptionAlgorithm encryptionAlgorithm;
+        private Integer maxCacheEntries;
+        private String authenticationType;
+        private String privateKeyFile;
+        private String privateKeyPassword;
+        private String publicKeyId;
+        private Object sslContextParameters;
+        private String userName;
+        private String userPassword;
+
         /**
          * What kind of operation to perform. The option is a
          * org.apache.camel.component.box.internal.BoxApiName type.
          */
-        private BoxApiName apiName;
+        public T apiName(BoxApiName apiName) {
+            this.apiName = apiName;
+            return (T) this;
+        }
+
         /**
          * What sub operation to use for the selected operation. The option is a
          * java.lang.String type.
          */
-        private String methodName;
+        public T methodName(String methodName) {
+            this.methodName = methodName;
+            return (T) this;
+        }
+
         /**
          * Box application client ID. The option is a java.lang.String type.
          */
-        private String clientId;
+        public T clientId(String clientId) {
+            this.clientId = clientId;
+            return (T) this;
+        }
+
         /**
          * The enterprise ID to use for an App Enterprise. The option is a
          * java.lang.String type.
          */
-        private String enterpriseId;
+        public T enterpriseId(String enterpriseId) {
+            this.enterpriseId = enterpriseId;
+            return (T) this;
+        }
+
         /**
          * Sets the name of a parameter to be passed in the exchange In Body.
          * The option is a java.lang.String type.
          */
-        private String inBody;
+        public T inBody(String inBody) {
+            this.inBody = inBody;
+            return (T) this;
+        }
+
         /**
          * The user ID to use for an App User. The option is a java.lang.String
          * type.
          */
-        private String userId;
+        public T userId(String userId) {
+            this.userId = userId;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Custom HTTP params for settings like proxy host. The option is a
          * java.util.Map<java.lang.String,java.lang.Object> type.
          */
-        private Map<String, Object> httpParams;
+        public T httpParams(Map<String, Object> httpParams) {
+            this.httpParams = httpParams;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
+
         /**
          * Custom Access Token Cache for storing and retrieving access tokens.
          * The option is a com.box.sdk.IAccessTokenCache type.
          */
-        private Object accessTokenCache;
+        public T accessTokenCache(Object accessTokenCache) {
+            this.accessTokenCache = accessTokenCache;
+            return (T) this;
+        }
+
         /**
          * Box application client secret. The option is a java.lang.String type.
          */
-        private String clientSecret;
+        public T clientSecret(String clientSecret) {
+            this.clientSecret = clientSecret;
+            return (T) this;
+        }
+
         /**
          * The type of encryption algorithm for JWT. Supported Algorithms:
          * RSA_SHA_256 RSA_SHA_384 RSA_SHA_512. The option is a
          * com.box.sdk.EncryptionAlgorithm type.
          */
-        private EncryptionAlgorithm encryptionAlgorithm;
+        public T encryptionAlgorithm(EncryptionAlgorithm encryptionAlgorithm) {
+            this.encryptionAlgorithm = encryptionAlgorithm;
+            return (T) this;
+        }
+
         /**
          * The maximum number of access tokens in cache. The option is a int
          * type.
          */
-        private Integer maxCacheEntries;
+        public T maxCacheEntries(int maxCacheEntries) {
+            this.maxCacheEntries = maxCacheEntries;
+            return (T) this;
+        }
+
         /**
          * The type of authentication for connection. Types of Authentication:
          * STANDARD_AUTHENTICATION - OAuth 2.0 (3-legged) SERVER_AUTHENTICATION
          * - OAuth 2.0 with JSON Web Tokens. The option is a java.lang.String
          * type.
          */
-        private String authenticationType;
+        public T authenticationType(String authenticationType) {
+            this.authenticationType = authenticationType;
+            return (T) this;
+        }
+
         /**
          * The private key for generating the JWT signature. The option is a
          * java.lang.String type.
          */
-        private String privateKeyFile;
+        public T privateKeyFile(String privateKeyFile) {
+            this.privateKeyFile = privateKeyFile;
+            return (T) this;
+        }
+
         /**
          * The password for the private key. The option is a java.lang.String
          * type.
          */
-        private String privateKeyPassword;
+        public T privateKeyPassword(String privateKeyPassword) {
+            this.privateKeyPassword = privateKeyPassword;
+            return (T) this;
+        }
+
         /**
          * The ID for public key for validating the JWT signature. The option is
          * a java.lang.String type.
          */
-        private String publicKeyId;
+        public T publicKeyId(String publicKeyId) {
+            this.publicKeyId = publicKeyId;
+            return (T) this;
+        }
+
         /**
          * To configure security using SSLContextParameters. The option is a
          * org.apache.camel.support.jsse.SSLContextParameters type.
          */
-        private Object sslContextParameters;
+        public T sslContextParameters(Object sslContextParameters) {
+            this.sslContextParameters = sslContextParameters;
+            return (T) this;
+        }
+
         /**
          * Box user name, MUST be provided. The option is a java.lang.String
          * type.
          */
-        private String userName;
+        public T userName(String userName) {
+            this.userName = userName;
+            return (T) this;
+        }
+
         /**
          * Box user password, MUST be provided if authSecureStorage is not set,
          * or returns null on first call. The option is a java.lang.String type.
          */
-        private String userPassword;
+        public T userPassword(String userPassword) {
+            this.userPassword = userPassword;
+            return (T) this;
+        }
 
         public BoxApiName getApiName() {
             return apiName;
@@ -298,7 +400,11 @@ public class BoxEndpoint {
         }
     }
 
-    public static class BoxConsumer extends BoxCommon {
+    public static class BoxConsumer extends BoxCommon<BoxConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -308,7 +414,11 @@ public class BoxEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public BoxConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (BoxConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -316,12 +426,19 @@ public class BoxEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public BoxConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (BoxConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public BoxConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (BoxConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -348,7 +465,7 @@ public class BoxEndpoint {
         }
     }
 
-    public static class BoxProducer extends BoxCommon {
+    public static class BoxProducer extends BoxCommon<BoxProducer> {
     }
 
     public static enum BoxApiName {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BraintreeEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BraintreeEndpoint.java
index cad7666..6be665e 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BraintreeEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BraintreeEndpoint.java
@@ -31,79 +31,151 @@ import org.apache.camel.spi.ExceptionHandler;
 public class BraintreeEndpoint {
 
 
-    public static class BraintreeCommon extends EndpointConfiguration {
+    public static class BraintreeCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private BraintreeApiName apiName;
+        private String methodName;
+        private String environment;
+        private String inBody;
+        private String merchantId;
+        private String privateKey;
+        private String publicKey;
+        private String accessToken;
+        private Boolean basicPropertyBinding;
+        private Integer httpReadTimeout;
+        private Boolean synchronous;
+        private Level httpLogLevel;
+        private String proxyHost;
+        private Integer proxyPort;
+
         /**
          * What kind of operation to perform. The option is a
          * org.apache.camel.component.braintree.internal.BraintreeApiName type.
          */
-        private BraintreeApiName apiName;
+        public T apiName(BraintreeApiName apiName) {
+            this.apiName = apiName;
+            return (T) this;
+        }
+
         /**
          * What sub operation to use for the selected operation. The option is a
          * java.lang.String type.
          */
-        private String methodName;
+        public T methodName(String methodName) {
+            this.methodName = methodName;
+            return (T) this;
+        }
+
         /**
          * The environment Either SANDBOX or PRODUCTION. The option is a
          * java.lang.String type.
          */
-        private String environment;
+        public T environment(String environment) {
+            this.environment = environment;
+            return (T) this;
+        }
+
         /**
          * Sets the name of a parameter to be passed in the exchange In Body.
          * The option is a java.lang.String type.
          */
-        private String inBody;
+        public T inBody(String inBody) {
+            this.inBody = inBody;
+            return (T) this;
+        }
+
         /**
          * The merchant id provided by Braintree. The option is a
          * java.lang.String type.
          */
-        private String merchantId;
+        public T merchantId(String merchantId) {
+            this.merchantId = merchantId;
+            return (T) this;
+        }
+
         /**
          * The private key provided by Braintree. The option is a
          * java.lang.String type.
          */
-        private String privateKey;
+        public T privateKey(String privateKey) {
+            this.privateKey = privateKey;
+            return (T) this;
+        }
+
         /**
          * The public key provided by Braintree. The option is a
          * java.lang.String type.
          */
-        private String publicKey;
+        public T publicKey(String publicKey) {
+            this.publicKey = publicKey;
+            return (T) this;
+        }
+
         /**
          * The access token granted by a merchant to another in order to process
          * transactions on their behalf. Used in place of environment, merchant
          * id, public key and private key fields. The option is a
          * java.lang.String type.
          */
-        private String accessToken;
+        public T accessToken(String accessToken) {
+            this.accessToken = accessToken;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Set read timeout for http calls. The option is a java.lang.Integer
          * type.
          */
-        private Integer httpReadTimeout;
+        public T httpReadTimeout(Integer httpReadTimeout) {
+            this.httpReadTimeout = httpReadTimeout;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
+
         /**
          * Set logging level for http calls, see java.util.logging.Level. The
          * option is a java.lang.String type.
          */
-        private Level httpLogLevel;
+        public T httpLogLevel(Level httpLogLevel) {
+            this.httpLogLevel = httpLogLevel;
+            return (T) this;
+        }
+
         /**
          * The proxy host. The option is a java.lang.String type.
          */
-        private String proxyHost;
+        public T proxyHost(String proxyHost) {
+            this.proxyHost = proxyHost;
+            return (T) this;
+        }
+
         /**
          * The proxy port. The option is a java.lang.Integer type.
          */
-        private Integer proxyPort;
+        public T proxyPort(Integer proxyPort) {
+            this.proxyPort = proxyPort;
+            return (T) this;
+        }
 
         public BraintreeApiName getApiName() {
             return apiName;
@@ -218,7 +290,13 @@ public class BraintreeEndpoint {
         }
     }
 
-    public static class BraintreeConsumer extends BraintreeCommon {
+    public static class BraintreeConsumer
+            extends
+                BraintreeCommon<BraintreeConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -228,7 +306,11 @@ public class BraintreeEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public BraintreeConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (BraintreeConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -236,12 +318,20 @@ public class BraintreeEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public BraintreeConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (BraintreeConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public BraintreeConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (BraintreeConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -268,7 +358,9 @@ public class BraintreeEndpoint {
         }
     }
 
-    public static class BraintreeProducer extends BraintreeCommon {
+    public static class BraintreeProducer
+            extends
+                BraintreeCommon<BraintreeProducer> {
     }
 
     public static enum BraintreeApiName {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BrowseEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BrowseEndpoint.java
index 0167859..5ce713e 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BrowseEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/BrowseEndpoint.java
@@ -30,24 +30,41 @@ import org.apache.camel.spi.ExceptionHandler;
 public class BrowseEndpoint {
 
 
-    public static class BrowseCommon extends EndpointConfiguration {
+    public static class BrowseCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String name;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * A name which can be any string to uniquely identify the endpoint. The
          * option is a java.lang.String type.
          */
-        private String name;
+        public T name(String name) {
+            this.name = name;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getName() {
             return name;
@@ -74,7 +91,11 @@ public class BrowseEndpoint {
         }
     }
 
-    public static class BrowseConsumer extends BrowseCommon {
+    public static class BrowseConsumer extends BrowseCommon<BrowseConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -84,7 +105,11 @@ public class BrowseEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public BrowseConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (BrowseConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -92,12 +117,19 @@ public class BrowseEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public BrowseConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (BrowseConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public BrowseConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (BrowseConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -124,6 +156,6 @@ public class BrowseEndpoint {
         }
     }
 
-    public static class BrowseProducer extends BrowseCommon {
+    public static class BrowseProducer extends BrowseCommon<BrowseProducer> {
     }
 }
\ No newline at end of file
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CMEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CMEndpoint.java
index 3fcc8e0..6090469 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CMEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CMEndpoint.java
@@ -27,17 +27,35 @@ import javax.annotation.Generated;
 public class CMEndpoint {
 
 
-    public static class CMCommon extends EndpointConfiguration {
+    public static class CMCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String host;
+        private String defaultFrom;
+        private Integer defaultMaxNumberOfParts;
+        private String productToken;
+        private Boolean testConnectionOnStartup;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * SMS Provider HOST with scheme. The option is a java.lang.String type.
          */
-        private String host;
+        public T host(String host) {
+            this.host = host;
+            return (T) this;
+        }
+
         /**
          * This is the sender name. The maximum length is 11 characters. The
          * option is a
          * (@javax.validation.constraints.NotNull,@javax.validation.constraints.Size(min=1, max=11) :: java.lang.String) type.
          */
-        private String defaultFrom;
+        public T defaultFrom(String defaultFrom) {
+            this.defaultFrom = defaultFrom;
+            return (T) this;
+        }
+
         /**
          * If it is a multipart message forces the max number. Message can be
          * truncated. Technically the gateway will first check if a message is
@@ -46,29 +64,48 @@ public class CMEndpoint {
          * is a
          * (@javax.validation.constraints.Min(1L),@javax.validation.constraints.Max(8L) :: int) type.
          */
-        private Integer defaultMaxNumberOfParts;
+        public T defaultMaxNumberOfParts(int defaultMaxNumberOfParts) {
+            this.defaultMaxNumberOfParts = defaultMaxNumberOfParts;
+            return (T) this;
+        }
+
         /**
          * The unique token to use. The option is a
          * (@javax.validation.constraints.NotNull :: java.lang.String) type.
          */
-        private String productToken;
+        public T productToken(String productToken) {
+            this.productToken = productToken;
+            return (T) this;
+        }
+
         /**
          * Whether to test the connection to the SMS Gateway on startup. The
          * option is a boolean type.
          */
-        private Boolean testConnectionOnStartup;
+        public T testConnectionOnStartup(boolean testConnectionOnStartup) {
+            this.testConnectionOnStartup = testConnectionOnStartup;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getHost() {
             return host;
@@ -127,9 +164,9 @@ public class CMEndpoint {
         }
     }
 
-    public static class CMConsumer extends CMCommon {
+    public static class CMConsumer extends CMCommon<CMConsumer> {
     }
 
-    public static class CMProducer extends CMCommon {
+    public static class CMProducer extends CMCommon<CMProducer> {
     }
 }
\ No newline at end of file
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CMISEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CMISEndpoint.java
index f0e31e3..4afd034 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CMISEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CMISEndpoint.java
@@ -30,57 +30,109 @@ import org.apache.camel.spi.ExceptionHandler;
 public class CMISEndpoint {
 
 
-    public static class CMISCommon extends EndpointConfiguration {
+    public static class CMISCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String cmsUrl;
+        private Integer pageSize;
+        private Boolean readContent;
+        private Integer readCount;
+        private String repositoryId;
+        private Boolean basicPropertyBinding;
+        private Object sessionFacadeFactory;
+        private Boolean synchronous;
+        private String password;
+        private String username;
+
         /**
          * URL to the cmis repository. The option is a java.lang.String type.
          */
-        private String cmsUrl;
+        public T cmsUrl(String cmsUrl) {
+            this.cmsUrl = cmsUrl;
+            return (T) this;
+        }
+
         /**
          * Number of nodes to retrieve per page. The option is a int type.
          */
-        private Integer pageSize;
+        public T pageSize(int pageSize) {
+            this.pageSize = pageSize;
+            return (T) this;
+        }
+
         /**
          * If set to true, the content of document node will be retrieved in
          * addition to the properties. The option is a boolean type.
          */
-        private Boolean readContent;
+        public T readContent(boolean readContent) {
+            this.readContent = readContent;
+            return (T) this;
+        }
+
         /**
          * Max number of nodes to read. The option is a int type.
          */
-        private Integer readCount;
+        public T readCount(int readCount) {
+            this.readCount = readCount;
+            return (T) this;
+        }
+
         /**
          * The Id of the repository to use. If not specified the first available
          * repository is used. The option is a java.lang.String type.
          */
-        private String repositoryId;
+        public T repositoryId(String repositoryId) {
+            this.repositoryId = repositoryId;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * To use a custom CMISSessionFacadeFactory to create the
          * CMISSessionFacade instances. The option is a
          * org.apache.camel.component.cmis.CMISSessionFacadeFactory type.
          */
-        private Object sessionFacadeFactory;
+        public T sessionFacadeFactory(Object sessionFacadeFactory) {
+            this.sessionFacadeFactory = sessionFacadeFactory;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
+
         /**
          * Password for the cmis repository. The option is a java.lang.String
          * type.
          */
-        private String password;
+        public T password(String password) {
+            this.password = password;
+            return (T) this;
+        }
+
         /**
          * Username for the cmis repository. The option is a java.lang.String
          * type.
          */
-        private String username;
+        public T username(String username) {
+            this.username = username;
+            return (T) this;
+        }
 
         public String getCmsUrl() {
             return cmsUrl;
@@ -163,7 +215,12 @@ public class CMISEndpoint {
         }
     }
 
-    public static class CMISConsumer extends CMISCommon {
+    public static class CMISConsumer extends CMISCommon<CMISConsumer> {
+        private Boolean bridgeErrorHandler;
+        private String query;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -173,14 +230,22 @@ public class CMISEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public CMISConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (CMISConsumer) this;
+        }
+
         /**
          * The cmis query to execute against the repository. If not specified,
          * the consumer will retrieve every node from the content repository by
          * iterating the content tree recursively. The option is a
          * java.lang.String type.
          */
-        private String query;
+        public CMISConsumer query(String query) {
+            this.query = query;
+            return (CMISConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -188,12 +253,19 @@ public class CMISEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public CMISConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (CMISConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public CMISConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (CMISConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -228,13 +300,18 @@ public class CMISEndpoint {
         }
     }
 
-    public static class CMISProducer extends CMISCommon {
+    public static class CMISProducer extends CMISCommon<CMISProducer> {
+        private Boolean queryMode;
+
         /**
          * If true, will execute the cmis query from the message body and return
          * result, otherwise will create a node in the cmis repository. The
          * option is a boolean type.
          */
-        private Boolean queryMode;
+        public CMISProducer queryMode(boolean queryMode) {
+            this.queryMode = queryMode;
+            return (CMISProducer) this;
+        }
 
         public Boolean getQueryMode() {
             return queryMode;
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CaffeineCacheEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CaffeineCacheEndpoint.java
index ffa55fa..5a5b93e 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CaffeineCacheEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CaffeineCacheEndpoint.java
@@ -29,38 +29,70 @@ import org.apache.camel.spi.ExceptionHandler;
 public class CaffeineCacheEndpoint {
 
 
-    public static class CaffeineCacheCommon extends EndpointConfiguration {
+    public static class CaffeineCacheCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String cacheName;
+        private Boolean createCacheIfNotExist;
+        private Boolean basicPropertyBinding;
+        private Class<Object> keyType;
+        private Boolean synchronous;
+        private Class<Object> valueType;
+
         /**
          * the cache name. The option is a java.lang.String type.
          */
-        private String cacheName;
+        public T cacheName(String cacheName) {
+            this.cacheName = cacheName;
+            return (T) this;
+        }
+
         /**
          * Configure if a cache need to be created if it does exist or can't be
          * pre-configured. The option is a boolean type.
          */
-        private Boolean createCacheIfNotExist;
+        public T createCacheIfNotExist(boolean createCacheIfNotExist) {
+            this.createCacheIfNotExist = createCacheIfNotExist;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * The cache key type, default java.lang.Object. The option is a
          * java.lang.String type.
          */
-        private Class<Object> keyType;
+        public T keyType(Class<Object> keyType) {
+            this.keyType = keyType;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
+
         /**
          * The cache value type, default java.lang.Object. The option is a
          * java.lang.String type.
          */
-        private Class<Object> valueType;
+        public T valueType(Class<Object> valueType) {
+            this.valueType = valueType;
+            return (T) this;
+        }
 
         public String getCacheName() {
             return cacheName;
@@ -111,7 +143,13 @@ public class CaffeineCacheEndpoint {
         }
     }
 
-    public static class CaffeineCacheConsumer extends CaffeineCacheCommon {
+    public static class CaffeineCacheConsumer
+            extends
+                CaffeineCacheCommon<CaffeineCacheConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -121,7 +159,12 @@ public class CaffeineCacheEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public CaffeineCacheConsumer bridgeErrorHandler(
+                boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (CaffeineCacheConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -129,12 +172,21 @@ public class CaffeineCacheEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public CaffeineCacheConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (CaffeineCacheConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public CaffeineCacheConsumer exchangePattern(
+                ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (CaffeineCacheConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -161,66 +213,130 @@ public class CaffeineCacheEndpoint {
         }
     }
 
-    public static class CaffeineCacheProducer extends CaffeineCacheCommon {
+    public static class CaffeineCacheProducer
+            extends
+                CaffeineCacheCommon<CaffeineCacheProducer> {
+        private String action;
+        private Object cache;
+        private Object cacheLoader;
+        private EvictionType evictionType;
+        private Integer expireAfterAccessTime;
+        private Integer expireAfterWriteTime;
+        private Integer initialCapacity;
+        private Object key;
+        private Integer maximumSize;
+        private Object removalListener;
+        private Object statsCounter;
+        private Boolean statsEnabled;
+
         /**
          * To configure the default cache action. If an action is set in the
          * message header, then the operation from the header takes precedence.
          * The option is a java.lang.String type.
          */
-        private String action;
+        public CaffeineCacheProducer action(String action) {
+            this.action = action;
+            return (CaffeineCacheProducer) this;
+        }
+
         /**
          * To configure an already instantiated cache to be used. The option is
          * a com.github.benmanes.caffeine.cache.Cache type.
          */
-        private Object cache;
+        public CaffeineCacheProducer cache(Object cache) {
+            this.cache = cache;
+            return (CaffeineCacheProducer) this;
+        }
+
         /**
          * To configure a CacheLoader in case of a LoadCache use. The option is
          * a com.github.benmanes.caffeine.cache.CacheLoader type.
          */
-        private Object cacheLoader;
+        public CaffeineCacheProducer cacheLoader(Object cacheLoader) {
+            this.cacheLoader = cacheLoader;
+            return (CaffeineCacheProducer) this;
+        }
+
         /**
          * Set the eviction Type for this cache. The option is a
          * org.apache.camel.component.caffeine.EvictionType type.
          */
-        private EvictionType evictionType;
+        public CaffeineCacheProducer evictionType(EvictionType evictionType) {
+            this.evictionType = evictionType;
+            return (CaffeineCacheProducer) this;
+        }
+
         /**
          * Set the expire After Access Time in case of time based Eviction (in
          * seconds). The option is a int type.
          */
-        private Integer expireAfterAccessTime;
+        public CaffeineCacheProducer expireAfterAccessTime(
+                int expireAfterAccessTime) {
+            this.expireAfterAccessTime = expireAfterAccessTime;
+            return (CaffeineCacheProducer) this;
+        }
+
         /**
          * Set the expire After Access Write in case of time based Eviction (in
          * seconds). The option is a int type.
          */
-        private Integer expireAfterWriteTime;
+        public CaffeineCacheProducer expireAfterWriteTime(
+                int expireAfterWriteTime) {
+            this.expireAfterWriteTime = expireAfterWriteTime;
+            return (CaffeineCacheProducer) this;
+        }
+
         /**
          * Set the initial Capacity for the cache. The option is a int type.
          */
-        private Integer initialCapacity;
+        public CaffeineCacheProducer initialCapacity(int initialCapacity) {
+            this.initialCapacity = initialCapacity;
+            return (CaffeineCacheProducer) this;
+        }
+
         /**
          * To configure the default action key. If a key is set in the message
          * header, then the key from the header takes precedence. The option is
          * a java.lang.Object type.
          */
-        private Object key;
+        public CaffeineCacheProducer key(Object key) {
+            this.key = key;
+            return (CaffeineCacheProducer) this;
+        }
+
         /**
          * Set the maximum size for the cache. The option is a int type.
          */
-        private Integer maximumSize;
+        public CaffeineCacheProducer maximumSize(int maximumSize) {
+            this.maximumSize = maximumSize;
+            return (CaffeineCacheProducer) this;
+        }
+
         /**
          * Set a specific removal Listener for the cache. The option is a
          * com.github.benmanes.caffeine.cache.RemovalListener type.
          */
-        private Object removalListener;
+        public CaffeineCacheProducer removalListener(Object removalListener) {
+            this.removalListener = removalListener;
+            return (CaffeineCacheProducer) this;
+        }
+
         /**
          * Set a specific Stats Counter for the cache stats. The option is a
          * com.github.benmanes.caffeine.cache.stats.StatsCounter type.
          */
-        private Object statsCounter;
+        public CaffeineCacheProducer statsCounter(Object statsCounter) {
+            this.statsCounter = statsCounter;
+            return (CaffeineCacheProducer) this;
+        }
+
         /**
          * To enable stats on the cache. The option is a boolean type.
          */
-        private Boolean statsEnabled;
+        public CaffeineCacheProducer statsEnabled(boolean statsEnabled) {
+            this.statsEnabled = statsEnabled;
+            return (CaffeineCacheProducer) this;
+        }
 
         public String getAction() {
             return action;
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CaffeineLoadCacheEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CaffeineLoadCacheEndpoint.java
index c6658be..072e659 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CaffeineLoadCacheEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CaffeineLoadCacheEndpoint.java
@@ -30,38 +30,70 @@ import org.apache.camel.spi.ExceptionHandler;
 public class CaffeineLoadCacheEndpoint {
 
 
-    public static class CaffeineLoadCacheCommon extends EndpointConfiguration {
+    public static class CaffeineLoadCacheCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String cacheName;
+        private Boolean createCacheIfNotExist;
+        private Boolean basicPropertyBinding;
+        private Class<Object> keyType;
+        private Boolean synchronous;
+        private Class<Object> valueType;
+
         /**
          * the cache name. The option is a java.lang.String type.
          */
-        private String cacheName;
+        public T cacheName(String cacheName) {
+            this.cacheName = cacheName;
+            return (T) this;
+        }
+
         /**
          * Configure if a cache need to be created if it does exist or can't be
          * pre-configured. The option is a boolean type.
          */
-        private Boolean createCacheIfNotExist;
+        public T createCacheIfNotExist(boolean createCacheIfNotExist) {
+            this.createCacheIfNotExist = createCacheIfNotExist;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * The cache key type, default java.lang.Object. The option is a
          * java.lang.String type.
          */
-        private Class<Object> keyType;
+        public T keyType(Class<Object> keyType) {
+            this.keyType = keyType;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
+
         /**
          * The cache value type, default java.lang.Object. The option is a
          * java.lang.String type.
          */
-        private Class<Object> valueType;
+        public T valueType(Class<Object> valueType) {
+            this.valueType = valueType;
+            return (T) this;
+        }
 
         public String getCacheName() {
             return cacheName;
@@ -114,7 +146,11 @@ public class CaffeineLoadCacheEndpoint {
 
     public static class CaffeineLoadCacheConsumer
             extends
-                CaffeineLoadCacheCommon {
+                CaffeineLoadCacheCommon<CaffeineLoadCacheConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -124,7 +160,12 @@ public class CaffeineLoadCacheEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public CaffeineLoadCacheConsumer bridgeErrorHandler(
+                boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (CaffeineLoadCacheConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -132,12 +173,21 @@ public class CaffeineLoadCacheEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public CaffeineLoadCacheConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (CaffeineLoadCacheConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public CaffeineLoadCacheConsumer exchangePattern(
+                ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (CaffeineLoadCacheConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -166,66 +216,128 @@ public class CaffeineLoadCacheEndpoint {
 
     public static class CaffeineLoadCacheProducer
             extends
-                CaffeineLoadCacheCommon {
+                CaffeineLoadCacheCommon<CaffeineLoadCacheProducer> {
+        private String action;
+        private Object cache;
+        private Object cacheLoader;
+        private EvictionType evictionType;
+        private Integer expireAfterAccessTime;
+        private Integer expireAfterWriteTime;
+        private Integer initialCapacity;
+        private Object key;
+        private Integer maximumSize;
+        private Object removalListener;
+        private Object statsCounter;
+        private Boolean statsEnabled;
+
         /**
          * To configure the default cache action. If an action is set in the
          * message header, then the operation from the header takes precedence.
          * The option is a java.lang.String type.
          */
-        private String action;
+        public CaffeineLoadCacheProducer action(String action) {
+            this.action = action;
+            return (CaffeineLoadCacheProducer) this;
+        }
+
         /**
          * To configure an already instantiated cache to be used. The option is
          * a com.github.benmanes.caffeine.cache.Cache type.
          */
-        private Object cache;
+        public CaffeineLoadCacheProducer cache(Object cache) {
+            this.cache = cache;
+            return (CaffeineLoadCacheProducer) this;
+        }
+
         /**
          * To configure a CacheLoader in case of a LoadCache use. The option is
          * a com.github.benmanes.caffeine.cache.CacheLoader type.
          */
-        private Object cacheLoader;
+        public CaffeineLoadCacheProducer cacheLoader(Object cacheLoader) {
+            this.cacheLoader = cacheLoader;
+            return (CaffeineLoadCacheProducer) this;
+        }
+
         /**
          * Set the eviction Type for this cache. The option is a
          * org.apache.camel.component.caffeine.EvictionType type.
          */
-        private EvictionType evictionType;
+        public CaffeineLoadCacheProducer evictionType(EvictionType evictionType) {
+            this.evictionType = evictionType;
+            return (CaffeineLoadCacheProducer) this;
+        }
+
         /**
          * Set the expire After Access Time in case of time based Eviction (in
          * seconds). The option is a int type.
          */
-        private Integer expireAfterAccessTime;
+        public CaffeineLoadCacheProducer expireAfterAccessTime(
+                int expireAfterAccessTime) {
+            this.expireAfterAccessTime = expireAfterAccessTime;
+            return (CaffeineLoadCacheProducer) this;
+        }
+
         /**
          * Set the expire After Access Write in case of time based Eviction (in
          * seconds). The option is a int type.
          */
-        private Integer expireAfterWriteTime;
+        public CaffeineLoadCacheProducer expireAfterWriteTime(
+                int expireAfterWriteTime) {
+            this.expireAfterWriteTime = expireAfterWriteTime;
+            return (CaffeineLoadCacheProducer) this;
+        }
+
         /**
          * Set the initial Capacity for the cache. The option is a int type.
          */
-        private Integer initialCapacity;
+        public CaffeineLoadCacheProducer initialCapacity(int initialCapacity) {
+            this.initialCapacity = initialCapacity;
+            return (CaffeineLoadCacheProducer) this;
+        }
+
         /**
          * To configure the default action key. If a key is set in the message
          * header, then the key from the header takes precedence. The option is
          * a java.lang.Object type.
          */
-        private Object key;
+        public CaffeineLoadCacheProducer key(Object key) {
+            this.key = key;
+            return (CaffeineLoadCacheProducer) this;
+        }
+
         /**
          * Set the maximum size for the cache. The option is a int type.
          */
-        private Integer maximumSize;
+        public CaffeineLoadCacheProducer maximumSize(int maximumSize) {
+            this.maximumSize = maximumSize;
+            return (CaffeineLoadCacheProducer) this;
+        }
+
         /**
          * Set a specific removal Listener for the cache. The option is a
          * com.github.benmanes.caffeine.cache.RemovalListener type.
          */
-        private Object removalListener;
+        public CaffeineLoadCacheProducer removalListener(Object removalListener) {
+            this.removalListener = removalListener;
+            return (CaffeineLoadCacheProducer) this;
+        }
+
         /**
          * Set a specific Stats Counter for the cache stats. The option is a
          * com.github.benmanes.caffeine.cache.stats.StatsCounter type.
          */
-        private Object statsCounter;
+        public CaffeineLoadCacheProducer statsCounter(Object statsCounter) {
+            this.statsCounter = statsCounter;
+            return (CaffeineLoadCacheProducer) this;
+        }
+
         /**
          * To enable stats on the cache. The option is a boolean type.
          */
-        private Boolean statsEnabled;
+        public CaffeineLoadCacheProducer statsEnabled(boolean statsEnabled) {
+            this.statsEnabled = statsEnabled;
+            return (CaffeineLoadCacheProducer) this;
+        }
 
         public String getAction() {
             return action;
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CassandraEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CassandraEndpoint.java
index 36942bf..16bbcdd 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CassandraEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CassandraEndpoint.java
@@ -36,88 +36,170 @@ import org.apache.camel.spi.ScheduledPollConsumerScheduler;
 public class CassandraEndpoint {
 
 
-    public static class CassandraCommon extends EndpointConfiguration {
+    public static class CassandraCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String beanRef;
+        private String hosts;
+        private Integer port;
+        private String keyspace;
+        private Object cluster;
+        private String clusterName;
+        private ConsistencyLevel consistencyLevel;
+        private String cql;
+        private String loadBalancingPolicy;
+        private String password;
+        private Boolean prepareStatements;
+        private Object resultSetConversionStrategy;
+        private Object session;
+        private String username;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * beanRef is defined using bean:id. The option is a java.lang.String
          * type.
          */
-        private String beanRef;
+        public T beanRef(String beanRef) {
+            this.beanRef = beanRef;
+            return (T) this;
+        }
+
         /**
          * Hostname(s) cassansdra server(s). Multiple hosts can be separated by
          * comma. The option is a java.lang.String type.
          */
-        private String hosts;
+        public T hosts(String hosts) {
+            this.hosts = hosts;
+            return (T) this;
+        }
+
         /**
          * Port number of cassansdra server(s). The option is a
          * java.lang.Integer type.
          */
-        private Integer port;
+        public T port(Integer port) {
+            this.port = port;
+            return (T) this;
+        }
+
         /**
          * Keyspace to use. The option is a java.lang.String type.
          */
-        private String keyspace;
+        public T keyspace(String keyspace) {
+            this.keyspace = keyspace;
+            return (T) this;
+        }
+
         /**
          * To use the Cluster instance (you would normally not use this option).
          * The option is a com.datastax.driver.core.Cluster type.
          */
-        private Object cluster;
+        public T cluster(Object cluster) {
+            this.cluster = cluster;
+            return (T) this;
+        }
+
         /**
          * Cluster name. The option is a java.lang.String type.
          */
-        private String clusterName;
+        public T clusterName(String clusterName) {
+            this.clusterName = clusterName;
+            return (T) this;
+        }
+
         /**
          * Consistency level to use. The option is a
          * com.datastax.driver.core.ConsistencyLevel type.
          */
-        private ConsistencyLevel consistencyLevel;
+        public T consistencyLevel(ConsistencyLevel consistencyLevel) {
+            this.consistencyLevel = consistencyLevel;
+            return (T) this;
+        }
+
         /**
          * CQL query to perform. Can be overridden with the message header with
          * key CamelCqlQuery. The option is a java.lang.String type.
          */
-        private String cql;
+        public T cql(String cql) {
+            this.cql = cql;
+            return (T) this;
+        }
+
         /**
          * To use a specific LoadBalancingPolicy. The option is a
          * java.lang.String type.
          */
-        private String loadBalancingPolicy;
+        public T loadBalancingPolicy(String loadBalancingPolicy) {
+            this.loadBalancingPolicy = loadBalancingPolicy;
+            return (T) this;
+        }
+
         /**
          * Password for session authentication. The option is a java.lang.String
          * type.
          */
-        private String password;
+        public T password(String password) {
+            this.password = password;
+            return (T) this;
+        }
+
         /**
          * Whether to use PreparedStatements or regular Statements. The option
          * is a boolean type.
          */
-        private Boolean prepareStatements;
+        public T prepareStatements(boolean prepareStatements) {
+            this.prepareStatements = prepareStatements;
+            return (T) this;
+        }
+
         /**
          * To use a custom class that implements logic for converting ResultSet
          * into message body ALL, ONE, LIMIT_10, LIMIT_100... The option is a
          * java.lang.String type.
          */
-        private Object resultSetConversionStrategy;
+        public T resultSetConversionStrategy(Object resultSetConversionStrategy) {
+            this.resultSetConversionStrategy = resultSetConversionStrategy;
+            return (T) this;
+        }
+
         /**
          * To use the Session instance (you would normally not use this option).
          * The option is a com.datastax.driver.core.Session type.
          */
-        private Object session;
+        public T session(Object session) {
+            this.session = session;
+            return (T) this;
+        }
+
         /**
          * Username for session authentication. The option is a java.lang.String
          * type.
          */
-        private String username;
+        public T username(String username) {
+            this.username = username;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getBeanRef() {
             return beanRef;
@@ -249,7 +331,28 @@ public class CassandraEndpoint {
         }
     }
 
-    public static class CassandraConsumer extends CassandraCommon {
+    public static class CassandraConsumer
+            extends
+                CassandraCommon<CassandraConsumer> {
+        private Boolean bridgeErrorHandler;
+        private Boolean sendEmptyMessageWhenIdle;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+        private PollingConsumerPollStrategy pollStrategy;
+        private Integer backoffErrorThreshold;
+        private Integer backoffIdleThreshold;
+        private Integer backoffMultiplier;
+        private Long delay;
+        private Boolean greedy;
+        private Long initialDelay;
+        private LoggingLevel runLoggingLevel;
+        private ScheduledExecutorService scheduledExecutorService;
+        private ScheduledPollConsumerScheduler scheduler;
+        private Map<String, Object> schedulerProperties;
+        private Boolean startScheduler;
+        private TimeUnit timeUnit;
+        private Boolean useFixedDelay;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -259,13 +362,22 @@ public class CassandraEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public CassandraConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * If the polling consumer did not poll any files, you can enable this
          * option to send an empty message (no body) instead. The option is a
          * boolean type.
          */
-        private Boolean sendEmptyMessageWhenIdle;
+        public CassandraConsumer sendEmptyMessageWhenIdle(
+                boolean sendEmptyMessageWhenIdle) {
+            this.sendEmptyMessageWhenIdle = sendEmptyMessageWhenIdle;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -273,12 +385,21 @@ public class CassandraEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public CassandraConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public CassandraConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing
          * you to provide your custom implementation to control error handling
@@ -286,18 +407,31 @@ public class CassandraEndpoint {
          * been created and being routed in Camel. The option is a
          * org.apache.camel.spi.PollingConsumerPollStrategy type.
          */
-        private PollingConsumerPollStrategy pollStrategy;
+        public CassandraConsumer pollStrategy(
+                PollingConsumerPollStrategy pollStrategy) {
+            this.pollStrategy = pollStrategy;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * The number of subsequent error polls (failed due some error) that
          * should happen before the backoffMultipler should kick-in. The option
          * is a int type.
          */
-        private Integer backoffErrorThreshold;
+        public CassandraConsumer backoffErrorThreshold(int backoffErrorThreshold) {
+            this.backoffErrorThreshold = backoffErrorThreshold;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * The number of subsequent idle polls that should happen before the
          * backoffMultipler should kick-in. The option is a int type.
          */
-        private Integer backoffIdleThreshold;
+        public CassandraConsumer backoffIdleThreshold(int backoffIdleThreshold) {
+            this.backoffIdleThreshold = backoffIdleThreshold;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * To let the scheduled polling consumer backoff if there has been a
          * number of subsequent idles/errors in a row. The multiplier is then
@@ -306,66 +440,112 @@ public class CassandraEndpoint {
          * backoffIdleThreshold and/or backoffErrorThreshold must also be
          * configured. The option is a int type.
          */
-        private Integer backoffMultiplier;
+        public CassandraConsumer backoffMultiplier(int backoffMultiplier) {
+            this.backoffMultiplier = backoffMultiplier;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * Milliseconds before the next poll. You can also specify time values
          * using units, such as 60s (60 seconds), 5m30s (5 minutes and 30
          * seconds), and 1h (1 hour). The option is a long type.
          */
-        private Long delay;
+        public CassandraConsumer delay(long delay) {
+            this.delay = delay;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * If greedy is enabled, then the ScheduledPollConsumer will run
          * immediately again, if the previous run polled 1 or more messages. The
          * option is a boolean type.
          */
-        private Boolean greedy;
+        public CassandraConsumer greedy(boolean greedy) {
+            this.greedy = greedy;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * Milliseconds before the first poll starts. You can also specify time
          * values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30
          * seconds), and 1h (1 hour). The option is a long type.
          */
-        private Long initialDelay;
+        public CassandraConsumer initialDelay(long initialDelay) {
+            this.initialDelay = initialDelay;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * The consumer logs a start/complete log line when it polls. This
          * option allows you to configure the logging level for that. The option
          * is a org.apache.camel.LoggingLevel type.
          */
-        private LoggingLevel runLoggingLevel;
+        public CassandraConsumer runLoggingLevel(LoggingLevel runLoggingLevel) {
+            this.runLoggingLevel = runLoggingLevel;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * Allows for configuring a custom/shared thread pool to use for the
          * consumer. By default each consumer has its own single threaded thread
          * pool. The option is a java.util.concurrent.ScheduledExecutorService
          * type.
          */
-        private ScheduledExecutorService scheduledExecutorService;
+        public CassandraConsumer scheduledExecutorService(
+                ScheduledExecutorService scheduledExecutorService) {
+            this.scheduledExecutorService = scheduledExecutorService;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * To use a cron scheduler from either camel-spring or camel-quartz2
          * component. The option is a
          * org.apache.camel.spi.ScheduledPollConsumerScheduler type.
          */
-        private ScheduledPollConsumerScheduler scheduler;
+        public CassandraConsumer scheduler(
+                ScheduledPollConsumerScheduler scheduler) {
+            this.scheduler = scheduler;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * To configure additional properties when using a custom scheduler or
          * any of the Quartz2, Spring based scheduler. The option is a
          * java.util.Map<java.lang.String,java.lang.Object> type.
          */
-        private Map<String, Object> schedulerProperties;
+        public CassandraConsumer schedulerProperties(
+                Map<String, Object> schedulerProperties) {
+            this.schedulerProperties = schedulerProperties;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * Whether the scheduler should be auto started. The option is a boolean
          * type.
          */
-        private Boolean startScheduler;
+        public CassandraConsumer startScheduler(boolean startScheduler) {
+            this.startScheduler = startScheduler;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * Time unit for initialDelay and delay options. The option is a
          * java.util.concurrent.TimeUnit type.
          */
-        private TimeUnit timeUnit;
+        public CassandraConsumer timeUnit(TimeUnit timeUnit) {
+            this.timeUnit = timeUnit;
+            return (CassandraConsumer) this;
+        }
+
         /**
          * Controls if fixed delay or fixed rate is used. See
          * ScheduledExecutorService in JDK for details. The option is a boolean
          * type.
          */
-        private Boolean useFixedDelay;
+        public CassandraConsumer useFixedDelay(boolean useFixedDelay) {
+            this.useFixedDelay = useFixedDelay;
+            return (CassandraConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -514,7 +694,9 @@ public class CassandraEndpoint {
         }
     }
 
-    public static class CassandraProducer extends CassandraCommon {
+    public static class CassandraProducer
+            extends
+                CassandraCommon<CassandraProducer> {
     }
 
     public static enum ConsistencyLevel {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ChatScriptEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ChatScriptEndpoint.java
index 8461e5e..f4bc080 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ChatScriptEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ChatScriptEndpoint.java
@@ -27,43 +27,80 @@ import javax.annotation.Generated;
 public class ChatScriptEndpoint {
 
 
-    public static class ChatScriptCommon extends EndpointConfiguration {
+    public static class ChatScriptCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String host;
+        private Integer port;
+        private String botName;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+        private Boolean resetchat;
+        private String chatUserName;
+
         /**
          * Hostname or IP of the server on which CS server is running. The
          * option is a java.lang.String type.
          */
-        private String host;
+        public T host(String host) {
+            this.host = host;
+            return (T) this;
+        }
+
         /**
          * Port on which ChatScript is listening to. The option is a int type.
          */
-        private Integer port;
+        public T port(int port) {
+            this.port = port;
+            return (T) this;
+        }
+
         /**
          * Name of the Bot in CS to converse with. The option is a
          * java.lang.String type.
          */
-        private String botName;
+        public T botName(String botName) {
+            this.botName = botName;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
+
         /**
          * Issues :reset command to start a new conversation everytime. The
          * option is a boolean type.
          */
-        private Boolean resetchat;
+        public T resetchat(boolean resetchat) {
+            this.resetchat = resetchat;
+            return (T) this;
+        }
+
         /**
          * Username who initializes the CS conversation. To be set when chat is
          * initialized from camel route. The option is a java.lang.String type.
          */
-        private String chatUserName;
+        public T chatUserName(String chatUserName) {
+            this.chatUserName = chatUserName;
+            return (T) this;
+        }
 
         public String getHost() {
             return host;
@@ -122,9 +159,13 @@ public class ChatScriptEndpoint {
         }
     }
 
-    public static class ChatScriptConsumer extends ChatScriptCommon {
+    public static class ChatScriptConsumer
+            extends
+                ChatScriptCommon<ChatScriptConsumer> {
     }
 
-    public static class ChatScriptProducer extends ChatScriptCommon {
+    public static class ChatScriptProducer
+            extends
+                ChatScriptCommon<ChatScriptProducer> {
     }
 }
\ No newline at end of file
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ChunkEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ChunkEndpoint.java
index 9fdbe3e..c8083bb 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ChunkEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ChunkEndpoint.java
@@ -27,7 +27,19 @@ import javax.annotation.Generated;
 public class ChunkEndpoint {
 
 
-    public static class ChunkCommon extends EndpointConfiguration {
+    public static class ChunkCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String resourceUri;
+        private Boolean contentCache;
+        private String encoding;
+        private String extension;
+        private String themeFolder;
+        private String themeLayer;
+        private String themeSubfolder;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * Path to the resource. You can prefix with: classpath, file, http,
          * ref, or bean. classpath, file and http loads the resource using these
@@ -36,49 +48,84 @@ public class ChunkEndpoint {
          * resource. For bean you can specify the method name after dot, eg
          * bean:myBean.myMethod. The option is a java.lang.String type.
          */
-        private String resourceUri;
+        public T resourceUri(String resourceUri) {
+            this.resourceUri = resourceUri;
+            return (T) this;
+        }
+
         /**
          * Sets whether to use resource content cache or not. The option is a
          * boolean type.
          */
-        private Boolean contentCache;
+        public T contentCache(boolean contentCache) {
+            this.contentCache = contentCache;
+            return (T) this;
+        }
+
         /**
          * Define the encoding of the body. The option is a java.lang.String
          * type.
          */
-        private String encoding;
+        public T encoding(String encoding) {
+            this.encoding = encoding;
+            return (T) this;
+        }
+
         /**
          * Define the file extension of the template. The option is a
          * java.lang.String type.
          */
-        private String extension;
+        public T extension(String extension) {
+            this.extension = extension;
+            return (T) this;
+        }
+
         /**
          * Define the themes folder to scan. The option is a java.lang.String
          * type.
          */
-        private String themeFolder;
+        public T themeFolder(String themeFolder) {
+            this.themeFolder = themeFolder;
+            return (T) this;
+        }
+
         /**
          * Define the theme layer to elaborate. The option is a java.lang.String
          * type.
          */
-        private String themeLayer;
+        public T themeLayer(String themeLayer) {
+            this.themeLayer = themeLayer;
+            return (T) this;
+        }
+
         /**
          * Define the themes subfolder to scan. The option is a java.lang.String
          * type.
          */
-        private String themeSubfolder;
+        public T themeSubfolder(String themeSubfolder) {
+            this.themeSubfolder = themeSubfolder;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getResourceUri() {
             return resourceUri;
@@ -153,9 +200,9 @@ public class ChunkEndpoint {
         }
     }
 
-    public static class ChunkConsumer extends ChunkCommon {
+    public static class ChunkConsumer extends ChunkCommon<ChunkConsumer> {
     }
 
-    public static class ChunkProducer extends ChunkCommon {
+    public static class ChunkProducer extends ChunkCommon<ChunkProducer> {
     }
 }
\ No newline at end of file
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CinderEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CinderEndpoint.java
index a8e13f0..b521a83 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CinderEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CinderEndpoint.java
@@ -28,56 +28,113 @@ import javax.annotation.Generated;
 public class CinderEndpoint {
 
 
-    public static class CinderCommon extends EndpointConfiguration {
+    public static class CinderCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String host;
+        private String apiVersion;
+        private Object config;
+        private String domain;
+        private String operation;
+        private String password;
+        private String project;
+        private String subsystem;
+        private String username;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+
         /**
          * OpenStack host url. The option is a java.lang.String type.
          */
-        private String host;
+        public T host(String host) {
+            this.host = host;
+            return (T) this;
+        }
+
         /**
          * OpenStack API version. The option is a java.lang.String type.
          */
-        private String apiVersion;
+        public T apiVersion(String apiVersion) {
+            this.apiVersion = apiVersion;
+            return (T) this;
+        }
+
         /**
          * OpenStack configuration. The option is a
          * org.openstack4j.core.transport.Config type.
          */
-        private Object config;
+        public T config(Object config) {
+            this.config = config;
+            return (T) this;
+        }
+
         /**
          * Authentication domain. The option is a java.lang.String type.
          */
-        private String domain;
+        public T domain(String domain) {
+            this.domain = domain;
+            return (T) this;
+        }
+
         /**
          * The operation to do. The option is a java.lang.String type.
          */
-        private String operation;
+        public T operation(String operation) {
+            this.operation = operation;
+            return (T) this;
+        }
+
         /**
          * OpenStack password. The option is a java.lang.String type.
          */
-        private String password;
+        public T password(String password) {
+            this.password = password;
+            return (T) this;
+        }
+
         /**
          * The project ID. The option is a java.lang.String type.
          */
-        private String project;
+        public T project(String project) {
+            this.project = project;
+            return (T) this;
+        }
+
         /**
          * OpenStack Cinder subsystem. The option is a java.lang.String type.
          */
-        private String subsystem;
+        public T subsystem(String subsystem) {
+            this.subsystem = subsystem;
+            return (T) this;
+        }
+
         /**
          * OpenStack username. The option is a java.lang.String type.
          */
-        private String username;
+        public T username(String username) {
+            this.username = username;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getHost() {
             return host;
@@ -168,9 +225,9 @@ public class CinderEndpoint {
         }
     }
 
-    public static class CinderConsumer extends CinderCommon {
+    public static class CinderConsumer extends CinderCommon<CinderConsumer> {
     }
 
-    public static class CinderProducer extends CinderCommon {
+    public static class CinderProducer extends CinderCommon<CinderProducer> {
     }
 }
\ No newline at end of file
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ClassEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ClassEndpoint.java
index e28bb7a..69522b7 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ClassEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ClassEndpoint.java
@@ -28,40 +28,72 @@ import javax.annotation.Generated;
 public class ClassEndpoint {
 
 
-    public static class ClassCommon extends EndpointConfiguration {
+    public static class ClassCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private String beanName;
+        private String method;
+        private Boolean basicPropertyBinding;
+        private Boolean cache;
+        private Map<String, Object> parameters;
+        private Boolean synchronous;
+
         /**
          * Sets the name of the bean to invoke. The option is a java.lang.String
          * type.
          */
-        private String beanName;
+        public T beanName(String beanName) {
+            this.beanName = beanName;
+            return (T) this;
+        }
+
         /**
          * Sets the name of the method to invoke on the bean. The option is a
          * java.lang.String type.
          */
-        private String method;
+        public T method(String method) {
+            this.method = method;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * If enabled, Camel will cache the result of the first Registry
          * look-up. Cache can be enabled if the bean in the Registry is defined
          * as a singleton scope. The option is a java.lang.Boolean type.
          */
-        private Boolean cache;
+        public T cache(Boolean cache) {
+            this.cache = cache;
+            return (T) this;
+        }
+
         /**
          * Used for configuring additional properties on the bean. The option is
          * a java.util.Map<java.lang.String,java.lang.Object> type.
          */
-        private Map<String, Object> parameters;
+        public T parameters(Map<String, Object> parameters) {
+            this.parameters = parameters;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
 
         public String getBeanName() {
             return beanName;
@@ -112,9 +144,9 @@ public class ClassEndpoint {
         }
     }
 
-    public static class ClassConsumer extends ClassCommon {
+    public static class ClassConsumer extends ClassCommon<ClassConsumer> {
     }
 
-    public static class ClassProducer extends ClassCommon {
+    public static class ClassProducer extends ClassCommon<ClassProducer> {
     }
 }
\ No newline at end of file
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ClientEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ClientEndpoint.java
index 979df2f..be66d59 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ClientEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/ClientEndpoint.java
@@ -32,95 +32,189 @@ import org.apache.camel.spi.ExceptionHandler;
 public class ClientEndpoint {
 
 
-    public static class ClientCommon extends EndpointConfiguration {
+    public static class ClientCommon<T extends EndpointConfiguration>
+            extends
+                EndpointConfiguration<T> {
+        private Object uriPath;
+        private Object dataModuleOptions;
+        private Object protocolOptions;
+        private Boolean basicPropertyBinding;
+        private Boolean synchronous;
+        private Short acknowledgeWindow;
+        private ASDUAddressType adsuAddressType;
+        private CauseOfTransmissionType causeOfTransmissionType;
+        private InformationObjectAddressType informationObjectAddressType;
+        private Short maxUnacknowledged;
+        private Integer timeout1;
+        private Integer timeout2;
+        private Integer timeout3;
+        private Boolean causeSourceAddress;
+        private Boolean ignoreBackgroundScan;
+        private Boolean ignoreDaylightSavingTime;
+        private TimeZone timeZone;
+        private String connectionId;
+
         /**
          * The object information address. The option is a
          * org.apache.camel.component.iec60870.ObjectAddress type.
          */
-        private Object uriPath;
+        public T uriPath(Object uriPath) {
+            this.uriPath = uriPath;
+            return (T) this;
+        }
+
         /**
          * Data module options. The option is a DataModuleOptions type.
          */
-        private Object dataModuleOptions;
+        public T dataModuleOptions(Object dataModuleOptions) {
+            this.dataModuleOptions = dataModuleOptions;
+            return (T) this;
+        }
+
         /**
          * Protocol options. The option is a ProtocolOptions type.
          */
-        private Object protocolOptions;
+        public T protocolOptions(Object protocolOptions) {
+            this.protocolOptions = protocolOptions;
+            return (T) this;
+        }
+
         /**
          * Whether the endpoint should use basic property binding (Camel 2.x) or
          * the newer property binding with additional capabilities. The option
          * is a boolean type.
          */
-        private Boolean basicPropertyBinding;
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.basicPropertyBinding = basicPropertyBinding;
+            return (T) this;
+        }
+
         /**
          * Sets whether synchronous processing should be strictly used, or Camel
          * is allowed to use asynchronous processing (if supported). The option
          * is a boolean type.
          */
-        private Boolean synchronous;
+        public T synchronous(boolean synchronous) {
+            this.synchronous = synchronous;
+            return (T) this;
+        }
+
         /**
          * Parameter W - Acknowledgment window. The option is a short type.
          */
-        private Short acknowledgeWindow;
+        public T acknowledgeWindow(short acknowledgeWindow) {
+            this.acknowledgeWindow = acknowledgeWindow;
+            return (T) this;
+        }
+
         /**
          * The common ASDU address size. May be either SIZE_1 or SIZE_2. The
          * option is a org.eclipse.neoscada.protocol.iec60870.ASDUAddressType
          * type.
          */
-        private ASDUAddressType adsuAddressType;
+        public T adsuAddressType(ASDUAddressType adsuAddressType) {
+            this.adsuAddressType = adsuAddressType;
+            return (T) this;
+        }
+
         /**
          * The cause of transmission type. May be either SIZE_1 or SIZE_2. The
          * option is a
          * org.eclipse.neoscada.protocol.iec60870.CauseOfTransmissionType type.
          */
-        private CauseOfTransmissionType causeOfTransmissionType;
+        public T causeOfTransmissionType(
+                CauseOfTransmissionType causeOfTransmissionType) {
+            this.causeOfTransmissionType = causeOfTransmissionType;
+            return (T) this;
+        }
+
         /**
          * The information address size. May be either SIZE_1, SIZE_2 or SIZE_3.
          * The option is a
          * org.eclipse.neoscada.protocol.iec60870.InformationObjectAddressType
          * type.
          */
-        private InformationObjectAddressType informationObjectAddressType;
+        public T informationObjectAddressType(
+                InformationObjectAddressType informationObjectAddressType) {
+            this.informationObjectAddressType = informationObjectAddressType;
+            return (T) this;
+        }
+
         /**
          * Parameter K - Maximum number of un-acknowledged messages. The option
          * is a short type.
          */
-        private Short maxUnacknowledged;
+        public T maxUnacknowledged(short maxUnacknowledged) {
+            this.maxUnacknowledged = maxUnacknowledged;
+            return (T) this;
+        }
+
         /**
          * Timeout T1 in milliseconds. The option is a int type.
          */
-        private Integer timeout1;
+        public T timeout1(int timeout1) {
+            this.timeout1 = timeout1;
+            return (T) this;
+        }
+
         /**
          * Timeout T2 in milliseconds. The option is a int type.
          */
-        private Integer timeout2;
+        public T timeout2(int timeout2) {
+            this.timeout2 = timeout2;
+            return (T) this;
+        }
+
         /**
          * Timeout T3 in milliseconds. The option is a int type.
          */
-        private Integer timeout3;
+        public T timeout3(int timeout3) {
+            this.timeout3 = timeout3;
+            return (T) this;
+        }
+
         /**
          * Whether to include the source address. The option is a boolean type.
          */
-        private Boolean causeSourceAddress;
+        public T causeSourceAddress(boolean causeSourceAddress) {
+            this.causeSourceAddress = causeSourceAddress;
+            return (T) this;
+        }
+
         /**
          * Whether background scan transmissions should be ignored. The option
          * is a boolean type.
          */
-        private Boolean ignoreBackgroundScan;
+        public T ignoreBackgroundScan(boolean ignoreBackgroundScan) {
+            this.ignoreBackgroundScan = ignoreBackgroundScan;
+            return (T) this;
+        }
+
         /**
          * Whether to ignore or respect DST. The option is a boolean type.
          */
-        private Boolean ignoreDaylightSavingTime;
+        public T ignoreDaylightSavingTime(boolean ignoreDaylightSavingTime) {
+            this.ignoreDaylightSavingTime = ignoreDaylightSavingTime;
+            return (T) this;
+        }
+
         /**
          * The timezone to use. May be any Java time zone string. The option is
          * a java.util.TimeZone type.
          */
-        private TimeZone timeZone;
+        public T timeZone(TimeZone timeZone) {
+            this.timeZone = timeZone;
+            return (T) this;
+        }
+
         /**
          * An identifier grouping connection instances. The option is a
          * java.lang.String type.
          */
-        private String connectionId;
+        public T connectionId(String connectionId) {
+            this.connectionId = connectionId;
+            return (T) this;
+        }
 
         public Object getUriPath() {
             return uriPath;
@@ -269,7 +363,11 @@ public class ClientEndpoint {
         }
     }
 
-    public static class ClientConsumer extends ClientCommon {
+    public static class ClientConsumer extends ClientCommon<ClientConsumer> {
+        private Boolean bridgeErrorHandler;
+        private ExceptionHandler exceptionHandler;
+        private ExchangePattern exchangePattern;
+
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -279,7 +377,11 @@ public class ClientEndpoint {
          * with exceptions, that will be logged at WARN or ERROR level and
          * ignored. The option is a boolean type.
          */
-        private Boolean bridgeErrorHandler;
+        public ClientConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
+            this.bridgeErrorHandler = bridgeErrorHandler;
+            return (ClientConsumer) this;
+        }
+
         /**
          * To let the consumer use a custom ExceptionHandler. Notice if the
          * option bridgeErrorHandler is enabled then this option is not in use.
@@ -287,12 +389,19 @@ public class ClientEndpoint {
          * logged at WARN or ERROR level and ignored. The option is a
          * org.apache.camel.spi.ExceptionHandler type.
          */
-        private ExceptionHandler exceptionHandler;
+        public ClientConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
+            this.exceptionHandler = exceptionHandler;
+            return (ClientConsumer) this;
+        }
+
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
-        private ExchangePattern exchangePattern;
+        public ClientConsumer exchangePattern(ExchangePattern exchangePattern) {
+            this.exchangePattern = exchangePattern;
+            return (ClientConsumer) this;
+        }
 
         public Boolean getBridgeErrorHandler() {
             return bridgeErrorHandler;
@@ -319,7 +428,7 @@ public class ClientEndpoint {
         }
     }
 
-    public static class ClientProducer extends ClientCommon {
+    public static class ClientProducer extends ClientCommon<ClientProducer> {
     }
 
     public static enum ASDUAddressType {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CoAPEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CoAPEndpoint.java
index f5e46ac..715d449 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CoAPEndpoint.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/CoAPEndpoint.java
@@ -33,11 +33,29 @@ import org.apache.camel.spi.ExceptionHandler;
... 77319 lines suppressed ...