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 09:58:07 UTC

[camel] 01/02: Add the necessary bits to resolve endpoints and remove setters/getters to clean the dsl as much as possible

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 4bbc6dffffdc451c9d3a98def417e204e0ee440f
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Thu Jun 6 11:57:23 2019 +0200

    Add the necessary bits to resolve endpoints and remove setters/getters to clean the dsl as much as possible
---
 .../src/main/java/org/apache/camel/Component.java  |    3 +
 .../java/org/apache/camel/spi/RouteContext.java    |    2 +
 .../camel/impl/engine/DefaultRouteContext.java     |   17 +
 .../org/apache/camel/builder/RouteBuilder.java     |    8 +
 .../org/apache/camel/model/EndpointDefinition.java |   38 +
 .../org/apache/camel/model/FromDefinition.java     |   14 +
 .../apache/camel/model/ProcessorDefinition.java    |    8 +-
 .../org/apache/camel/model/RouteDefinition.java    |    5 +
 .../org/apache/camel/model/RoutesDefinition.java   |    6 +
 .../org/apache/camel/model/SendDefinition.java     |   11 +
 .../java/org/apache/camel/model/ToDefinition.java  |    4 +
 .../apache/camel/model/endpoint/AMQPEndpoint.java  | 1173 ++-------------
 .../apache/camel/model/endpoint/AS2Endpoint.java   |  442 +-----
 .../camel/model/endpoint/ActiveMQEndpoint.java     | 1169 ++-------------
 .../apache/camel/model/endpoint/AhcEndpoint.java   |  209 +--
 .../apache/camel/model/endpoint/ApnsEndpoint.java  |  292 +---
 .../camel/model/endpoint/AsteriskEndpoint.java     |  142 +-
 .../apache/camel/model/endpoint/AtmosEndpoint.java |  206 +--
 .../endpoint/AtmosphereWebsocketEndpoint.java      |  324 +++++
 .../apache/camel/model/endpoint/AtomEndpoint.java  |  376 +----
 .../camel/model/endpoint/AtomixMapEndpoint.java    |  262 +---
 .../model/endpoint/AtomixMessagingEndpoint.java    |  274 +---
 .../model/endpoint/AtomixMultiMapEndpoint.java     |  262 +---
 .../camel/model/endpoint/AtomixQueueEndpoint.java  |  238 +--
 .../camel/model/endpoint/AtomixSetEndpoint.java    |  250 +---
 .../camel/model/endpoint/AtomixValueEndpoint.java  |  250 +---
 .../apache/camel/model/endpoint/AvroEndpoint.java  |  206 +--
 .../apache/camel/model/endpoint/BeanEndpoint.java  |   98 +-
 .../model/endpoint/BeanValidatorEndpoint.java      |  120 +-
 .../camel/model/endpoint/BeanstalkEndpoint.java    |  360 +----
 .../camel/model/endpoint/BlobServiceEndpoint.java  |  274 +---
 .../camel/model/endpoint/BonitaEndpoint.java       |  158 +-
 .../apache/camel/model/endpoint/BoxEndpoint.java   |  303 +---
 .../camel/model/endpoint/BraintreeEndpoint.java    |  226 +--
 .../camel/model/endpoint/BrowseEndpoint.java       |   98 +-
 .../apache/camel/model/endpoint/CMEndpoint.java    |  110 +-
 .../apache/camel/model/endpoint/CMISEndpoint.java  |  206 +--
 .../model/endpoint/CaffeineCacheEndpoint.java      |  274 +---
 .../model/endpoint/CaffeineLoadCacheEndpoint.java  |  274 +---
 .../camel/model/endpoint/CassandraEndpoint.java    |  433 +-----
 .../camel/model/endpoint/ChatScriptEndpoint.java   |  106 +-
 .../apache/camel/model/endpoint/ChunkEndpoint.java |  134 +-
 .../camel/model/endpoint/CinderEndpoint.java       |  158 +-
 .../apache/camel/model/endpoint/ClassEndpoint.java |   98 +-
 .../camel/model/endpoint/ClientEndpoint.java       |  280 +---
 .../apache/camel/model/endpoint/CoAPEndpoint.java  |  206 +--
 .../camel/model/endpoint/CometdEndpoint.java       |  266 +---
 .../camel/model/endpoint/ConsulEndpoint.java       |   98 +-
 .../camel/model/endpoint/ControlBusEndpoint.java   |  130 +-
 .../apache/camel/model/endpoint/CordaEndpoint.java |   98 +-
 .../camel/model/endpoint/CouchDbEndpoint.java      |  226 +--
 .../camel/model/endpoint/CouchbaseEndpoint.java    |  638 +-------
 .../camel/model/endpoint/CryptoCmsEndpoint.java    |  242 +--
 .../apache/camel/model/endpoint/CwEndpoint.java    |  182 +--
 .../apache/camel/model/endpoint/CxfEndpoint.java   |  473 +-----
 .../apache/camel/model/endpoint/CxfRsEndpoint.java |  424 +-----
 .../camel/model/endpoint/DataFormatEndpoint.java   |   70 +-
 .../camel/model/endpoint/DataSetEndpoint.java      |  238 +--
 .../camel/model/endpoint/DataSetTestEndpoint.java  |  214 +--
 .../apache/camel/model/endpoint/DdbEndpoint.java   |  206 +--
 .../camel/model/endpoint/DdbStreamEndpoint.java    |  385 +----
 .../camel/model/endpoint/DigitalOceanEndpoint.java |  166 +--
 .../model/endpoint/DigitalSignatureEndpoint.java   |  286 +---
 .../camel/model/endpoint/DirectEndpoint.java       |  134 +-
 .../camel/model/endpoint/DirectVmEndpoint.java     |  155 +-
 .../camel/model/endpoint/DisruptorEndpoint.java    |  191 +--
 .../camel/model/endpoint/DisruptorVmEndpoint.java  |  191 +--
 .../apache/camel/model/endpoint/DnsEndpoint.java   |   62 +-
 .../camel/model/endpoint/DockerEndpoint.java       |  290 +---
 .../apache/camel/model/endpoint/DozerEndpoint.java |  134 +-
 .../apache/camel/model/endpoint/DrillEndpoint.java |  110 +-
 .../camel/model/endpoint/DropboxEndpoint.java      |  190 +--
 .../apache/camel/model/endpoint/EC2Endpoint.java   |  146 +-
 .../apache/camel/model/endpoint/ECSEndpoint.java   |  146 +-
 .../apache/camel/model/endpoint/EKSEndpoint.java   |  146 +-
 .../camel/model/endpoint/EhcacheEndpoint.java      |  251 +---
 .../apache/camel/model/endpoint/EjbEndpoint.java   |   98 +-
 .../model/endpoint/ElasticsearchEndpoint.java      |  202 +--
 .../apache/camel/model/endpoint/ElsqlEndpoint.java |  631 +-------
 .../model/endpoint/EndpointConfiguration.java      |    5 -
 .../apache/camel/model/endpoint/EtcdEndpoint.java  |  413 +-----
 .../camel/model/endpoint/EventAdminEndpoint.java   |  106 +-
 .../apache/camel/model/endpoint/EventEndpoint.java |   98 +-
 .../apache/camel/model/endpoint/ExecEndpoint.java  |  146 +-
 .../camel/model/endpoint/FacebookEndpoint.java     | 1335 ++---------------
 .../apache/camel/model/endpoint/FhirEndpoint.java  |  374 +----
 .../apache/camel/model/endpoint/FileEndpoint.java  | 1120 ++------------
 .../camel/model/endpoint/FlatpackEndpoint.java     |  360 +----
 .../apache/camel/model/endpoint/FlinkEndpoint.java |  122 +-
 .../apache/camel/model/endpoint/FopEndpoint.java   |   86 +-
 .../camel/model/endpoint/FreemarkerEndpoint.java   |  106 +-
 .../apache/camel/model/endpoint/FtpEndpoint.java   | 1384 ++----------------
 .../apache/camel/model/endpoint/FtpsEndpoint.java  | 1535 ++------------------
 .../camel/model/endpoint/GangliaEndpoint.java      |  214 +--
 .../camel/model/endpoint/GeoCoderEndpoint.java     |  214 +--
 .../apache/camel/model/endpoint/GitEndpoint.java   |  206 +--
 .../camel/model/endpoint/GitHubEndpoint.java       |  206 +--
 .../camel/model/endpoint/GlanceEndpoint.java       |  146 +-
 .../model/endpoint/GoogleBigQueryEndpoint.java     |  106 +-
 .../model/endpoint/GoogleBigQuerySQLEndpoint.java  |   82 +-
 .../model/endpoint/GoogleCalendarEndpoint.java     |  226 +--
 .../endpoint/GoogleCalendarStreamEndpoint.java     |  408 +-----
 .../camel/model/endpoint/GoogleDriveEndpoint.java  |  202 +--
 .../camel/model/endpoint/GoogleMailEndpoint.java   |  178 +--
 .../model/endpoint/GoogleMailStreamEndpoint.java   |  384 +----
 .../camel/model/endpoint/GooglePubsubEndpoint.java |  166 +--
 .../camel/model/endpoint/GoogleSheetsEndpoint.java |  178 +--
 .../model/endpoint/GoogleSheetsStreamEndpoint.java |  420 +-----
 .../apache/camel/model/endpoint/GoraEndpoint.java  |  302 +---
 .../apache/camel/model/endpoint/GrapeEndpoint.java |   62 +-
 .../camel/model/endpoint/GridFsEndpoint.java       |  254 +---
 .../apache/camel/model/endpoint/GrpcEndpoint.java  |  376 +----
 .../model/endpoint/GuavaEventBusEndpoint.java      |  118 +-
 .../apache/camel/model/endpoint/HBaseEndpoint.java |  243 +---
 .../endpoint/HazelcastAtomicnumberEndpoint.java    |  166 +--
 .../model/endpoint/HazelcastInstanceEndpoint.java  |  239 +--
 .../model/endpoint/HazelcastListEndpoint.java      |  239 +--
 .../camel/model/endpoint/HazelcastMapEndpoint.java |  239 +--
 .../model/endpoint/HazelcastMultimapEndpoint.java  |  239 +--
 .../model/endpoint/HazelcastQueueEndpoint.java     |  239 +--
 .../endpoint/HazelcastReplicatedmapEndpoint.java   |  239 +--
 .../endpoint/HazelcastRingbufferEndpoint.java      |  166 +--
 .../model/endpoint/HazelcastSedaEndpoint.java      |  239 +--
 .../camel/model/endpoint/HazelcastSetEndpoint.java |  239 +--
 .../model/endpoint/HazelcastTopicEndpoint.java     |  239 +--
 .../apache/camel/model/endpoint/HdfsEndpoint.java  |  532 +------
 .../camel/model/endpoint/HipchatEndpoint.java      |  336 +----
 .../apache/camel/model/endpoint/HttpEndpoint.java  |  643 +-------
 .../apache/camel/model/endpoint/IAMEndpoint.java   |  146 +-
 .../apache/camel/model/endpoint/IOTAEndpoint.java  |  170 +--
 .../apache/camel/model/endpoint/IPFSEndpoint.java  |   74 +-
 .../camel/model/endpoint/IgniteCacheEndpoint.java  |  240 +--
 .../model/endpoint/IgniteComputeEndpoint.java      |  144 +-
 .../camel/model/endpoint/IgniteEventsEndpoint.java |  144 +-
 .../camel/model/endpoint/IgniteIdGenEndpoint.java  |  120 +-
 .../model/endpoint/IgniteMessagingEndpoint.java    |  156 +-
 .../camel/model/endpoint/IgniteQueueEndpoint.java  |  132 +-
 .../camel/model/endpoint/IgniteSetEndpoint.java    |  108 +-
 .../camel/model/endpoint/InfinispanEndpoint.java   |  279 +---
 .../camel/model/endpoint/InfluxDbEndpoint.java     |  118 +-
 .../apache/camel/model/endpoint/IrcEndpoint.java   |  365 +----
 .../camel/model/endpoint/IronMQEndpoint.java       |  412 +-----
 .../apache/camel/model/endpoint/JBPMEndpoint.java  |  422 +-----
 .../camel/model/endpoint/JCacheEndpoint.java       |  315 +---
 .../camel/model/endpoint/JGroupsEndpoint.java      |  118 +-
 .../camel/model/endpoint/JGroupsRaftEndpoint.java  |  106 +-
 .../apache/camel/model/endpoint/JMXEndpoint.java   |  411 +-----
 .../model/endpoint/JSR356WebSocketEndpoint.java    |  118 +-
 .../camel/model/endpoint/JcloudsEndpoint.java      |  238 +--
 .../apache/camel/model/endpoint/JcrEndpoint.java   |  231 +--
 .../apache/camel/model/endpoint/JdbcEndpoint.java  |  207 +--
 .../camel/model/endpoint/JettyHttpEndpoint9.java   |  711 +--------
 .../apache/camel/model/endpoint/JingEndpoint.java  |   74 +-
 .../apache/camel/model/endpoint/JiraEndpoint.java  |  218 +--
 .../apache/camel/model/endpoint/JmsEndpoint.java   | 1173 ++-------------
 .../apache/camel/model/endpoint/JoltEndpoint.java  |  110 +-
 .../apache/camel/model/endpoint/JooqEndpoint.java  |  316 +---
 .../apache/camel/model/endpoint/JpaEndpoint.java   |  557 +------
 .../model/endpoint/JsonValidatorEndpoint.java      |  130 +-
 .../apache/camel/model/endpoint/Jt400Endpoint.java |  460 +-----
 .../apache/camel/model/endpoint/KMSEndpoint.java   |  146 +-
 .../apache/camel/model/endpoint/KafkaEndpoint.java | 1196 ++-------------
 .../camel/model/endpoint/KeystoneEndpoint.java     |  142 +-
 .../camel/model/endpoint/KinesisEndpoint.java      |  408 +-----
 .../model/endpoint/KinesisFirehoseEndpoint.java    |  131 +-
 .../endpoint/KubernetesConfigMapsEndpoint.java     |  286 +---
 .../endpoint/KubernetesDeploymentsEndpoint.java    |  382 +----
 .../model/endpoint/KubernetesHPAEndpoint.java      |  382 +----
 .../model/endpoint/KubernetesJobEndpoint.java      |  382 +----
 .../endpoint/KubernetesNamespacesEndpoint.java     |  382 +----
 .../model/endpoint/KubernetesNodesEndpoint.java    |  382 +----
 .../KubernetesPersistentVolumesClaimsEndpoint.java |  286 +---
 .../KubernetesPersistentVolumesEndpoint.java       |  286 +---
 .../model/endpoint/KubernetesPodsEndpoint.java     |  382 +----
 .../KubernetesReplicationControllersEndpoint.java  |  382 +----
 .../endpoint/KubernetesResourcesQuotaEndpoint.java |  286 +---
 .../model/endpoint/KubernetesSecretsEndpoint.java  |  286 +---
 .../KubernetesServiceAccountsEndpoint.java         |  286 +---
 .../model/endpoint/KubernetesServicesEndpoint.java |  382 +----
 .../camel/model/endpoint/LambdaEndpoint.java       |  146 +-
 .../camel/model/endpoint/LanguageEndpoint.java     |  130 +-
 .../apache/camel/model/endpoint/LdapEndpoint.java  |  110 +-
 .../apache/camel/model/endpoint/LdifEndpoint.java  |   62 +-
 .../camel/model/endpoint/LinkedInEndpoint.java     |  250 +---
 .../apache/camel/model/endpoint/LogEndpoint.java   |  362 +----
 .../camel/model/endpoint/LuceneEndpoint.java       |  122 +-
 .../camel/model/endpoint/LumberjackEndpoint.java   |  118 +-
 .../apache/camel/model/endpoint/MQEndpoint.java    |  146 +-
 .../apache/camel/model/endpoint/MQTTEndpoint.java  |  522 +------
 .../apache/camel/model/endpoint/MSKEndpoint.java   |  146 +-
 .../apache/camel/model/endpoint/MailEndpoint.java  |  813 ++---------
 .../camel/model/endpoint/MasterEndpoint.java       |  122 +-
 .../camel/model/endpoint/MetricsEndpoint.java      |  142 +-
 .../camel/model/endpoint/MicrometerEndpoint.java   |  130 +-
 .../camel/model/endpoint/MiloClientEndpoint.java   |  371 +----
 .../camel/model/endpoint/MiloServerEndpoint.java   |   94 +-
 .../apache/camel/model/endpoint/Mina2Endpoint.java |  400 +----
 .../apache/camel/model/endpoint/MllpEndpoint.java  |  392 +----
 .../apache/camel/model/endpoint/MockEndpoint.java  |  170 +--
 .../camel/model/endpoint/MongoDbEndpoint.java      |  274 +---
 .../apache/camel/model/endpoint/MsvEndpoint.java   |  170 +--
 .../camel/model/endpoint/MustacheEndpoint.java     |  106 +-
 .../apache/camel/model/endpoint/MvelEndpoint.java  |   86 +-
 .../camel/model/endpoint/MyBatisBeanEndpoint.java  |  106 +-
 .../camel/model/endpoint/MyBatisEndpoint.java      |  396 +----
 .../camel/model/endpoint/NagiosEndpoint.java       |  149 +-
 .../apache/camel/model/endpoint/NatsEndpoint.java  |  350 +----
 .../camel/model/endpoint/NetWeaverEndpoint.java    |  118 +-
 .../apache/camel/model/endpoint/NettyEndpoint.java |  949 ++----------
 .../camel/model/endpoint/NettyHttpEndpoint.java    | 1042 ++-----------
 .../camel/model/endpoint/NeutronEndpoint.java      |  154 +-
 .../apache/camel/model/endpoint/NovaEndpoint.java  |  158 +-
 .../apache/camel/model/endpoint/NsqEndpoint.java   |  242 +--
 .../camel/model/endpoint/Olingo2Endpoint.java      |  238 +--
 .../camel/model/endpoint/Olingo4Endpoint.java      |  238 +--
 .../endpoint/OpenshiftBuildConfigsEndpoint.java    |  286 +---
 .../model/endpoint/OpenshiftBuildsEndpoint.java    |  286 +---
 .../camel/model/endpoint/OptaPlannerEndpoint.java  |  130 +-
 .../apache/camel/model/endpoint/PahoEndpoint.java  |  231 +--
 .../camel/model/endpoint/PaxLoggingEndpoint.java   |   94 +-
 .../apache/camel/model/endpoint/PdfEndpoint.java   |  159 +-
 .../camel/model/endpoint/PgEventEndpoint.java      |  166 +--
 .../camel/model/endpoint/PrinterEndpoint.java      |  202 +--
 .../camel/model/endpoint/PropertiesEndpoint.java   |  118 +-
 .../camel/model/endpoint/PubNubEndpoint.java       |  218 +--
 .../camel/model/endpoint/PulsarEndpoint.java       |  182 +--
 .../camel/model/endpoint/QuartzEndpoint.java       |  292 +---
 .../camel/model/endpoint/QueueServiceEndpoint.java |  166 +--
 .../camel/model/endpoint/QuickfixjEndpoint.java    |  118 +-
 .../camel/model/endpoint/RabbitMQEndpoint.java     |  733 +---------
 .../model/endpoint/ReactiveStreamsEndpoint.java    |  168 +--
 .../apache/camel/model/endpoint/RedisEndpoint.java |  182 +--
 .../apache/camel/model/endpoint/RefEndpoint.java   |   98 +-
 .../camel/model/endpoint/RestApiEndpoint.java      |  130 +-
 .../apache/camel/model/endpoint/RestEndpoint.java  |  254 +---
 .../camel/model/endpoint/RestSwaggerEndpoint.java  |  130 +-
 .../camel/model/endpoint/RestletEndpoint.java      |  287 +---
 .../apache/camel/model/endpoint/RssEndpoint.java   |  376 +----
 .../apache/camel/model/endpoint/S3Endpoint.java    |  677 +--------
 .../apache/camel/model/endpoint/SWFEndpoint.java   |  417 +-----
 .../apache/camel/model/endpoint/SagaEndpoint.java  |   62 +-
 .../camel/model/endpoint/SalesforceEndpoint.java   |  588 +-------
 .../camel/model/endpoint/SchedulerEndpoint.java    |  288 +---
 .../camel/model/endpoint/SchematronEndpoint.java   |   94 +-
 .../apache/camel/model/endpoint/ScpEndpoint.java   |  339 +----
 .../apache/camel/model/endpoint/SdbEndpoint.java   |  170 +--
 .../apache/camel/model/endpoint/SedaEndpoint.java  |  255 +---
 .../camel/model/endpoint/ServerEndpoint.java       |  292 +---
 .../camel/model/endpoint/ServiceEndpoint.java      |   94 +-
 .../camel/model/endpoint/ServiceNowEndpoint.java   |  577 +-------
 .../camel/model/endpoint/ServletEndpoint.java      |  314 +---
 .../apache/camel/model/endpoint/SesEndpoint.java   |  182 +--
 .../apache/camel/model/endpoint/SftpEndpoint.java  | 1480 ++-----------------
 .../apache/camel/model/endpoint/SipEndpoint.java   |  580 +-------
 .../apache/camel/model/endpoint/Sjms2Endpoint.java |  512 +------
 .../camel/model/endpoint/SjmsBatchEndpoint.java    |  325 +----
 .../apache/camel/model/endpoint/SjmsEndpoint.java  |  476 +-----
 .../apache/camel/model/endpoint/SlackEndpoint.java |  364 +----
 .../apache/camel/model/endpoint/SmppEndpoint.java  |  518 +------
 .../apache/camel/model/endpoint/SnmpEndpoint.java  |  484 +-----
 .../apache/camel/model/endpoint/SnsEndpoint.java   |  256 +---
 .../apache/camel/model/endpoint/SolrEndpoint.java  |  207 +--
 .../camel/model/endpoint/SoroushBotEndpoint.java   |  288 +---
 .../apache/camel/model/endpoint/SparkEndpoint.java |  194 +--
 .../camel/model/endpoint/SplunkEndpoint.java       |  556 +------
 .../camel/model/endpoint/SpringBatchEndpoint.java  |   94 +-
 .../model/endpoint/SpringIntegrationEndpoint.java  |  130 +-
 .../camel/model/endpoint/SpringLdapEndpoint.java   |   82 +-
 .../model/endpoint/SpringWebserviceEndpoint.java   |  336 +----
 .../apache/camel/model/endpoint/SqlEndpoint.java   |  595 +-------
 .../camel/model/endpoint/SqlStoredEndpoint.java    |  131 +-
 .../apache/camel/model/endpoint/SqsEndpoint.java   |  693 +--------
 .../apache/camel/model/endpoint/SshEndpoint.java   |  436 +-----
 .../apache/camel/model/endpoint/StAXEndpoint.java  |   62 +-
 .../apache/camel/model/endpoint/StompEndpoint.java |  171 +--
 .../camel/model/endpoint/StreamEndpoint.java       |  314 +---
 .../model/endpoint/StringTemplateEndpoint.java     |   94 +-
 .../apache/camel/model/endpoint/StubEndpoint.java  |  255 +---
 .../apache/camel/model/endpoint/SwiftEndpoint.java |  158 +-
 .../camel/model/endpoint/TelegramEndpoint.java     |  348 +----
 .../camel/model/endpoint/ThriftEndpoint.java       |  218 +--
 .../apache/camel/model/endpoint/TikaEndpoint.java  |  111 +-
 .../apache/camel/model/endpoint/TimerEndpoint.java |  194 +--
 .../camel/model/endpoint/TwilioEndpoint.java       |  122 +-
 .../endpoint/TwitterDirectMessageEndpoint.java     |  552 +------
 .../model/endpoint/TwitterSearchEndpoint.java      |  552 +------
 .../model/endpoint/TwitterStreamingEndpoint.java   |  564 +------
 .../model/endpoint/TwitterTimelineEndpoint.java    |  564 +------
 .../camel/model/endpoint/UndertowEndpoint.java     |  300 +---
 .../camel/model/endpoint/ValidatorEndpoint.java    |  166 +--
 .../camel/model/endpoint/VelocityEndpoint.java     |  106 +-
 .../apache/camel/model/endpoint/VertxEndpoint.java |  110 +-
 .../apache/camel/model/endpoint/VmEndpoint.java    |  255 +---
 .../camel/model/endpoint/WeatherEndpoint.java      |  588 +-------
 .../apache/camel/model/endpoint/Web3jEndpoint.java |  506 +------
 .../camel/model/endpoint/WebhookEndpoint.java      |  154 +-
 .../camel/model/endpoint/WebsocketEndpoint.java    |  286 +---
 .../camel/model/endpoint/WordpressEndpoint.java    |  202 +--
 .../apache/camel/model/endpoint/WsEndpoint.java    |  233 +--
 .../camel/model/endpoint/XChangeEndpoint.java      |  106 +-
 .../camel/model/endpoint/XQueryEndpoint.java       |  425 +-----
 .../camel/model/endpoint/XmlSignatureEndpoint.java |  480 +-----
 .../apache/camel/model/endpoint/XmppEndpoint.java  |  291 +---
 .../apache/camel/model/endpoint/XsltEndpoint.java  |  243 +---
 .../camel/model/endpoint/YammerEndpoint.java       |  388 +----
 .../camel/model/endpoint/ZendeskEndpoint.java      |  166 +--
 .../camel/model/endpoint/ZooKeeperEndpoint.java    |  205 +--
 ...rEndpoint.java => ZooKeeperMasterEndpoint.java} |  127 +-
 .../org/apache/camel/reifier/RouteReifier.java     |    8 +-
 .../java/org/apache/camel/reifier/SendReifier.java |    6 +-
 .../org/apache/camel/support/DefaultComponent.java |   52 +
 .../camel/maven/packaging/EndpointDslMojo.java     |   32 +-
 .../camel/maven/packaging/srcgen/JavaClass.java    |   14 +
 313 files changed, 12961 insertions(+), 73102 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/Component.java b/core/camel-api/src/main/java/org/apache/camel/Component.java
index 341e708..bbd2d74 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Component.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Component.java
@@ -18,6 +18,7 @@ package org.apache.camel;
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Map;
 import java.util.Optional;
 
 import org.apache.camel.component.extension.ComponentExtension;
@@ -43,6 +44,8 @@ public interface Component extends CamelContextAware {
      */
     Endpoint createEndpoint(String uri) throws Exception;
 
+    Endpoint createEndpoint(String uri, Map<String, Object> parameters) throws Exception;
+
     /**
      * Whether to use raw or encoded uri, when creating endpoints.
      * <p/>
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java b/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java
index 48c8967..22a8fab 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java
@@ -71,6 +71,8 @@ public interface RouteContext extends RuntimeConfiguration, EndpointAware {
      */
     Endpoint resolveEndpoint(String uri, String ref);
 
+    Endpoint resolveEndpoint(String scheme, String path, Map<String, Object> properties);
+
     /**
      * lookup an object by name and type
      *
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteContext.java
index c42d7cf..3f7d459 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteContext.java
@@ -24,11 +24,13 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.Component;
 import org.apache.camel.Endpoint;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.NamedNode;
 import org.apache.camel.NoSuchEndpointException;
 import org.apache.camel.Processor;
+import org.apache.camel.ResolveEndpointFailedException;
 import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.ShutdownRoute;
@@ -144,6 +146,21 @@ public class DefaultRouteContext implements RouteContext {
         }
     }
 
+    public Endpoint resolveEndpoint(String scheme, String path, Map<String, Object> properties) {
+        Component component = camelContext.getComponent(scheme);
+        if (component != null) {
+            try {
+                Endpoint endpoint = component.createEndpoint(scheme + ":" + path, properties);
+                if (endpoint != null) {
+                    return endpoint;
+                }
+            } catch (Exception e) {
+                throw new ResolveEndpointFailedException(scheme + ":" + path, e);
+            }
+        }
+        throw new NoSuchEndpointException(scheme + ":" + path);
+    }
+
     public <T> T lookup(String name, Class<T> type) {
         return getCamelContext().getRegistry().lookupByNameAndType(name, type);
     }
diff --git a/core/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java b/core/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
index fade2e4..3049e60 100644
--- a/core/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
+++ b/core/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java
@@ -36,6 +36,7 @@ import org.apache.camel.model.OnCompletionDefinition;
 import org.apache.camel.model.OnExceptionDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RoutesDefinition;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.model.rest.RestConfigurationDefinition;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
@@ -240,6 +241,13 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
         return answer;
     }
 
+    public RouteDefinition from(EndpointDefinition.Consumer endpointDefinition) {
+        getRouteCollection().setCamelContext(getContext());
+        RouteDefinition answer = getRouteCollection().from(endpointDefinition);
+        configureRoute(answer);
+        return answer;
+    }
+
     /**
      * Installs the given <a href="http://camel.apache.org/error-handler.html">error handler</a> builder
      *
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/EndpointDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/EndpointDefinition.java
new file mode 100644
index 0000000..a7a9ebe
--- /dev/null
+++ b/core/camel-core/src/main/java/org/apache/camel/model/EndpointDefinition.java
@@ -0,0 +1,38 @@
+package org.apache.camel.model;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlTransient;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Component;
+import org.apache.camel.Endpoint;
+import org.apache.camel.NoSuchEndpointException;
+import org.apache.camel.spi.RouteContext;
+
+@XmlTransient
+public class EndpointDefinition<T extends EndpointDefinition> {
+
+    protected final String scheme;
+    protected final String path;
+    protected final Map<String, Object> properties = new HashMap<>();
+
+    public EndpointDefinition(String scheme, String path) {
+        this.scheme = scheme;
+        this.path = path;
+    }
+
+    public Endpoint resolve(RouteContext context) throws NoSuchEndpointException {
+        return context.resolveEndpoint(scheme, path, properties);
+    }
+
+    public interface Consumer {
+        Endpoint resolve(RouteContext context) throws NoSuchEndpointException;
+    }
+
+    public interface Producer {
+        Endpoint resolve(RouteContext context) throws NoSuchEndpointException;
+    }
+
+}
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/FromDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/FromDefinition.java
index 7cda244..9e7b65b 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/FromDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/FromDefinition.java
@@ -36,6 +36,8 @@ public class FromDefinition extends OptionalIdentifiedDefinition<FromDefinition>
     private String uri;
     @XmlTransient
     private Endpoint endpoint;
+    @XmlTransient
+    private EndpointDefinition.Consumer endpointDefinition;
 
     public FromDefinition() {
     }
@@ -48,6 +50,10 @@ public class FromDefinition extends OptionalIdentifiedDefinition<FromDefinition>
         setEndpoint(endpoint);
     }
 
+    public FromDefinition(EndpointDefinition.Consumer endpointDefinition) {
+        this.endpointDefinition = endpointDefinition;
+    }
+
     @Override
     public String toString() {
         return "From[" + getLabel() + "]";
@@ -111,6 +117,14 @@ public class FromDefinition extends OptionalIdentifiedDefinition<FromDefinition>
         }
     }
 
+    public EndpointDefinition.Consumer getEndpointDefinition() {
+        return endpointDefinition;
+    }
+
+    public void setEndpointDefinition(EndpointDefinition.Consumer endpointDefinition) {
+        this.endpointDefinition = endpointDefinition;
+    }
+
     // Implementation methods
     // -----------------------------------------------------------------------
     protected static String description(String uri, Endpoint endpoint) {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
index 37ea037..a57a62f 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
@@ -362,7 +362,13 @@ public abstract class ProcessorDefinition<Type extends ProcessorDefinition<Type>
         addOutput(new ToDefinition(endpoint));
         return (Type) this;
     }
-    
+
+    @SuppressWarnings("unchecked")
+    public Type to(EndpointDefinition.Producer endpoint) {
+        addOutput(new ToDefinition(endpoint));
+        return (Type) this;
+    }
+
     /**
      * Sends the exchange with certain exchange pattern to the given endpoint
      * <p/>
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
index c1b4305..02fecdb 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinition.java
@@ -168,6 +168,11 @@ public class RouteDefinition extends ProcessorDefinition<RouteDefinition> {
         return this;
     }
 
+    public RouteDefinition from(EndpointDefinition.Consumer endpoint) {
+        setInput(new FromDefinition(endpoint));
+        return this;
+    }
+
     /**
      * Set the group name for this route
      *
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/RoutesDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/RoutesDefinition.java
index 2e8aac2..13cec79 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/RoutesDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/RoutesDefinition.java
@@ -175,6 +175,12 @@ public class RoutesDefinition extends OptionalIdentifiedDefinition<RoutesDefinit
         return route(route);
     }
 
+    public RouteDefinition from(EndpointDefinition.Consumer endpoint) {
+        RouteDefinition route = createRoute();
+        route.from(endpoint);
+        return route(route);
+    }
+
     /**
      * Creates a new route using the given route
      *
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/SendDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/SendDefinition.java
index 843fd5f..db38698 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/SendDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/SendDefinition.java
@@ -23,6 +23,7 @@ import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.model.EndpointDefinition.Producer;
 import org.apache.camel.spi.Metadata;
 
 /**
@@ -34,6 +35,8 @@ public abstract class SendDefinition<Type extends ProcessorDefinition<Type>> ext
     protected String uri;
     @XmlTransient
     protected Endpoint endpoint;
+    @XmlTransient
+    protected EndpointDefinition.Producer endpointDefinition;
 
     public SendDefinition() {
     }
@@ -83,6 +86,14 @@ public abstract class SendDefinition<Type extends ProcessorDefinition<Type>> ext
         }
     }
 
+    public Producer getEndpointDefinition() {
+        return endpointDefinition;
+    }
+
+    public void setEndpointDefinition(Producer endpointDefinition) {
+        this.endpointDefinition = endpointDefinition;
+    }
+
     public ExchangePattern getPattern() {
         return null;
     }
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/ToDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/ToDefinition.java
index 82b53b8b..ec08972 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/ToDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/ToDefinition.java
@@ -46,6 +46,10 @@ public class ToDefinition extends SendDefinition<ToDefinition> {
         setEndpoint(endpoint);
     }
 
+    public ToDefinition(EndpointDefinition.Producer endpointDefinition) {
+        setEndpointDefinition(endpointDefinition);
+    }
+
     public ToDefinition(String uri, ExchangePattern pattern) {
         this(uri);
         this.pattern = pattern;
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 e117a12..2c76327 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
@@ -19,6 +19,7 @@ package org.apache.camel.model.endpoint;
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.LoggingLevel;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 import org.apache.camel.spi.HeaderFilterStrategy;
 
@@ -31,73 +32,28 @@ import org.apache.camel.spi.HeaderFilterStrategy;
 public class AMQPEndpoint {
 
 
-    public static class AMQPCommon<T extends EndpointConfiguration>
+    public static class AMQPCommon<T extends EndpointDefinition>
             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;
-
+                EndpointDefinition<T> {
+        AMQPCommon(String path) {
+            super("amqp", path);
+        }
         /**
          * The kind of destination to use. The option is a java.lang.String
          * type.
          */
         public T destinationType(String destinationType) {
-            this.destinationType = destinationType;
+            this.properties.put("destinationType", destinationType);
             return (T) this;
         }
-
         /**
          * Name of the queue or topic to use as destination. The option is a
          * java.lang.String type.
          */
         public T destinationName(String destinationName) {
-            this.destinationName = destinationName;
+            this.properties.put("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
@@ -106,10 +62,9 @@ public class AMQPEndpoint {
          * Topics instead. The option is a java.lang.String type.
          */
         public T clientId(String clientId) {
-            this.clientId = clientId;
+            this.properties.put("clientId", clientId);
             return (T) this;
         }
-
         /**
          * Sets the default connection factory to be used if a connection
          * factory is not specified for either
@@ -118,10 +73,9 @@ public class AMQPEndpoint {
          * javax.jms.ConnectionFactory type.
          */
         public T connectionFactory(Object connectionFactory) {
-            this.connectionFactory = connectionFactory;
+            this.properties.put("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
@@ -134,20 +88,18 @@ public class AMQPEndpoint {
          * boolean type.
          */
         public T disableReplyTo(boolean disableReplyTo) {
-            this.disableReplyTo = disableReplyTo;
+            this.properties.put("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.
          */
         public T durableSubscriptionName(String durableSubscriptionName) {
-            this.durableSubscriptionName = durableSubscriptionName;
+            this.properties.put("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,
@@ -157,10 +109,9 @@ public class AMQPEndpoint {
          * org.apache.camel.component.jms.JmsMessageType type.
          */
         public T jmsMessageType(JmsMessageType jmsMessageType) {
-            this.jmsMessageType = jmsMessageType;
+            this.properties.put("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
@@ -170,10 +121,9 @@ public class AMQPEndpoint {
          * The option is a boolean type.
          */
         public T testConnectionOnStartup(boolean testConnectionOnStartup) {
-            this.testConnectionOnStartup = testConnectionOnStartup;
+            this.properties.put("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
@@ -181,10 +131,9 @@ public class AMQPEndpoint {
          * it at WARN level. The option is a boolean type.
          */
         public T allowSerializedHeaders(boolean allowSerializedHeaders) {
-            this.allowSerializedHeaders = allowSerializedHeaders;
+            this.properties.put("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
@@ -199,29 +148,26 @@ public class AMQPEndpoint {
          * boolean type.
          */
         public T asyncStartListener(boolean asyncStartListener) {
-            this.asyncStartListener = asyncStartListener;
+            this.properties.put("asyncStartListener", asyncStartListener);
             return (T) this;
         }
-
         /**
          * Whether to stop the JmsConsumer message listener asynchronously, when
          * stopping a route. The option is a boolean type.
          */
         public T asyncStopListener(boolean asyncStopListener) {
-            this.asyncStopListener = asyncStopListener;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("basicPropertyBinding", basicPropertyBinding);
             return (T) this;
         }
-
         /**
          * A pluggable
          * org.springframework.jms.support.destination.DestinationResolver that
@@ -230,10 +176,9 @@ public class AMQPEndpoint {
          * org.springframework.jms.support.destination.DestinationResolver type.
          */
         public T destinationResolver(Object destinationResolver) {
-            this.destinationResolver = destinationResolver;
+            this.properties.put("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
@@ -245,39 +190,35 @@ public class AMQPEndpoint {
          * org.springframework.util.ErrorHandler type.
          */
         public T errorHandler(Object errorHandler) {
-            this.errorHandler = errorHandler;
+            this.properties.put("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.
          */
         public T exceptionListener(Object exceptionListener) {
-            this.exceptionListener = exceptionListener;
+            this.properties.put("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.
          */
         public T headerFilterStrategy(HeaderFilterStrategy headerFilterStrategy) {
-            this.headerFilterStrategy = headerFilterStrategy;
+            this.properties.put("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.
          */
         public T idleConsumerLimit(int idleConsumerLimit) {
-            this.idleConsumerLimit = idleConsumerLimit;
+            this.properties.put("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,
@@ -287,10 +228,9 @@ public class AMQPEndpoint {
          * is a int type.
          */
         public T idleTaskExecutionLimit(int idleTaskExecutionLimit) {
-            this.idleTaskExecutionLimit = idleTaskExecutionLimit;
+            this.properties.put("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
@@ -299,10 +239,9 @@ public class AMQPEndpoint {
          * boolean type.
          */
         public T includeAllJMSXProperties(boolean includeAllJMSXProperties) {
-            this.includeAllJMSXProperties = includeAllJMSXProperties;
+            this.properties.put("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
@@ -315,20 +254,18 @@ public class AMQPEndpoint {
          * using the # notation. The option is a java.lang.String type.
          */
         public T jmsKeyFormatStrategy(Object jmsKeyFormatStrategy) {
-            this.jmsKeyFormatStrategy = jmsKeyFormatStrategy;
+            this.properties.put("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.
          */
         public T mapJmsMessage(boolean mapJmsMessage) {
-            this.mapJmsMessage = mapJmsMessage;
+            this.properties.put("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
@@ -336,10 +273,9 @@ public class AMQPEndpoint {
          * shrink when less work is required. The option is a int type.
          */
         public T maxMessagesPerTask(int maxMessagesPerTask) {
-            this.maxMessagesPerTask = maxMessagesPerTask;
+            this.properties.put("maxMessagesPerTask", maxMessagesPerTask);
             return (T) this;
         }
-
         /**
          * To use a custom Spring
          * org.springframework.jms.support.converter.MessageConverter so you can
@@ -347,10 +283,9 @@ public class AMQPEndpoint {
          * org.springframework.jms.support.converter.MessageConverter type.
          */
         public T messageConverter(Object messageConverter) {
-            this.messageConverter = messageConverter;
+            this.properties.put("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
@@ -358,10 +293,9 @@ public class AMQPEndpoint {
          * org.apache.camel.component.jms.MessageCreatedStrategy type.
          */
         public T messageCreatedStrategy(Object messageCreatedStrategy) {
-            this.messageCreatedStrategy = messageCreatedStrategy;
+            this.properties.put("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
@@ -370,10 +304,9 @@ public class AMQPEndpoint {
          * unique value. The option is a boolean type.
          */
         public T messageIdEnabled(boolean messageIdEnabled) {
-            this.messageIdEnabled = messageIdEnabled;
+            this.properties.put("messageIdEnabled", messageIdEnabled);
             return (T) this;
         }
-
         /**
          * Registry ID of the MessageListenerContainerFactory used to determine
          * what
@@ -384,10 +317,9 @@ public class AMQPEndpoint {
          */
         public T messageListenerContainerFactory(
                 Object messageListenerContainerFactory) {
-            this.messageListenerContainerFactory = messageListenerContainerFactory;
+            this.properties.put("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
@@ -396,38 +328,34 @@ public class AMQPEndpoint {
          * its normal value. The option is a boolean type.
          */
         public T messageTimestampEnabled(boolean messageTimestampEnabled) {
-            this.messageTimestampEnabled = messageTimestampEnabled;
+            this.properties.put("messageTimestampEnabled", messageTimestampEnabled);
             return (T) this;
         }
-
         /**
          * Specifies whether to inhibit the delivery of messages published by
          * its own connection. The option is a boolean type.
          */
         public T pubSubNoLocal(boolean pubSubNoLocal) {
-            this.pubSubNoLocal = pubSubNoLocal;
+            this.properties.put("pubSubNoLocal", pubSubNoLocal);
             return (T) this;
         }
-
         /**
          * The timeout for receiving messages (in milliseconds). The option is a
          * long type.
          */
         public T receiveTimeout(long receiveTimeout) {
-            this.receiveTimeout = receiveTimeout;
+            this.properties.put("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.
          */
         public T recoveryInterval(long recoveryInterval) {
-            this.recoveryInterval = recoveryInterval;
+            this.properties.put("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
@@ -437,20 +365,18 @@ public class AMQPEndpoint {
          */
         public T requestTimeoutCheckerInterval(
                 long requestTimeoutCheckerInterval) {
-            this.requestTimeoutCheckerInterval = requestTimeoutCheckerInterval;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("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
@@ -465,10 +391,9 @@ public class AMQPEndpoint {
          * The option is a boolean type.
          */
         public T transferException(boolean transferException) {
-            this.transferException = transferException;
+            this.properties.put("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,
@@ -480,10 +405,9 @@ public class AMQPEndpoint {
          * a regular payload. The option is a boolean type.
          */
         public T transferExchange(boolean transferExchange) {
-            this.transferExchange = transferExchange;
+            this.properties.put("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
@@ -496,19 +420,17 @@ public class AMQPEndpoint {
          * based such as cxf or spring-ws. The option is a boolean type.
          */
         public T transferFault(boolean transferFault) {
-            this.transferFault = transferFault;
+            this.properties.put("transferFault", transferFault);
             return (T) this;
         }
-
         /**
          * Specifies whether JMSMessageID should always be used as
          * JMSCorrelationID for InOut messages. The option is a boolean type.
          */
         public T useMessageIDAsCorrelationID(boolean useMessageIDAsCorrelationID) {
-            this.useMessageIDAsCorrelationID = useMessageIDAsCorrelationID;
+            this.properties.put("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
@@ -517,49 +439,44 @@ public class AMQPEndpoint {
          */
         public T waitForProvisionCorrelationToBeUpdatedCounter(
                 int waitForProvisionCorrelationToBeUpdatedCounter) {
-            this.waitForProvisionCorrelationToBeUpdatedCounter = waitForProvisionCorrelationToBeUpdatedCounter;
+            this.properties.put("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.
          */
         public T waitForProvisionCorrelationToBeUpdatedThreadSleepingTime(
                 long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime) {
-            this.waitForProvisionCorrelationToBeUpdatedThreadSleepingTime = waitForProvisionCorrelationToBeUpdatedThreadSleepingTime;
+            this.properties.put("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.
          */
         public T password(String password) {
-            this.password = password;
+            this.properties.put("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.
          */
         public T username(String username) {
-            this.username = username;
+            this.properties.put("username", username);
             return (T) this;
         }
-
         /**
          * Specifies whether to use transacted mode. The option is a boolean
          * type.
          */
         public T transacted(boolean transacted) {
-            this.transacted = transacted;
+            this.properties.put("transacted", transacted);
             return (T) this;
         }
-
         /**
          * If true, Camel will create a JmsTransactionManager, if there is no
          * transactionManager injected when option transacted=true. The option
@@ -567,433 +484,43 @@ public class AMQPEndpoint {
          */
         public T lazyCreateTransactionManager(
                 boolean lazyCreateTransactionManager) {
-            this.lazyCreateTransactionManager = lazyCreateTransactionManager;
+            this.properties.put("lazyCreateTransactionManager", lazyCreateTransactionManager);
             return (T) this;
         }
-
         /**
          * The Spring transaction manager to use. The option is a
          * org.springframework.transaction.PlatformTransactionManager type.
          */
         public T transactionManager(Object transactionManager) {
-            this.transactionManager = transactionManager;
+            this.properties.put("transactionManager", transactionManager);
             return (T) this;
         }
-
         /**
          * The name of the transaction to use. The option is a java.lang.String
          * type.
          */
         public T transactionName(String transactionName) {
-            this.transactionName = transactionName;
+            this.properties.put("transactionName", transactionName);
             return (T) this;
         }
-
         /**
          * The timeout value of the transaction (in seconds), if using
          * transacted mode. The option is a int type.
          */
         public T transactionTimeout(int transactionTimeout) {
-            this.transactionTimeout = transactionTimeout;
+            this.properties.put("transactionTimeout", transactionTimeout);
             return (T) this;
         }
-
-        public String getDestinationType() {
-            return destinationType;
-        }
-
-        public void setDestinationType(String destinationType) {
-            this.destinationType = destinationType;
-        }
-
-        public String getDestinationName() {
-            return destinationName;
-        }
-
-        public void setDestinationName(String destinationName) {
-            this.destinationName = destinationName;
-        }
-
-        public String getClientId() {
-            return clientId;
-        }
-
-        public void setClientId(String clientId) {
-            this.clientId = clientId;
-        }
-
-        public Object getConnectionFactory() {
-            return connectionFactory;
-        }
-
-        public void setConnectionFactory(Object connectionFactory) {
-            this.connectionFactory = connectionFactory;
-        }
-
-        public Boolean getDisableReplyTo() {
-            return disableReplyTo;
-        }
-
-        public void setDisableReplyTo(Boolean disableReplyTo) {
-            this.disableReplyTo = disableReplyTo;
-        }
-
-        public String getDurableSubscriptionName() {
-            return durableSubscriptionName;
-        }
-
-        public void setDurableSubscriptionName(String durableSubscriptionName) {
-            this.durableSubscriptionName = durableSubscriptionName;
-        }
-
-        public JmsMessageType getJmsMessageType() {
-            return jmsMessageType;
-        }
-
-        public void setJmsMessageType(JmsMessageType jmsMessageType) {
-            this.jmsMessageType = jmsMessageType;
-        }
-
-        public Boolean getTestConnectionOnStartup() {
-            return testConnectionOnStartup;
-        }
-
-        public void setTestConnectionOnStartup(Boolean testConnectionOnStartup) {
-            this.testConnectionOnStartup = testConnectionOnStartup;
-        }
-
-        public Boolean getAllowSerializedHeaders() {
-            return allowSerializedHeaders;
-        }
-
-        public void setAllowSerializedHeaders(Boolean allowSerializedHeaders) {
-            this.allowSerializedHeaders = allowSerializedHeaders;
-        }
-
-        public Boolean getAsyncStartListener() {
-            return asyncStartListener;
-        }
-
-        public void setAsyncStartListener(Boolean asyncStartListener) {
-            this.asyncStartListener = asyncStartListener;
-        }
-
-        public Boolean getAsyncStopListener() {
-            return asyncStopListener;
-        }
-
-        public void setAsyncStopListener(Boolean asyncStopListener) {
-            this.asyncStopListener = asyncStopListener;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Object getDestinationResolver() {
-            return destinationResolver;
-        }
-
-        public void setDestinationResolver(Object destinationResolver) {
-            this.destinationResolver = destinationResolver;
-        }
-
-        public Object getErrorHandler() {
-            return errorHandler;
-        }
-
-        public void setErrorHandler(Object errorHandler) {
-            this.errorHandler = errorHandler;
-        }
-
-        public Object getExceptionListener() {
-            return exceptionListener;
-        }
-
-        public void setExceptionListener(Object exceptionListener) {
-            this.exceptionListener = exceptionListener;
-        }
-
-        public HeaderFilterStrategy getHeaderFilterStrategy() {
-            return headerFilterStrategy;
-        }
-
-        public void setHeaderFilterStrategy(
-                HeaderFilterStrategy headerFilterStrategy) {
-            this.headerFilterStrategy = headerFilterStrategy;
-        }
-
-        public Integer getIdleConsumerLimit() {
-            return idleConsumerLimit;
-        }
-
-        public void setIdleConsumerLimit(Integer idleConsumerLimit) {
-            this.idleConsumerLimit = idleConsumerLimit;
-        }
-
-        public Integer getIdleTaskExecutionLimit() {
-            return idleTaskExecutionLimit;
-        }
-
-        public void setIdleTaskExecutionLimit(Integer idleTaskExecutionLimit) {
-            this.idleTaskExecutionLimit = idleTaskExecutionLimit;
-        }
-
-        public Boolean getIncludeAllJMSXProperties() {
-            return includeAllJMSXProperties;
-        }
-
-        public void setIncludeAllJMSXProperties(Boolean includeAllJMSXProperties) {
-            this.includeAllJMSXProperties = includeAllJMSXProperties;
-        }
-
-        public Object getJmsKeyFormatStrategy() {
-            return jmsKeyFormatStrategy;
-        }
-
-        public void setJmsKeyFormatStrategy(Object jmsKeyFormatStrategy) {
-            this.jmsKeyFormatStrategy = jmsKeyFormatStrategy;
-        }
-
-        public Boolean getMapJmsMessage() {
-            return mapJmsMessage;
-        }
-
-        public void setMapJmsMessage(Boolean mapJmsMessage) {
-            this.mapJmsMessage = mapJmsMessage;
-        }
-
-        public Integer getMaxMessagesPerTask() {
-            return maxMessagesPerTask;
-        }
-
-        public void setMaxMessagesPerTask(Integer maxMessagesPerTask) {
-            this.maxMessagesPerTask = maxMessagesPerTask;
-        }
-
-        public Object getMessageConverter() {
-            return messageConverter;
-        }
-
-        public void setMessageConverter(Object messageConverter) {
-            this.messageConverter = messageConverter;
-        }
-
-        public Object getMessageCreatedStrategy() {
-            return messageCreatedStrategy;
-        }
-
-        public void setMessageCreatedStrategy(Object messageCreatedStrategy) {
-            this.messageCreatedStrategy = messageCreatedStrategy;
-        }
-
-        public Boolean getMessageIdEnabled() {
-            return messageIdEnabled;
-        }
-
-        public void setMessageIdEnabled(Boolean messageIdEnabled) {
-            this.messageIdEnabled = messageIdEnabled;
-        }
-
-        public Object getMessageListenerContainerFactory() {
-            return messageListenerContainerFactory;
-        }
-
-        public void setMessageListenerContainerFactory(
-                Object messageListenerContainerFactory) {
-            this.messageListenerContainerFactory = messageListenerContainerFactory;
-        }
-
-        public Boolean getMessageTimestampEnabled() {
-            return messageTimestampEnabled;
-        }
-
-        public void setMessageTimestampEnabled(Boolean messageTimestampEnabled) {
-            this.messageTimestampEnabled = messageTimestampEnabled;
-        }
-
-        public Boolean getPubSubNoLocal() {
-            return pubSubNoLocal;
-        }
-
-        public void setPubSubNoLocal(Boolean pubSubNoLocal) {
-            this.pubSubNoLocal = pubSubNoLocal;
-        }
-
-        public Long getReceiveTimeout() {
-            return receiveTimeout;
-        }
-
-        public void setReceiveTimeout(Long receiveTimeout) {
-            this.receiveTimeout = receiveTimeout;
-        }
-
-        public Long getRecoveryInterval() {
-            return recoveryInterval;
-        }
-
-        public void setRecoveryInterval(Long recoveryInterval) {
-            this.recoveryInterval = recoveryInterval;
-        }
-
-        public Long getRequestTimeoutCheckerInterval() {
-            return requestTimeoutCheckerInterval;
-        }
-
-        public void setRequestTimeoutCheckerInterval(
-                Long requestTimeoutCheckerInterval) {
-            this.requestTimeoutCheckerInterval = requestTimeoutCheckerInterval;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
-
-        public Boolean getTransferException() {
-            return transferException;
-        }
-
-        public void setTransferException(Boolean transferException) {
-            this.transferException = transferException;
-        }
-
-        public Boolean getTransferExchange() {
-            return transferExchange;
-        }
-
-        public void setTransferExchange(Boolean transferExchange) {
-            this.transferExchange = transferExchange;
-        }
-
-        public Boolean getTransferFault() {
-            return transferFault;
-        }
-
-        public void setTransferFault(Boolean transferFault) {
-            this.transferFault = transferFault;
-        }
-
-        public Boolean getUseMessageIDAsCorrelationID() {
-            return useMessageIDAsCorrelationID;
-        }
-
-        public void setUseMessageIDAsCorrelationID(
-                Boolean useMessageIDAsCorrelationID) {
-            this.useMessageIDAsCorrelationID = useMessageIDAsCorrelationID;
-        }
-
-        public Integer getWaitForProvisionCorrelationToBeUpdatedCounter() {
-            return waitForProvisionCorrelationToBeUpdatedCounter;
-        }
-
-        public void setWaitForProvisionCorrelationToBeUpdatedCounter(
-                Integer waitForProvisionCorrelationToBeUpdatedCounter) {
-            this.waitForProvisionCorrelationToBeUpdatedCounter = waitForProvisionCorrelationToBeUpdatedCounter;
-        }
-
-        public Long getWaitForProvisionCorrelationToBeUpdatedThreadSleepingTime() {
-            return waitForProvisionCorrelationToBeUpdatedThreadSleepingTime;
-        }
-
-        public void setWaitForProvisionCorrelationToBeUpdatedThreadSleepingTime(
-                Long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime) {
-            this.waitForProvisionCorrelationToBeUpdatedThreadSleepingTime = waitForProvisionCorrelationToBeUpdatedThreadSleepingTime;
-        }
-
-        public String getPassword() {
-            return password;
-        }
-
-        public void setPassword(String password) {
-            this.password = password;
-        }
-
-        public String getUsername() {
-            return username;
-        }
-
-        public void setUsername(String username) {
-            this.username = username;
-        }
-
-        public Boolean getTransacted() {
-            return transacted;
-        }
-
-        public void setTransacted(Boolean transacted) {
-            this.transacted = transacted;
-        }
-
-        public Boolean getLazyCreateTransactionManager() {
-            return lazyCreateTransactionManager;
-        }
-
-        public void setLazyCreateTransactionManager(
-                Boolean lazyCreateTransactionManager) {
-            this.lazyCreateTransactionManager = lazyCreateTransactionManager;
-        }
-
-        public Object getTransactionManager() {
-            return transactionManager;
-        }
-
-        public void setTransactionManager(Object transactionManager) {
-            this.transactionManager = transactionManager;
-        }
-
-        public String getTransactionName() {
-            return transactionName;
-        }
-
-        public void setTransactionName(String transactionName) {
-            this.transactionName = transactionName;
-        }
-
-        public Integer getTransactionTimeout() {
-            return transactionTimeout;
-        }
-
-        public void setTransactionTimeout(Integer transactionTimeout) {
-            this.transactionTimeout = transactionTimeout;
-        }
     }
 
-    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;
-
+    public static class AMQPConsumer
+            extends
+                AMQPCommon<AMQPConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public AMQPConsumer(String path) {
+            super(path);
+        }
         /**
          * The JMS acknowledgement name, which is one of: SESSION_TRANSACTED,
          * CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. The option
@@ -1001,10 +528,9 @@ public class AMQPEndpoint {
          */
         public AMQPConsumer acknowledgementModeName(
                 String acknowledgementModeName) {
-            this.acknowledgementModeName = acknowledgementModeName;
+            this.properties.put("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
@@ -1018,19 +544,17 @@ public class AMQPEndpoint {
          * async transactions). The option is a boolean type.
          */
         public AMQPConsumer asyncConsumer(boolean asyncConsumer) {
-            this.asyncConsumer = asyncConsumer;
+            this.properties.put("asyncConsumer", asyncConsumer);
             return (AMQPConsumer) this;
         }
-
         /**
          * Specifies whether the consumer container should auto-startup. The
          * option is a boolean type.
          */
         public AMQPConsumer autoStartup(boolean autoStartup) {
-            this.autoStartup = autoStartup;
+            this.properties.put("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
@@ -1041,19 +565,17 @@ public class AMQPEndpoint {
          * ignored. The option is a boolean type.
          */
         public AMQPConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
+            this.properties.put("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.
          */
         public AMQPConsumer cacheLevel(int cacheLevel) {
-            this.cacheLevel = cacheLevel;
+            this.properties.put("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,
@@ -1062,10 +584,9 @@ public class AMQPEndpoint {
          * information. The option is a java.lang.String type.
          */
         public AMQPConsumer cacheLevelName(String cacheLevelName) {
-            this.cacheLevelName = cacheLevelName;
+            this.properties.put("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
@@ -1075,10 +596,9 @@ public class AMQPEndpoint {
          * consumers on the reply message listener. The option is a int type.
          */
         public AMQPConsumer concurrentConsumers(int concurrentConsumers) {
-            this.concurrentConsumers = concurrentConsumers;
+            this.properties.put("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
@@ -1088,38 +608,34 @@ public class AMQPEndpoint {
          * consumers on the reply message listener. The option is a int type.
          */
         public AMQPConsumer maxConcurrentConsumers(int maxConcurrentConsumers) {
-            this.maxConcurrentConsumers = maxConcurrentConsumers;
+            this.properties.put("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.
          */
         public AMQPConsumer replyTo(String replyTo) {
-            this.replyTo = replyTo;
+            this.properties.put("replyTo", replyTo);
             return (AMQPConsumer) this;
         }
-
         /**
          * Specifies whether to use persistent delivery by default for replies.
          * The option is a boolean type.
          */
         public AMQPConsumer replyToDeliveryPersistent(
                 boolean replyToDeliveryPersistent) {
-            this.replyToDeliveryPersistent = replyToDeliveryPersistent;
+            this.properties.put("replyToDeliveryPersistent", replyToDeliveryPersistent);
             return (AMQPConsumer) this;
         }
-
         /**
          * Sets the JMS selector to use. The option is a java.lang.String type.
          */
         public AMQPConsumer selector(String selector) {
-            this.selector = selector;
+            this.properties.put("selector", selector);
             return (AMQPConsumer) this;
         }
-
         /**
          * Set whether to make the subscription durable. The durable
          * subscription name to be used can be specified through the
@@ -1131,10 +647,9 @@ public class AMQPEndpoint {
          * pubSubDomain flag as well. The option is a boolean type.
          */
         public AMQPConsumer subscriptionDurable(boolean subscriptionDurable) {
-            this.subscriptionDurable = subscriptionDurable;
+            this.properties.put("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
@@ -1146,10 +661,9 @@ public class AMQPEndpoint {
          * java.lang.String type.
          */
         public AMQPConsumer subscriptionName(String subscriptionName) {
-            this.subscriptionName = subscriptionName;
+            this.properties.put("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
@@ -1164,10 +678,9 @@ public class AMQPEndpoint {
          * broker. The option is a boolean type.
          */
         public AMQPConsumer subscriptionShared(boolean subscriptionShared) {
-            this.subscriptionShared = subscriptionShared;
+            this.properties.put("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
@@ -1181,10 +694,9 @@ public class AMQPEndpoint {
          */
         public AMQPConsumer acceptMessagesWhileStopping(
                 boolean acceptMessagesWhileStopping) {
-            this.acceptMessagesWhileStopping = acceptMessagesWhileStopping;
+            this.properties.put("acceptMessagesWhileStopping", acceptMessagesWhileStopping);
             return (AMQPConsumer) this;
         }
-
         /**
          * Whether the DefaultMessageListenerContainer used in the reply
          * managers for request-reply messaging allow the
@@ -1197,10 +709,9 @@ public class AMQPEndpoint {
          */
         public AMQPConsumer allowReplyManagerQuickStop(
                 boolean allowReplyManagerQuickStop) {
-            this.allowReplyManagerQuickStop = allowReplyManagerQuickStop;
+            this.properties.put("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
@@ -1215,10 +726,9 @@ public class AMQPEndpoint {
          * type.
          */
         public AMQPConsumer consumerType(ConsumerType consumerType) {
-            this.consumerType = consumerType;
+            this.properties.put("consumerType", consumerType);
             return (AMQPConsumer) this;
         }
-
         /**
          * Specifies what default TaskExecutor type to use in the
          * DefaultMessageListenerContainer, for both consumer endpoints and the
@@ -1234,10 +744,9 @@ public class AMQPEndpoint {
          */
         public AMQPConsumer defaultTaskExecutorType(
                 DefaultTaskExecutorType defaultTaskExecutorType) {
-            this.defaultTaskExecutorType = defaultTaskExecutorType;
+            this.properties.put("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
@@ -1247,10 +756,9 @@ public class AMQPEndpoint {
          */
         public AMQPConsumer eagerLoadingOfProperties(
                 boolean eagerLoadingOfProperties) {
-            this.eagerLoadingOfProperties = eagerLoadingOfProperties;
+            this.properties.put("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.
@@ -1259,28 +767,25 @@ public class AMQPEndpoint {
          * org.apache.camel.spi.ExceptionHandler type.
          */
         public AMQPConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
+            this.properties.put("exceptionHandler", exceptionHandler);
             return (AMQPConsumer) this;
         }
-
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
         public AMQPConsumer exchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
+            this.properties.put("exchangePattern", exchangePattern);
             return (AMQPConsumer) this;
         }
-
         /**
          * Specifies whether the listener session should be exposed when
          * consuming messages. The option is a boolean type.
          */
         public AMQPConsumer exposeListenerSession(boolean exposeListenerSession) {
-            this.exposeListenerSession = exposeListenerSession;
+            this.properties.put("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
@@ -1289,19 +794,17 @@ public class AMQPEndpoint {
          */
         public AMQPConsumer replyToSameDestinationAllowed(
                 boolean replyToSameDestinationAllowed) {
-            this.replyToSameDestinationAllowed = replyToSameDestinationAllowed;
+            this.properties.put("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.
          */
         public AMQPConsumer taskExecutor(Object taskExecutor) {
-            this.taskExecutor = taskExecutor;
+            this.properties.put("taskExecutor", taskExecutor);
             return (AMQPConsumer) this;
         }
-
         /**
          * Allows to configure the default errorHandler logging level for
          * logging uncaught exceptions. The option is a
@@ -1309,280 +812,45 @@ public class AMQPEndpoint {
          */
         public AMQPConsumer errorHandlerLoggingLevel(
                 LoggingLevel errorHandlerLoggingLevel) {
-            this.errorHandlerLoggingLevel = errorHandlerLoggingLevel;
+            this.properties.put("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.
          */
         public AMQPConsumer errorHandlerLogStackTrace(
                 boolean errorHandlerLogStackTrace) {
-            this.errorHandlerLogStackTrace = errorHandlerLogStackTrace;
+            this.properties.put("errorHandlerLogStackTrace", errorHandlerLogStackTrace);
             return (AMQPConsumer) this;
         }
-
-        public String getAcknowledgementModeName() {
-            return acknowledgementModeName;
-        }
-
-        public void setAcknowledgementModeName(String acknowledgementModeName) {
-            this.acknowledgementModeName = acknowledgementModeName;
-        }
-
-        public Boolean getAsyncConsumer() {
-            return asyncConsumer;
-        }
-
-        public void setAsyncConsumer(Boolean asyncConsumer) {
-            this.asyncConsumer = asyncConsumer;
-        }
-
-        public Boolean getAutoStartup() {
-            return autoStartup;
-        }
-
-        public void setAutoStartup(Boolean autoStartup) {
-            this.autoStartup = autoStartup;
-        }
-
-        public Boolean getBridgeErrorHandler() {
-            return bridgeErrorHandler;
-        }
-
-        public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
-        }
-
-        public Integer getCacheLevel() {
-            return cacheLevel;
-        }
-
-        public void setCacheLevel(Integer cacheLevel) {
-            this.cacheLevel = cacheLevel;
-        }
-
-        public String getCacheLevelName() {
-            return cacheLevelName;
-        }
-
-        public void setCacheLevelName(String cacheLevelName) {
-            this.cacheLevelName = cacheLevelName;
-        }
-
-        public Integer getConcurrentConsumers() {
-            return concurrentConsumers;
-        }
-
-        public void setConcurrentConsumers(Integer concurrentConsumers) {
-            this.concurrentConsumers = concurrentConsumers;
-        }
-
-        public Integer getMaxConcurrentConsumers() {
-            return maxConcurrentConsumers;
-        }
-
-        public void setMaxConcurrentConsumers(Integer maxConcurrentConsumers) {
-            this.maxConcurrentConsumers = maxConcurrentConsumers;
-        }
-
-        public String getReplyTo() {
-            return replyTo;
-        }
-
-        public void setReplyTo(String replyTo) {
-            this.replyTo = replyTo;
-        }
-
-        public Boolean getReplyToDeliveryPersistent() {
-            return replyToDeliveryPersistent;
-        }
-
-        public void setReplyToDeliveryPersistent(
-                Boolean replyToDeliveryPersistent) {
-            this.replyToDeliveryPersistent = replyToDeliveryPersistent;
-        }
-
-        public String getSelector() {
-            return selector;
-        }
-
-        public void setSelector(String selector) {
-            this.selector = selector;
-        }
-
-        public Boolean getSubscriptionDurable() {
-            return subscriptionDurable;
-        }
-
-        public void setSubscriptionDurable(Boolean subscriptionDurable) {
-            this.subscriptionDurable = subscriptionDurable;
-        }
-
-        public String getSubscriptionName() {
-            return subscriptionName;
-        }
-
-        public void setSubscriptionName(String subscriptionName) {
-            this.subscriptionName = subscriptionName;
-        }
-
-        public Boolean getSubscriptionShared() {
-            return subscriptionShared;
-        }
-
-        public void setSubscriptionShared(Boolean subscriptionShared) {
-            this.subscriptionShared = subscriptionShared;
-        }
-
-        public Boolean getAcceptMessagesWhileStopping() {
-            return acceptMessagesWhileStopping;
-        }
-
-        public void setAcceptMessagesWhileStopping(
-                Boolean acceptMessagesWhileStopping) {
-            this.acceptMessagesWhileStopping = acceptMessagesWhileStopping;
-        }
-
-        public Boolean getAllowReplyManagerQuickStop() {
-            return allowReplyManagerQuickStop;
-        }
-
-        public void setAllowReplyManagerQuickStop(
-                Boolean allowReplyManagerQuickStop) {
-            this.allowReplyManagerQuickStop = allowReplyManagerQuickStop;
-        }
-
-        public ConsumerType getConsumerType() {
-            return consumerType;
-        }
-
-        public void setConsumerType(ConsumerType consumerType) {
-            this.consumerType = consumerType;
-        }
-
-        public DefaultTaskExecutorType getDefaultTaskExecutorType() {
-            return defaultTaskExecutorType;
-        }
-
-        public void setDefaultTaskExecutorType(
-                DefaultTaskExecutorType defaultTaskExecutorType) {
-            this.defaultTaskExecutorType = defaultTaskExecutorType;
-        }
-
-        public Boolean getEagerLoadingOfProperties() {
-            return eagerLoadingOfProperties;
-        }
-
-        public void setEagerLoadingOfProperties(Boolean eagerLoadingOfProperties) {
-            this.eagerLoadingOfProperties = eagerLoadingOfProperties;
-        }
-
-        public ExceptionHandler getExceptionHandler() {
-            return exceptionHandler;
-        }
-
-        public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
-        }
-
-        public ExchangePattern getExchangePattern() {
-            return exchangePattern;
-        }
-
-        public void setExchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
-        }
-
-        public Boolean getExposeListenerSession() {
-            return exposeListenerSession;
-        }
-
-        public void setExposeListenerSession(Boolean exposeListenerSession) {
-            this.exposeListenerSession = exposeListenerSession;
-        }
-
-        public Boolean getReplyToSameDestinationAllowed() {
-            return replyToSameDestinationAllowed;
-        }
-
-        public void setReplyToSameDestinationAllowed(
-                Boolean replyToSameDestinationAllowed) {
-            this.replyToSameDestinationAllowed = replyToSameDestinationAllowed;
-        }
-
-        public Object getTaskExecutor() {
-            return taskExecutor;
-        }
-
-        public void setTaskExecutor(Object taskExecutor) {
-            this.taskExecutor = taskExecutor;
-        }
-
-        public LoggingLevel getErrorHandlerLoggingLevel() {
-            return errorHandlerLoggingLevel;
-        }
-
-        public void setErrorHandlerLoggingLevel(
-                LoggingLevel errorHandlerLoggingLevel) {
-            this.errorHandlerLoggingLevel = errorHandlerLoggingLevel;
-        }
-
-        public Boolean getErrorHandlerLogStackTrace() {
-            return errorHandlerLogStackTrace;
-        }
-
-        public void setErrorHandlerLogStackTrace(
-                Boolean errorHandlerLogStackTrace) {
-            this.errorHandlerLogStackTrace = errorHandlerLogStackTrace;
-        }
     }
 
-    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;
-
+    public static class AMQPProducer
+            extends
+                AMQPCommon<AMQPProducer>
+            implements
+                EndpointDefinition.Producer {
+        public AMQPProducer(String path) {
+            super(path);
+        }
         /**
          * 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.
          */
         public AMQPProducer deliveryMode(Integer deliveryMode) {
-            this.deliveryMode = deliveryMode;
+            this.properties.put("deliveryMode", deliveryMode);
             return (AMQPProducer) this;
         }
-
         /**
          * Specifies whether persistent delivery is used by default. The option
          * is a boolean type.
          */
         public AMQPProducer deliveryPersistent(boolean deliveryPersistent) {
-            this.deliveryPersistent = deliveryPersistent;
+            this.properties.put("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
@@ -1593,20 +861,18 @@ public class AMQPEndpoint {
          * The option is a java.lang.Boolean type.
          */
         public AMQPProducer explicitQosEnabled(Boolean explicitQosEnabled) {
-            this.explicitQosEnabled = explicitQosEnabled;
+            this.properties.put("explicitQosEnabled", explicitQosEnabled);
             return (AMQPProducer) this;
         }
-
         /**
          * Sets whether date headers should be formatted according to the ISO
          * 8601 standard. The option is a boolean type.
          */
         public AMQPProducer formatDateHeadersToIso8601(
                 boolean formatDateHeadersToIso8601) {
-            this.formatDateHeadersToIso8601 = formatDateHeadersToIso8601;
+            this.properties.put("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
@@ -1619,10 +885,9 @@ public class AMQPEndpoint {
          * values from the message header. The option is a boolean type.
          */
         public AMQPProducer preserveMessageQos(boolean preserveMessageQos) {
-            this.preserveMessageQos = preserveMessageQos;
+            this.properties.put("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
@@ -1630,10 +895,9 @@ public class AMQPEndpoint {
          * option to have any effect. The option is a int type.
          */
         public AMQPProducer priority(int priority) {
-            this.priority = priority;
+            this.properties.put("priority", priority);
             return (AMQPProducer) this;
         }
-
         /**
          * Specifies the default number of concurrent consumers when doing
          * request/reply over JMS. See also the maxMessagesPerTask option to
@@ -1641,10 +905,9 @@ public class AMQPEndpoint {
          */
         public AMQPProducer replyToConcurrentConsumers(
                 int replyToConcurrentConsumers) {
-            this.replyToConcurrentConsumers = replyToConcurrentConsumers;
+            this.properties.put("replyToConcurrentConsumers", replyToConcurrentConsumers);
             return (AMQPProducer) this;
         }
-
         /**
          * Specifies the maximum number of concurrent consumers when using
          * request/reply over JMS. See also the maxMessagesPerTask option to
@@ -1652,10 +915,9 @@ public class AMQPEndpoint {
          */
         public AMQPProducer replyToMaxConcurrentConsumers(
                 int replyToMaxConcurrentConsumers) {
-            this.replyToMaxConcurrentConsumers = replyToMaxConcurrentConsumers;
+            this.properties.put("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
@@ -1663,10 +925,9 @@ public class AMQPEndpoint {
          */
         public AMQPProducer replyToOnTimeoutMaxConcurrentConsumers(
                 int replyToOnTimeoutMaxConcurrentConsumers) {
-            this.replyToOnTimeoutMaxConcurrentConsumers = replyToOnTimeoutMaxConcurrentConsumers;
+            this.properties.put("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
@@ -1674,10 +935,9 @@ public class AMQPEndpoint {
          * ReplyTo destination. The option is a java.lang.String type.
          */
         public AMQPProducer replyToOverride(String replyToOverride) {
-            this.replyToOverride = replyToOverride;
+            this.properties.put("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
@@ -1691,10 +951,9 @@ public class AMQPEndpoint {
          * option is a org.apache.camel.component.jms.ReplyToType type.
          */
         public AMQPProducer replyToType(ReplyToType replyToType) {
-            this.replyToType = replyToType;
+            this.properties.put("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
@@ -1704,19 +963,17 @@ public class AMQPEndpoint {
          * The option is a long type.
          */
         public AMQPProducer requestTimeout(long requestTimeout) {
-            this.requestTimeout = requestTimeout;
+            this.properties.put("requestTimeout", requestTimeout);
             return (AMQPProducer) this;
         }
-
         /**
          * When sending messages, specifies the time-to-live of the message (in
          * milliseconds). The option is a long type.
          */
         public AMQPProducer timeToLive(long timeToLive) {
-            this.timeToLive = timeToLive;
+            this.properties.put("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
@@ -1727,20 +984,18 @@ public class AMQPEndpoint {
          * type.
          */
         public AMQPProducer allowAdditionalHeaders(String allowAdditionalHeaders) {
-            this.allowAdditionalHeaders = allowAdditionalHeaders;
+            this.properties.put("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.
          */
         public AMQPProducer allowNullBody(boolean allowNullBody) {
-            this.allowNullBody = allowNullBody;
+            this.properties.put("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
@@ -1750,10 +1005,9 @@ public class AMQPEndpoint {
          * replyToDestinationSelectorName is set). The option is a boolean type.
          */
         public AMQPProducer alwaysCopyMessage(boolean alwaysCopyMessage) {
-            this.alwaysCopyMessage = alwaysCopyMessage;
+            this.properties.put("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
@@ -1764,10 +1018,9 @@ public class AMQPEndpoint {
          * name. The option is a java.lang.String type.
          */
         public AMQPProducer correlationProperty(String correlationProperty) {
-            this.correlationProperty = correlationProperty;
+            this.properties.put("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
@@ -1780,10 +1033,9 @@ public class AMQPEndpoint {
          * more details. The option is a boolean type.
          */
         public AMQPProducer disableTimeToLive(boolean disableTimeToLive) {
-            this.disableTimeToLive = disableTimeToLive;
+            this.properties.put("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)
@@ -1792,10 +1044,9 @@ public class AMQPEndpoint {
          */
         public AMQPProducer forceSendOriginalMessage(
                 boolean forceSendOriginalMessage) {
-            this.forceSendOriginalMessage = forceSendOriginalMessage;
+            this.properties.put("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
@@ -1805,10 +1056,9 @@ public class AMQPEndpoint {
          */
         public AMQPProducer includeSentJMSMessageID(
                 boolean includeSentJMSMessageID) {
-            this.includeSentJMSMessageID = includeSentJMSMessageID;
+            this.properties.put("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
@@ -1822,10 +1072,9 @@ public class AMQPEndpoint {
          * java.lang.String type.
          */
         public AMQPProducer replyToCacheLevelName(String replyToCacheLevelName) {
-            this.replyToCacheLevelName = replyToCacheLevelName;
+            this.properties.put("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
@@ -1834,10 +1083,9 @@ public class AMQPEndpoint {
          */
         public AMQPProducer replyToDestinationSelectorName(
                 String replyToDestinationSelectorName) {
-            this.replyToDestinationSelectorName = replyToDestinationSelectorName;
+            this.properties.put("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
@@ -1850,198 +1098,9 @@ public class AMQPEndpoint {
          */
         public AMQPProducer streamMessageTypeEnabled(
                 boolean streamMessageTypeEnabled) {
-            this.streamMessageTypeEnabled = streamMessageTypeEnabled;
+            this.properties.put("streamMessageTypeEnabled", streamMessageTypeEnabled);
             return (AMQPProducer) this;
         }
-
-        public Integer getDeliveryMode() {
-            return deliveryMode;
-        }
-
-        public void setDeliveryMode(Integer deliveryMode) {
-            this.deliveryMode = deliveryMode;
-        }
-
-        public Boolean getDeliveryPersistent() {
-            return deliveryPersistent;
-        }
-
-        public void setDeliveryPersistent(Boolean deliveryPersistent) {
-            this.deliveryPersistent = deliveryPersistent;
-        }
-
-        public Boolean getExplicitQosEnabled() {
-            return explicitQosEnabled;
-        }
-
-        public void setExplicitQosEnabled(Boolean explicitQosEnabled) {
-            this.explicitQosEnabled = explicitQosEnabled;
-        }
-
-        public Boolean getFormatDateHeadersToIso8601() {
-            return formatDateHeadersToIso8601;
-        }
-
-        public void setFormatDateHeadersToIso8601(
-                Boolean formatDateHeadersToIso8601) {
-            this.formatDateHeadersToIso8601 = formatDateHeadersToIso8601;
-        }
-
-        public Boolean getPreserveMessageQos() {
-            return preserveMessageQos;
-        }
-
-        public void setPreserveMessageQos(Boolean preserveMessageQos) {
-            this.preserveMessageQos = preserveMessageQos;
-        }
-
-        public Integer getPriority() {
-            return priority;
-        }
-
-        public void setPriority(Integer priority) {
-            this.priority = priority;
-        }
-
-        public Integer getReplyToConcurrentConsumers() {
-            return replyToConcurrentConsumers;
-        }
-
-        public void setReplyToConcurrentConsumers(
-                Integer replyToConcurrentConsumers) {
-            this.replyToConcurrentConsumers = replyToConcurrentConsumers;
-        }
-
-        public Integer getReplyToMaxConcurrentConsumers() {
-            return replyToMaxConcurrentConsumers;
-        }
-
-        public void setReplyToMaxConcurrentConsumers(
-                Integer replyToMaxConcurrentConsumers) {
-            this.replyToMaxConcurrentConsumers = replyToMaxConcurrentConsumers;
-        }
-
-        public Integer getReplyToOnTimeoutMaxConcurrentConsumers() {
-            return replyToOnTimeoutMaxConcurrentConsumers;
-        }
-
-        public void setReplyToOnTimeoutMaxConcurrentConsumers(
-                Integer replyToOnTimeoutMaxConcurrentConsumers) {
-            this.replyToOnTimeoutMaxConcurrentConsumers = replyToOnTimeoutMaxConcurrentConsumers;
-        }
-
-        public String getReplyToOverride() {
-            return replyToOverride;
-        }
-
-        public void setReplyToOverride(String replyToOverride) {
-            this.replyToOverride = replyToOverride;
-        }
-
-        public ReplyToType getReplyToType() {
-            return replyToType;
-        }
-
-        public void setReplyToType(ReplyToType replyToType) {
-            this.replyToType = replyToType;
-        }
-
-        public Long getRequestTimeout() {
-            return requestTimeout;
-        }
-
-        public void setRequestTimeout(Long requestTimeout) {
-            this.requestTimeout = requestTimeout;
-        }
-
-        public Long getTimeToLive() {
-            return timeToLive;
-        }
-
-        public void setTimeToLive(Long timeToLive) {
-            this.timeToLive = timeToLive;
-        }
-
-        public String getAllowAdditionalHeaders() {
-            return allowAdditionalHeaders;
-        }
-
-        public void setAllowAdditionalHeaders(String allowAdditionalHeaders) {
-            this.allowAdditionalHeaders = allowAdditionalHeaders;
-        }
-
-        public Boolean getAllowNullBody() {
-            return allowNullBody;
-        }
-
-        public void setAllowNullBody(Boolean allowNullBody) {
-            this.allowNullBody = allowNullBody;
-        }
-
-        public Boolean getAlwaysCopyMessage() {
-            return alwaysCopyMessage;
-        }
-
-        public void setAlwaysCopyMessage(Boolean alwaysCopyMessage) {
-            this.alwaysCopyMessage = alwaysCopyMessage;
-        }
-
-        public String getCorrelationProperty() {
-            return correlationProperty;
-        }
-
-        public void setCorrelationProperty(String correlationProperty) {
-            this.correlationProperty = correlationProperty;
-        }
-
-        public Boolean getDisableTimeToLive() {
-            return disableTimeToLive;
-        }
-
-        public void setDisableTimeToLive(Boolean disableTimeToLive) {
-            this.disableTimeToLive = disableTimeToLive;
-        }
-
-        public Boolean getForceSendOriginalMessage() {
-            return forceSendOriginalMessage;
-        }
-
-        public void setForceSendOriginalMessage(Boolean forceSendOriginalMessage) {
-            this.forceSendOriginalMessage = forceSendOriginalMessage;
-        }
-
-        public Boolean getIncludeSentJMSMessageID() {
-            return includeSentJMSMessageID;
-        }
-
-        public void setIncludeSentJMSMessageID(Boolean includeSentJMSMessageID) {
-            this.includeSentJMSMessageID = includeSentJMSMessageID;
-        }
-
-        public String getReplyToCacheLevelName() {
-            return replyToCacheLevelName;
-        }
-
-        public void setReplyToCacheLevelName(String replyToCacheLevelName) {
-            this.replyToCacheLevelName = replyToCacheLevelName;
-        }
-
-        public String getReplyToDestinationSelectorName() {
-            return replyToDestinationSelectorName;
-        }
-
-        public void setReplyToDestinationSelectorName(
-                String replyToDestinationSelectorName) {
-            this.replyToDestinationSelectorName = replyToDestinationSelectorName;
-        }
-
-        public Boolean getStreamMessageTypeEnabled() {
-            return streamMessageTypeEnabled;
-        }
-
-        public void setStreamMessageTypeEnabled(Boolean streamMessageTypeEnabled) {
-            this.streamMessageTypeEnabled = streamMessageTypeEnabled;
-        }
     }
 
     public static enum JmsMessageType {
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 da03add..1428b78 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
@@ -20,6 +20,7 @@ import java.security.PrivateKey;
 import java.security.cert.Certificate;
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 
 /**
@@ -32,68 +33,36 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AS2Endpoint {
 
 
-    public static class AS2Common<T extends EndpointConfiguration>
+    public static class AS2Common<T extends EndpointDefinition>
             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;
-
+                EndpointDefinition<T> {
+        AS2Common(String path) {
+            super("as2", path);
+        }
         /**
          * What kind of operation to perform. The option is a
          * org.apache.camel.component.as2.internal.AS2ApiName type.
          */
         public T apiName(AS2ApiName apiName) {
-            this.apiName = apiName;
+            this.properties.put("apiName", apiName);
             return (T) this;
         }
-
         /**
          * What sub operation to use for the selected operation. The option is a
          * java.lang.String type.
          */
         public T methodName(String methodName) {
-            this.methodName = methodName;
+            this.properties.put("methodName", methodName);
             return (T) this;
         }
-
         /**
          * The value of the AS2From header of AS2 message. The option is a
          * java.lang.String type.
          */
         public T as2From(String as2From) {
-            this.as2From = as2From;
+            this.properties.put("as2From", as2From);
             return (T) this;
         }
-
         /**
          * The structure of AS2 Message. One of: PLAIN - No encryption, no
          * signature, SIGNED - No encryption, signature, ENCRYPTED - Encryption,
@@ -101,521 +70,241 @@ public class AS2Endpoint {
          * a org.apache.camel.component.as2.api.AS2MessageStructure type.
          */
         public T as2MessageStructure(AS2MessageStructure as2MessageStructure) {
-            this.as2MessageStructure = as2MessageStructure;
+            this.properties.put("as2MessageStructure", as2MessageStructure);
             return (T) this;
         }
-
         /**
          * The value of the AS2To header of AS2 message. The option is a
          * java.lang.String type.
          */
         public T as2To(String as2To) {
-            this.as2To = as2To;
+            this.properties.put("as2To", as2To);
             return (T) this;
         }
-
         /**
          * The version of the AS2 protocol. The option is a java.lang.String
          * type.
          */
         public T as2Version(String as2Version) {
-            this.as2Version = as2Version;
+            this.properties.put("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.
          */
         public T clientFqdn(String clientFqdn) {
-            this.clientFqdn = clientFqdn;
+            this.properties.put("clientFqdn", clientFqdn);
             return (T) this;
         }
-
         /**
          * The algorithm used to compress EDI message. The option is a
          * org.apache.camel.component.as2.api.AS2CompressionAlgorithm type.
          */
         public T compressionAlgorithm(
                 AS2CompressionAlgorithm compressionAlgorithm) {
-            this.compressionAlgorithm = compressionAlgorithm;
+            this.properties.put("compressionAlgorithm", compressionAlgorithm);
             return (T) this;
         }
-
         /**
          * The key used to encrypt the EDI message. The option is a
          * java.security.PrivateKey type.
          */
         public T decryptingPrivateKey(PrivateKey decryptingPrivateKey) {
-            this.decryptingPrivateKey = decryptingPrivateKey;
+            this.properties.put("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.
          */
         public T dispositionNotificationTo(String dispositionNotificationTo) {
-            this.dispositionNotificationTo = dispositionNotificationTo;
+            this.properties.put("dispositionNotificationTo", dispositionNotificationTo);
             return (T) this;
         }
-
         /**
          * The transfer encoding of EDI message. The option is a
          * java.lang.String type.
          */
         public T ediMessageTransferEncoding(String ediMessageTransferEncoding) {
-            this.ediMessageTransferEncoding = ediMessageTransferEncoding;
+            this.properties.put("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.
          */
         public T ediMessageType(Object ediMessageType) {
-            this.ediMessageType = ediMessageType;
+            this.properties.put("ediMessageType", ediMessageType);
             return (T) this;
         }
-
         /**
          * The algorithm used to encrypt EDI message. The option is a
          * org.apache.camel.component.as2.api.AS2EncryptionAlgorithm type.
          */
         public T encryptingAlgorithm(AS2EncryptionAlgorithm encryptingAlgorithm) {
-            this.encryptingAlgorithm = encryptingAlgorithm;
+            this.properties.put("encryptingAlgorithm", encryptingAlgorithm);
             return (T) this;
         }
-
         /**
          * The chain of certificates used to encrypt EDI message. The option is
          * a java.security.cert.Certificate[] type.
          */
         public T encryptingCertificateChain(
                 Certificate[] encryptingCertificateChain) {
-            this.encryptingCertificateChain = encryptingCertificateChain;
+            this.properties.put("encryptingCertificateChain", encryptingCertificateChain);
             return (T) this;
         }
-
         /**
          * The value of the From header of AS2 message. The option is a
          * java.lang.String type.
          */
         public T from(String from) {
-            this.from = from;
+            this.properties.put("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.
          */
         public T inBody(String inBody) {
-            this.inBody = inBody;
+            this.properties.put("inBody", inBody);
             return (T) this;
         }
-
         /**
          * The template used to format MDN message. The option is a
          * java.lang.String type.
          */
         public T mdnMessageTemplate(String mdnMessageTemplate) {
-            this.mdnMessageTemplate = mdnMessageTemplate;
+            this.properties.put("mdnMessageTemplate", mdnMessageTemplate);
             return (T) this;
         }
-
         /**
          * The request URI of EDI message. The option is a java.lang.String
          * type.
          */
         public T requestUri(String requestUri) {
-            this.requestUri = requestUri;
+            this.properties.put("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.
          */
         public T server(String server) {
-            this.server = server;
+            this.properties.put("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.
          */
         public T serverFqdn(String serverFqdn) {
-            this.serverFqdn = serverFqdn;
+            this.properties.put("serverFqdn", serverFqdn);
             return (T) this;
         }
-
         /**
          * The port number of server. The option is a java.lang.Integer type.
          */
         public T serverPortNumber(Integer serverPortNumber) {
-            this.serverPortNumber = serverPortNumber;
+            this.properties.put("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.
          */
         public T signedReceiptMicAlgorithms(String[] signedReceiptMicAlgorithms) {
-            this.signedReceiptMicAlgorithms = signedReceiptMicAlgorithms;
+            this.properties.put("signedReceiptMicAlgorithms", signedReceiptMicAlgorithms);
             return (T) this;
         }
-
         /**
          * The algorithm used to sign EDI message. The option is a
          * org.apache.camel.component.as2.api.AS2SignatureAlgorithm type.
          */
         public T signingAlgorithm(AS2SignatureAlgorithm signingAlgorithm) {
-            this.signingAlgorithm = signingAlgorithm;
+            this.properties.put("signingAlgorithm", signingAlgorithm);
             return (T) this;
         }
-
         /**
          * The chain of certificates used to sign EDI message. The option is a
          * java.security.cert.Certificate[] type.
          */
         public T signingCertificateChain(Certificate[] signingCertificateChain) {
-            this.signingCertificateChain = signingCertificateChain;
+            this.properties.put("signingCertificateChain", signingCertificateChain);
             return (T) this;
         }
-
         /**
          * The key used to sign the EDI message. The option is a
          * java.security.PrivateKey type.
          */
         public T signingPrivateKey(PrivateKey signingPrivateKey) {
-            this.signingPrivateKey = signingPrivateKey;
+            this.properties.put("signingPrivateKey", signingPrivateKey);
             return (T) this;
         }
-
         /**
          * The value of Subject header of AS2 message. The option is a
          * java.lang.String type.
          */
         public T subject(String subject) {
-            this.subject = subject;
+            this.properties.put("subject", subject);
             return (T) this;
         }
-
         /**
          * The host name (IP or DNS name) of target host. The option is a
          * java.lang.String type.
          */
         public T targetHostname(String targetHostname) {
-            this.targetHostname = targetHostname;
+            this.properties.put("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.
          */
         public T targetPortNumber(Integer targetPortNumber) {
-            this.targetPortNumber = targetPortNumber;
+            this.properties.put("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.
          */
         public T userAgent(String userAgent) {
-            this.userAgent = userAgent;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("synchronous", synchronous);
             return (T) this;
         }
-
-        public AS2ApiName getApiName() {
-            return apiName;
-        }
-
-        public void setApiName(AS2ApiName apiName) {
-            this.apiName = apiName;
-        }
-
-        public String getMethodName() {
-            return methodName;
-        }
-
-        public void setMethodName(String methodName) {
-            this.methodName = methodName;
-        }
-
-        public String getAs2From() {
-            return as2From;
-        }
-
-        public void setAs2From(String as2From) {
-            this.as2From = as2From;
-        }
-
-        public AS2MessageStructure getAs2MessageStructure() {
-            return as2MessageStructure;
-        }
-
-        public void setAs2MessageStructure(
-                AS2MessageStructure as2MessageStructure) {
-            this.as2MessageStructure = as2MessageStructure;
-        }
-
-        public String getAs2To() {
-            return as2To;
-        }
-
-        public void setAs2To(String as2To) {
-            this.as2To = as2To;
-        }
-
-        public String getAs2Version() {
-            return as2Version;
-        }
-
-        public void setAs2Version(String as2Version) {
-            this.as2Version = as2Version;
-        }
-
-        public String getClientFqdn() {
-            return clientFqdn;
-        }
-
-        public void setClientFqdn(String clientFqdn) {
-            this.clientFqdn = clientFqdn;
-        }
-
-        public AS2CompressionAlgorithm getCompressionAlgorithm() {
-            return compressionAlgorithm;
-        }
-
-        public void setCompressionAlgorithm(
-                AS2CompressionAlgorithm compressionAlgorithm) {
-            this.compressionAlgorithm = compressionAlgorithm;
-        }
-
-        public PrivateKey getDecryptingPrivateKey() {
-            return decryptingPrivateKey;
-        }
-
-        public void setDecryptingPrivateKey(PrivateKey decryptingPrivateKey) {
-            this.decryptingPrivateKey = decryptingPrivateKey;
-        }
-
-        public String getDispositionNotificationTo() {
-            return dispositionNotificationTo;
-        }
-
-        public void setDispositionNotificationTo(
-                String dispositionNotificationTo) {
-            this.dispositionNotificationTo = dispositionNotificationTo;
-        }
-
-        public String getEdiMessageTransferEncoding() {
-            return ediMessageTransferEncoding;
-        }
-
-        public void setEdiMessageTransferEncoding(
-                String ediMessageTransferEncoding) {
-            this.ediMessageTransferEncoding = ediMessageTransferEncoding;
-        }
-
-        public Object getEdiMessageType() {
-            return ediMessageType;
-        }
-
-        public void setEdiMessageType(Object ediMessageType) {
-            this.ediMessageType = ediMessageType;
-        }
-
-        public AS2EncryptionAlgorithm getEncryptingAlgorithm() {
-            return encryptingAlgorithm;
-        }
-
-        public void setEncryptingAlgorithm(
-                AS2EncryptionAlgorithm encryptingAlgorithm) {
-            this.encryptingAlgorithm = encryptingAlgorithm;
-        }
-
-        public Certificate[] getEncryptingCertificateChain() {
-            return encryptingCertificateChain;
-        }
-
-        public void setEncryptingCertificateChain(
-                Certificate[] encryptingCertificateChain) {
-            this.encryptingCertificateChain = encryptingCertificateChain;
-        }
-
-        public String getFrom() {
-            return from;
-        }
-
-        public void setFrom(String from) {
-            this.from = from;
-        }
-
-        public String getInBody() {
-            return inBody;
-        }
-
-        public void setInBody(String inBody) {
-            this.inBody = inBody;
-        }
-
-        public String getMdnMessageTemplate() {
-            return mdnMessageTemplate;
-        }
-
-        public void setMdnMessageTemplate(String mdnMessageTemplate) {
-            this.mdnMessageTemplate = mdnMessageTemplate;
-        }
-
-        public String getRequestUri() {
-            return requestUri;
-        }
-
-        public void setRequestUri(String requestUri) {
-            this.requestUri = requestUri;
-        }
-
-        public String getServer() {
-            return server;
-        }
-
-        public void setServer(String server) {
-            this.server = server;
-        }
-
-        public String getServerFqdn() {
-            return serverFqdn;
-        }
-
-        public void setServerFqdn(String serverFqdn) {
-            this.serverFqdn = serverFqdn;
-        }
-
-        public Integer getServerPortNumber() {
-            return serverPortNumber;
-        }
-
-        public void setServerPortNumber(Integer serverPortNumber) {
-            this.serverPortNumber = serverPortNumber;
-        }
-
-        public String[] getSignedReceiptMicAlgorithms() {
-            return signedReceiptMicAlgorithms;
-        }
-
-        public void setSignedReceiptMicAlgorithms(
-                String[] signedReceiptMicAlgorithms) {
-            this.signedReceiptMicAlgorithms = signedReceiptMicAlgorithms;
-        }
-
-        public AS2SignatureAlgorithm getSigningAlgorithm() {
-            return signingAlgorithm;
-        }
-
-        public void setSigningAlgorithm(AS2SignatureAlgorithm signingAlgorithm) {
-            this.signingAlgorithm = signingAlgorithm;
-        }
-
-        public Certificate[] getSigningCertificateChain() {
-            return signingCertificateChain;
-        }
-
-        public void setSigningCertificateChain(
-                Certificate[] signingCertificateChain) {
-            this.signingCertificateChain = signingCertificateChain;
-        }
-
-        public PrivateKey getSigningPrivateKey() {
-            return signingPrivateKey;
-        }
-
-        public void setSigningPrivateKey(PrivateKey signingPrivateKey) {
-            this.signingPrivateKey = signingPrivateKey;
-        }
-
-        public String getSubject() {
-            return subject;
-        }
-
-        public void setSubject(String subject) {
-            this.subject = subject;
-        }
-
-        public String getTargetHostname() {
-            return targetHostname;
-        }
-
-        public void setTargetHostname(String targetHostname) {
-            this.targetHostname = targetHostname;
-        }
-
-        public Integer getTargetPortNumber() {
-            return targetPortNumber;
-        }
-
-        public void setTargetPortNumber(Integer targetPortNumber) {
-            this.targetPortNumber = targetPortNumber;
-        }
-
-        public String getUserAgent() {
-            return userAgent;
-        }
-
-        public void setUserAgent(String userAgent) {
-            this.userAgent = userAgent;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
     }
 
-    public static class AS2Consumer extends AS2Common<AS2Consumer> {
-        private Boolean bridgeErrorHandler;
-        private ExceptionHandler exceptionHandler;
-        private ExchangePattern exchangePattern;
-
+    public static class AS2Consumer
+            extends
+                AS2Common<AS2Consumer>
+            implements
+                EndpointDefinition.Consumer {
+        public AS2Consumer(String path) {
+            super(path);
+        }
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -626,10 +315,9 @@ public class AS2Endpoint {
          * ignored. The option is a boolean type.
          */
         public AS2Consumer bridgeErrorHandler(boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
+            this.properties.put("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.
@@ -638,45 +326,27 @@ public class AS2Endpoint {
          * org.apache.camel.spi.ExceptionHandler type.
          */
         public AS2Consumer exceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
+            this.properties.put("exceptionHandler", exceptionHandler);
             return (AS2Consumer) this;
         }
-
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
         public AS2Consumer exchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
+            this.properties.put("exchangePattern", exchangePattern);
             return (AS2Consumer) this;
         }
-
-        public Boolean getBridgeErrorHandler() {
-            return bridgeErrorHandler;
-        }
-
-        public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
-        }
-
-        public ExceptionHandler getExceptionHandler() {
-            return exceptionHandler;
-        }
-
-        public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
-        }
-
-        public ExchangePattern getExchangePattern() {
-            return exchangePattern;
-        }
-
-        public void setExchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
-        }
     }
 
-    public static class AS2Producer extends AS2Common<AS2Producer> {
+    public static class AS2Producer
+            extends
+                AS2Common<AS2Producer>
+            implements
+                EndpointDefinition.Producer {
+        public AS2Producer(String path) {
+            super(path);
+        }
     }
 
     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 d0754b4..e10f2eb 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
@@ -19,6 +19,7 @@ package org.apache.camel.model.endpoint;
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.LoggingLevel;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 import org.apache.camel.spi.HeaderFilterStrategy;
 
@@ -32,73 +33,28 @@ import org.apache.camel.spi.HeaderFilterStrategy;
 public class ActiveMQEndpoint {
 
 
-    public static class ActiveMQCommon<T extends EndpointConfiguration>
+    public static class ActiveMQCommon<T extends EndpointDefinition>
             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;
-
+                EndpointDefinition<T> {
+        ActiveMQCommon(String path) {
+            super("activemq", path);
+        }
         /**
          * The kind of destination to use. The option is a java.lang.String
          * type.
          */
         public T destinationType(String destinationType) {
-            this.destinationType = destinationType;
+            this.properties.put("destinationType", destinationType);
             return (T) this;
         }
-
         /**
          * Name of the queue or topic to use as destination. The option is a
          * java.lang.String type.
          */
         public T destinationName(String destinationName) {
-            this.destinationName = destinationName;
+            this.properties.put("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
@@ -107,10 +63,9 @@ public class ActiveMQEndpoint {
          * Topics instead. The option is a java.lang.String type.
          */
         public T clientId(String clientId) {
-            this.clientId = clientId;
+            this.properties.put("clientId", clientId);
             return (T) this;
         }
-
         /**
          * Sets the default connection factory to be used if a connection
          * factory is not specified for either
@@ -119,10 +74,9 @@ public class ActiveMQEndpoint {
          * javax.jms.ConnectionFactory type.
          */
         public T connectionFactory(Object connectionFactory) {
-            this.connectionFactory = connectionFactory;
+            this.properties.put("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
@@ -135,20 +89,18 @@ public class ActiveMQEndpoint {
          * boolean type.
          */
         public T disableReplyTo(boolean disableReplyTo) {
-            this.disableReplyTo = disableReplyTo;
+            this.properties.put("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.
          */
         public T durableSubscriptionName(String durableSubscriptionName) {
-            this.durableSubscriptionName = durableSubscriptionName;
+            this.properties.put("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,
@@ -158,10 +110,9 @@ public class ActiveMQEndpoint {
          * org.apache.camel.component.jms.JmsMessageType type.
          */
         public T jmsMessageType(JmsMessageType jmsMessageType) {
-            this.jmsMessageType = jmsMessageType;
+            this.properties.put("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
@@ -171,10 +122,9 @@ public class ActiveMQEndpoint {
          * The option is a boolean type.
          */
         public T testConnectionOnStartup(boolean testConnectionOnStartup) {
-            this.testConnectionOnStartup = testConnectionOnStartup;
+            this.properties.put("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
@@ -182,10 +132,9 @@ public class ActiveMQEndpoint {
          * it at WARN level. The option is a boolean type.
          */
         public T allowSerializedHeaders(boolean allowSerializedHeaders) {
-            this.allowSerializedHeaders = allowSerializedHeaders;
+            this.properties.put("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
@@ -200,29 +149,26 @@ public class ActiveMQEndpoint {
          * boolean type.
          */
         public T asyncStartListener(boolean asyncStartListener) {
-            this.asyncStartListener = asyncStartListener;
+            this.properties.put("asyncStartListener", asyncStartListener);
             return (T) this;
         }
-
         /**
          * Whether to stop the JmsConsumer message listener asynchronously, when
          * stopping a route. The option is a boolean type.
          */
         public T asyncStopListener(boolean asyncStopListener) {
-            this.asyncStopListener = asyncStopListener;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("basicPropertyBinding", basicPropertyBinding);
             return (T) this;
         }
-
         /**
          * A pluggable
          * org.springframework.jms.support.destination.DestinationResolver that
@@ -231,10 +177,9 @@ public class ActiveMQEndpoint {
          * org.springframework.jms.support.destination.DestinationResolver type.
          */
         public T destinationResolver(Object destinationResolver) {
-            this.destinationResolver = destinationResolver;
+            this.properties.put("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
@@ -246,39 +191,35 @@ public class ActiveMQEndpoint {
          * org.springframework.util.ErrorHandler type.
          */
         public T errorHandler(Object errorHandler) {
-            this.errorHandler = errorHandler;
+            this.properties.put("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.
          */
         public T exceptionListener(Object exceptionListener) {
-            this.exceptionListener = exceptionListener;
+            this.properties.put("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.
          */
         public T headerFilterStrategy(HeaderFilterStrategy headerFilterStrategy) {
-            this.headerFilterStrategy = headerFilterStrategy;
+            this.properties.put("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.
          */
         public T idleConsumerLimit(int idleConsumerLimit) {
-            this.idleConsumerLimit = idleConsumerLimit;
+            this.properties.put("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,
@@ -288,10 +229,9 @@ public class ActiveMQEndpoint {
          * is a int type.
          */
         public T idleTaskExecutionLimit(int idleTaskExecutionLimit) {
-            this.idleTaskExecutionLimit = idleTaskExecutionLimit;
+            this.properties.put("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
@@ -300,10 +240,9 @@ public class ActiveMQEndpoint {
          * boolean type.
          */
         public T includeAllJMSXProperties(boolean includeAllJMSXProperties) {
-            this.includeAllJMSXProperties = includeAllJMSXProperties;
+            this.properties.put("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
@@ -316,20 +255,18 @@ public class ActiveMQEndpoint {
          * using the # notation. The option is a java.lang.String type.
          */
         public T jmsKeyFormatStrategy(Object jmsKeyFormatStrategy) {
-            this.jmsKeyFormatStrategy = jmsKeyFormatStrategy;
+            this.properties.put("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.
          */
         public T mapJmsMessage(boolean mapJmsMessage) {
-            this.mapJmsMessage = mapJmsMessage;
+            this.properties.put("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
@@ -337,10 +274,9 @@ public class ActiveMQEndpoint {
          * shrink when less work is required. The option is a int type.
          */
         public T maxMessagesPerTask(int maxMessagesPerTask) {
-            this.maxMessagesPerTask = maxMessagesPerTask;
+            this.properties.put("maxMessagesPerTask", maxMessagesPerTask);
             return (T) this;
         }
-
         /**
          * To use a custom Spring
          * org.springframework.jms.support.converter.MessageConverter so you can
@@ -348,10 +284,9 @@ public class ActiveMQEndpoint {
          * org.springframework.jms.support.converter.MessageConverter type.
          */
         public T messageConverter(Object messageConverter) {
-            this.messageConverter = messageConverter;
+            this.properties.put("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
@@ -359,10 +294,9 @@ public class ActiveMQEndpoint {
          * org.apache.camel.component.jms.MessageCreatedStrategy type.
          */
         public T messageCreatedStrategy(Object messageCreatedStrategy) {
-            this.messageCreatedStrategy = messageCreatedStrategy;
+            this.properties.put("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
@@ -371,10 +305,9 @@ public class ActiveMQEndpoint {
          * unique value. The option is a boolean type.
          */
         public T messageIdEnabled(boolean messageIdEnabled) {
-            this.messageIdEnabled = messageIdEnabled;
+            this.properties.put("messageIdEnabled", messageIdEnabled);
             return (T) this;
         }
-
         /**
          * Registry ID of the MessageListenerContainerFactory used to determine
          * what
@@ -385,10 +318,9 @@ public class ActiveMQEndpoint {
          */
         public T messageListenerContainerFactory(
                 Object messageListenerContainerFactory) {
-            this.messageListenerContainerFactory = messageListenerContainerFactory;
+            this.properties.put("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
@@ -397,38 +329,34 @@ public class ActiveMQEndpoint {
          * its normal value. The option is a boolean type.
          */
         public T messageTimestampEnabled(boolean messageTimestampEnabled) {
-            this.messageTimestampEnabled = messageTimestampEnabled;
+            this.properties.put("messageTimestampEnabled", messageTimestampEnabled);
             return (T) this;
         }
-
         /**
          * Specifies whether to inhibit the delivery of messages published by
          * its own connection. The option is a boolean type.
          */
         public T pubSubNoLocal(boolean pubSubNoLocal) {
-            this.pubSubNoLocal = pubSubNoLocal;
+            this.properties.put("pubSubNoLocal", pubSubNoLocal);
             return (T) this;
         }
-
         /**
          * The timeout for receiving messages (in milliseconds). The option is a
          * long type.
          */
         public T receiveTimeout(long receiveTimeout) {
-            this.receiveTimeout = receiveTimeout;
+            this.properties.put("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.
          */
         public T recoveryInterval(long recoveryInterval) {
-            this.recoveryInterval = recoveryInterval;
+            this.properties.put("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
@@ -438,20 +366,18 @@ public class ActiveMQEndpoint {
          */
         public T requestTimeoutCheckerInterval(
                 long requestTimeoutCheckerInterval) {
-            this.requestTimeoutCheckerInterval = requestTimeoutCheckerInterval;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("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
@@ -466,10 +392,9 @@ public class ActiveMQEndpoint {
          * The option is a boolean type.
          */
         public T transferException(boolean transferException) {
-            this.transferException = transferException;
+            this.properties.put("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,
@@ -481,10 +406,9 @@ public class ActiveMQEndpoint {
          * a regular payload. The option is a boolean type.
          */
         public T transferExchange(boolean transferExchange) {
-            this.transferExchange = transferExchange;
+            this.properties.put("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
@@ -497,19 +421,17 @@ public class ActiveMQEndpoint {
          * based such as cxf or spring-ws. The option is a boolean type.
          */
         public T transferFault(boolean transferFault) {
-            this.transferFault = transferFault;
+            this.properties.put("transferFault", transferFault);
             return (T) this;
         }
-
         /**
          * Specifies whether JMSMessageID should always be used as
          * JMSCorrelationID for InOut messages. The option is a boolean type.
          */
         public T useMessageIDAsCorrelationID(boolean useMessageIDAsCorrelationID) {
-            this.useMessageIDAsCorrelationID = useMessageIDAsCorrelationID;
+            this.properties.put("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
@@ -518,49 +440,44 @@ public class ActiveMQEndpoint {
          */
         public T waitForProvisionCorrelationToBeUpdatedCounter(
                 int waitForProvisionCorrelationToBeUpdatedCounter) {
-            this.waitForProvisionCorrelationToBeUpdatedCounter = waitForProvisionCorrelationToBeUpdatedCounter;
+            this.properties.put("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.
          */
         public T waitForProvisionCorrelationToBeUpdatedThreadSleepingTime(
                 long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime) {
-            this.waitForProvisionCorrelationToBeUpdatedThreadSleepingTime = waitForProvisionCorrelationToBeUpdatedThreadSleepingTime;
+            this.properties.put("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.
          */
         public T password(String password) {
-            this.password = password;
+            this.properties.put("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.
          */
         public T username(String username) {
-            this.username = username;
+            this.properties.put("username", username);
             return (T) this;
         }
-
         /**
          * Specifies whether to use transacted mode. The option is a boolean
          * type.
          */
         public T transacted(boolean transacted) {
-            this.transacted = transacted;
+            this.properties.put("transacted", transacted);
             return (T) this;
         }
-
         /**
          * If true, Camel will create a JmsTransactionManager, if there is no
          * transactionManager injected when option transacted=true. The option
@@ -568,435 +485,43 @@ public class ActiveMQEndpoint {
          */
         public T lazyCreateTransactionManager(
                 boolean lazyCreateTransactionManager) {
-            this.lazyCreateTransactionManager = lazyCreateTransactionManager;
+            this.properties.put("lazyCreateTransactionManager", lazyCreateTransactionManager);
             return (T) this;
         }
-
         /**
          * The Spring transaction manager to use. The option is a
          * org.springframework.transaction.PlatformTransactionManager type.
          */
         public T transactionManager(Object transactionManager) {
-            this.transactionManager = transactionManager;
+            this.properties.put("transactionManager", transactionManager);
             return (T) this;
         }
-
         /**
          * The name of the transaction to use. The option is a java.lang.String
          * type.
          */
         public T transactionName(String transactionName) {
-            this.transactionName = transactionName;
+            this.properties.put("transactionName", transactionName);
             return (T) this;
         }
-
         /**
          * The timeout value of the transaction (in seconds), if using
          * transacted mode. The option is a int type.
          */
         public T transactionTimeout(int transactionTimeout) {
-            this.transactionTimeout = transactionTimeout;
+            this.properties.put("transactionTimeout", transactionTimeout);
             return (T) this;
         }
-
-        public String getDestinationType() {
-            return destinationType;
-        }
-
-        public void setDestinationType(String destinationType) {
-            this.destinationType = destinationType;
-        }
-
-        public String getDestinationName() {
-            return destinationName;
-        }
-
-        public void setDestinationName(String destinationName) {
-            this.destinationName = destinationName;
-        }
-
-        public String getClientId() {
-            return clientId;
-        }
-
-        public void setClientId(String clientId) {
-            this.clientId = clientId;
-        }
-
-        public Object getConnectionFactory() {
-            return connectionFactory;
-        }
-
-        public void setConnectionFactory(Object connectionFactory) {
-            this.connectionFactory = connectionFactory;
-        }
-
-        public Boolean getDisableReplyTo() {
-            return disableReplyTo;
-        }
-
-        public void setDisableReplyTo(Boolean disableReplyTo) {
-            this.disableReplyTo = disableReplyTo;
-        }
-
-        public String getDurableSubscriptionName() {
-            return durableSubscriptionName;
-        }
-
-        public void setDurableSubscriptionName(String durableSubscriptionName) {
-            this.durableSubscriptionName = durableSubscriptionName;
-        }
-
-        public JmsMessageType getJmsMessageType() {
-            return jmsMessageType;
-        }
-
-        public void setJmsMessageType(JmsMessageType jmsMessageType) {
-            this.jmsMessageType = jmsMessageType;
-        }
-
-        public Boolean getTestConnectionOnStartup() {
-            return testConnectionOnStartup;
-        }
-
-        public void setTestConnectionOnStartup(Boolean testConnectionOnStartup) {
-            this.testConnectionOnStartup = testConnectionOnStartup;
-        }
-
-        public Boolean getAllowSerializedHeaders() {
-            return allowSerializedHeaders;
-        }
-
-        public void setAllowSerializedHeaders(Boolean allowSerializedHeaders) {
-            this.allowSerializedHeaders = allowSerializedHeaders;
-        }
-
-        public Boolean getAsyncStartListener() {
-            return asyncStartListener;
-        }
-
-        public void setAsyncStartListener(Boolean asyncStartListener) {
-            this.asyncStartListener = asyncStartListener;
-        }
-
-        public Boolean getAsyncStopListener() {
-            return asyncStopListener;
-        }
-
-        public void setAsyncStopListener(Boolean asyncStopListener) {
-            this.asyncStopListener = asyncStopListener;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Object getDestinationResolver() {
-            return destinationResolver;
-        }
-
-        public void setDestinationResolver(Object destinationResolver) {
-            this.destinationResolver = destinationResolver;
-        }
-
-        public Object getErrorHandler() {
-            return errorHandler;
-        }
-
-        public void setErrorHandler(Object errorHandler) {
-            this.errorHandler = errorHandler;
-        }
-
-        public Object getExceptionListener() {
-            return exceptionListener;
-        }
-
-        public void setExceptionListener(Object exceptionListener) {
-            this.exceptionListener = exceptionListener;
-        }
-
-        public HeaderFilterStrategy getHeaderFilterStrategy() {
-            return headerFilterStrategy;
-        }
-
-        public void setHeaderFilterStrategy(
-                HeaderFilterStrategy headerFilterStrategy) {
-            this.headerFilterStrategy = headerFilterStrategy;
-        }
-
-        public Integer getIdleConsumerLimit() {
-            return idleConsumerLimit;
-        }
-
-        public void setIdleConsumerLimit(Integer idleConsumerLimit) {
-            this.idleConsumerLimit = idleConsumerLimit;
-        }
-
-        public Integer getIdleTaskExecutionLimit() {
-            return idleTaskExecutionLimit;
-        }
-
-        public void setIdleTaskExecutionLimit(Integer idleTaskExecutionLimit) {
-            this.idleTaskExecutionLimit = idleTaskExecutionLimit;
-        }
-
-        public Boolean getIncludeAllJMSXProperties() {
-            return includeAllJMSXProperties;
-        }
-
-        public void setIncludeAllJMSXProperties(Boolean includeAllJMSXProperties) {
-            this.includeAllJMSXProperties = includeAllJMSXProperties;
-        }
-
-        public Object getJmsKeyFormatStrategy() {
-            return jmsKeyFormatStrategy;
-        }
-
-        public void setJmsKeyFormatStrategy(Object jmsKeyFormatStrategy) {
-            this.jmsKeyFormatStrategy = jmsKeyFormatStrategy;
-        }
-
-        public Boolean getMapJmsMessage() {
-            return mapJmsMessage;
-        }
-
-        public void setMapJmsMessage(Boolean mapJmsMessage) {
-            this.mapJmsMessage = mapJmsMessage;
-        }
-
-        public Integer getMaxMessagesPerTask() {
-            return maxMessagesPerTask;
-        }
-
-        public void setMaxMessagesPerTask(Integer maxMessagesPerTask) {
-            this.maxMessagesPerTask = maxMessagesPerTask;
-        }
-
-        public Object getMessageConverter() {
-            return messageConverter;
-        }
-
-        public void setMessageConverter(Object messageConverter) {
-            this.messageConverter = messageConverter;
-        }
-
-        public Object getMessageCreatedStrategy() {
-            return messageCreatedStrategy;
-        }
-
-        public void setMessageCreatedStrategy(Object messageCreatedStrategy) {
-            this.messageCreatedStrategy = messageCreatedStrategy;
-        }
-
-        public Boolean getMessageIdEnabled() {
-            return messageIdEnabled;
-        }
-
-        public void setMessageIdEnabled(Boolean messageIdEnabled) {
-            this.messageIdEnabled = messageIdEnabled;
-        }
-
-        public Object getMessageListenerContainerFactory() {
-            return messageListenerContainerFactory;
-        }
-
-        public void setMessageListenerContainerFactory(
-                Object messageListenerContainerFactory) {
-            this.messageListenerContainerFactory = messageListenerContainerFactory;
-        }
-
-        public Boolean getMessageTimestampEnabled() {
-            return messageTimestampEnabled;
-        }
-
-        public void setMessageTimestampEnabled(Boolean messageTimestampEnabled) {
-            this.messageTimestampEnabled = messageTimestampEnabled;
-        }
-
-        public Boolean getPubSubNoLocal() {
-            return pubSubNoLocal;
-        }
-
-        public void setPubSubNoLocal(Boolean pubSubNoLocal) {
-            this.pubSubNoLocal = pubSubNoLocal;
-        }
-
-        public Long getReceiveTimeout() {
-            return receiveTimeout;
-        }
-
-        public void setReceiveTimeout(Long receiveTimeout) {
-            this.receiveTimeout = receiveTimeout;
-        }
-
-        public Long getRecoveryInterval() {
-            return recoveryInterval;
-        }
-
-        public void setRecoveryInterval(Long recoveryInterval) {
-            this.recoveryInterval = recoveryInterval;
-        }
-
-        public Long getRequestTimeoutCheckerInterval() {
-            return requestTimeoutCheckerInterval;
-        }
-
-        public void setRequestTimeoutCheckerInterval(
-                Long requestTimeoutCheckerInterval) {
-            this.requestTimeoutCheckerInterval = requestTimeoutCheckerInterval;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
-
-        public Boolean getTransferException() {
-            return transferException;
-        }
-
-        public void setTransferException(Boolean transferException) {
-            this.transferException = transferException;
-        }
-
-        public Boolean getTransferExchange() {
-            return transferExchange;
-        }
-
-        public void setTransferExchange(Boolean transferExchange) {
-            this.transferExchange = transferExchange;
-        }
-
-        public Boolean getTransferFault() {
-            return transferFault;
-        }
-
-        public void setTransferFault(Boolean transferFault) {
-            this.transferFault = transferFault;
-        }
-
-        public Boolean getUseMessageIDAsCorrelationID() {
-            return useMessageIDAsCorrelationID;
-        }
-
-        public void setUseMessageIDAsCorrelationID(
-                Boolean useMessageIDAsCorrelationID) {
-            this.useMessageIDAsCorrelationID = useMessageIDAsCorrelationID;
-        }
-
-        public Integer getWaitForProvisionCorrelationToBeUpdatedCounter() {
-            return waitForProvisionCorrelationToBeUpdatedCounter;
-        }
-
-        public void setWaitForProvisionCorrelationToBeUpdatedCounter(
-                Integer waitForProvisionCorrelationToBeUpdatedCounter) {
-            this.waitForProvisionCorrelationToBeUpdatedCounter = waitForProvisionCorrelationToBeUpdatedCounter;
-        }
-
-        public Long getWaitForProvisionCorrelationToBeUpdatedThreadSleepingTime() {
-            return waitForProvisionCorrelationToBeUpdatedThreadSleepingTime;
-        }
-
-        public void setWaitForProvisionCorrelationToBeUpdatedThreadSleepingTime(
-                Long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime) {
-            this.waitForProvisionCorrelationToBeUpdatedThreadSleepingTime = waitForProvisionCorrelationToBeUpdatedThreadSleepingTime;
-        }
-
-        public String getPassword() {
-            return password;
-        }
-
-        public void setPassword(String password) {
-            this.password = password;
-        }
-
-        public String getUsername() {
-            return username;
-        }
-
-        public void setUsername(String username) {
-            this.username = username;
-        }
-
-        public Boolean getTransacted() {
-            return transacted;
-        }
-
-        public void setTransacted(Boolean transacted) {
-            this.transacted = transacted;
-        }
-
-        public Boolean getLazyCreateTransactionManager() {
-            return lazyCreateTransactionManager;
-        }
-
-        public void setLazyCreateTransactionManager(
-                Boolean lazyCreateTransactionManager) {
-            this.lazyCreateTransactionManager = lazyCreateTransactionManager;
-        }
-
-        public Object getTransactionManager() {
-            return transactionManager;
-        }
-
-        public void setTransactionManager(Object transactionManager) {
-            this.transactionManager = transactionManager;
-        }
-
-        public String getTransactionName() {
-            return transactionName;
-        }
-
-        public void setTransactionName(String transactionName) {
-            this.transactionName = transactionName;
-        }
-
-        public Integer getTransactionTimeout() {
-            return transactionTimeout;
-        }
-
-        public void setTransactionTimeout(Integer transactionTimeout) {
-            this.transactionTimeout = transactionTimeout;
-        }
     }
 
     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;
-
+                ActiveMQCommon<ActiveMQConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public ActiveMQConsumer(String path) {
+            super(path);
+        }
         /**
          * The JMS acknowledgement name, which is one of: SESSION_TRANSACTED,
          * CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. The option
@@ -1004,10 +529,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQConsumer acknowledgementModeName(
                 String acknowledgementModeName) {
-            this.acknowledgementModeName = acknowledgementModeName;
+            this.properties.put("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
@@ -1021,19 +545,17 @@ public class ActiveMQEndpoint {
          * async transactions). The option is a boolean type.
          */
         public ActiveMQConsumer asyncConsumer(boolean asyncConsumer) {
-            this.asyncConsumer = asyncConsumer;
+            this.properties.put("asyncConsumer", asyncConsumer);
             return (ActiveMQConsumer) this;
         }
-
         /**
          * Specifies whether the consumer container should auto-startup. The
          * option is a boolean type.
          */
         public ActiveMQConsumer autoStartup(boolean autoStartup) {
-            this.autoStartup = autoStartup;
+            this.properties.put("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
@@ -1044,19 +566,17 @@ public class ActiveMQEndpoint {
          * ignored. The option is a boolean type.
          */
         public ActiveMQConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
+            this.properties.put("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.
          */
         public ActiveMQConsumer cacheLevel(int cacheLevel) {
-            this.cacheLevel = cacheLevel;
+            this.properties.put("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,
@@ -1065,10 +585,9 @@ public class ActiveMQEndpoint {
          * information. The option is a java.lang.String type.
          */
         public ActiveMQConsumer cacheLevelName(String cacheLevelName) {
-            this.cacheLevelName = cacheLevelName;
+            this.properties.put("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
@@ -1078,10 +597,9 @@ public class ActiveMQEndpoint {
          * consumers on the reply message listener. The option is a int type.
          */
         public ActiveMQConsumer concurrentConsumers(int concurrentConsumers) {
-            this.concurrentConsumers = concurrentConsumers;
+            this.properties.put("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
@@ -1092,38 +610,34 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQConsumer maxConcurrentConsumers(
                 int maxConcurrentConsumers) {
-            this.maxConcurrentConsumers = maxConcurrentConsumers;
+            this.properties.put("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.
          */
         public ActiveMQConsumer replyTo(String replyTo) {
-            this.replyTo = replyTo;
+            this.properties.put("replyTo", replyTo);
             return (ActiveMQConsumer) this;
         }
-
         /**
          * Specifies whether to use persistent delivery by default for replies.
          * The option is a boolean type.
          */
         public ActiveMQConsumer replyToDeliveryPersistent(
                 boolean replyToDeliveryPersistent) {
-            this.replyToDeliveryPersistent = replyToDeliveryPersistent;
+            this.properties.put("replyToDeliveryPersistent", replyToDeliveryPersistent);
             return (ActiveMQConsumer) this;
         }
-
         /**
          * Sets the JMS selector to use. The option is a java.lang.String type.
          */
         public ActiveMQConsumer selector(String selector) {
-            this.selector = selector;
+            this.properties.put("selector", selector);
             return (ActiveMQConsumer) this;
         }
-
         /**
          * Set whether to make the subscription durable. The durable
          * subscription name to be used can be specified through the
@@ -1135,10 +649,9 @@ public class ActiveMQEndpoint {
          * pubSubDomain flag as well. The option is a boolean type.
          */
         public ActiveMQConsumer subscriptionDurable(boolean subscriptionDurable) {
-            this.subscriptionDurable = subscriptionDurable;
+            this.properties.put("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
@@ -1150,10 +663,9 @@ public class ActiveMQEndpoint {
          * java.lang.String type.
          */
         public ActiveMQConsumer subscriptionName(String subscriptionName) {
-            this.subscriptionName = subscriptionName;
+            this.properties.put("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
@@ -1168,10 +680,9 @@ public class ActiveMQEndpoint {
          * broker. The option is a boolean type.
          */
         public ActiveMQConsumer subscriptionShared(boolean subscriptionShared) {
-            this.subscriptionShared = subscriptionShared;
+            this.properties.put("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
@@ -1185,10 +696,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQConsumer acceptMessagesWhileStopping(
                 boolean acceptMessagesWhileStopping) {
-            this.acceptMessagesWhileStopping = acceptMessagesWhileStopping;
+            this.properties.put("acceptMessagesWhileStopping", acceptMessagesWhileStopping);
             return (ActiveMQConsumer) this;
         }
-
         /**
          * Whether the DefaultMessageListenerContainer used in the reply
          * managers for request-reply messaging allow the
@@ -1201,10 +711,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQConsumer allowReplyManagerQuickStop(
                 boolean allowReplyManagerQuickStop) {
-            this.allowReplyManagerQuickStop = allowReplyManagerQuickStop;
+            this.properties.put("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
@@ -1219,10 +728,9 @@ public class ActiveMQEndpoint {
          * type.
          */
         public ActiveMQConsumer consumerType(ConsumerType consumerType) {
-            this.consumerType = consumerType;
+            this.properties.put("consumerType", consumerType);
             return (ActiveMQConsumer) this;
         }
-
         /**
          * Specifies what default TaskExecutor type to use in the
          * DefaultMessageListenerContainer, for both consumer endpoints and the
@@ -1238,10 +746,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQConsumer defaultTaskExecutorType(
                 DefaultTaskExecutorType defaultTaskExecutorType) {
-            this.defaultTaskExecutorType = defaultTaskExecutorType;
+            this.properties.put("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
@@ -1251,10 +758,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQConsumer eagerLoadingOfProperties(
                 boolean eagerLoadingOfProperties) {
-            this.eagerLoadingOfProperties = eagerLoadingOfProperties;
+            this.properties.put("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.
@@ -1264,29 +770,26 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQConsumer exceptionHandler(
                 ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
+            this.properties.put("exceptionHandler", exceptionHandler);
             return (ActiveMQConsumer) this;
         }
-
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
         public ActiveMQConsumer exchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
+            this.properties.put("exchangePattern", exchangePattern);
             return (ActiveMQConsumer) this;
         }
-
         /**
          * Specifies whether the listener session should be exposed when
          * consuming messages. The option is a boolean type.
          */
         public ActiveMQConsumer exposeListenerSession(
                 boolean exposeListenerSession) {
-            this.exposeListenerSession = exposeListenerSession;
+            this.properties.put("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
@@ -1295,19 +798,17 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQConsumer replyToSameDestinationAllowed(
                 boolean replyToSameDestinationAllowed) {
-            this.replyToSameDestinationAllowed = replyToSameDestinationAllowed;
+            this.properties.put("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.
          */
         public ActiveMQConsumer taskExecutor(Object taskExecutor) {
-            this.taskExecutor = taskExecutor;
+            this.properties.put("taskExecutor", taskExecutor);
             return (ActiveMQConsumer) this;
         }
-
         /**
          * Allows to configure the default errorHandler logging level for
          * logging uncaught exceptions. The option is a
@@ -1315,282 +816,45 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQConsumer errorHandlerLoggingLevel(
                 LoggingLevel errorHandlerLoggingLevel) {
-            this.errorHandlerLoggingLevel = errorHandlerLoggingLevel;
+            this.properties.put("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.
          */
         public ActiveMQConsumer errorHandlerLogStackTrace(
                 boolean errorHandlerLogStackTrace) {
-            this.errorHandlerLogStackTrace = errorHandlerLogStackTrace;
+            this.properties.put("errorHandlerLogStackTrace", errorHandlerLogStackTrace);
             return (ActiveMQConsumer) this;
         }
-
-        public String getAcknowledgementModeName() {
-            return acknowledgementModeName;
-        }
-
-        public void setAcknowledgementModeName(String acknowledgementModeName) {
-            this.acknowledgementModeName = acknowledgementModeName;
-        }
-
-        public Boolean getAsyncConsumer() {
-            return asyncConsumer;
-        }
-
-        public void setAsyncConsumer(Boolean asyncConsumer) {
-            this.asyncConsumer = asyncConsumer;
-        }
-
-        public Boolean getAutoStartup() {
-            return autoStartup;
-        }
-
-        public void setAutoStartup(Boolean autoStartup) {
-            this.autoStartup = autoStartup;
-        }
-
-        public Boolean getBridgeErrorHandler() {
-            return bridgeErrorHandler;
-        }
-
-        public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
-        }
-
-        public Integer getCacheLevel() {
-            return cacheLevel;
-        }
-
-        public void setCacheLevel(Integer cacheLevel) {
-            this.cacheLevel = cacheLevel;
-        }
-
-        public String getCacheLevelName() {
-            return cacheLevelName;
-        }
-
-        public void setCacheLevelName(String cacheLevelName) {
-            this.cacheLevelName = cacheLevelName;
-        }
-
-        public Integer getConcurrentConsumers() {
-            return concurrentConsumers;
-        }
-
-        public void setConcurrentConsumers(Integer concurrentConsumers) {
-            this.concurrentConsumers = concurrentConsumers;
-        }
-
-        public Integer getMaxConcurrentConsumers() {
-            return maxConcurrentConsumers;
-        }
-
-        public void setMaxConcurrentConsumers(Integer maxConcurrentConsumers) {
-            this.maxConcurrentConsumers = maxConcurrentConsumers;
-        }
-
-        public String getReplyTo() {
-            return replyTo;
-        }
-
-        public void setReplyTo(String replyTo) {
-            this.replyTo = replyTo;
-        }
-
-        public Boolean getReplyToDeliveryPersistent() {
-            return replyToDeliveryPersistent;
-        }
-
-        public void setReplyToDeliveryPersistent(
-                Boolean replyToDeliveryPersistent) {
-            this.replyToDeliveryPersistent = replyToDeliveryPersistent;
-        }
-
-        public String getSelector() {
-            return selector;
-        }
-
-        public void setSelector(String selector) {
-            this.selector = selector;
-        }
-
-        public Boolean getSubscriptionDurable() {
-            return subscriptionDurable;
-        }
-
-        public void setSubscriptionDurable(Boolean subscriptionDurable) {
-            this.subscriptionDurable = subscriptionDurable;
-        }
-
-        public String getSubscriptionName() {
-            return subscriptionName;
-        }
-
-        public void setSubscriptionName(String subscriptionName) {
-            this.subscriptionName = subscriptionName;
-        }
-
-        public Boolean getSubscriptionShared() {
-            return subscriptionShared;
-        }
-
-        public void setSubscriptionShared(Boolean subscriptionShared) {
-            this.subscriptionShared = subscriptionShared;
-        }
-
-        public Boolean getAcceptMessagesWhileStopping() {
-            return acceptMessagesWhileStopping;
-        }
-
-        public void setAcceptMessagesWhileStopping(
-                Boolean acceptMessagesWhileStopping) {
-            this.acceptMessagesWhileStopping = acceptMessagesWhileStopping;
-        }
-
-        public Boolean getAllowReplyManagerQuickStop() {
-            return allowReplyManagerQuickStop;
-        }
-
-        public void setAllowReplyManagerQuickStop(
-                Boolean allowReplyManagerQuickStop) {
-            this.allowReplyManagerQuickStop = allowReplyManagerQuickStop;
-        }
-
-        public ConsumerType getConsumerType() {
-            return consumerType;
-        }
-
-        public void setConsumerType(ConsumerType consumerType) {
-            this.consumerType = consumerType;
-        }
-
-        public DefaultTaskExecutorType getDefaultTaskExecutorType() {
-            return defaultTaskExecutorType;
-        }
-
-        public void setDefaultTaskExecutorType(
-                DefaultTaskExecutorType defaultTaskExecutorType) {
-            this.defaultTaskExecutorType = defaultTaskExecutorType;
-        }
-
-        public Boolean getEagerLoadingOfProperties() {
-            return eagerLoadingOfProperties;
-        }
-
-        public void setEagerLoadingOfProperties(Boolean eagerLoadingOfProperties) {
-            this.eagerLoadingOfProperties = eagerLoadingOfProperties;
-        }
-
-        public ExceptionHandler getExceptionHandler() {
-            return exceptionHandler;
-        }
-
-        public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
-        }
-
-        public ExchangePattern getExchangePattern() {
-            return exchangePattern;
-        }
-
-        public void setExchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
-        }
-
-        public Boolean getExposeListenerSession() {
-            return exposeListenerSession;
-        }
-
-        public void setExposeListenerSession(Boolean exposeListenerSession) {
-            this.exposeListenerSession = exposeListenerSession;
-        }
-
-        public Boolean getReplyToSameDestinationAllowed() {
-            return replyToSameDestinationAllowed;
-        }
-
-        public void setReplyToSameDestinationAllowed(
-                Boolean replyToSameDestinationAllowed) {
-            this.replyToSameDestinationAllowed = replyToSameDestinationAllowed;
-        }
-
-        public Object getTaskExecutor() {
-            return taskExecutor;
-        }
-
-        public void setTaskExecutor(Object taskExecutor) {
-            this.taskExecutor = taskExecutor;
-        }
-
-        public LoggingLevel getErrorHandlerLoggingLevel() {
-            return errorHandlerLoggingLevel;
-        }
-
-        public void setErrorHandlerLoggingLevel(
-                LoggingLevel errorHandlerLoggingLevel) {
-            this.errorHandlerLoggingLevel = errorHandlerLoggingLevel;
-        }
-
-        public Boolean getErrorHandlerLogStackTrace() {
-            return errorHandlerLogStackTrace;
-        }
-
-        public void setErrorHandlerLogStackTrace(
-                Boolean errorHandlerLogStackTrace) {
-            this.errorHandlerLogStackTrace = errorHandlerLogStackTrace;
-        }
     }
 
     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;
-
+                ActiveMQCommon<ActiveMQProducer>
+            implements
+                EndpointDefinition.Producer {
+        public ActiveMQProducer(String path) {
+            super(path);
+        }
         /**
          * 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.
          */
         public ActiveMQProducer deliveryMode(Integer deliveryMode) {
-            this.deliveryMode = deliveryMode;
+            this.properties.put("deliveryMode", deliveryMode);
             return (ActiveMQProducer) this;
         }
-
         /**
          * Specifies whether persistent delivery is used by default. The option
          * is a boolean type.
          */
         public ActiveMQProducer deliveryPersistent(boolean deliveryPersistent) {
-            this.deliveryPersistent = deliveryPersistent;
+            this.properties.put("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
@@ -1601,20 +865,18 @@ public class ActiveMQEndpoint {
          * The option is a java.lang.Boolean type.
          */
         public ActiveMQProducer explicitQosEnabled(Boolean explicitQosEnabled) {
-            this.explicitQosEnabled = explicitQosEnabled;
+            this.properties.put("explicitQosEnabled", explicitQosEnabled);
             return (ActiveMQProducer) this;
         }
-
         /**
          * Sets whether date headers should be formatted according to the ISO
          * 8601 standard. The option is a boolean type.
          */
         public ActiveMQProducer formatDateHeadersToIso8601(
                 boolean formatDateHeadersToIso8601) {
-            this.formatDateHeadersToIso8601 = formatDateHeadersToIso8601;
+            this.properties.put("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
@@ -1627,10 +889,9 @@ public class ActiveMQEndpoint {
          * values from the message header. The option is a boolean type.
          */
         public ActiveMQProducer preserveMessageQos(boolean preserveMessageQos) {
-            this.preserveMessageQos = preserveMessageQos;
+            this.properties.put("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
@@ -1638,10 +899,9 @@ public class ActiveMQEndpoint {
          * option to have any effect. The option is a int type.
          */
         public ActiveMQProducer priority(int priority) {
-            this.priority = priority;
+            this.properties.put("priority", priority);
             return (ActiveMQProducer) this;
         }
-
         /**
          * Specifies the default number of concurrent consumers when doing
          * request/reply over JMS. See also the maxMessagesPerTask option to
@@ -1649,10 +909,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQProducer replyToConcurrentConsumers(
                 int replyToConcurrentConsumers) {
-            this.replyToConcurrentConsumers = replyToConcurrentConsumers;
+            this.properties.put("replyToConcurrentConsumers", replyToConcurrentConsumers);
             return (ActiveMQProducer) this;
         }
-
         /**
          * Specifies the maximum number of concurrent consumers when using
          * request/reply over JMS. See also the maxMessagesPerTask option to
@@ -1660,10 +919,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQProducer replyToMaxConcurrentConsumers(
                 int replyToMaxConcurrentConsumers) {
-            this.replyToMaxConcurrentConsumers = replyToMaxConcurrentConsumers;
+            this.properties.put("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
@@ -1671,10 +929,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQProducer replyToOnTimeoutMaxConcurrentConsumers(
                 int replyToOnTimeoutMaxConcurrentConsumers) {
-            this.replyToOnTimeoutMaxConcurrentConsumers = replyToOnTimeoutMaxConcurrentConsumers;
+            this.properties.put("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
@@ -1682,10 +939,9 @@ public class ActiveMQEndpoint {
          * ReplyTo destination. The option is a java.lang.String type.
          */
         public ActiveMQProducer replyToOverride(String replyToOverride) {
-            this.replyToOverride = replyToOverride;
+            this.properties.put("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
@@ -1699,10 +955,9 @@ public class ActiveMQEndpoint {
          * option is a org.apache.camel.component.jms.ReplyToType type.
          */
         public ActiveMQProducer replyToType(ReplyToType replyToType) {
-            this.replyToType = replyToType;
+            this.properties.put("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
@@ -1712,19 +967,17 @@ public class ActiveMQEndpoint {
          * The option is a long type.
          */
         public ActiveMQProducer requestTimeout(long requestTimeout) {
-            this.requestTimeout = requestTimeout;
+            this.properties.put("requestTimeout", requestTimeout);
             return (ActiveMQProducer) this;
         }
-
         /**
          * When sending messages, specifies the time-to-live of the message (in
          * milliseconds). The option is a long type.
          */
         public ActiveMQProducer timeToLive(long timeToLive) {
-            this.timeToLive = timeToLive;
+            this.properties.put("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
@@ -1736,20 +989,18 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQProducer allowAdditionalHeaders(
                 String allowAdditionalHeaders) {
-            this.allowAdditionalHeaders = allowAdditionalHeaders;
+            this.properties.put("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.
          */
         public ActiveMQProducer allowNullBody(boolean allowNullBody) {
-            this.allowNullBody = allowNullBody;
+            this.properties.put("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
@@ -1759,10 +1010,9 @@ public class ActiveMQEndpoint {
          * replyToDestinationSelectorName is set). The option is a boolean type.
          */
         public ActiveMQProducer alwaysCopyMessage(boolean alwaysCopyMessage) {
-            this.alwaysCopyMessage = alwaysCopyMessage;
+            this.properties.put("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
@@ -1773,10 +1023,9 @@ public class ActiveMQEndpoint {
          * name. The option is a java.lang.String type.
          */
         public ActiveMQProducer correlationProperty(String correlationProperty) {
-            this.correlationProperty = correlationProperty;
+            this.properties.put("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
@@ -1789,10 +1038,9 @@ public class ActiveMQEndpoint {
          * more details. The option is a boolean type.
          */
         public ActiveMQProducer disableTimeToLive(boolean disableTimeToLive) {
-            this.disableTimeToLive = disableTimeToLive;
+            this.properties.put("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)
@@ -1801,10 +1049,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQProducer forceSendOriginalMessage(
                 boolean forceSendOriginalMessage) {
-            this.forceSendOriginalMessage = forceSendOriginalMessage;
+            this.properties.put("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
@@ -1814,10 +1061,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQProducer includeSentJMSMessageID(
                 boolean includeSentJMSMessageID) {
-            this.includeSentJMSMessageID = includeSentJMSMessageID;
+            this.properties.put("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
@@ -1832,10 +1078,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQProducer replyToCacheLevelName(
                 String replyToCacheLevelName) {
-            this.replyToCacheLevelName = replyToCacheLevelName;
+            this.properties.put("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
@@ -1844,10 +1089,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQProducer replyToDestinationSelectorName(
                 String replyToDestinationSelectorName) {
-            this.replyToDestinationSelectorName = replyToDestinationSelectorName;
+            this.properties.put("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
@@ -1860,198 +1104,9 @@ public class ActiveMQEndpoint {
          */
         public ActiveMQProducer streamMessageTypeEnabled(
                 boolean streamMessageTypeEnabled) {
-            this.streamMessageTypeEnabled = streamMessageTypeEnabled;
+            this.properties.put("streamMessageTypeEnabled", streamMessageTypeEnabled);
             return (ActiveMQProducer) this;
         }
-
-        public Integer getDeliveryMode() {
-            return deliveryMode;
-        }
-
-        public void setDeliveryMode(Integer deliveryMode) {
-            this.deliveryMode = deliveryMode;
-        }
-
-        public Boolean getDeliveryPersistent() {
-            return deliveryPersistent;
-        }
-
-        public void setDeliveryPersistent(Boolean deliveryPersistent) {
-            this.deliveryPersistent = deliveryPersistent;
-        }
-
-        public Boolean getExplicitQosEnabled() {
-            return explicitQosEnabled;
-        }
-
-        public void setExplicitQosEnabled(Boolean explicitQosEnabled) {
-            this.explicitQosEnabled = explicitQosEnabled;
-        }
-
-        public Boolean getFormatDateHeadersToIso8601() {
-            return formatDateHeadersToIso8601;
-        }
-
-        public void setFormatDateHeadersToIso8601(
-                Boolean formatDateHeadersToIso8601) {
-            this.formatDateHeadersToIso8601 = formatDateHeadersToIso8601;
-        }
-
-        public Boolean getPreserveMessageQos() {
-            return preserveMessageQos;
-        }
-
-        public void setPreserveMessageQos(Boolean preserveMessageQos) {
-            this.preserveMessageQos = preserveMessageQos;
-        }
-
-        public Integer getPriority() {
-            return priority;
-        }
-
-        public void setPriority(Integer priority) {
-            this.priority = priority;
-        }
-
-        public Integer getReplyToConcurrentConsumers() {
-            return replyToConcurrentConsumers;
-        }
-
-        public void setReplyToConcurrentConsumers(
-                Integer replyToConcurrentConsumers) {
-            this.replyToConcurrentConsumers = replyToConcurrentConsumers;
-        }
-
-        public Integer getReplyToMaxConcurrentConsumers() {
-            return replyToMaxConcurrentConsumers;
-        }
-
-        public void setReplyToMaxConcurrentConsumers(
-                Integer replyToMaxConcurrentConsumers) {
-            this.replyToMaxConcurrentConsumers = replyToMaxConcurrentConsumers;
-        }
-
-        public Integer getReplyToOnTimeoutMaxConcurrentConsumers() {
-            return replyToOnTimeoutMaxConcurrentConsumers;
-        }
-
-        public void setReplyToOnTimeoutMaxConcurrentConsumers(
-                Integer replyToOnTimeoutMaxConcurrentConsumers) {
-            this.replyToOnTimeoutMaxConcurrentConsumers = replyToOnTimeoutMaxConcurrentConsumers;
-        }
-
-        public String getReplyToOverride() {
-            return replyToOverride;
-        }
-
-        public void setReplyToOverride(String replyToOverride) {
-            this.replyToOverride = replyToOverride;
-        }
-
-        public ReplyToType getReplyToType() {
-            return replyToType;
-        }
-
-        public void setReplyToType(ReplyToType replyToType) {
-            this.replyToType = replyToType;
-        }
-
-        public Long getRequestTimeout() {
-            return requestTimeout;
-        }
-
-        public void setRequestTimeout(Long requestTimeout) {
-            this.requestTimeout = requestTimeout;
-        }
-
-        public Long getTimeToLive() {
-            return timeToLive;
-        }
-
-        public void setTimeToLive(Long timeToLive) {
-            this.timeToLive = timeToLive;
-        }
-
-        public String getAllowAdditionalHeaders() {
-            return allowAdditionalHeaders;
-        }
-
-        public void setAllowAdditionalHeaders(String allowAdditionalHeaders) {
-            this.allowAdditionalHeaders = allowAdditionalHeaders;
-        }
-
-        public Boolean getAllowNullBody() {
-            return allowNullBody;
-        }
-
-        public void setAllowNullBody(Boolean allowNullBody) {
-            this.allowNullBody = allowNullBody;
-        }
-
-        public Boolean getAlwaysCopyMessage() {
-            return alwaysCopyMessage;
-        }
-
-        public void setAlwaysCopyMessage(Boolean alwaysCopyMessage) {
-            this.alwaysCopyMessage = alwaysCopyMessage;
-        }
-
-        public String getCorrelationProperty() {
-            return correlationProperty;
-        }
-
-        public void setCorrelationProperty(String correlationProperty) {
-            this.correlationProperty = correlationProperty;
-        }
-
-        public Boolean getDisableTimeToLive() {
-            return disableTimeToLive;
-        }
-
-        public void setDisableTimeToLive(Boolean disableTimeToLive) {
-            this.disableTimeToLive = disableTimeToLive;
-        }
-
-        public Boolean getForceSendOriginalMessage() {
-            return forceSendOriginalMessage;
-        }
-
-        public void setForceSendOriginalMessage(Boolean forceSendOriginalMessage) {
-            this.forceSendOriginalMessage = forceSendOriginalMessage;
-        }
-
-        public Boolean getIncludeSentJMSMessageID() {
-            return includeSentJMSMessageID;
-        }
-
-        public void setIncludeSentJMSMessageID(Boolean includeSentJMSMessageID) {
-            this.includeSentJMSMessageID = includeSentJMSMessageID;
-        }
-
-        public String getReplyToCacheLevelName() {
-            return replyToCacheLevelName;
-        }
-
-        public void setReplyToCacheLevelName(String replyToCacheLevelName) {
-            this.replyToCacheLevelName = replyToCacheLevelName;
-        }
-
-        public String getReplyToDestinationSelectorName() {
-            return replyToDestinationSelectorName;
-        }
-
-        public void setReplyToDestinationSelectorName(
-                String replyToDestinationSelectorName) {
-            this.replyToDestinationSelectorName = replyToDestinationSelectorName;
-        }
-
-        public Boolean getStreamMessageTypeEnabled() {
-            return streamMessageTypeEnabled;
-        }
-
-        public void setStreamMessageTypeEnabled(Boolean streamMessageTypeEnabled) {
-            this.streamMessageTypeEnabled = streamMessageTypeEnabled;
-        }
     }
 
     public static enum JmsMessageType {
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 5c641d0..bdfd604 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
@@ -19,6 +19,7 @@ package org.apache.camel.model.endpoint;
 import java.net.URI;
 import java.util.Map;
 import javax.annotation.Generated;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.HeaderFilterStrategy;
 
 /**
@@ -30,32 +31,20 @@ import org.apache.camel.spi.HeaderFilterStrategy;
 public class AhcEndpoint {
 
 
-    public static class AhcCommon<T extends EndpointConfiguration>
+    public static class AhcCommon<T extends EndpointDefinition>
             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;
-
+                EndpointDefinition<T> {
+        AhcCommon(String path) {
+            super("ahc", path);
+        }
         /**
          * The URI to use such as http://hostname:port/path. The option is a
          * java.net.URI type.
          */
         public T httpUri(URI httpUri) {
-            this.httpUri = httpUri;
+            this.properties.put("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
@@ -63,29 +52,26 @@ public class AhcEndpoint {
          * the fault response back. The option is a boolean type.
          */
         public T bridgeEndpoint(boolean bridgeEndpoint) {
-            this.bridgeEndpoint = bridgeEndpoint;
+            this.properties.put("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.
          */
         public T bufferSize(int bufferSize) {
-            this.bufferSize = bufferSize;
+            this.properties.put("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.
          */
         public T headerFilterStrategy(HeaderFilterStrategy headerFilterStrategy) {
-            this.headerFilterStrategy = headerFilterStrategy;
+            this.properties.put("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
@@ -93,10 +79,9 @@ public class AhcEndpoint {
          * type.
          */
         public T throwExceptionOnFailure(boolean throwExceptionOnFailure) {
-            this.throwExceptionOnFailure = throwExceptionOnFailure;
+            this.properties.put("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
@@ -110,60 +95,54 @@ public class AhcEndpoint {
          * boolean type.
          */
         public T transferException(boolean transferException) {
-            this.transferException = transferException;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("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.
          */
         public T binding(Object binding) {
-            this.binding = binding;
+            this.properties.put("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.
          */
         public T clientConfig(Object clientConfig) {
-            this.clientConfig = clientConfig;
+            this.properties.put("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.
          */
         public T clientConfigOptions(Map<String, Object> clientConfigOptions) {
-            this.clientConfigOptions = clientConfigOptions;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("synchronous", synchronous);
             return (T) this;
         }
-
         /**
          * To configure the AsyncHttpClientConfig Realm using the key/values
          * from the Map. The option is a
@@ -171,10 +150,9 @@ public class AhcEndpoint {
          */
         public T clientConfigRealmOptions(
                 Map<String, Object> clientConfigRealmOptions) {
-            this.clientConfigRealmOptions = clientConfigRealmOptions;
+            this.properties.put("clientConfigRealmOptions", clientConfigRealmOptions);
             return (T) this;
         }
-
         /**
          * Reference to a org.apache.camel.support.jsse.SSLContextParameters in
          * the Registry. This reference overrides any configured
@@ -185,158 +163,45 @@ public class AhcEndpoint {
          * a org.apache.camel.support.jsse.SSLContextParameters type.
          */
         public T sslContextParameters(Object sslContextParameters) {
-            this.sslContextParameters = sslContextParameters;
+            this.properties.put("sslContextParameters", sslContextParameters);
             return (T) this;
         }
-
-        public URI getHttpUri() {
-            return httpUri;
-        }
-
-        public void setHttpUri(URI httpUri) {
-            this.httpUri = httpUri;
-        }
-
-        public Boolean getBridgeEndpoint() {
-            return bridgeEndpoint;
-        }
-
-        public void setBridgeEndpoint(Boolean bridgeEndpoint) {
-            this.bridgeEndpoint = bridgeEndpoint;
-        }
-
-        public Integer getBufferSize() {
-            return bufferSize;
-        }
-
-        public void setBufferSize(Integer bufferSize) {
-            this.bufferSize = bufferSize;
-        }
-
-        public HeaderFilterStrategy getHeaderFilterStrategy() {
-            return headerFilterStrategy;
-        }
-
-        public void setHeaderFilterStrategy(
-                HeaderFilterStrategy headerFilterStrategy) {
-            this.headerFilterStrategy = headerFilterStrategy;
-        }
-
-        public Boolean getThrowExceptionOnFailure() {
-            return throwExceptionOnFailure;
-        }
-
-        public void setThrowExceptionOnFailure(Boolean throwExceptionOnFailure) {
-            this.throwExceptionOnFailure = throwExceptionOnFailure;
-        }
-
-        public Boolean getTransferException() {
-            return transferException;
-        }
-
-        public void setTransferException(Boolean transferException) {
-            this.transferException = transferException;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Object getBinding() {
-            return binding;
-        }
-
-        public void setBinding(Object binding) {
-            this.binding = binding;
-        }
-
-        public Object getClientConfig() {
-            return clientConfig;
-        }
-
-        public void setClientConfig(Object clientConfig) {
-            this.clientConfig = clientConfig;
-        }
-
-        public Map<String, Object> getClientConfigOptions() {
-            return clientConfigOptions;
-        }
-
-        public void setClientConfigOptions(
-                Map<String, Object> clientConfigOptions) {
-            this.clientConfigOptions = clientConfigOptions;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
-
-        public Map<String, Object> getClientConfigRealmOptions() {
-            return clientConfigRealmOptions;
-        }
-
-        public void setClientConfigRealmOptions(
-                Map<String, Object> clientConfigRealmOptions) {
-            this.clientConfigRealmOptions = clientConfigRealmOptions;
-        }
-
-        public Object getSslContextParameters() {
-            return sslContextParameters;
-        }
-
-        public void setSslContextParameters(Object sslContextParameters) {
-            this.sslContextParameters = sslContextParameters;
-        }
     }
 
-    public static class AhcConsumer extends AhcCommon<AhcConsumer> {
+    public static class AhcConsumer
+            extends
+                AhcCommon<AhcConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public AhcConsumer(String path) {
+            super(path);
+        }
     }
 
-    public static class AhcProducer extends AhcCommon<AhcProducer> {
-        private Boolean connectionClose;
-        private Object cookieHandler;
-
+    public static class AhcProducer
+            extends
+                AhcCommon<AhcProducer>
+            implements
+                EndpointDefinition.Producer {
+        public AhcProducer(String path) {
+            super(path);
+        }
         /**
          * 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.
          */
         public AhcProducer connectionClose(boolean connectionClose) {
-            this.connectionClose = connectionClose;
+            this.properties.put("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.
          */
         public AhcProducer cookieHandler(Object cookieHandler) {
-            this.cookieHandler = cookieHandler;
+            this.properties.put("cookieHandler", cookieHandler);
             return (AhcProducer) this;
         }
-
-        public Boolean getConnectionClose() {
-            return connectionClose;
-        }
-
-        public void setConnectionClose(Boolean connectionClose) {
-            this.connectionClose = connectionClose;
-        }
-
-        public Object getCookieHandler() {
-            return cookieHandler;
-        }
-
-        public void setCookieHandler(Object cookieHandler) {
-            this.cookieHandler = cookieHandler;
-        }
     }
 }
\ No newline at end of file
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 1cb99cc..f60b514 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
@@ -22,6 +22,7 @@ import java.util.concurrent.TimeUnit;
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.LoggingLevel;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 import org.apache.camel.spi.PollingConsumerPollStrategy;
 import org.apache.camel.spi.ScheduledPollConsumerScheduler;
@@ -35,105 +36,56 @@ import org.apache.camel.spi.ScheduledPollConsumerScheduler;
 public class ApnsEndpoint {
 
 
-    public static class ApnsCommon<T extends EndpointConfiguration>
+    public static class ApnsCommon<T extends EndpointDefinition>
             extends
-                EndpointConfiguration<T> {
-        private String name;
-        private String tokens;
-        private Boolean basicPropertyBinding;
-        private Boolean synchronous;
-
+                EndpointDefinition<T> {
+        ApnsCommon(String path) {
+            super("apns", path);
+        }
         /**
          * Name of the endpoint. The option is a java.lang.String type.
          */
         public T name(String name) {
-            this.name = name;
+            this.properties.put("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.
          */
         public T tokens(String tokens) {
-            this.tokens = tokens;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("synchronous", synchronous);
             return (T) this;
         }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getTokens() {
-            return tokens;
-        }
-
-        public void setTokens(String tokens) {
-            this.tokens = tokens;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
     }
 
-    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;
-
+    public static class ApnsConsumer
+            extends
+                ApnsCommon<ApnsConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public ApnsConsumer(String path) {
+            super(path);
+        }
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -144,10 +96,9 @@ public class ApnsEndpoint {
          * ignored. The option is a boolean type.
          */
         public ApnsConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
+            this.properties.put("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
@@ -155,10 +106,9 @@ public class ApnsEndpoint {
          */
         public ApnsConsumer sendEmptyMessageWhenIdle(
                 boolean sendEmptyMessageWhenIdle) {
-            this.sendEmptyMessageWhenIdle = sendEmptyMessageWhenIdle;
+            this.properties.put("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.
@@ -167,19 +117,17 @@ public class ApnsEndpoint {
          * org.apache.camel.spi.ExceptionHandler type.
          */
         public ApnsConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
+            this.properties.put("exceptionHandler", exceptionHandler);
             return (ApnsConsumer) this;
         }
-
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
         public ApnsConsumer exchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
+            this.properties.put("exchangePattern", exchangePattern);
             return (ApnsConsumer) this;
         }
-
         /**
          * A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing
          * you to provide your custom implementation to control error handling
@@ -189,29 +137,26 @@ public class ApnsEndpoint {
          */
         public ApnsConsumer pollStrategy(
                 PollingConsumerPollStrategy pollStrategy) {
-            this.pollStrategy = pollStrategy;
+            this.properties.put("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.
          */
         public ApnsConsumer backoffErrorThreshold(int backoffErrorThreshold) {
-            this.backoffErrorThreshold = backoffErrorThreshold;
+            this.properties.put("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.
          */
         public ApnsConsumer backoffIdleThreshold(int backoffIdleThreshold) {
-            this.backoffIdleThreshold = backoffIdleThreshold;
+            this.properties.put("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
@@ -221,50 +166,45 @@ public class ApnsEndpoint {
          * configured. The option is a int type.
          */
         public ApnsConsumer backoffMultiplier(int backoffMultiplier) {
-            this.backoffMultiplier = backoffMultiplier;
+            this.properties.put("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.
          */
         public ApnsConsumer delay(long delay) {
-            this.delay = delay;
+            this.properties.put("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.
          */
         public ApnsConsumer greedy(boolean greedy) {
-            this.greedy = greedy;
+            this.properties.put("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.
          */
         public ApnsConsumer initialDelay(long initialDelay) {
-            this.initialDelay = initialDelay;
+            this.properties.put("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.
          */
         public ApnsConsumer runLoggingLevel(LoggingLevel runLoggingLevel) {
-            this.runLoggingLevel = runLoggingLevel;
+            this.properties.put("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
@@ -273,20 +213,18 @@ public class ApnsEndpoint {
          */
         public ApnsConsumer scheduledExecutorService(
                 ScheduledExecutorService scheduledExecutorService) {
-            this.scheduledExecutorService = scheduledExecutorService;
+            this.properties.put("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.
          */
         public ApnsConsumer scheduler(ScheduledPollConsumerScheduler scheduler) {
-            this.scheduler = scheduler;
+            this.properties.put("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
@@ -294,185 +232,43 @@ public class ApnsEndpoint {
          */
         public ApnsConsumer schedulerProperties(
                 Map<String, Object> schedulerProperties) {
-            this.schedulerProperties = schedulerProperties;
+            this.properties.put("schedulerProperties", schedulerProperties);
             return (ApnsConsumer) this;
         }
-
         /**
          * Whether the scheduler should be auto started. The option is a boolean
          * type.
          */
         public ApnsConsumer startScheduler(boolean startScheduler) {
-            this.startScheduler = startScheduler;
+            this.properties.put("startScheduler", startScheduler);
             return (ApnsConsumer) this;
         }
-
         /**
          * Time unit for initialDelay and delay options. The option is a
          * java.util.concurrent.TimeUnit type.
          */
         public ApnsConsumer timeUnit(TimeUnit timeUnit) {
-            this.timeUnit = timeUnit;
+            this.properties.put("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.
          */
         public ApnsConsumer useFixedDelay(boolean useFixedDelay) {
-            this.useFixedDelay = useFixedDelay;
+            this.properties.put("useFixedDelay", useFixedDelay);
             return (ApnsConsumer) this;
         }
-
-        public Boolean getBridgeErrorHandler() {
-            return bridgeErrorHandler;
-        }
-
-        public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
-        }
-
-        public Boolean getSendEmptyMessageWhenIdle() {
-            return sendEmptyMessageWhenIdle;
-        }
-
-        public void setSendEmptyMessageWhenIdle(Boolean sendEmptyMessageWhenIdle) {
-            this.sendEmptyMessageWhenIdle = sendEmptyMessageWhenIdle;
-        }
-
-        public ExceptionHandler getExceptionHandler() {
-            return exceptionHandler;
-        }
-
-        public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
-        }
-
-        public ExchangePattern getExchangePattern() {
-            return exchangePattern;
-        }
-
-        public void setExchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
-        }
-
-        public PollingConsumerPollStrategy getPollStrategy() {
-            return pollStrategy;
-        }
-
-        public void setPollStrategy(PollingConsumerPollStrategy pollStrategy) {
-            this.pollStrategy = pollStrategy;
-        }
-
-        public Integer getBackoffErrorThreshold() {
-            return backoffErrorThreshold;
-        }
-
-        public void setBackoffErrorThreshold(Integer backoffErrorThreshold) {
-            this.backoffErrorThreshold = backoffErrorThreshold;
-        }
-
-        public Integer getBackoffIdleThreshold() {
-            return backoffIdleThreshold;
-        }
-
-        public void setBackoffIdleThreshold(Integer backoffIdleThreshold) {
-            this.backoffIdleThreshold = backoffIdleThreshold;
-        }
-
-        public Integer getBackoffMultiplier() {
-            return backoffMultiplier;
-        }
-
-        public void setBackoffMultiplier(Integer backoffMultiplier) {
-            this.backoffMultiplier = backoffMultiplier;
-        }
-
-        public Long getDelay() {
-            return delay;
-        }
-
-        public void setDelay(Long delay) {
-            this.delay = delay;
-        }
-
-        public Boolean getGreedy() {
-            return greedy;
-        }
-
-        public void setGreedy(Boolean greedy) {
-            this.greedy = greedy;
-        }
-
-        public Long getInitialDelay() {
-            return initialDelay;
-        }
-
-        public void setInitialDelay(Long initialDelay) {
-            this.initialDelay = initialDelay;
-        }
-
-        public LoggingLevel getRunLoggingLevel() {
-            return runLoggingLevel;
-        }
-
-        public void setRunLoggingLevel(LoggingLevel runLoggingLevel) {
-            this.runLoggingLevel = runLoggingLevel;
-        }
-
-        public ScheduledExecutorService getScheduledExecutorService() {
-            return scheduledExecutorService;
-        }
-
-        public void setScheduledExecutorService(
-                ScheduledExecutorService scheduledExecutorService) {
-            this.scheduledExecutorService = scheduledExecutorService;
-        }
-
-        public ScheduledPollConsumerScheduler getScheduler() {
-            return scheduler;
-        }
-
-        public void setScheduler(ScheduledPollConsumerScheduler scheduler) {
-            this.scheduler = scheduler;
-        }
-
-        public Map<String, Object> getSchedulerProperties() {
-            return schedulerProperties;
-        }
-
-        public void setSchedulerProperties(
-                Map<String, Object> schedulerProperties) {
-            this.schedulerProperties = schedulerProperties;
-        }
-
-        public Boolean getStartScheduler() {
-            return startScheduler;
-        }
-
-        public void setStartScheduler(Boolean startScheduler) {
-            this.startScheduler = startScheduler;
-        }
-
-        public TimeUnit getTimeUnit() {
-            return timeUnit;
-        }
-
-        public void setTimeUnit(TimeUnit timeUnit) {
-            this.timeUnit = timeUnit;
-        }
-
-        public Boolean getUseFixedDelay() {
-            return useFixedDelay;
-        }
-
-        public void setUseFixedDelay(Boolean useFixedDelay) {
-            this.useFixedDelay = useFixedDelay;
-        }
     }
 
-    public static class ApnsProducer extends ApnsCommon<ApnsProducer> {
+    public static class ApnsProducer
+            extends
+                ApnsCommon<ApnsProducer>
+            implements
+                EndpointDefinition.Producer {
+        public ApnsProducer(String path) {
+            super(path);
+        }
     }
 }
\ 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 527108f..7180bd5 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
@@ -18,6 +18,7 @@ package org.apache.camel.model.endpoint;
 
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 
 /**
@@ -29,125 +30,69 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AsteriskEndpoint {
 
 
-    public static class AsteriskCommon<T extends EndpointConfiguration>
+    public static class AsteriskCommon<T extends EndpointDefinition>
             extends
-                EndpointConfiguration<T> {
-        private String name;
-        private String hostname;
-        private String password;
-        private String username;
-        private Boolean basicPropertyBinding;
-        private Boolean synchronous;
-
+                EndpointDefinition<T> {
+        AsteriskCommon(String path) {
+            super("asterisk", path);
+        }
         /**
          * Logical name. The option is a java.lang.String type.
          */
         public T name(String name) {
-            this.name = name;
+            this.properties.put("name", name);
             return (T) this;
         }
-
         /**
          * The hostname of the asterisk server. The option is a java.lang.String
          * type.
          */
         public T hostname(String hostname) {
-            this.hostname = hostname;
+            this.properties.put("hostname", hostname);
             return (T) this;
         }
-
         /**
          * Login password. The option is a java.lang.String type.
          */
         public T password(String password) {
-            this.password = password;
+            this.properties.put("password", password);
             return (T) this;
         }
-
         /**
          * Login username. The option is a java.lang.String type.
          */
         public T username(String username) {
-            this.username = username;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("synchronous", synchronous);
             return (T) this;
         }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public String getHostname() {
-            return hostname;
-        }
-
-        public void setHostname(String hostname) {
-            this.hostname = hostname;
-        }
-
-        public String getPassword() {
-            return password;
-        }
-
-        public void setPassword(String password) {
-            this.password = password;
-        }
-
-        public String getUsername() {
-            return username;
-        }
-
-        public void setUsername(String username) {
-            this.username = username;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
     }
 
     public static class AsteriskConsumer
             extends
-                AsteriskCommon<AsteriskConsumer> {
-        private Boolean bridgeErrorHandler;
-        private ExceptionHandler exceptionHandler;
-        private ExchangePattern exchangePattern;
-
+                AsteriskCommon<AsteriskConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public AsteriskConsumer(String path) {
+            super(path);
+        }
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -158,10 +103,9 @@ public class AsteriskEndpoint {
          * ignored. The option is a boolean type.
          */
         public AsteriskConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
+            this.properties.put("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.
@@ -171,66 +115,36 @@ public class AsteriskEndpoint {
          */
         public AsteriskConsumer exceptionHandler(
                 ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
+            this.properties.put("exceptionHandler", exceptionHandler);
             return (AsteriskConsumer) this;
         }
-
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
         public AsteriskConsumer exchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
+            this.properties.put("exchangePattern", exchangePattern);
             return (AsteriskConsumer) this;
         }
-
-        public Boolean getBridgeErrorHandler() {
-            return bridgeErrorHandler;
-        }
-
-        public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
-        }
-
-        public ExceptionHandler getExceptionHandler() {
-            return exceptionHandler;
-        }
-
-        public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
-        }
-
-        public ExchangePattern getExchangePattern() {
-            return exchangePattern;
-        }
-
-        public void setExchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
-        }
     }
 
     public static class AsteriskProducer
             extends
-                AsteriskCommon<AsteriskProducer> {
-        private AsteriskAction action;
-
+                AsteriskCommon<AsteriskProducer>
+            implements
+                EndpointDefinition.Producer {
+        public AsteriskProducer(String path) {
+            super(path);
+        }
         /**
          * 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.
          */
         public AsteriskProducer action(AsteriskAction action) {
-            this.action = action;
+            this.properties.put("action", action);
             return (AsteriskProducer) this;
         }
-
-        public AsteriskAction getAction() {
-            return action;
-        }
-
-        public void setAction(AsteriskAction action) {
-            this.action = action;
-        }
     }
 
     public static enum AsteriskAction {
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 76a8ae5..ea165d1 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
@@ -18,6 +18,7 @@ package org.apache.camel.model.endpoint;
 
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 
 /**
@@ -29,226 +30,112 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtmosEndpoint {
 
 
-    public static class AtmosCommon<T extends EndpointConfiguration>
+    public static class AtmosCommon<T extends EndpointDefinition>
             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;
-
+                EndpointDefinition<T> {
+        AtmosCommon(String path) {
+            super("atmos", path);
+        }
         /**
          * Atmos name. The option is a java.lang.String type.
          */
         public T name(String name) {
-            this.name = name;
+            this.properties.put("name", name);
             return (T) this;
         }
-
         /**
          * Operation to perform. The option is a
          * org.apache.camel.component.atmos.util.AtmosOperation type.
          */
         public T operation(AtmosOperation operation) {
-            this.operation = operation;
+            this.properties.put("operation", operation);
             return (T) this;
         }
-
         /**
          * Atmos SSL validation. The option is a boolean type.
          */
         public T enableSslValidation(boolean enableSslValidation) {
-            this.enableSslValidation = enableSslValidation;
+            this.properties.put("enableSslValidation", enableSslValidation);
             return (T) this;
         }
-
         /**
          * Atmos client fullTokenId. The option is a java.lang.String type.
          */
         public T fullTokenId(String fullTokenId) {
-            this.fullTokenId = fullTokenId;
+            this.properties.put("fullTokenId", fullTokenId);
             return (T) this;
         }
-
         /**
          * Local path to put files. The option is a java.lang.String type.
          */
         public T localPath(String localPath) {
-            this.localPath = localPath;
+            this.properties.put("localPath", localPath);
             return (T) this;
         }
-
         /**
          * New path on Atmos when moving files. The option is a java.lang.String
          * type.
          */
         public T newRemotePath(String newRemotePath) {
-            this.newRemotePath = newRemotePath;
+            this.properties.put("newRemotePath", newRemotePath);
             return (T) this;
         }
-
         /**
          * Search query on Atmos. The option is a java.lang.String type.
          */
         public T query(String query) {
-            this.query = query;
+            this.properties.put("query", query);
             return (T) this;
         }
-
         /**
          * Where to put files on Atmos. The option is a java.lang.String type.
          */
         public T remotePath(String remotePath) {
-            this.remotePath = remotePath;
+            this.properties.put("remotePath", remotePath);
             return (T) this;
         }
-
         /**
          * Atmos shared secret. The option is a java.lang.String type.
          */
         public T secretKey(String secretKey) {
-            this.secretKey = secretKey;
+            this.properties.put("secretKey", secretKey);
             return (T) this;
         }
-
         /**
          * Atomos server uri. The option is a java.lang.String type.
          */
         public T uri(String uri) {
-            this.uri = uri;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("synchronous", synchronous);
             return (T) this;
         }
-
-        public String getName() {
-            return name;
-        }
-
-        public void setName(String name) {
-            this.name = name;
-        }
-
-        public AtmosOperation getOperation() {
-            return operation;
-        }
-
-        public void setOperation(AtmosOperation operation) {
-            this.operation = operation;
-        }
-
-        public Boolean getEnableSslValidation() {
-            return enableSslValidation;
-        }
-
-        public void setEnableSslValidation(Boolean enableSslValidation) {
-            this.enableSslValidation = enableSslValidation;
-        }
-
-        public String getFullTokenId() {
-            return fullTokenId;
-        }
-
-        public void setFullTokenId(String fullTokenId) {
-            this.fullTokenId = fullTokenId;
-        }
-
-        public String getLocalPath() {
-            return localPath;
-        }
-
-        public void setLocalPath(String localPath) {
-            this.localPath = localPath;
-        }
-
-        public String getNewRemotePath() {
-            return newRemotePath;
-        }
-
-        public void setNewRemotePath(String newRemotePath) {
-            this.newRemotePath = newRemotePath;
-        }
-
-        public String getQuery() {
-            return query;
-        }
-
-        public void setQuery(String query) {
-            this.query = query;
-        }
-
-        public String getRemotePath() {
-            return remotePath;
-        }
-
-        public void setRemotePath(String remotePath) {
-            this.remotePath = remotePath;
-        }
-
-        public String getSecretKey() {
-            return secretKey;
-        }
-
-        public void setSecretKey(String secretKey) {
-            this.secretKey = secretKey;
-        }
-
-        public String getUri() {
-            return uri;
-        }
-
-        public void setUri(String uri) {
-            this.uri = uri;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
     }
 
-    public static class AtmosConsumer extends AtmosCommon<AtmosConsumer> {
-        private Boolean bridgeErrorHandler;
-        private ExceptionHandler exceptionHandler;
-        private ExchangePattern exchangePattern;
-
+    public static class AtmosConsumer
+            extends
+                AtmosCommon<AtmosConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public AtmosConsumer(String path) {
+            super(path);
+        }
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -259,10 +146,9 @@ public class AtmosEndpoint {
          * ignored. The option is a boolean type.
          */
         public AtmosConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
+            this.properties.put("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.
@@ -271,45 +157,27 @@ public class AtmosEndpoint {
          * org.apache.camel.spi.ExceptionHandler type.
          */
         public AtmosConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
+            this.properties.put("exceptionHandler", exceptionHandler);
             return (AtmosConsumer) this;
         }
-
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
         public AtmosConsumer exchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
+            this.properties.put("exchangePattern", exchangePattern);
             return (AtmosConsumer) this;
         }
-
-        public Boolean getBridgeErrorHandler() {
-            return bridgeErrorHandler;
-        }
-
-        public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
-        }
-
-        public ExceptionHandler getExceptionHandler() {
-            return exceptionHandler;
-        }
-
-        public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
-        }
-
-        public ExchangePattern getExchangePattern() {
-            return exchangePattern;
-        }
-
-        public void setExchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
-        }
     }
 
-    public static class AtmosProducer extends AtmosCommon<AtmosProducer> {
+    public static class AtmosProducer
+            extends
+                AtmosCommon<AtmosProducer>
+            implements
+                EndpointDefinition.Producer {
+        public AtmosProducer(String path) {
+            super(path);
+        }
     }
 
     public static enum AtmosOperation {
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtmosphereWebsocketEndpoint.java b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtmosphereWebsocketEndpoint.java
new file mode 100644
index 0000000..dd90e86
--- /dev/null
+++ b/core/camel-core/src/main/java/org/apache/camel/model/endpoint/AtmosphereWebsocketEndpoint.java
@@ -0,0 +1,324 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.model.endpoint;
+
+import javax.annotation.Generated;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.model.EndpointDefinition;
+import org.apache.camel.spi.ExceptionHandler;
+import org.apache.camel.spi.HeaderFilterStrategy;
+
+/**
+ * To exchange data with external Websocket clients using Atmosphere.
+ * 
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.EndpointDslMojo")
+public class AtmosphereWebsocketEndpoint {
+
+
+    public static class AtmosphereWebsocketCommon<T extends EndpointDefinition>
+            extends
+                EndpointDefinition<T> {
+        AtmosphereWebsocketCommon(String path) {
+            super("atmosphere-websocket", path);
+        }
+        /**
+         * Name of websocket endpoint. The option is a java.lang.String type.
+         */
+        public T servicePath(String servicePath) {
+            this.properties.put("servicePath", servicePath);
+            return (T) this;
+        }
+        /**
+         * Whether to send to all (broadcast) or send to a single receiver. The
+         * option is a boolean type.
+         */
+        public T sendToAll(boolean sendToAll) {
+            this.properties.put("sendToAll", sendToAll);
+            return (T) this;
+        }
+        /**
+         * To enable streaming to send data as multiple text fragments. The
+         * option is a boolean type.
+         */
+        public T useStreaming(boolean useStreaming) {
+            this.properties.put("useStreaming", useStreaming);
+            return (T) this;
+        }
+        /**
+         * Determines whether or not the raw input stream from Servlet is cached
+         * or not (Camel will read the stream into a in memory/overflow to file,
+         * Stream caching) cache. By default Camel will cache the Servlet input
+         * stream to support reading it multiple times to ensure it Camel can
+         * retrieve all data from the stream. However you can set this option to
+         * true when you for example need to access the raw stream, such as
+         * streaming it directly to a file or other persistent store.
+         * DefaultHttpBinding will copy the request input stream into a stream
+         * cache and put it into message body if this option is false to support
+         * reading the stream multiple times. If you use Servlet to bridge/proxy
+         * an endpoint then consider enabling this option to improve
+         * performance, in case you do not need to read the message payload
+         * multiple times. The http/http4 producer will by default cache the
+         * response body stream. If setting this option to true, then the
+         * producers will not cache the response body stream but use the
+         * response stream as-is as the message body. The option is a boolean
+         * type.
+         */
+        public T disableStreamCache(boolean disableStreamCache) {
+            this.properties.put("disableStreamCache", disableStreamCache);
+            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.
+         */
+        public T headerFilterStrategy(HeaderFilterStrategy headerFilterStrategy) {
+            this.properties.put("headerFilterStrategy", headerFilterStrategy);
+            return (T) this;
+        }
+        /**
+         * To use a custom HttpBinding to control the mapping between Camel
+         * message and HttpClient. The option is a
+         * org.apache.camel.http.common.HttpBinding type.
+         */
+        public T httpBinding(Object httpBinding) {
+            this.properties.put("httpBinding", httpBinding);
+            return (T) this;
+        }
+        /**
+         * If this option is false the Servlet will disable the HTTP streaming
+         * and set the content-length header on the response. The option is a
+         * boolean type.
+         */
+        public T chunked(boolean chunked) {
+            this.properties.put("chunked", chunked);
+            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
+         * as a application/x-java-serialized-object content type. On the
+         * producer side the exception will be deserialized and thrown as is,
+         * instead of the HttpOperationFailedException. The caused exception is
+         * required to be serialized. This is by default turned off. If you
+         * enable this then be aware that Java will deserialize the incoming
+         * data from the request to Java and that can be a potential security
+         * risk. The option is a boolean type.
+         */
+        public T transferException(boolean transferException) {
+            this.properties.put("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.
+         */
+        public T basicPropertyBinding(boolean basicPropertyBinding) {
+            this.properties.put("basicPropertyBinding", basicPropertyBinding);
+            return (T) this;
+        }
+        /**
+         * If this option is true then IN exchange Body of the exchange will be
+         * mapped to HTTP body. Setting this to false will avoid the HTTP
+         * mapping. The option is a boolean type.
+         */
+        public T mapHttpMessageBody(boolean mapHttpMessageBody) {
+            this.properties.put("mapHttpMessageBody", mapHttpMessageBody);
+            return (T) this;
+        }
+        /**
+         * If this option is true then IN exchange Form Encoded body of the
+         * exchange will be mapped to HTTP. Setting this to false will avoid the
+         * HTTP Form Encoded body mapping. The option is a boolean type.
+         */
+        public T mapHttpMessageFormUrlEncodedBody(
+                boolean mapHttpMessageFormUrlEncodedBody) {
+            this.properties.put("mapHttpMessageFormUrlEncodedBody", mapHttpMessageFormUrlEncodedBody);
+            return (T) this;
+        }
+        /**
+         * If this option is true then IN exchange Headers of the exchange will
+         * be mapped to HTTP headers. Setting this to false will avoid the HTTP
+         * Headers mapping. The option is a boolean type.
+         */
+        public T mapHttpMessageHeaders(boolean mapHttpMessageHeaders) {
+            this.properties.put("mapHttpMessageHeaders", mapHttpMessageHeaders);
+            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.
+         */
+        public T synchronous(boolean synchronous) {
+            this.properties.put("synchronous", synchronous);
+            return (T) this;
+        }
+    }
+
+    public static class AtmosphereWebsocketConsumer
+            extends
+                AtmosphereWebsocketCommon<AtmosphereWebsocketConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public AtmosphereWebsocketConsumer(String path) {
+            super(path);
+        }
+        /**
+         * Configure the consumer to work in async mode. The option is a boolean
+         * type.
+         */
+        public AtmosphereWebsocketConsumer async(boolean async) {
+            this.properties.put("async", async);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+        /**
+         * Allows for bridging the consumer to the Camel routing Error Handler,
+         * which mean any exceptions occurred while the consumer is trying to
+         * pickup incoming messages, or the likes, will now be processed as a
+         * message and handled by the routing Error Handler. By default the
+         * consumer will use the org.apache.camel.spi.ExceptionHandler to deal
+         * with exceptions, that will be logged at WARN or ERROR level and
+         * ignored. The option is a boolean type.
+         */
+        public AtmosphereWebsocketConsumer bridgeErrorHandler(
+                boolean bridgeErrorHandler) {
+            this.properties.put("bridgeErrorHandler", bridgeErrorHandler);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+        /**
+         * Used to only allow consuming if the HttpMethod matches, such as
+         * GET/POST/PUT etc. Multiple methods can be specified separated by
+         * comma. The option is a java.lang.String type.
+         */
+        public AtmosphereWebsocketConsumer httpMethodRestrict(
+                String httpMethodRestrict) {
+            this.properties.put("httpMethodRestrict", httpMethodRestrict);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+        /**
+         * Whether or not the consumer should try to find a target consumer by
+         * matching the URI prefix if no exact match is found. The option is a
+         * boolean type.
+         */
+        public AtmosphereWebsocketConsumer matchOnUriPrefix(
+                boolean matchOnUriPrefix) {
+            this.properties.put("matchOnUriPrefix", matchOnUriPrefix);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+        /**
+         * To use a custom buffer size on the javax.servlet.ServletResponse. The
+         * option is a java.lang.Integer type.
+         */
+        public AtmosphereWebsocketConsumer responseBufferSize(
+                Integer responseBufferSize) {
+            this.properties.put("responseBufferSize", responseBufferSize);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+        /**
+         * Name of the servlet to use. The option is a java.lang.String type.
+         */
+        public AtmosphereWebsocketConsumer servletName(String servletName) {
+            this.properties.put("servletName", servletName);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+        /**
+         * Whether to automatic bind multipart/form-data as attachments on the
+         * Camel Exchange. The options attachmentMultipartBinding=true and
+         * disableStreamCache=false cannot work together. Remove
+         * disableStreamCache to use AttachmentMultipartBinding. This is turn
+         * off by default as this may require servlet specific configuration to
+         * enable this when using Servlet's. The option is a boolean type.
+         */
+        public AtmosphereWebsocketConsumer attachmentMultipartBinding(
+                boolean attachmentMultipartBinding) {
+            this.properties.put("attachmentMultipartBinding", attachmentMultipartBinding);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+        /**
+         * Whether to eager check whether the HTTP requests has content if the
+         * content-length header is 0 or not present. This can be turned on in
+         * case HTTP clients do not send streamed data. The option is a boolean
+         * type.
+         */
+        public AtmosphereWebsocketConsumer eagerCheckContentAvailable(
+                boolean eagerCheckContentAvailable) {
+            this.properties.put("eagerCheckContentAvailable", eagerCheckContentAvailable);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+        /**
+         * To let the consumer use a custom ExceptionHandler. Notice if the
+         * option bridgeErrorHandler is enabled then this option is not in use.
+         * By default the consumer will deal with exceptions, that will be
+         * logged at WARN or ERROR level and ignored. The option is a
+         * org.apache.camel.spi.ExceptionHandler type.
+         */
+        public AtmosphereWebsocketConsumer exceptionHandler(
+                ExceptionHandler exceptionHandler) {
+            this.properties.put("exceptionHandler", exceptionHandler);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+        /**
+         * Sets the exchange pattern when the consumer creates an exchange. The
+         * option is a org.apache.camel.ExchangePattern type.
+         */
+        public AtmosphereWebsocketConsumer exchangePattern(
+                ExchangePattern exchangePattern) {
+            this.properties.put("exchangePattern", exchangePattern);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+        /**
+         * Whitelist of accepted filename extensions for accepting uploaded
+         * files. Multiple extensions can be separated by comma, such as
+         * txt,xml. The option is a java.lang.String type.
+         */
+        public AtmosphereWebsocketConsumer fileNameExtWhitelist(
+                String fileNameExtWhitelist) {
+            this.properties.put("fileNameExtWhitelist", fileNameExtWhitelist);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+        /**
+         * Specifies whether to enable HTTP OPTIONS for this Servlet consumer.
+         * By default OPTIONS is turned off. The option is a boolean type.
+         */
+        public AtmosphereWebsocketConsumer optionsEnabled(boolean optionsEnabled) {
+            this.properties.put("optionsEnabled", optionsEnabled);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+        /**
+         * Specifies whether to enable HTTP TRACE for this Servlet consumer. By
+         * default TRACE is turned off. The option is a boolean type.
+         */
+        public AtmosphereWebsocketConsumer traceEnabled(boolean traceEnabled) {
+            this.properties.put("traceEnabled", traceEnabled);
+            return (AtmosphereWebsocketConsumer) this;
+        }
+    }
+
+    public static class AtmosphereWebsocketProducer
+            extends
+                AtmosphereWebsocketCommon<AtmosphereWebsocketProducer>
+            implements
+                EndpointDefinition.Producer {
+        public AtmosphereWebsocketProducer(String path) {
+            super(path);
+        }
+    }
+}
\ No newline at end of file
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 7ebf88e..a6fb49b 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
@@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit;
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.LoggingLevel;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 import org.apache.camel.spi.PollingConsumerPollStrategy;
 import org.apache.camel.spi.ScheduledPollConsumerScheduler;
@@ -36,85 +37,69 @@ import org.apache.camel.spi.ScheduledPollConsumerScheduler;
 public class AtomEndpoint {
 
 
-    public static class AtomCommon<T extends EndpointConfiguration>
+    public static class AtomCommon<T extends EndpointDefinition>
             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;
-
+                EndpointDefinition<T> {
+        AtomCommon(String path) {
+            super("atom", path);
+        }
         /**
          * The URI to the feed to poll. The option is a java.lang.String type.
          */
         public T feedUri(String feedUri) {
-            this.feedUri = feedUri;
+            this.properties.put("feedUri", feedUri);
             return (T) this;
         }
-
         /**
          * Sets whether to add the feed object as a header. The option is a
          * boolean type.
          */
         public T feedHeader(boolean feedHeader) {
-            this.feedHeader = feedHeader;
+            this.properties.put("feedHeader", feedHeader);
             return (T) this;
         }
-
         /**
          * Sets whether to use filtering or not of the entries. The option is a
          * boolean type.
          */
         public T filter(boolean filter) {
-            this.filter = filter;
+            this.properties.put("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.
          */
         public T lastUpdate(Date lastUpdate) {
-            this.lastUpdate = lastUpdate;
+            this.properties.put("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.
          */
         public T password(String password) {
-            this.password = password;
+            this.properties.put("password", password);
             return (T) this;
         }
-
         /**
          * Sets whether to sort entries by published date. Only works when
          * splitEntries = true. The option is a boolean type.
          */
         public T sortEntries(boolean sortEntries) {
-            this.sortEntries = sortEntries;
+            this.properties.put("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.
          */
         public T splitEntries(boolean splitEntries) {
-            this.splitEntries = splitEntries;
+            this.properties.put("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
@@ -122,148 +107,45 @@ public class AtomEndpoint {
          * is a boolean type.
          */
         public T throttleEntries(boolean throttleEntries) {
-            this.throttleEntries = throttleEntries;
+            this.properties.put("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.
          */
         public T username(String username) {
-            this.username = username;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("synchronous", synchronous);
             return (T) this;
         }
-
-        public String getFeedUri() {
-            return feedUri;
-        }
-
-        public void setFeedUri(String feedUri) {
-            this.feedUri = feedUri;
-        }
-
-        public Boolean getFeedHeader() {
-            return feedHeader;
-        }
-
-        public void setFeedHeader(Boolean feedHeader) {
-            this.feedHeader = feedHeader;
-        }
-
-        public Boolean getFilter() {
-            return filter;
-        }
-
-        public void setFilter(Boolean filter) {
-            this.filter = filter;
-        }
-
-        public Date getLastUpdate() {
-            return lastUpdate;
-        }
-
-        public void setLastUpdate(Date lastUpdate) {
-            this.lastUpdate = lastUpdate;
-        }
-
-        public String getPassword() {
-            return password;
-        }
-
-        public void setPassword(String password) {
-            this.password = password;
-        }
-
-        public Boolean getSortEntries() {
-            return sortEntries;
-        }
-
-        public void setSortEntries(Boolean sortEntries) {
-            this.sortEntries = sortEntries;
-        }
-
-        public Boolean getSplitEntries() {
-            return splitEntries;
-        }
-
-        public void setSplitEntries(Boolean splitEntries) {
-            this.splitEntries = splitEntries;
-        }
-
-        public Boolean getThrottleEntries() {
-            return throttleEntries;
-        }
-
-        public void setThrottleEntries(Boolean throttleEntries) {
-            this.throttleEntries = throttleEntries;
-        }
-
-        public String getUsername() {
-            return username;
-        }
-
-        public void setUsername(String username) {
-            this.username = username;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
     }
 
-    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;
-
+    public static class AtomConsumer
+            extends
+                AtomCommon<AtomConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public AtomConsumer(String path) {
+            super(path);
+        }
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -274,10 +156,9 @@ public class AtomEndpoint {
          * ignored. The option is a boolean type.
          */
         public AtomConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
+            this.properties.put("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
@@ -285,10 +166,9 @@ public class AtomEndpoint {
          */
         public AtomConsumer sendEmptyMessageWhenIdle(
                 boolean sendEmptyMessageWhenIdle) {
-            this.sendEmptyMessageWhenIdle = sendEmptyMessageWhenIdle;
+            this.properties.put("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.
@@ -297,19 +177,17 @@ public class AtomEndpoint {
          * org.apache.camel.spi.ExceptionHandler type.
          */
         public AtomConsumer exceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
+            this.properties.put("exceptionHandler", exceptionHandler);
             return (AtomConsumer) this;
         }
-
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
         public AtomConsumer exchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
+            this.properties.put("exchangePattern", exchangePattern);
             return (AtomConsumer) this;
         }
-
         /**
          * A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing
          * you to provide your custom implementation to control error handling
@@ -319,29 +197,26 @@ public class AtomEndpoint {
          */
         public AtomConsumer pollStrategy(
                 PollingConsumerPollStrategy pollStrategy) {
-            this.pollStrategy = pollStrategy;
+            this.properties.put("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.
          */
         public AtomConsumer backoffErrorThreshold(int backoffErrorThreshold) {
-            this.backoffErrorThreshold = backoffErrorThreshold;
+            this.properties.put("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.
          */
         public AtomConsumer backoffIdleThreshold(int backoffIdleThreshold) {
-            this.backoffIdleThreshold = backoffIdleThreshold;
+            this.properties.put("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
@@ -351,50 +226,45 @@ public class AtomEndpoint {
          * configured. The option is a int type.
          */
         public AtomConsumer backoffMultiplier(int backoffMultiplier) {
-            this.backoffMultiplier = backoffMultiplier;
+            this.properties.put("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.
          */
         public AtomConsumer delay(long delay) {
-            this.delay = delay;
+            this.properties.put("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.
          */
         public AtomConsumer greedy(boolean greedy) {
-            this.greedy = greedy;
+            this.properties.put("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.
          */
         public AtomConsumer initialDelay(long initialDelay) {
-            this.initialDelay = initialDelay;
+            this.properties.put("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.
          */
         public AtomConsumer runLoggingLevel(LoggingLevel runLoggingLevel) {
-            this.runLoggingLevel = runLoggingLevel;
+            this.properties.put("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
@@ -403,20 +273,18 @@ public class AtomEndpoint {
          */
         public AtomConsumer scheduledExecutorService(
                 ScheduledExecutorService scheduledExecutorService) {
-            this.scheduledExecutorService = scheduledExecutorService;
+            this.properties.put("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.
          */
         public AtomConsumer scheduler(ScheduledPollConsumerScheduler scheduler) {
-            this.scheduler = scheduler;
+            this.properties.put("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
@@ -424,185 +292,43 @@ public class AtomEndpoint {
          */
         public AtomConsumer schedulerProperties(
                 Map<String, Object> schedulerProperties) {
-            this.schedulerProperties = schedulerProperties;
+            this.properties.put("schedulerProperties", schedulerProperties);
             return (AtomConsumer) this;
         }
-
         /**
          * Whether the scheduler should be auto started. The option is a boolean
          * type.
          */
         public AtomConsumer startScheduler(boolean startScheduler) {
-            this.startScheduler = startScheduler;
+            this.properties.put("startScheduler", startScheduler);
             return (AtomConsumer) this;
         }
-
         /**
          * Time unit for initialDelay and delay options. The option is a
          * java.util.concurrent.TimeUnit type.
          */
         public AtomConsumer timeUnit(TimeUnit timeUnit) {
-            this.timeUnit = timeUnit;
+            this.properties.put("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.
          */
         public AtomConsumer useFixedDelay(boolean useFixedDelay) {
-            this.useFixedDelay = useFixedDelay;
+            this.properties.put("useFixedDelay", useFixedDelay);
             return (AtomConsumer) this;
         }
-
-        public Boolean getBridgeErrorHandler() {
-            return bridgeErrorHandler;
-        }
-
-        public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
-        }
-
-        public Boolean getSendEmptyMessageWhenIdle() {
-            return sendEmptyMessageWhenIdle;
-        }
-
-        public void setSendEmptyMessageWhenIdle(Boolean sendEmptyMessageWhenIdle) {
-            this.sendEmptyMessageWhenIdle = sendEmptyMessageWhenIdle;
-        }
-
-        public ExceptionHandler getExceptionHandler() {
-            return exceptionHandler;
-        }
-
-        public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
-        }
-
-        public ExchangePattern getExchangePattern() {
-            return exchangePattern;
-        }
-
-        public void setExchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
-        }
-
-        public PollingConsumerPollStrategy getPollStrategy() {
-            return pollStrategy;
-        }
-
-        public void setPollStrategy(PollingConsumerPollStrategy pollStrategy) {
-            this.pollStrategy = pollStrategy;
-        }
-
-        public Integer getBackoffErrorThreshold() {
-            return backoffErrorThreshold;
-        }
-
-        public void setBackoffErrorThreshold(Integer backoffErrorThreshold) {
-            this.backoffErrorThreshold = backoffErrorThreshold;
-        }
-
-        public Integer getBackoffIdleThreshold() {
-            return backoffIdleThreshold;
-        }
-
-        public void setBackoffIdleThreshold(Integer backoffIdleThreshold) {
-            this.backoffIdleThreshold = backoffIdleThreshold;
-        }
-
-        public Integer getBackoffMultiplier() {
-            return backoffMultiplier;
-        }
-
-        public void setBackoffMultiplier(Integer backoffMultiplier) {
-            this.backoffMultiplier = backoffMultiplier;
-        }
-
-        public Long getDelay() {
-            return delay;
-        }
-
-        public void setDelay(Long delay) {
-            this.delay = delay;
-        }
-
-        public Boolean getGreedy() {
-            return greedy;
-        }
-
-        public void setGreedy(Boolean greedy) {
-            this.greedy = greedy;
-        }
-
-        public Long getInitialDelay() {
-            return initialDelay;
-        }
-
-        public void setInitialDelay(Long initialDelay) {
-            this.initialDelay = initialDelay;
-        }
-
-        public LoggingLevel getRunLoggingLevel() {
-            return runLoggingLevel;
-        }
-
-        public void setRunLoggingLevel(LoggingLevel runLoggingLevel) {
-            this.runLoggingLevel = runLoggingLevel;
-        }
-
-        public ScheduledExecutorService getScheduledExecutorService() {
-            return scheduledExecutorService;
-        }
-
-        public void setScheduledExecutorService(
-                ScheduledExecutorService scheduledExecutorService) {
-            this.scheduledExecutorService = scheduledExecutorService;
-        }
-
-        public ScheduledPollConsumerScheduler getScheduler() {
-            return scheduler;
-        }
-
-        public void setScheduler(ScheduledPollConsumerScheduler scheduler) {
-            this.scheduler = scheduler;
-        }
-
-        public Map<String, Object> getSchedulerProperties() {
-            return schedulerProperties;
-        }
-
-        public void setSchedulerProperties(
-                Map<String, Object> schedulerProperties) {
-            this.schedulerProperties = schedulerProperties;
-        }
-
-        public Boolean getStartScheduler() {
-            return startScheduler;
-        }
-
-        public void setStartScheduler(Boolean startScheduler) {
-            this.startScheduler = startScheduler;
-        }
-
-        public TimeUnit getTimeUnit() {
-            return timeUnit;
-        }
-
-        public void setTimeUnit(TimeUnit timeUnit) {
-            this.timeUnit = timeUnit;
-        }
-
-        public Boolean getUseFixedDelay() {
-            return useFixedDelay;
-        }
-
-        public void setUseFixedDelay(Boolean useFixedDelay) {
-            this.useFixedDelay = useFixedDelay;
-        }
     }
 
-    public static class AtomProducer extends AtomCommon<AtomProducer> {
+    public static class AtomProducer
+            extends
+                AtomCommon<AtomProducer>
+            implements
+                EndpointDefinition.Producer {
+        public AtomProducer(String path) {
+            super(path);
+        }
     }
 }
\ 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 a1b3f5d..00b0b55 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
@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.Properties;
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 
 /**
@@ -32,132 +33,105 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtomixMapEndpoint {
 
 
-    public static class AtomixMapCommon<T extends EndpointConfiguration>
+    public static class AtomixMapCommon<T extends EndpointDefinition>
             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;
-
+                EndpointDefinition<T> {
+        AtomixMapCommon(String path) {
+            super("atomix-map", path);
+        }
         /**
          * The distributed resource name. The option is a java.lang.String type.
          */
         public T resourceName(String resourceName) {
-            this.resourceName = resourceName;
+            this.properties.put("resourceName", resourceName);
             return (T) this;
         }
-
         /**
          * The Atomix instance to use. The option is a io.atomix.Atomix type.
          */
         public T atomix(Object atomix) {
-            this.atomix = atomix;
+            this.properties.put("atomix", atomix);
             return (T) this;
         }
-
         /**
          * The Atomix configuration uri. The option is a java.lang.String type.
          */
         public T configurationUri(String configurationUri) {
-            this.configurationUri = configurationUri;
+            this.properties.put("configurationUri", configurationUri);
             return (T) this;
         }
-
         /**
          * The default action. The option is a
          * org.apache.camel.component.atomix.client.map.AtomixMap.Action type.
          */
         public T defaultAction(Object defaultAction) {
-            this.defaultAction = defaultAction;
+            this.properties.put("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.
          */
         public T key(Object key) {
-            this.key = key;
+            this.properties.put("key", key);
             return (T) this;
         }
-
         /**
          * The address of the nodes composing the cluster. The option is a
          * java.lang.String type.
          */
         public T nodes(List<Object> nodes) {
-            this.nodes = nodes;
+            this.properties.put("nodes", nodes);
             return (T) this;
         }
-
         /**
          * The header that wil carry the result. The option is a
          * java.lang.String type.
          */
         public T resultHeader(String resultHeader) {
-            this.resultHeader = resultHeader;
+            this.properties.put("resultHeader", resultHeader);
             return (T) this;
         }
-
         /**
          * Sets the Atomix transport. The option is a
          * io.atomix.catalyst.transport.Transport type.
          */
         public T transport(Class<Object> transport) {
-            this.transport = transport;
+            this.properties.put("transport", transport);
             return (T) this;
         }
-
         /**
          * The resource ttl. The option is a long type.
          */
         public T ttl(long ttl) {
-            this.ttl = ttl;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("basicPropertyBinding", basicPropertyBinding);
             return (T) this;
         }
-
         /**
          * The cluster wide default resource configuration. The option is a
          * java.util.Properties type.
          */
         public T defaultResourceConfig(Properties defaultResourceConfig) {
-            this.defaultResourceConfig = defaultResourceConfig;
+            this.properties.put("defaultResourceConfig", defaultResourceConfig);
             return (T) this;
         }
-
         /**
          * The local default resource options. The option is a
          * java.util.Properties type.
          */
         public T defaultResourceOptions(Properties defaultResourceOptions) {
-            this.defaultResourceOptions = defaultResourceOptions;
+            this.properties.put("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
@@ -165,191 +139,52 @@ public class AtomixMapEndpoint {
          * type.
          */
         public T ephemeral(boolean ephemeral) {
-            this.ephemeral = ephemeral;
+            this.properties.put("ephemeral", ephemeral);
             return (T) this;
         }
-
         /**
          * The read consistency level. The option is a
          * io.atomix.resource.ReadConsistency type.
          */
         public T readConsistency(ReadConsistency readConsistency) {
-            this.readConsistency = readConsistency;
+            this.properties.put("readConsistency", readConsistency);
             return (T) this;
         }
-
         /**
          * Cluster wide resources configuration. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
         public T resourceConfigs(Map<String, Properties> resourceConfigs) {
-            this.resourceConfigs = resourceConfigs;
+            this.properties.put("resourceConfigs", resourceConfigs);
             return (T) this;
         }
-
         /**
          * Local resources configurations. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
         public T resourceOptions(Map<String, Properties> resourceOptions) {
-            this.resourceOptions = resourceOptions;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("synchronous", synchronous);
             return (T) this;
         }
-
-        public String getResourceName() {
-            return resourceName;
-        }
-
-        public void setResourceName(String resourceName) {
-            this.resourceName = resourceName;
-        }
-
-        public Object getAtomix() {
-            return atomix;
-        }
-
-        public void setAtomix(Object atomix) {
-            this.atomix = atomix;
-        }
-
-        public String getConfigurationUri() {
-            return configurationUri;
-        }
-
-        public void setConfigurationUri(String configurationUri) {
-            this.configurationUri = configurationUri;
-        }
-
-        public Object getDefaultAction() {
-            return defaultAction;
-        }
-
-        public void setDefaultAction(Object defaultAction) {
-            this.defaultAction = defaultAction;
-        }
-
-        public Object getKey() {
-            return key;
-        }
-
-        public void setKey(Object key) {
-            this.key = key;
-        }
-
-        public List<Object> getNodes() {
-            return nodes;
-        }
-
-        public void setNodes(List<Object> nodes) {
-            this.nodes = nodes;
-        }
-
-        public String getResultHeader() {
-            return resultHeader;
-        }
-
-        public void setResultHeader(String resultHeader) {
-            this.resultHeader = resultHeader;
-        }
-
-        public Class<Object> getTransport() {
-            return transport;
-        }
-
-        public void setTransport(Class<Object> transport) {
-            this.transport = transport;
-        }
-
-        public Long getTtl() {
-            return ttl;
-        }
-
-        public void setTtl(Long ttl) {
-            this.ttl = ttl;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Properties getDefaultResourceConfig() {
-            return defaultResourceConfig;
-        }
-
-        public void setDefaultResourceConfig(Properties defaultResourceConfig) {
-            this.defaultResourceConfig = defaultResourceConfig;
-        }
-
-        public Properties getDefaultResourceOptions() {
-            return defaultResourceOptions;
-        }
-
-        public void setDefaultResourceOptions(Properties defaultResourceOptions) {
-            this.defaultResourceOptions = defaultResourceOptions;
-        }
-
-        public Boolean getEphemeral() {
-            return ephemeral;
-        }
-
-        public void setEphemeral(Boolean ephemeral) {
-            this.ephemeral = ephemeral;
-        }
-
-        public ReadConsistency getReadConsistency() {
-            return readConsistency;
-        }
-
-        public void setReadConsistency(ReadConsistency readConsistency) {
-            this.readConsistency = readConsistency;
-        }
-
-        public Map<String, Properties> getResourceConfigs() {
-            return resourceConfigs;
-        }
-
-        public void setResourceConfigs(Map<String, Properties> resourceConfigs) {
-            this.resourceConfigs = resourceConfigs;
-        }
-
-        public Map<String, Properties> getResourceOptions() {
-            return resourceOptions;
-        }
-
-        public void setResourceOptions(Map<String, Properties> resourceOptions) {
-            this.resourceOptions = resourceOptions;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
     }
 
     public static class AtomixMapConsumer
             extends
-                AtomixMapCommon<AtomixMapConsumer> {
-        private Boolean bridgeErrorHandler;
-        private ExceptionHandler exceptionHandler;
-        private ExchangePattern exchangePattern;
-
+                AtomixMapCommon<AtomixMapConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public AtomixMapConsumer(String path) {
+            super(path);
+        }
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -360,10 +195,9 @@ public class AtomixMapEndpoint {
          * ignored. The option is a boolean type.
          */
         public AtomixMapConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
+            this.properties.put("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.
@@ -373,47 +207,27 @@ public class AtomixMapEndpoint {
          */
         public AtomixMapConsumer exceptionHandler(
                 ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
+            this.properties.put("exceptionHandler", exceptionHandler);
             return (AtomixMapConsumer) this;
         }
-
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
         public AtomixMapConsumer exchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
+            this.properties.put("exchangePattern", exchangePattern);
             return (AtomixMapConsumer) this;
         }
-
-        public Boolean getBridgeErrorHandler() {
-            return bridgeErrorHandler;
-        }
-
-        public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
-        }
-
-        public ExceptionHandler getExceptionHandler() {
-            return exceptionHandler;
-        }
-
-        public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
-        }
-
-        public ExchangePattern getExchangePattern() {
-            return exchangePattern;
-        }
-
-        public void setExchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
-        }
     }
 
     public static class AtomixMapProducer
             extends
-                AtomixMapCommon<AtomixMapProducer> {
+                AtomixMapCommon<AtomixMapProducer>
+            implements
+                EndpointDefinition.Producer {
+        public AtomixMapProducer(String path) {
+            super(path);
+        }
     }
 
     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 2ff047e..e6b58d8 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
@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.Properties;
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 
 /**
@@ -32,141 +33,112 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtomixMessagingEndpoint {
 
 
-    public static class AtomixMessagingCommon<T extends EndpointConfiguration>
+    public static class AtomixMessagingCommon<T extends EndpointDefinition>
             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;
-
+                EndpointDefinition<T> {
+        AtomixMessagingCommon(String path) {
+            super("atomix-messaging", path);
+        }
         /**
          * The distributed resource name. The option is a java.lang.String type.
          */
         public T resourceName(String resourceName) {
-            this.resourceName = resourceName;
+            this.properties.put("resourceName", resourceName);
             return (T) this;
         }
-
         /**
          * The Atomix instance to use. The option is a io.atomix.Atomix type.
          */
         public T atomix(Object atomix) {
-            this.atomix = atomix;
+            this.properties.put("atomix", atomix);
             return (T) this;
         }
-
         /**
          * The broadcast type. The option is a
          * org.apache.camel.component.atomix.client.messaging.AtomixMessaging.BroadcastType type.
          */
         public T broadcastType(Object broadcastType) {
-            this.broadcastType = broadcastType;
+            this.properties.put("broadcastType", broadcastType);
             return (T) this;
         }
-
         /**
          * The messaging channel name. The option is a java.lang.String type.
          */
         public T channelName(String channelName) {
-            this.channelName = channelName;
+            this.properties.put("channelName", channelName);
             return (T) this;
         }
-
         /**
          * The Atomix configuration uri. The option is a java.lang.String type.
          */
         public T configurationUri(String configurationUri) {
-            this.configurationUri = configurationUri;
+            this.properties.put("configurationUri", configurationUri);
             return (T) this;
         }
-
         /**
          * The default action. The option is a
          * org.apache.camel.component.atomix.client.messaging.AtomixMessaging.Action type.
          */
         public T defaultAction(Object defaultAction) {
-            this.defaultAction = defaultAction;
+            this.properties.put("defaultAction", defaultAction);
             return (T) this;
         }
-
         /**
          * The Atomix Group member name. The option is a java.lang.String type.
          */
         public T memberName(String memberName) {
-            this.memberName = memberName;
+            this.properties.put("memberName", memberName);
             return (T) this;
         }
-
         /**
          * The address of the nodes composing the cluster. The option is a
          * java.lang.String type.
          */
         public T nodes(List<Object> nodes) {
-            this.nodes = nodes;
+            this.properties.put("nodes", nodes);
             return (T) this;
         }
-
         /**
          * The header that wil carry the result. The option is a
          * java.lang.String type.
          */
         public T resultHeader(String resultHeader) {
-            this.resultHeader = resultHeader;
+            this.properties.put("resultHeader", resultHeader);
             return (T) this;
         }
-
         /**
          * Sets the Atomix transport. The option is a
          * io.atomix.catalyst.transport.Transport type.
          */
         public T transport(Class<Object> transport) {
-            this.transport = transport;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("basicPropertyBinding", basicPropertyBinding);
             return (T) this;
         }
-
         /**
          * The cluster wide default resource configuration. The option is a
          * java.util.Properties type.
          */
         public T defaultResourceConfig(Properties defaultResourceConfig) {
-            this.defaultResourceConfig = defaultResourceConfig;
+            this.properties.put("defaultResourceConfig", defaultResourceConfig);
             return (T) this;
         }
-
         /**
          * The local default resource options. The option is a
          * java.util.Properties type.
          */
         public T defaultResourceOptions(Properties defaultResourceOptions) {
-            this.defaultResourceOptions = defaultResourceOptions;
+            this.properties.put("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
@@ -174,199 +146,52 @@ public class AtomixMessagingEndpoint {
          * type.
          */
         public T ephemeral(boolean ephemeral) {
-            this.ephemeral = ephemeral;
+            this.properties.put("ephemeral", ephemeral);
             return (T) this;
         }
-
         /**
          * The read consistency level. The option is a
          * io.atomix.resource.ReadConsistency type.
          */
         public T readConsistency(ReadConsistency readConsistency) {
-            this.readConsistency = readConsistency;
+            this.properties.put("readConsistency", readConsistency);
             return (T) this;
         }
-
         /**
          * Cluster wide resources configuration. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
         public T resourceConfigs(Map<String, Properties> resourceConfigs) {
-            this.resourceConfigs = resourceConfigs;
+            this.properties.put("resourceConfigs", resourceConfigs);
             return (T) this;
         }
-
         /**
          * Local resources configurations. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
         public T resourceOptions(Map<String, Properties> resourceOptions) {
-            this.resourceOptions = resourceOptions;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("synchronous", synchronous);
             return (T) this;
         }
-
-        public String getResourceName() {
-            return resourceName;
-        }
-
-        public void setResourceName(String resourceName) {
-            this.resourceName = resourceName;
-        }
-
-        public Object getAtomix() {
-            return atomix;
-        }
-
-        public void setAtomix(Object atomix) {
-            this.atomix = atomix;
-        }
-
-        public Object getBroadcastType() {
-            return broadcastType;
-        }
-
-        public void setBroadcastType(Object broadcastType) {
-            this.broadcastType = broadcastType;
-        }
-
-        public String getChannelName() {
-            return channelName;
-        }
-
-        public void setChannelName(String channelName) {
-            this.channelName = channelName;
-        }
-
-        public String getConfigurationUri() {
-            return configurationUri;
-        }
-
-        public void setConfigurationUri(String configurationUri) {
-            this.configurationUri = configurationUri;
-        }
-
-        public Object getDefaultAction() {
-            return defaultAction;
-        }
-
-        public void setDefaultAction(Object defaultAction) {
-            this.defaultAction = defaultAction;
-        }
-
-        public String getMemberName() {
-            return memberName;
-        }
-
-        public void setMemberName(String memberName) {
-            this.memberName = memberName;
-        }
-
-        public List<Object> getNodes() {
-            return nodes;
-        }
-
-        public void setNodes(List<Object> nodes) {
-            this.nodes = nodes;
-        }
-
-        public String getResultHeader() {
-            return resultHeader;
-        }
-
-        public void setResultHeader(String resultHeader) {
-            this.resultHeader = resultHeader;
-        }
-
-        public Class<Object> getTransport() {
-            return transport;
-        }
-
-        public void setTransport(Class<Object> transport) {
-            this.transport = transport;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Properties getDefaultResourceConfig() {
-            return defaultResourceConfig;
-        }
-
-        public void setDefaultResourceConfig(Properties defaultResourceConfig) {
-            this.defaultResourceConfig = defaultResourceConfig;
-        }
-
-        public Properties getDefaultResourceOptions() {
-            return defaultResourceOptions;
-        }
-
-        public void setDefaultResourceOptions(Properties defaultResourceOptions) {
-            this.defaultResourceOptions = defaultResourceOptions;
-        }
-
-        public Boolean getEphemeral() {
-            return ephemeral;
-        }
-
-        public void setEphemeral(Boolean ephemeral) {
-            this.ephemeral = ephemeral;
-        }
-
-        public ReadConsistency getReadConsistency() {
-            return readConsistency;
-        }
-
-        public void setReadConsistency(ReadConsistency readConsistency) {
-            this.readConsistency = readConsistency;
-        }
-
-        public Map<String, Properties> getResourceConfigs() {
-            return resourceConfigs;
-        }
-
-        public void setResourceConfigs(Map<String, Properties> resourceConfigs) {
-            this.resourceConfigs = resourceConfigs;
-        }
-
-        public Map<String, Properties> getResourceOptions() {
-            return resourceOptions;
-        }
-
-        public void setResourceOptions(Map<String, Properties> resourceOptions) {
-            this.resourceOptions = resourceOptions;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
     }
 
     public static class AtomixMessagingConsumer
             extends
-                AtomixMessagingCommon<AtomixMessagingConsumer> {
-        private Boolean bridgeErrorHandler;
-        private ExceptionHandler exceptionHandler;
-        private ExchangePattern exchangePattern;
-
+                AtomixMessagingCommon<AtomixMessagingConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public AtomixMessagingConsumer(String path) {
+            super(path);
+        }
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -378,10 +203,9 @@ public class AtomixMessagingEndpoint {
          */
         public AtomixMessagingConsumer bridgeErrorHandler(
                 boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
+            this.properties.put("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.
@@ -391,48 +215,28 @@ public class AtomixMessagingEndpoint {
          */
         public AtomixMessagingConsumer exceptionHandler(
                 ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
+            this.properties.put("exceptionHandler", exceptionHandler);
             return (AtomixMessagingConsumer) this;
         }
-
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
         public AtomixMessagingConsumer exchangePattern(
                 ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
+            this.properties.put("exchangePattern", exchangePattern);
             return (AtomixMessagingConsumer) this;
         }
-
-        public Boolean getBridgeErrorHandler() {
-            return bridgeErrorHandler;
-        }
-
-        public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
-        }
-
-        public ExceptionHandler getExceptionHandler() {
-            return exceptionHandler;
-        }
-
-        public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
-        }
-
-        public ExchangePattern getExchangePattern() {
-            return exchangePattern;
-        }
-
-        public void setExchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
-        }
     }
 
     public static class AtomixMessagingProducer
             extends
-                AtomixMessagingCommon<AtomixMessagingProducer> {
+                AtomixMessagingCommon<AtomixMessagingProducer>
+            implements
+                EndpointDefinition.Producer {
+        public AtomixMessagingProducer(String path) {
+            super(path);
+        }
     }
 
     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 5516d83..7599d49 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
@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.Properties;
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 
 /**
@@ -33,132 +34,105 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtomixMultiMapEndpoint {
 
 
-    public static class AtomixMultiMapCommon<T extends EndpointConfiguration>
+    public static class AtomixMultiMapCommon<T extends EndpointDefinition>
             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;
-
+                EndpointDefinition<T> {
+        AtomixMultiMapCommon(String path) {
+            super("atomix-multimap", path);
+        }
         /**
          * The distributed resource name. The option is a java.lang.String type.
          */
         public T resourceName(String resourceName) {
-            this.resourceName = resourceName;
+            this.properties.put("resourceName", resourceName);
             return (T) this;
         }
-
         /**
          * The Atomix instance to use. The option is a io.atomix.Atomix type.
          */
         public T atomix(Object atomix) {
-            this.atomix = atomix;
+            this.properties.put("atomix", atomix);
             return (T) this;
         }
-
         /**
          * The Atomix configuration uri. The option is a java.lang.String type.
          */
         public T configurationUri(String configurationUri) {
-            this.configurationUri = configurationUri;
+            this.properties.put("configurationUri", configurationUri);
             return (T) this;
         }
-
         /**
          * The default action. The option is a
          * org.apache.camel.component.atomix.client.multimap.AtomixMultiMap.Action type.
          */
         public T defaultAction(Object defaultAction) {
-            this.defaultAction = defaultAction;
+            this.properties.put("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.
          */
         public T key(Object key) {
-            this.key = key;
+            this.properties.put("key", key);
             return (T) this;
         }
-
         /**
          * The address of the nodes composing the cluster. The option is a
          * java.lang.String type.
          */
         public T nodes(List<Object> nodes) {
-            this.nodes = nodes;
+            this.properties.put("nodes", nodes);
             return (T) this;
         }
-
         /**
          * The header that wil carry the result. The option is a
          * java.lang.String type.
          */
         public T resultHeader(String resultHeader) {
-            this.resultHeader = resultHeader;
+            this.properties.put("resultHeader", resultHeader);
             return (T) this;
         }
-
         /**
          * Sets the Atomix transport. The option is a
          * io.atomix.catalyst.transport.Transport type.
          */
         public T transport(Class<Object> transport) {
-            this.transport = transport;
+            this.properties.put("transport", transport);
             return (T) this;
         }
-
         /**
          * The resource ttl. The option is a long type.
          */
         public T ttl(long ttl) {
-            this.ttl = ttl;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("basicPropertyBinding", basicPropertyBinding);
             return (T) this;
         }
-
         /**
          * The cluster wide default resource configuration. The option is a
          * java.util.Properties type.
          */
         public T defaultResourceConfig(Properties defaultResourceConfig) {
-            this.defaultResourceConfig = defaultResourceConfig;
+            this.properties.put("defaultResourceConfig", defaultResourceConfig);
             return (T) this;
         }
-
         /**
          * The local default resource options. The option is a
          * java.util.Properties type.
          */
         public T defaultResourceOptions(Properties defaultResourceOptions) {
-            this.defaultResourceOptions = defaultResourceOptions;
+            this.properties.put("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
@@ -166,191 +140,52 @@ public class AtomixMultiMapEndpoint {
          * type.
          */
         public T ephemeral(boolean ephemeral) {
-            this.ephemeral = ephemeral;
+            this.properties.put("ephemeral", ephemeral);
             return (T) this;
         }
-
         /**
          * The read consistency level. The option is a
          * io.atomix.resource.ReadConsistency type.
          */
         public T readConsistency(ReadConsistency readConsistency) {
-            this.readConsistency = readConsistency;
+            this.properties.put("readConsistency", readConsistency);
             return (T) this;
         }
-
         /**
          * Cluster wide resources configuration. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
         public T resourceConfigs(Map<String, Properties> resourceConfigs) {
-            this.resourceConfigs = resourceConfigs;
+            this.properties.put("resourceConfigs", resourceConfigs);
             return (T) this;
         }
-
         /**
          * Local resources configurations. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
         public T resourceOptions(Map<String, Properties> resourceOptions) {
-            this.resourceOptions = resourceOptions;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("synchronous", synchronous);
             return (T) this;
         }
-
-        public String getResourceName() {
-            return resourceName;
-        }
-
-        public void setResourceName(String resourceName) {
-            this.resourceName = resourceName;
-        }
-
-        public Object getAtomix() {
-            return atomix;
-        }
-
-        public void setAtomix(Object atomix) {
-            this.atomix = atomix;
-        }
-
-        public String getConfigurationUri() {
-            return configurationUri;
-        }
-
-        public void setConfigurationUri(String configurationUri) {
-            this.configurationUri = configurationUri;
-        }
-
-        public Object getDefaultAction() {
-            return defaultAction;
-        }
-
-        public void setDefaultAction(Object defaultAction) {
-            this.defaultAction = defaultAction;
-        }
-
-        public Object getKey() {
-            return key;
-        }
-
-        public void setKey(Object key) {
-            this.key = key;
-        }
-
-        public List<Object> getNodes() {
-            return nodes;
-        }
-
-        public void setNodes(List<Object> nodes) {
-            this.nodes = nodes;
-        }
-
-        public String getResultHeader() {
-            return resultHeader;
-        }
-
-        public void setResultHeader(String resultHeader) {
-            this.resultHeader = resultHeader;
-        }
-
-        public Class<Object> getTransport() {
-            return transport;
-        }
-
-        public void setTransport(Class<Object> transport) {
-            this.transport = transport;
-        }
-
-        public Long getTtl() {
-            return ttl;
-        }
-
-        public void setTtl(Long ttl) {
-            this.ttl = ttl;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Properties getDefaultResourceConfig() {
-            return defaultResourceConfig;
-        }
-
-        public void setDefaultResourceConfig(Properties defaultResourceConfig) {
-            this.defaultResourceConfig = defaultResourceConfig;
-        }
-
-        public Properties getDefaultResourceOptions() {
-            return defaultResourceOptions;
-        }
-
-        public void setDefaultResourceOptions(Properties defaultResourceOptions) {
-            this.defaultResourceOptions = defaultResourceOptions;
-        }
-
-        public Boolean getEphemeral() {
-            return ephemeral;
-        }
-
-        public void setEphemeral(Boolean ephemeral) {
-            this.ephemeral = ephemeral;
-        }
-
-        public ReadConsistency getReadConsistency() {
-            return readConsistency;
-        }
-
-        public void setReadConsistency(ReadConsistency readConsistency) {
-            this.readConsistency = readConsistency;
-        }
-
-        public Map<String, Properties> getResourceConfigs() {
-            return resourceConfigs;
-        }
-
-        public void setResourceConfigs(Map<String, Properties> resourceConfigs) {
-            this.resourceConfigs = resourceConfigs;
-        }
-
-        public Map<String, Properties> getResourceOptions() {
-            return resourceOptions;
-        }
-
-        public void setResourceOptions(Map<String, Properties> resourceOptions) {
-            this.resourceOptions = resourceOptions;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
     }
 
     public static class AtomixMultiMapConsumer
             extends
-                AtomixMultiMapCommon<AtomixMultiMapConsumer> {
-        private Boolean bridgeErrorHandler;
-        private ExceptionHandler exceptionHandler;
-        private ExchangePattern exchangePattern;
-
+                AtomixMultiMapCommon<AtomixMultiMapConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public AtomixMultiMapConsumer(String path) {
+            super(path);
+        }
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -362,10 +197,9 @@ public class AtomixMultiMapEndpoint {
          */
         public AtomixMultiMapConsumer bridgeErrorHandler(
                 boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
+            this.properties.put("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.
@@ -375,48 +209,28 @@ public class AtomixMultiMapEndpoint {
          */
         public AtomixMultiMapConsumer exceptionHandler(
                 ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
+            this.properties.put("exceptionHandler", exceptionHandler);
             return (AtomixMultiMapConsumer) this;
         }
-
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
         public AtomixMultiMapConsumer exchangePattern(
                 ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
+            this.properties.put("exchangePattern", exchangePattern);
             return (AtomixMultiMapConsumer) this;
         }
-
-        public Boolean getBridgeErrorHandler() {
-            return bridgeErrorHandler;
-        }
-
-        public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
-        }
-
-        public ExceptionHandler getExceptionHandler() {
-            return exceptionHandler;
-        }
-
-        public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
-        }
-
-        public ExchangePattern getExchangePattern() {
-            return exchangePattern;
-        }
-
-        public void setExchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
-        }
     }
 
     public static class AtomixMultiMapProducer
             extends
-                AtomixMultiMapCommon<AtomixMultiMapProducer> {
+                AtomixMultiMapCommon<AtomixMultiMapProducer>
+            implements
+                EndpointDefinition.Producer {
+        public AtomixMultiMapProducer(String path) {
+            super(path);
+        }
     }
 
     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 6b74950..493c27a 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
@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.Properties;
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 
 /**
@@ -32,114 +33,91 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtomixQueueEndpoint {
 
 
-    public static class AtomixQueueCommon<T extends EndpointConfiguration>
+    public static class AtomixQueueCommon<T extends EndpointDefinition>
             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;
-
+                EndpointDefinition<T> {
+        AtomixQueueCommon(String path) {
+            super("atomix-queue", path);
+        }
         /**
          * The distributed resource name. The option is a java.lang.String type.
          */
         public T resourceName(String resourceName) {
-            this.resourceName = resourceName;
+            this.properties.put("resourceName", resourceName);
             return (T) this;
         }
-
         /**
          * The Atomix instance to use. The option is a io.atomix.Atomix type.
          */
         public T atomix(Object atomix) {
-            this.atomix = atomix;
+            this.properties.put("atomix", atomix);
             return (T) this;
         }
-
         /**
          * The Atomix configuration uri. The option is a java.lang.String type.
          */
         public T configurationUri(String configurationUri) {
-            this.configurationUri = configurationUri;
+            this.properties.put("configurationUri", configurationUri);
             return (T) this;
         }
-
         /**
          * The default action. The option is a
          * org.apache.camel.component.atomix.client.queue.AtomixQueue.Action
          * type.
          */
         public T defaultAction(Object defaultAction) {
-            this.defaultAction = defaultAction;
+            this.properties.put("defaultAction", defaultAction);
             return (T) this;
         }
-
         /**
          * The address of the nodes composing the cluster. The option is a
          * java.lang.String type.
          */
         public T nodes(List<Object> nodes) {
-            this.nodes = nodes;
+            this.properties.put("nodes", nodes);
             return (T) this;
         }
-
         /**
          * The header that wil carry the result. The option is a
          * java.lang.String type.
          */
         public T resultHeader(String resultHeader) {
-            this.resultHeader = resultHeader;
+            this.properties.put("resultHeader", resultHeader);
             return (T) this;
         }
-
         /**
          * Sets the Atomix transport. The option is a
          * io.atomix.catalyst.transport.Transport type.
          */
         public T transport(Class<Object> transport) {
-            this.transport = transport;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("basicPropertyBinding", basicPropertyBinding);
             return (T) this;
         }
-
         /**
          * The cluster wide default resource configuration. The option is a
          * java.util.Properties type.
          */
         public T defaultResourceConfig(Properties defaultResourceConfig) {
-            this.defaultResourceConfig = defaultResourceConfig;
+            this.properties.put("defaultResourceConfig", defaultResourceConfig);
             return (T) this;
         }
-
         /**
          * The local default resource options. The option is a
          * java.util.Properties type.
          */
         public T defaultResourceOptions(Properties defaultResourceOptions) {
-            this.defaultResourceOptions = defaultResourceOptions;
+            this.properties.put("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
@@ -147,175 +125,52 @@ public class AtomixQueueEndpoint {
          * type.
          */
         public T ephemeral(boolean ephemeral) {
-            this.ephemeral = ephemeral;
+            this.properties.put("ephemeral", ephemeral);
             return (T) this;
         }
-
         /**
          * The read consistency level. The option is a
          * io.atomix.resource.ReadConsistency type.
          */
         public T readConsistency(ReadConsistency readConsistency) {
-            this.readConsistency = readConsistency;
+            this.properties.put("readConsistency", readConsistency);
             return (T) this;
         }
-
         /**
          * Cluster wide resources configuration. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
         public T resourceConfigs(Map<String, Properties> resourceConfigs) {
-            this.resourceConfigs = resourceConfigs;
+            this.properties.put("resourceConfigs", resourceConfigs);
             return (T) this;
         }
-
         /**
          * Local resources configurations. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
         public T resourceOptions(Map<String, Properties> resourceOptions) {
-            this.resourceOptions = resourceOptions;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("synchronous", synchronous);
             return (T) this;
         }
-
-        public String getResourceName() {
-            return resourceName;
-        }
-
-        public void setResourceName(String resourceName) {
-            this.resourceName = resourceName;
-        }
-
-        public Object getAtomix() {
-            return atomix;
-        }
-
-        public void setAtomix(Object atomix) {
-            this.atomix = atomix;
-        }
-
-        public String getConfigurationUri() {
-            return configurationUri;
-        }
-
-        public void setConfigurationUri(String configurationUri) {
-            this.configurationUri = configurationUri;
-        }
-
-        public Object getDefaultAction() {
-            return defaultAction;
-        }
-
-        public void setDefaultAction(Object defaultAction) {
-            this.defaultAction = defaultAction;
-        }
-
-        public List<Object> getNodes() {
-            return nodes;
-        }
-
-        public void setNodes(List<Object> nodes) {
-            this.nodes = nodes;
-        }
-
-        public String getResultHeader() {
-            return resultHeader;
-        }
-
-        public void setResultHeader(String resultHeader) {
-            this.resultHeader = resultHeader;
-        }
-
-        public Class<Object> getTransport() {
-            return transport;
-        }
-
-        public void setTransport(Class<Object> transport) {
-            this.transport = transport;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Properties getDefaultResourceConfig() {
-            return defaultResourceConfig;
-        }
-
-        public void setDefaultResourceConfig(Properties defaultResourceConfig) {
-            this.defaultResourceConfig = defaultResourceConfig;
-        }
-
-        public Properties getDefaultResourceOptions() {
-            return defaultResourceOptions;
-        }
-
-        public void setDefaultResourceOptions(Properties defaultResourceOptions) {
-            this.defaultResourceOptions = defaultResourceOptions;
-        }
-
-        public Boolean getEphemeral() {
-            return ephemeral;
-        }
-
-        public void setEphemeral(Boolean ephemeral) {
-            this.ephemeral = ephemeral;
-        }
-
-        public ReadConsistency getReadConsistency() {
-            return readConsistency;
-        }
-
-        public void setReadConsistency(ReadConsistency readConsistency) {
-            this.readConsistency = readConsistency;
-        }
-
-        public Map<String, Properties> getResourceConfigs() {
-            return resourceConfigs;
-        }
-
-        public void setResourceConfigs(Map<String, Properties> resourceConfigs) {
-            this.resourceConfigs = resourceConfigs;
-        }
-
-        public Map<String, Properties> getResourceOptions() {
-            return resourceOptions;
-        }
-
-        public void setResourceOptions(Map<String, Properties> resourceOptions) {
-            this.resourceOptions = resourceOptions;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
     }
 
     public static class AtomixQueueConsumer
             extends
-                AtomixQueueCommon<AtomixQueueConsumer> {
-        private Boolean bridgeErrorHandler;
-        private ExceptionHandler exceptionHandler;
-        private ExchangePattern exchangePattern;
-
+                AtomixQueueCommon<AtomixQueueConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public AtomixQueueConsumer(String path) {
+            super(path);
+        }
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -326,10 +181,9 @@ public class AtomixQueueEndpoint {
          * ignored. The option is a boolean type.
          */
         public AtomixQueueConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
+            this.properties.put("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.
@@ -339,48 +193,28 @@ public class AtomixQueueEndpoint {
          */
         public AtomixQueueConsumer exceptionHandler(
                 ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
+            this.properties.put("exceptionHandler", exceptionHandler);
             return (AtomixQueueConsumer) this;
         }
-
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
         public AtomixQueueConsumer exchangePattern(
                 ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
+            this.properties.put("exchangePattern", exchangePattern);
             return (AtomixQueueConsumer) this;
         }
-
-        public Boolean getBridgeErrorHandler() {
-            return bridgeErrorHandler;
-        }
-
-        public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
-        }
-
-        public ExceptionHandler getExceptionHandler() {
-            return exceptionHandler;
-        }
-
-        public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
-        }
-
-        public ExchangePattern getExchangePattern() {
-            return exchangePattern;
-        }
-
-        public void setExchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
-        }
     }
 
     public static class AtomixQueueProducer
             extends
-                AtomixQueueCommon<AtomixQueueProducer> {
+                AtomixQueueCommon<AtomixQueueProducer>
+            implements
+                EndpointDefinition.Producer {
+        public AtomixQueueProducer(String path) {
+            super(path);
+        }
     }
 
     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 b119947..33321f2 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
@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.Properties;
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 
 /**
@@ -32,122 +33,97 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtomixSetEndpoint {
 
 
-    public static class AtomixSetCommon<T extends EndpointConfiguration>
+    public static class AtomixSetCommon<T extends EndpointDefinition>
             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;
-
+                EndpointDefinition<T> {
+        AtomixSetCommon(String path) {
+            super("atomix-set", path);
+        }
         /**
          * The distributed resource name. The option is a java.lang.String type.
          */
         public T resourceName(String resourceName) {
-            this.resourceName = resourceName;
+            this.properties.put("resourceName", resourceName);
             return (T) this;
         }
-
         /**
          * The Atomix instance to use. The option is a io.atomix.Atomix type.
          */
         public T atomix(Object atomix) {
-            this.atomix = atomix;
+            this.properties.put("atomix", atomix);
             return (T) this;
         }
-
         /**
          * The Atomix configuration uri. The option is a java.lang.String type.
          */
         public T configurationUri(String configurationUri) {
-            this.configurationUri = configurationUri;
+            this.properties.put("configurationUri", configurationUri);
             return (T) this;
         }
-
         /**
          * The default action. The option is a
          * org.apache.camel.component.atomix.client.set.AtomixSet.Action type.
          */
         public T defaultAction(Object defaultAction) {
-            this.defaultAction = defaultAction;
+            this.properties.put("defaultAction", defaultAction);
             return (T) this;
         }
-
         /**
          * The address of the nodes composing the cluster. The option is a
          * java.lang.String type.
          */
         public T nodes(List<Object> nodes) {
-            this.nodes = nodes;
+            this.properties.put("nodes", nodes);
             return (T) this;
         }
-
         /**
          * The header that wil carry the result. The option is a
          * java.lang.String type.
          */
         public T resultHeader(String resultHeader) {
-            this.resultHeader = resultHeader;
+            this.properties.put("resultHeader", resultHeader);
             return (T) this;
         }
-
         /**
          * Sets the Atomix transport. The option is a
          * io.atomix.catalyst.transport.Transport type.
          */
         public T transport(Class<Object> transport) {
-            this.transport = transport;
+            this.properties.put("transport", transport);
             return (T) this;
         }
-
         /**
          * The resource ttl. The option is a long type.
          */
         public T ttl(long ttl) {
-            this.ttl = ttl;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("basicPropertyBinding", basicPropertyBinding);
             return (T) this;
         }
-
         /**
          * The cluster wide default resource configuration. The option is a
          * java.util.Properties type.
          */
         public T defaultResourceConfig(Properties defaultResourceConfig) {
-            this.defaultResourceConfig = defaultResourceConfig;
+            this.properties.put("defaultResourceConfig", defaultResourceConfig);
             return (T) this;
         }
-
         /**
          * The local default resource options. The option is a
          * java.util.Properties type.
          */
         public T defaultResourceOptions(Properties defaultResourceOptions) {
-            this.defaultResourceOptions = defaultResourceOptions;
+            this.properties.put("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
@@ -155,183 +131,52 @@ public class AtomixSetEndpoint {
          * type.
          */
         public T ephemeral(boolean ephemeral) {
-            this.ephemeral = ephemeral;
+            this.properties.put("ephemeral", ephemeral);
             return (T) this;
         }
-
         /**
          * The read consistency level. The option is a
          * io.atomix.resource.ReadConsistency type.
          */
         public T readConsistency(ReadConsistency readConsistency) {
-            this.readConsistency = readConsistency;
+            this.properties.put("readConsistency", readConsistency);
             return (T) this;
         }
-
         /**
          * Cluster wide resources configuration. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
         public T resourceConfigs(Map<String, Properties> resourceConfigs) {
-            this.resourceConfigs = resourceConfigs;
+            this.properties.put("resourceConfigs", resourceConfigs);
             return (T) this;
         }
-
         /**
          * Local resources configurations. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
         public T resourceOptions(Map<String, Properties> resourceOptions) {
-            this.resourceOptions = resourceOptions;
+            this.properties.put("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.
          */
         public T synchronous(boolean synchronous) {
-            this.synchronous = synchronous;
+            this.properties.put("synchronous", synchronous);
             return (T) this;
         }
-
-        public String getResourceName() {
-            return resourceName;
-        }
-
-        public void setResourceName(String resourceName) {
-            this.resourceName = resourceName;
-        }
-
-        public Object getAtomix() {
-            return atomix;
-        }
-
-        public void setAtomix(Object atomix) {
-            this.atomix = atomix;
-        }
-
-        public String getConfigurationUri() {
-            return configurationUri;
-        }
-
-        public void setConfigurationUri(String configurationUri) {
-            this.configurationUri = configurationUri;
-        }
-
-        public Object getDefaultAction() {
-            return defaultAction;
-        }
-
-        public void setDefaultAction(Object defaultAction) {
-            this.defaultAction = defaultAction;
-        }
-
-        public List<Object> getNodes() {
-            return nodes;
-        }
-
-        public void setNodes(List<Object> nodes) {
-            this.nodes = nodes;
-        }
-
-        public String getResultHeader() {
-            return resultHeader;
-        }
-
-        public void setResultHeader(String resultHeader) {
-            this.resultHeader = resultHeader;
-        }
-
-        public Class<Object> getTransport() {
-            return transport;
-        }
-
-        public void setTransport(Class<Object> transport) {
-            this.transport = transport;
-        }
-
-        public Long getTtl() {
-            return ttl;
-        }
-
-        public void setTtl(Long ttl) {
-            this.ttl = ttl;
-        }
-
-        public Boolean getBasicPropertyBinding() {
-            return basicPropertyBinding;
-        }
-
-        public void setBasicPropertyBinding(Boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
-        }
-
-        public Properties getDefaultResourceConfig() {
-            return defaultResourceConfig;
-        }
-
-        public void setDefaultResourceConfig(Properties defaultResourceConfig) {
-            this.defaultResourceConfig = defaultResourceConfig;
-        }
-
-        public Properties getDefaultResourceOptions() {
-            return defaultResourceOptions;
-        }
-
-        public void setDefaultResourceOptions(Properties defaultResourceOptions) {
-            this.defaultResourceOptions = defaultResourceOptions;
-        }
-
-        public Boolean getEphemeral() {
-            return ephemeral;
-        }
-
-        public void setEphemeral(Boolean ephemeral) {
-            this.ephemeral = ephemeral;
-        }
-
-        public ReadConsistency getReadConsistency() {
-            return readConsistency;
-        }
-
-        public void setReadConsistency(ReadConsistency readConsistency) {
-            this.readConsistency = readConsistency;
-        }
-
-        public Map<String, Properties> getResourceConfigs() {
-            return resourceConfigs;
-        }
-
-        public void setResourceConfigs(Map<String, Properties> resourceConfigs) {
-            this.resourceConfigs = resourceConfigs;
-        }
-
-        public Map<String, Properties> getResourceOptions() {
-            return resourceOptions;
-        }
-
-        public void setResourceOptions(Map<String, Properties> resourceOptions) {
-            this.resourceOptions = resourceOptions;
-        }
-
-        public Boolean getSynchronous() {
-            return synchronous;
-        }
-
-        public void setSynchronous(Boolean synchronous) {
-            this.synchronous = synchronous;
-        }
     }
 
     public static class AtomixSetConsumer
             extends
-                AtomixSetCommon<AtomixSetConsumer> {
-        private Boolean bridgeErrorHandler;
-        private ExceptionHandler exceptionHandler;
-        private ExchangePattern exchangePattern;
-
+                AtomixSetCommon<AtomixSetConsumer>
+            implements
+                EndpointDefinition.Consumer {
+        public AtomixSetConsumer(String path) {
+            super(path);
+        }
         /**
          * Allows for bridging the consumer to the Camel routing Error Handler,
          * which mean any exceptions occurred while the consumer is trying to
@@ -342,10 +187,9 @@ public class AtomixSetEndpoint {
          * ignored. The option is a boolean type.
          */
         public AtomixSetConsumer bridgeErrorHandler(boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
+            this.properties.put("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.
@@ -355,47 +199,27 @@ public class AtomixSetEndpoint {
          */
         public AtomixSetConsumer exceptionHandler(
                 ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
+            this.properties.put("exceptionHandler", exceptionHandler);
             return (AtomixSetConsumer) this;
         }
-
         /**
          * Sets the exchange pattern when the consumer creates an exchange. The
          * option is a org.apache.camel.ExchangePattern type.
          */
         public AtomixSetConsumer exchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
+            this.properties.put("exchangePattern", exchangePattern);
             return (AtomixSetConsumer) this;
         }
-
-        public Boolean getBridgeErrorHandler() {
-            return bridgeErrorHandler;
-        }
-
-        public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
-            this.bridgeErrorHandler = bridgeErrorHandler;
-        }
-
-        public ExceptionHandler getExceptionHandler() {
-            return exceptionHandler;
-        }
-
-        public void setExceptionHandler(ExceptionHandler exceptionHandler) {
-            this.exceptionHandler = exceptionHandler;
-        }
-
-        public ExchangePattern getExchangePattern() {
-            return exchangePattern;
-        }
-
-        public void setExchangePattern(ExchangePattern exchangePattern) {
-            this.exchangePattern = exchangePattern;
-        }
     }
 
     public static class AtomixSetProducer
             extends
-                AtomixSetCommon<AtomixSetProducer> {
+                AtomixSetCommon<AtomixSetProducer>
+            implements
+                EndpointDefinition.Producer {
+        public AtomixSetProducer(String path) {
+            super(path);
+        }
     }
 
     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 c4bccc7..9b8070c 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
@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.Properties;
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.model.EndpointDefinition;
 import org.apache.camel.spi.ExceptionHandler;
 
 /**
@@ -32,123 +33,98 @@ import org.apache.camel.spi.ExceptionHandler;
 public class AtomixValueEndpoint {
 
 
-    public static class AtomixValueCommon<T extends EndpointConfiguration>
+    public static class AtomixValueCommon<T extends EndpointDefinition>
             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;
-
+                EndpointDefinition<T> {
+        AtomixValueCommon(String path) {
+            super("atomix-value", path);
+        }
         /**
          * The distributed resource name. The option is a java.lang.String type.
          */
         public T resourceName(String resourceName) {
-            this.resourceName = resourceName;
+            this.properties.put("resourceName", resourceName);
             return (T) this;
         }
-
         /**
          * The Atomix instance to use. The option is a io.atomix.Atomix type.
          */
         public T atomix(Object atomix) {
-            this.atomix = atomix;
+            this.properties.put("atomix", atomix);
             return (T) this;
         }
-
         /**
          * The Atomix configuration uri. The option is a java.lang.String type.
          */
         public T configurationUri(String configurationUri) {
-            this.configurationUri = configurationUri;
+            this.properties.put("configurationUri", configurationUri);
             return (T) this;
         }
-
         /**
          * The default action. The option is a
          * org.apache.camel.component.atomix.client.value.AtomixValue.Action
          * type.
          */
         public T defaultAction(Object defaultAction) {
-            this.defaultAction = defaultAction;
+            this.properties.put("defaultAction", defaultAction);
             return (T) this;
         }
-
         /**
          * The address of the nodes composing the cluster. The option is a
          * java.lang.String type.
          */
         public T nodes(List<Object> nodes) {
-            this.nodes = nodes;
+            this.properties.put("nodes", nodes);
             return (T) this;
         }
-
         /**
          * The header that wil carry the result. The option is a
          * java.lang.String type.
          */
         public T resultHeader(String resultHeader) {
-            this.resultHeader = resultHeader;
+            this.properties.put("resultHeader", resultHeader);
             return (T) this;
         }
-
         /**
          * Sets the Atomix transport. The option is a
          * io.atomix.catalyst.transport.Transport type.
          */
         public T transport(Class<Object> transport) {
-            this.transport = transport;
+            this.properties.put("transport", transport);
             return (T) this;
         }
-
         /**
          * The resource ttl. The option is a long type.
          */
         public T ttl(long ttl) {
-            this.ttl = ttl;
+            this.properties.put("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.
          */
         public T basicPropertyBinding(boolean basicPropertyBinding) {
-            this.basicPropertyBinding = basicPropertyBinding;
+            this.properties.put("basicPropertyBinding", basicPropertyBinding);
             return (T) this;
         }
-
         /**
          * The cluster wide default resource configuration. The option is a
          * java.util.Properties type.
          */
         public T defaultResourceConfig(Properties defaultResourceConfig) {
-            this.defaultResourceConfig = defaultResourceConfig;
+            this.properties.put("defaultResourceConfig", defaultResourceConfig);
             return (T) this;
         }
-
         /**
          * The local default resource options. The option is a
          * java.util.Properties type.
          */
         public T defaultResourceOptions(Properties defaultResourceOptions) {
-            this.defaultResourceOptions = defaultResourceOptions;
+            this.properties.put("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
@@ -156,183 +132,52 @@ public class AtomixValueEndpoint {
          * type.
          */
         public T ephemeral(boolean ephemeral) {
-            this.ephemeral = ephemeral;
+            this.properties.put("ephemeral", ephemeral);
             return (T) this;
         }
-
         /**
          * The read consistency level. The option is a
          * io.atomix.resource.ReadConsistency type.
          */
         public T readConsistency(ReadConsistency readConsistency) {
-            this.readConsistency = readConsistency;
+            this.properties.put("readConsistency", readConsistency);
             return (T) this;
         }
-
         /**
          * Cluster wide resources configuration. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
         public T resourceConfigs(Map<String, Properties> resourceConfigs) {
-            this.resourceConfigs = resourceConfigs;
+            this.properties.put("resourceConfigs", resourceConfigs);
             return (T) this;
         }
-
         /**
          * Local resources configurations. The option is a
          * java.util.Map<java.lang.String,java.util.Properties> type.
          */
         public T resourceOptions(Map<String, Properties> resourceOptions) {
-            this.resourceOptions = resourceOptions;
+            this.properties.put("resourceOptions", resourceOptions);
             return (T) this;
         }
-
         /**
... 133880 lines suppressed ...