You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by al...@apache.org on 2019/08/05 13:35:33 UTC

[camel] branch CAMEL-13342-JUNIT5-EXPLORATORY updated (73b2c96 -> de6f06d)

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

aldettinger pushed a change to branch CAMEL-13342-JUNIT5-EXPLORATORY
in repository https://gitbox.apache.org/repos/asf/camel.git.


 discard 73b2c96  CAMEL-13342: Implemented a first version of a proof-of-concept for camel-test-spring/SprintBootTest with JUnit 5
 discard c2da2eb  CAMEL-13342: Implemented a first version of a proof-of-concept for camel-test-spring/SpringExtension with JUnit 5
 discard 443c637  CAMEL-13342: Moved further the proof-of-concept for camel-test-spring/CamelSpringTestSupport
 discard ef72ac9  CAMEL-13342: Implemented a first version of a proof-of-concept for camel-testcontainers-spring with JUnit 5
 discard 7c104ae  CAMEL-13342: Implemented a first version of a proof-of-concept for camel-testcontainers with JUnit 5
 discard fdecc42  CAMEL-13342: Implemented a first version of a proof-of-concept for camel-cdi-test in junit 5
 discard d118669  CAMEL-13342: Added a JUnit 5 version of JUnit 4 test patterns
 discard cff1122  CAMEL-13342: Setup SimpleMockTest with junit extension and parameter resolver
 discard 6103c93  CAMEL-13342: Created CamelTest annotation and move existing tests to **test/junit4**
     add c8f06db  Removed unused imports
     add ba241ae  Camel-Flink: Use BindToRegistry annotation where possible
     add e67f6fa  Removed unused imports
     add 16ba7ff  Fixed CS for Camel-Flink
     add dafa550  Update ldif-component.adoc
     add 7112893  Update ldif-component.adoc
     add aba7b9f  Restore imports
     add 20a3683  Regen
     add 936b772  CAMEL-13753: fix website build trigger
     add 0d97463  Camel-FTP: Use BindToRegistry annotation where possible
     add a8bbd2e  Camel-FTP: Fixed CS
     add 99036c0  Camel-google-bigquery: Use BindToRegistry annotation wherever possible
     add 70b6fc8  Camel-google-bigquery: Removed unused imports
     add 265bd0b  Camel-Google-Drive: Use BindToRegistry annotation where possible
     add 537cf3d  Camel-google-drive: Fixed CS
     add a63b9c7  Removed unused imports
     add 5853fe4  Cleanup camel-mail documentation
     add 3aa5eba  Fix typo in FAQ
     add 0e755de  CAMEL-13770: Configuring Camel components with spring-boot should support Map/Set/List types as we did previously.
     add f9aedb0  Upgrade Netty to version 4.1.38.Final
     add 77bb1ea  Fixed CS for camel-aws-s3
     add fd04579  CAMEL-13244:  Salesforce consumer should defer login to salesforce untill consumer starts as otherwise this happens when the consumer is created.
     add 86f981c  Camel-google-pubsub: Use BindToRegistry wherever possible
     add d478193  Removed unused imports
     add bdf0dcc  Camel-google-bigquery - BindToRegistry method must be public
     add c5ddaae  Camel-Ftp: Removed unused imports
     add 56e5c02  Camel-guava-eventbus: Use BindToRegistry annotation wherever possible
     add 000e920  Camel-guava-eventbus - Fixed CS
     add 9287381  Removed unused imports
     add 3dac562  Camel-Hbase: Use BindToRegistry annotation where possible
     add 24a655b  Camel-Hipchat: Use BindToRegistry annotation wherever possible
     add 133dc54  Removed unused imports
     add 82b68d4  Camel-HL7: Use BindToRegistry annotation wherever possible
     add d88eb0d  Camel-Hl7: Fixed CS
     add ec47f8d  Removed unused imports
     add 79c21df  Camel-Hl7: Forgot one test for BindToRegistry
     add 707d3db  more fixes for anchor not found errors
     add 415e720  more fixes for asciidoctor: WARNING: skipping reference to missing attribute: warnings
     add 441fe00  Revert "more fixes for anchor not found errors"
     add 54b0650  adding additional escaping logic to the Maven plugin that generates the Asciidoc files
     add 993d459  Upgrade TestContainers to version 1.12.0
     add 2be0210  Upgrade RabbitMq to version 5.7.3
     add e2fb236  "CAMEL-13454:camel-testcontainers - Should build if no docker reverted back to mvn profile implementation"
     add ce83cd9  Camel-Http4: Use BindToRegistry annotation where possible
     add f3e11ab  Camel-Http4: Fixed CS
     add 4c1166a  Removed unused imports
     add 48f8323  CAMEL-13788: Deprecate OUT in favour of getMessage on Message API.
     add 4f2cebe  CAMEL-13788: Deprecate OUT in favour of getMessage on Message API.
     add d552f04  CAMEL-13788: Deprecate OUT in favour of getMessage on Message API.
     add cdf57ec  CAMEL-13788: Deprecate OUT in favour of getMessage on Message API.
     add 089ce0d  CAMEL-13750: Omit JMSCorrelationID when sending with useMessageIDAsCorrelationID
     add 3692137  CAMEL-13788: Deprecate OUT in favour of getMessage on Message API.
     add 0640821  CAMEL-13788: Deprecate OUT in favour of getMessage on Message API.
     add 63e18d7  CAMEL-13788: Deprecate OUT in favour of getMessage on Message API.
     add 83fb6db  Regen
     add dccefd9  CAMEL-13739 - Camel-test createJndiContext warning
     add 6cea448  CAMEL-13259 - Camel BOM - Add camel catalog and others
     add b918578  CAMEL-13259 - Camel BOM - Add camel catalog and others, Regen
     add c4674fc  Camel-Infinispan: Use BindToRegistry annotation wherever possible
     add a808205  Camel-Infinispan: Fixed CS
     add dd9f3dd  Removed unused imports
     add 4c4ee5d  Camel-Infinispan: Removed deprecated toBuilder reference in Continuos Query stuff
     add 5a8b4da  Camel-IRC: Use BindToRegistry annotation where possible
     add 19e7d35  Removed unused imports
     add e39563f  CAMEL-13175: Consider removing useOriginalMessage functionality. Added unit test and polished the documentation.
     add 1e9b9dc  CAMEL-13175: Added useOriginalBody as alternative to useOriginalMessage and correct docs.
     add 40aaf53  CAMEL-13175: Added useOriginalBody as alternative to useOriginalMessage and correct docs.
     add a1b7422  CAMEL-13175: Add docs to user guide
     add a4d2898  Camel-IronMQ: Use BindToRegistry annotation wherever possible
     add 642af61  Camel-IronMQ: Fixed CS
     add 5572d3a  Removed unused imports
     add 3aa7dad  Camel-Jackson: Use BindToRegistry annotation wherever possible
     add 8a23fd1  Camel-Jackson: Fixed CS
     add 4a1c663  Removed unused imports
     add 7ebc445  Camel-JacksonXML: Use BindToRegistry wherever possible
     add 0017b6c  Removed unused imports
     add 1acaaca  Camel-Jaxb: Use BindToRegistry annotation wherever possible
     add 4b519ac  CAMEL-13791: incoming message: Add QoS Information into a header
     add 0cc831d  CAMEL-13791, add docs
     add d86845b  Camel-Paho: A little fix to table indentation
     add e7442ad  CAMEL-13779 - Camel AWS | SNS message attributes should support String.Array
     add f7c3f7d  CAMEL-13742 - Extend сamel-cmis component with new operations
     add cc48bdc  Camel-Jcache: Fixed CS
     add 5c6bd84  Removed unused imports
     add 8799825  CAMEL-13793: Support for multiple camel contexts on various Camel annotations dropped as we only support 1 context per app/deployment.
     add 59eed79  CAMEL-13175: Added useOriginalBody as alternative to useOriginalMessage and correct docs.
     add 536ecdf  Fixed CS
     add 4b6715b  CAMEL-13793: Support for multiple camel contexts on various Camel annotations dropped as we only support 1 context per app/deployment.
     add 0fc150c  CAMEL-13793: Regen
     add c1b5363  Camel-AWS SQS: Use BindToRegistry annotation wherever possible
     add 91f06f9  Camel-AWS SQS: Fixed CS
     add 4141fd2  Removed unused imports
     add 6d0790a  Removed unused imports
     add e816c45  Camel 13505 (#3065)
     add 2931c66  Polished
     add ba0d5f4  Camel-Jdbc - Use BindToRegistry annotation wherever possible
     add 5cec263  Removed unused imports
     add 78b38b9  Camel-Jsch - Use BindToRegistry annotation wherever possible
     add 1bb9a14  Removed unused imports
     add b1fdcdd  Camel-JT400 - Use BindToRegistry annotation wherever possible
     add d8d9e70  Camel-JT400 - Fixed CS
     add cc3a0b7  Removed unused imports
     add 4458fd7  Camel-Jetty: Use BindToRegistry wherever possible
     add 8512761  Camel-Jetty: Fixed CS
     add 9410fd1  Removed unused imports
     add 1a4eab7  Camel-JMS: Use BindToRegistry annotation wherever possible
     add aa147e0  Removed unused imports
     add 254d0f6  Camel-Metrics: Use BindToRegistry annotation wherever possible
     add f790e54  Camel-Metrics: Fixed CS
     add 0060fdc  Removed unused imports
     add 8203719  Camel-Micrometer: Use BindToRegistry annotation wherever possible
     add 00a4096  Camel-Micrometer: Fixed CS
     add 252d27e  Removed unused imports
     add f4ed00c  Camel-Base: Fixed CS
     add 1e5a9eb  Camel-API: Fixed CS
     add 680d099  CAMEL-13588: restore example tags
     add 7da81b7  Regen
     add 8862694  Camel-Mail: Use BindToRegistry annotation wherever possible
     add f927b17  Camel-Mail: Fixed CS
     add e833f49  Removed unused imports
     add c1ef314  Camel-mina2 - Use BindToRegistry annotation wherever possible
     add a3a550c  Camel-Mina2: Fixed CS
     add dbba17c  Removed unused imports
     add 106c394  Camel-Mllp: Use BindToRegistry annotation wherever possible
     add 91e68d4  Removed unused imports
     add 33733a6  Camel-Opentracing: Use BindToRegistry annotation wherever possible
     add 1d00569  Removed unused imports
     add 48d8a52  CAMEL-13798: code changes to re-level headings
     add f195e1d  CAMEL-13798: re-level all .adoc files
     add 324cf4c  CAMEL-13589: CXF component documentation anchor fix
     add 0224ebb  Polished
     add 4b86fcd  camel3 - Remove sub unit of work as its no longer needed/in-use as the EIPs has been refactored to handle this better.
     add f5f968c  CAMEL-13797: Move @InvokeOnHeader/@InvokeOnHeaders to org.apache.camel.spi package
     add dc2390f  Camel-Crypto: Use BindToRegistry annotation wherever possible
     add e2397c8  Removed unused imports
     add 1e90dff  Camel-Kafka: Use BindToRegistry annotation wherever possible
     add 3016e91  Camel-Kafka: Fixed CS
     add 55ec24c  Removed unused imports
     add cf9480a  Camel-Kafka: Aligned docs
     add 4fc8dfe  Regen
     add b94580b  Camel-Kubernetes: Use BindToRegistry annotation wherever possible
     add cda7648  Camel-Kubernetes: Fixed CS
     add cba5b01  Removed unused imports
     add 2a209d8  Fixed potential NPE
     add 14b4700  Camel 13799 (#3072)
     add d2d7133  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Netty4-http
     add 4e14348  CAMEL-13801 - Fixed CS for camel-netty4-http
     add b4b6055  Removed unused imports
     add 8a370f9  Camel-Netty4-Http: Added camel-mock as testing depedency
     add d66c569  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Netty4
     add 303f557  Camel-13801 - Fixed CS for Camel-Netty4
     add dbe2bbc  Removed unused imports
     add 5b7d6f9  Camel-Netty4: Aligned docs
     add 8b2ad30  Regen
     add 04053e7  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Atomix
     add 04bd8fe  Removed unused imports
     add a49b3f1  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-CassandraQL
     add 7e02699  Removed unused imports
     add 554dd18  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Paho
     add 8684317  CAMEL-13801 - Fixed CS for Camel-paho
     add 645fc9e  Removed unused imports
     add 1c8e0ed  CAMEL-7677: advice with - Allow to influence interceptor/onException/onCompletion
     add 502f323  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-PGevent
     add 4fa8db7  Removed unused imports
     add f7dfae7  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Pubnub
     add 3519a7e  Removed unused imports
     add 6ca0269  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Pulsar
     add bf5ef47  Removed unused imports
     add f2c3fe6  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Quartz2
     add f56eead  CAMEL-13801 - Fixed CS for Camel-Quartz2
     add b85578e  Removed unused imports
     add 4b957ba  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-RabbitMQ
     add f7027e4  Removed unused imports
     add c2ddc14  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Reactive-Streams
     add 58031a6  CAMEL-13801 - Fixed CS for Camel-reactive-streams
     add a6d3d23  Removed unused imports
     add 63b1b4c  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Reactor
     add ad9f136  Removed unused imports
     add 04880c0  Fix MongoDB docs typos and links
     add 4313bca  CAMEL-6901: Intercept send to endpoint now supports after url to send result to this url like an AOP before|after.
     add bc7bb9c  Regen
     add f6a4dfd  CAMEL-13799: camel-cdi - Remove support for multiple camel context (not fully implemented and not recommended - 1 context per app/deployment is only supported). Removed @ContentName
     add 416e856  CAMEL-6901: Intercept send to endpoint now supports after url to send result to this url like an AOP before|after.
     add f1742b6  Removed unusued code
     add 3815096  Camel-Consul: Fixed CS
     add 235d047  Camel-Netty4: Fixed CS
     add ec38281  Camel-Support: Fixed CS
     add b9b872d  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Restlet
     add b02cd3c  CAMEL-13801 - Fixed CS for Camel-Restlet
     add 2951bff  Removed unused imports
     add 73d6f39  Camel-Restlet: Added camel-mock as test dependency
     add f4ef99b  Camel-Restlet: Added camel-file dependency
     add e46b736  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-RXJava2
     add d096931  CAMEL-13801 - Fixed CS for Camel-RXJava2
     add 93d5f32  Removed unused imports
     add 9e69254  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Salesforce
     add 6e8c162  Removed unused imports
     add e902288  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Saxon
     add cb49bfd  Removed unused imports
     add 0306efb  Camel-Servlet: Added camel-mock as dependency test
     add eddbf1b  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Servlet
     add c5ae24a  CAMEL-13801 - Fixed CS for Camel-Servlet
     add 6f45265  Removed unused imports
     add f366423  Camel-Jetty: Added camel-mock as test dependency
     add 41409b2  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Sjms
     add f562853  Removed unused imports
     add 444b78b  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Sjms2
     add 55654e5  Removed unused imports
     add 4d99e99  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Spark
     add 40321ca  Removed unused imports
     add 86e670a  CAMEL-8388: Polished
     add 3d72d77  CAMEL-13806: Removed camel-ejb
     add 765d798  CAMEL-13806 - Regen and removed ejb-component from index
     add 0aa1323  Remove unused imports
     add 8972b31  Fix typos in migration guide
     add 7a682cc  CAMEL-10126: Aggregate - Has name clash for some options
     add 713f219  CAMEL-13795: Fixing the issue of already declared namespaces within the child (#3071)
     add 4c5eeaf  CAMEL-13806: Removed camel-ejb
     add 87ba694  camel3 - Move OutputStreamBuilder to builder package
     add 2896bcd  CAMEL-13808: Deleted test
     add 52b414b  CAMEL-13795: Fixed test
     add 3481c92  CAMEL-13795: Fixed test
     add 2011d8f  CAMEL-11176: Add comment on test that ignore on purpose
     add e779fed  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http
     add 316bf54  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - aligned the other components using camel-http4
     add 6964817  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Aligned Karaf feature
     add 37a7409   CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Aligned Spring Boot tests
     add c82228f  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Aligned Examples
     add c7a5190  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Aligned Integration tests
     add d1c7572  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Aligned docs and links
     add 7743efb  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Regen
     add 7d0d938  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Migration guide
     add 3513b64  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Fix grammar in migration guide
     add 8e12750  Update the Zipkin Server jar coordinates
     add 454f5c6  Merge pull request #3074 from shakuzen/patch-1
     add af2c19c  CAMEL-12851: Fixed test
     add 67f11f6  Regen
     add 36e8556  Fixed CS
     add 5d95ccb  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Spring-Batch
     add ba6c526  Removed unused imports
     add 7312e3c  CAMEL-13036: Allow advice with to turn off logging routes before/after as XML
     add cf93fec  CAMEL-13810: Always log ERROR if failed to start CamelContext
     add 58fb94f  CAMEL-13094: Ensure service is stopped if it fails to start as it did in Camel 2.x. This can also lead to JMX MBeans not being unregistered from the JVM. Thanks to Thomas Diesler for the unit test.
     add 96af619  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Spring-WS
     add 7e86b1d7 Fixed CS for Camel-Spring-WS
     add ce44147  CAMEL-12968: Fix FluentProducerTemplate to be thread-safe when you also set endpoints and other states.
     add ef78178   CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Spring-Redis
     add 228f833  CAMEL-13801 - Fixed CS for Camel-Spring-Redis
     add 5f76870  Removed unused imports
     add ab33215  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - AWS-Xray reference to http4 removed
     add 40d717f  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Http-common reference to http4 removed
     add a79ea5b  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Camel-cloud reference to htt4 removed
     add 661a012  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Rename Http4ServiceExpressionFactory @CloudServiceFactory
     add 1b2a52c  Camel-Http: Adding camel-mock as test dependency
     add 6eb2559  Camel-Http: Added File component as dependency
     add 76ff2d1  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Removed reference to http4 in camel-jetty
     add 0bca779  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Removed reference to http4 in camel-opentracing and regen
     add 8e4a7bd  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Removed reference to http4 in camel-rest-swagger
     add 965cda7  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Removed reference to http4 in camel-servlet
     add bc8bfa0  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Removed reference to http4 in camel-spring-boot
     add 224be5b  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Regen Camel-atmosphere-websocket
     add 4705e61  CAMEL-13792 - Rename components to default names, Camel-http4 to Camel-http - Fix link in http common docs
     add 2d06614  Regen
     add c75958f  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-SQL
     add 6da583a  Removed unused imports
     add 4cc88b6  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Spring
     add c30bfc1  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Spring
     add 71b1f6c  CAMEL-13801 - Fixed CS for Camel-Spring
     add caef79b  Removed unused imports
     add 3d213d5  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Stax
     add 1f466f2  CAMEL-13801 - Fixed CS for Camel-Stax
     add 7a41589  Removed unused imports
     add 370a30a  Removed unused imports
     add c409ab7  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Stomp
     add c3a8ffa  Removed unused imports
     add 7305809  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Stream
     add 0ad4af6  CAMEL-13801 - Fixed CS for Camel-Stream
     add bc71994  Removed unused imports
     add 64fd094  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Syslog
     add afa4f1a  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Swagger-Java
     add 67fe4c3  CAMEL-13801 - Fixed CS for Camel-Swagger-Java
     add 2c254a4  Removed unused imports
     add 954418f  updating the infinispan documentation
     add 43474e5  Merge pull request #3075 from MelissaFlinn/infinispan-doc-update
     add 0b9ad3b  CAMEL-13811: Remove camel-boon
     add 2329e8b  Expose WebSocketChannel and WebSocketHttpExchange to the Camel Exchange
     add 3be3f6f  Fix checkstyle
     add 45f55dd  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Thrift
     add 1d374ad  Removed unused imports
     add 9ac5a30  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Tika
     add cef91ab  Removed unused imports
     add 624e73a  Upgrade Tika to version 1.22
     add 897614d  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Twitter
     add f707a89  CAMEL-13801 - Fixed CS for Camel-Twitter
     add acabd92  Removed unused imports
     add b18db26  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Undertow
     add 6dfd3cf  CAMEL-13801 - Fixed CS for Camel-Undertow
     add b6c4233  Removed unused imports
     add 22fd657  Camel-Undertow: Added camel-mock as test dependency
     add f4ea2b6  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Web3j
     add bfbc97a  Removed unused imports
     add 2edbf90  Camel-Crypto: Fixed CS
     add 76f8153  Camel-Management-impl: Fixed CS
     add 198e5bb  CAMEL-13792 - Rename components to default names, Camel-mongodb3 to camel-mongodb
     add 8eb661a  CAMEL-13792 - Rename components to default names, Camel-mongodb3 to camel-mongodb - Updated references
     add 4d2f940  CAMEL-13792 - Rename components to default names, Camel-mongodb3 to camel-mongodb - Karaf integration test and feature updated
     add 68736f7  CAMEL-13792 - Rename components to default names, Camel-mongodb3 to camel-mongodb - SB integration test updated
     add ed41d44  CAMEL-13792 - Rename components to default names, Camel-mongodb3 to camel-mongodb - Docs and regen
     add 469f388  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Websocket
     add 5e50958  Removed unused imports
     add c37c326  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-XMLSecurity
     add 693a60d  Removed unused imports
     add 24adb1d  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-XMPP
     add b7ff24f  Removed unused imports
     add acb4321  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Zipkin
     add 6d67081  Removed unused imports
     add 266fb3f  CAMEL-13801 - Fixed CS for Camel-zookeeper
     add 9672694  Removed unused imports
     add acc14c0  CAMEL-13563: Fix AHC tests after Jetty upgrade
     add 6b55f81  Merge pull request #3079 from DenisIstomin/camel-13563-jetty-upgrade-fix
     add 16d69fc  CAMEL-13801 - camel3 - Use @BindToRegistry wherever possible, Camel-Itest
     add a394c76  Removed unused imports
     add d8627e2  CAMEL-12003: Add failFast option to mock endpoint
     add 081e0f0  Regen
     add b054f70  CAMEL-12003: Add failFast option to mock endpoint
     add 61909c2  CAMEL-12003: Add failFast option to mock endpoint
     add 9d2306b  CAMEL-12003: Add failFast option to mock endpoint
     add c38bd5a  CAMEL-12003: Add failFast option to mock endpoint
     add 71ba693  CAMEL-12003: camel-test getMockEndpoint should lookup mock endpoints and favour the mock queue name as matching.
     add 521de3b  Regen
     add adc277d  Camel-Salesforce: Fix integration test.
     add 57a3925  Regen
     add 71c0599  CAMEL-13811: MIGRATION.MD - Removed camel-boon
     add 3312243  CAMEL-13822: Add Override annotations
     add 672ccb8  CAMEL-12003: camel-test getMockEndpoint should lookup mock endpoints and favour the mock queue name as matching.
     add 82581fb  CAMEL-13783: Fix the camel-archetype-component to inherit from DefaultConsumer instead of ScheduledPollConsumer (#3059)
     add a21fe32  CAMEL-13783: Polished
     add b0e60be  CAMEL-13774: Add Java8 Stream to Iterator as type converter.
     add 5d8b414  Delete not used method
     add 3675829  CAMEL-13774: Add Java8 Stream to Iterator as type converter.
     add 096ec2a  Polished
     add 9d46108  Camel-Mock: Fixed CS
     add eb59e5f  Regen
     add ec0a7ac  Upgrade Pulsar and related bundles to version 2.4.0
     add a0db603  Upgrade GRPC and related bundles to version 1.22.1
     add 0f9d130  Upgrade Libphonenumber and related bundle to version 8.10.15
     add eaa45f2  Upgrade Docker Java and related bundle to version 3.1.4
     add 26f0e9f  Upgrade AWS SDK Java and related bundle to version 1.11.595
     add 29db582  CAMEL-12003: Fixed test
     add d59b19d  Upgrade Saxon and related bundle to version 9.9.1-4
     add 467500f  Upgrade Kafka and related bundle to version 2.3.0
     add c0cb9e9  CAMEL-5832: camel-jms - JMS consumer should detect JMSReplyTo being sending to itself to avoid circular looping. Thanks to Devendra Khanolkar for the sample unit test.
     add a25c0c8  CAMEL-13792 - Rename components to default names, Camel-hdfs2 to camel-hdfs
     add e0ac1da  CAMEL-13792 - Rename components to default names, Camel-hdfs2 to camel-hdfs - updated references
     add 44ba6e3  CAMEL-13792 - Rename components to default names, Camel-hdfs2 to camel-hdfs - Updated docs
     add e8d59b8  CAMEL-13792 - Rename components to default names, Camel-hdfs2 to camel-hdfs - Updated docs link and regen
     add 2fb5590  CAMEL-13792 - Rename components to default names, Camel-hdfs2 to camel-hdfs - Karaf integration test and feature updated
     add b334321  CAMEL-13792 - Rename components to default names, Camel-hdfs2 to camel-hdfs - SB integration test updated
     add 81cfdb0  CAMEL-13792 - Rename components to default names, Camel-hdfs2 to camel-hdfs - Removed references in comments
     add f4612d3  CAMEL-13824 - Camel-Mongodb: the documentation references a deleted component
     add 681f5ad  CAMEL-13824 - Regen
     add bf2c783  CAMEL-13792 - Rename components to default names, Camel-rxjava2 to camel-rxjava
     add c154369   CAMEL-13792 - Rename components to default names, Camel-rxjava2 to camel-rxjava - renamed service
     add 03cb34f  CAMEL-13792 - Rename components to default names, Camel-rxjava2 to camel-rxjava - updated references
     add 80e77be  CAMEL-13792 - Rename components to default names, Camel-rxjava2 to camel-rxjava - updated tests
     add d8c1180  CAMEL-13792 - Rename components to default names, Camel-rxjava2 to camel-rxjava - Updated docs link and regen
     add 55ca107  CAMEL-13792 - Rename components to default names, Camel-rxjava2 to camel-rxjava - Regen
     add 05e545d  Remove not used code
     add ab8a08e  CAMEL-6325: Add discardOnAggregationFailure option to aggregate EIP
     add c87b86f  CAMEL-6325: Add discardOnAggregationFailure option to aggregate EIP
     add 4300ca9  CAMEL-6715: Add to blueprint testing docs that only 1 CamelContext is supported.
     add 42b8149  CAMEL-7444: Fixed TODO for MDC test
     new afced8d  CAMEL-13342: Created CamelTest annotation and move existing tests to **test/junit4**
     new 637c0d6  CAMEL-13342: Setup SimpleMockTest with junit extension and parameter resolver
     new 4ca3f50  CAMEL-13342: Added a JUnit 5 version of JUnit 4 test patterns
     new cdefa5c  CAMEL-13342: Implemented a first version of a proof-of-concept for camel-cdi-test in junit 5
     new e044da1  CAMEL-13342: Implemented a first version of a proof-of-concept for camel-testcontainers with JUnit 5
     new d995abb  CAMEL-13342: Implemented a first version of a proof-of-concept for camel-testcontainers-spring with JUnit 5
     new 15933f8  CAMEL-13342: Moved further the proof-of-concept for camel-test-spring/CamelSpringTestSupport
     new b306b34  CAMEL-13342: Implemented a first version of a proof-of-concept for camel-test-spring/SpringExtension with JUnit 5
     new de6f06d  CAMEL-13342: Implemented a first version of a proof-of-concept for camel-test-spring/SprintBootTest with JUnit 5

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (73b2c96)
            \
             N -- N -- N   refs/heads/CAMEL-13342-JUNIT5-EXPLORATORY (de6f06d)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 9 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 Jenkinsfile                                        |    2 +-
 MIGRATION.md                                       |  107 ++-
 README.md                                          |    2 +-
 apache-camel/pom.xml                               |   35 +-
 apache-camel/src/main/descriptors/common-bin.xml   |   19 +-
 apache-camel/src/main/release/README.txt           |    1 -
 .../META-INF/maven/archetype-metadata.xml          |    4 +-
 .../src/main/resources/archetype-resources/pom.xml |    7 +-
 .../src/main/java/EventBusHelper.java              |   59 ++
 .../src/main/java/__name__Consumer.java            |   46 +-
 .../src/main/java/__name__Endpoint.java            |    7 +
 .../src/test/java/__name__ComponentTest.java       |   28 +-
 .../main/resources/archetype-resources/readme.adoc |   12 +-
 bom/camel-bom/pom.xml                              |   69 +-
 .../catalog/maven/MavenVersionManagerTest.java     |    4 -
 .../catalog/karaf/KarafRuntimeProviderTest.java    |    2 -
 .../springboot/SpringBootRuntimeProviderTest.java  |    2 -
 .../java/org/apache/camel/parser/ParserResult.java |    1 +
 .../camel/parser/model/CamelNodeDetails.java       |    1 +
 .../parser/java/MyLocalAddRouteBuilderTest.java    |    2 -
 .../org/apache/camel/parser/java/MyNettyTest.java  |    2 +-
 .../camel/parser/java/MyRouteEmptyUriTest.java     |    2 +-
 .../src/main/docs/activemq-component.adoc          |   14 +-
 .../camel/component/activemq/CamelConnection.java  |    2 +
 .../component/activemq/CamelConnectionFactory.java |    3 +
 .../camel/component/activemq/CamelDestination.java |   11 +
 .../component/activemq/CamelMessageConsumer.java   |    7 +
 .../component/activemq/CamelMessageProducer.java   |    4 +
 .../camel/component/activemq/CamelQueue.java       |    3 +
 .../component/activemq/CamelQueueReceiver.java     |    1 +
 .../camel/component/activemq/CamelQueueSender.java |    3 +
 .../camel/component/activemq/CamelTopic.java       |    3 +
 .../component/activemq/CamelTopicPublisher.java    |    5 +
 .../component/activemq/CamelTopicSubscriber.java   |    2 +
 .../activemq/ActiveMQJmsHeaderRouteForceTest.java  |    1 +
 .../activemq/ActiveMQJmsHeaderRouteTest.java       |    2 +
 .../activemq/ActiveMQOriginalDestinationTest.java  |    1 +
 .../ActiveMQReplyToHeaderUsingConverterTest.java   |    2 +
 .../component/activemq/ActiveMQRouteTest.java      |    3 +
 .../activemq/AdvisoryConsumerExample.java          |    1 +
 .../camel/component/activemq/CamelJmsTest.java     |    1 +
 ...nvokeRequestReplyUsingJmsReplyToHeaderTest.java |    2 +
 .../activemq/JmsSimpleRequestReplyTest.java        |    2 +
 .../component/activemq/SetGroupIdProcessor.java    |    1 +
 .../converter/InvokeJmsMessageListenerTest.java    |    1 +
 .../converter/InvokeMessageListenerTest.java       |    6 +-
 .../src/main/docs/ahc-ws-component.adoc            |   18 +-
 .../apache/camel/component/ahc/ws/WsEndpoint.java  |    1 +
 components/camel-ahc/pom.xml                       |    2 +-
 .../camel-ahc/src/main/docs/ahc-component.adoc     |   46 +-
 .../apache/camel/component/ahc/AhcEndpoint.java    |    2 +
 .../camel/component/ahc/DefaultAhcBinding.java     |   29 +-
 ...ponentClientConfigSslContextParametersTest.java |    3 +
 ...entConfigWithClientConfigUriParametersTest.java |    1 +
 ...entConfigWithClientConfigUriParametersTest.java |    1 +
 .../ahc/AhcProduceSSLContextParametersGetTest.java |    2 +
 .../component/ahc/AhcProducerSessionTest.java      |    2 -
 .../ahc/HttpHeaderFilterStrategyTest.java          |    1 +
 .../camel-amqp/src/main/docs/amqp-component.adoc   |   20 +-
 .../apache/camel/component/amqp/AMQPRouteTest.java |    2 +
 .../component/amqp/AMQPRouteTraceFrameTest.java    |    2 +
 .../amqp/artemis/AMQPEmbeddedBrokerTest.java       |    2 +
 .../camel-apns/src/main/docs/apns-component.adoc   |   30 +-
 .../apache/camel/component/apns/ApnsComponent.java |    1 +
 .../apache/camel/component/apns/ApnsConsumer.java  |    1 +
 .../apache/camel/component/apns/ApnsEndpoint.java  |    2 +
 .../apache/camel/component/apns/ApnsProducer.java  |    1 +
 .../component/apns/factory/ApnsServiceFactory.java |    2 +
 .../camel/component/apns/ApnsConsumerTest.java     |    2 +
 .../camel/component/apns/ApnsProducerTest.java     |    2 +
 .../apns/ApnsProducerWithoutTokensHeaderTest.java  |    2 +
 .../component/as2/api/CanonicalOutputStream.java   |    3 +
 .../camel/component/as2/api/entity/MimeEntity.java |    1 +
 .../src/main/docs/as2-component.adoc               |   16 +-
 .../apache/camel/component/as2/AS2Endpoint.java    |    3 +
 .../as2/AS2ClientManagerIntegrationTest.java       |    1 +
 .../camel-asn1/src/main/docs/asn1-dataformat.adoc  |   10 +-
 .../src/main/docs/asterisk-component.adoc          |   14 +-
 .../component/asterisk/AsteriskConsumerTest.java   |    1 +
 .../camel-atmos/src/main/docs/atmos-component.adoc |   18 +-
 .../camel/component/atmos/AtmosComponent.java      |    1 +
 .../camel/component/atmos/AtmosEndpoint.java       |    2 +
 .../main/docs/atmosphere-websocket-component.adoc  |   20 +-
 .../websocket/WebsocketCamelRouterTestSupport.java |    2 +
 ...bsocketCamelRouterWithInitParamTestSupport.java |    2 +
 .../atmosphere/websocket/WebsocketRouteTest.java   |    1 +
 .../websocket/WebsocketRouteWithInitParamTest.java |    1 +
 .../camel-atom/src/main/docs/atom-component.adoc   |   20 +-
 .../apache/camel/component/atom/AtomProducer.java  |    1 +
 .../camel/component/atom/UpdatedDateFilter.java    |    3 +-
 .../apache/camel/component/feed/FeedComponent.java |    1 +
 .../apache/camel/component/feed/FeedEndpoint.java  |    3 +
 .../component/feed/FeedEntryPollingConsumer.java   |    1 +
 .../camel/component/feed/FeedPollingConsumer.java  |    1 +
 .../camel/component/atom/AtomEndpointTest.java     |    1 +
 .../atom/AtomEntryPollingConsumerTest.java         |    1 +
 .../camel/component/atom/AtomEntrySortTest.java    |    1 +
 .../camel/component/atom/AtomHttpConsumerTest.java |    1 +
 .../atom/AtomPollingConsumerIdleMessageTest.java   |    1 +
 .../component/atom/AtomPollingConsumerTest.java    |    1 +
 .../component/atom/AtomPollingLowDelayTest.java    |    1 +
 .../component/atom/AtomPollingUnthrottledTest.java |    1 +
 .../src/main/docs/atomix-map-component.adoc        |   18 +-
 .../src/main/docs/atomix-messaging-component.adoc  |   10 +-
 .../src/main/docs/atomix-multimap-component.adoc   |   10 +-
 .../src/main/docs/atomix-queue-component.adoc      |   10 +-
 .../src/main/docs/atomix-set-component.adoc        |   10 +-
 .../src/main/docs/atomix-value-component.adoc      |   10 +-
 .../client/AbstractAtomixClientProducer.java       |    2 +-
 .../atomix/client/map/AtomixMapConfiguration.java  |    1 +
 .../atomix/client/map/AtomixMapProducer.java       |    2 +-
 .../messaging/AtomixMessagingConfiguration.java    |    1 +
 .../client/messaging/AtomixMessagingProducer.java  |    2 +-
 .../multimap/AtomixMultiMapConfiguration.java      |    1 +
 .../client/multimap/AtomixMultiMapProducer.java    |    2 +-
 .../client/queue/AtomixQueueConfiguration.java     |    1 +
 .../atomix/client/queue/AtomixQueueProducer.java   |    2 +-
 .../atomix/client/set/AtomixSetConfiguration.java  |    1 +
 .../atomix/client/set/AtomixSetProducer.java       |    2 +-
 .../client/value/AtomixValueConfiguration.java     |    1 +
 .../atomix/client/value/AtomixValueProducer.java   |    2 +-
 .../atomix/client/AtomixClientTestSupport.java     |    7 +-
 .../atomix/client/map/AtomixMapConsumerTest.java   |    5 +-
 .../apache/camel/attachment/DefaultAttachment.java |    2 +
 .../attachment/BeanMethodWithExchangeTest.java     |    1 +
 .../camel-avro/src/main/docs/avro-component.adoc   |   20 +-
 .../camel-avro/src/main/docs/avro-dataformat.adoc  |   10 +-
 .../camel/dataformat/avro/AvroDataFormat.java      |    4 +
 .../camel/dataformat/avro/SpecificDataNoCache.java |    1 +
 .../camel/component/avro/AvroHttpConsumerTest.java |    1 +
 .../camel/component/avro/AvroHttpProducerTest.java |    1 +
 .../component/avro/AvroNettyConsumerTest.java      |    1 +
 .../component/avro/AvroNettyProducerTest.java      |    1 +
 .../avro/AvroMarshalAndUnmarshalSpringTest.java    |    2 +
 .../src/main/docs/aws-cw-component.adoc            |   24 +-
 .../apache/camel/component/aws/cw/CwComponent.java |    1 +
 .../apache/camel/component/aws/cw/CwEndpoint.java  |    2 +
 .../apache/camel/component/aws/cw/CwProducer.java  |    1 +
 .../cw/integration/CwComponentIntegrationTest.java |    1 +
 .../src/main/docs/aws-ddb-component.adoc           |   42 +-
 .../src/main/docs/aws-ddbstream-component.adoc     |   34 +-
 .../camel/component/aws/ddb/DdbComponent.java      |    1 +
 .../camel/component/aws/ddb/DdbEndpoint.java       |    2 +
 .../camel/component/aws/ddb/DdbProducer.java       |    1 +
 .../integration/DdbComponentIntegrationTest.java   |    1 +
 .../src/main/docs/aws-ec2-component.adoc           |   20 +-
 .../camel/component/aws/ec2/EC2Endpoint.java       |    2 +
 .../camel/component/aws/ec2/EC2Producer.java       |    1 +
 .../src/main/docs/aws-ecs-component.adoc           |   22 +-
 .../camel/component/aws/ecs/ECSEndpoint.java       |    2 +
 .../camel/component/aws/ecs/ECSProducer.java       |    1 +
 .../src/main/docs/aws-eks-component.adoc           |   22 +-
 .../camel/component/aws/eks/EKSEndpoint.java       |    2 +
 .../camel/component/aws/eks/EKSProducer.java       |    1 +
 .../src/main/docs/aws-iam-component.adoc           |   22 +-
 .../camel/component/aws/iam/IAMEndpoint.java       |    2 +
 .../camel/component/aws/iam/IAMProducer.java       |    1 +
 .../src/main/docs/aws-kinesis-component.adoc       |   32 +-
 .../main/docs/aws-kinesis-firehose-component.adoc  |   26 +-
 .../KinesisFirehoseComponentIntegrationTest.java   |    1 +
 .../KinesisComponentIntegrationTest.java           |    1 +
 .../src/main/docs/aws-kms-component.adoc           |   22 +-
 .../camel/component/aws/kms/KMSEndpoint.java       |    2 +
 .../camel/component/aws/kms/KMSProducer.java       |    1 +
 .../src/main/docs/aws-lambda-component.adoc        |   26 +-
 .../camel/component/aws/lambda/LambdaEndpoint.java |    2 +
 .../src/main/docs/aws-mq-component.adoc            |   20 +-
 .../apache/camel/component/aws/mq/MQEndpoint.java  |    2 +
 .../apache/camel/component/aws/mq/MQProducer.java  |    1 +
 .../src/main/docs/aws-msk-component.adoc           |   22 +-
 .../camel/component/aws/msk/MSKEndpoint.java       |    2 +
 .../camel/component/aws/msk/MSKProducer.java       |    1 +
 .../src/main/docs/aws-s3-component.adoc            |   40 +-
 .../apache/camel/component/aws/s3/S3Component.java |    2 +
 .../apache/camel/component/aws/s3/S3Consumer.java  |    1 +
 .../apache/camel/component/aws/s3/S3Endpoint.java  |    2 +
 .../s3/client/impl/S3ClientIAMOptimizedImpl.java   |    1 +
 .../aws/s3/client/impl/S3ClientStandardImpl.java   |    1 +
 .../aws/s3/S3ComponentContentLengthFileTest.java   |    1 +
 .../component/aws/s3/S3ComponentFileTest.java      |    1 +
 .../aws/s3/S3ComponentKeyNameFileTest.java         |    1 +
 .../s3/integration/S3ComponentIntegrationTest.java |    1 +
 .../src/main/docs/aws-sdb-component.adoc           |   30 +-
 .../aws/sdb/BatchDeleteAttributesCommand.java      |    1 +
 .../aws/sdb/BatchPutAttributesCommand.java         |    1 +
 .../component/aws/sdb/DeleteAttributesCommand.java |    1 +
 .../component/aws/sdb/DeleteDomainCommand.java     |    1 +
 .../component/aws/sdb/DomainMetadataCommand.java   |    1 +
 .../component/aws/sdb/GetAttributesCommand.java    |    1 +
 .../component/aws/sdb/ListDomainsCommand.java      |    1 +
 .../component/aws/sdb/PutAttributesCommand.java    |    1 +
 .../camel/component/aws/sdb/SdbComponent.java      |    1 +
 .../camel/component/aws/sdb/SdbEndpoint.java       |    2 +
 .../camel/component/aws/sdb/SdbProducer.java       |    1 +
 .../camel/component/aws/sdb/SelectCommand.java     |    1 +
 .../src/main/docs/aws-ses-component.adoc           |   26 +-
 .../camel/component/aws/ses/SesComponent.java      |    1 +
 .../camel/component/aws/ses/SesEndpoint.java       |    2 +
 .../camel/component/aws/ses/SesProducer.java       |    1 +
 .../integration/SesComponentIntegrationTest.java   |    1 +
 .../src/main/docs/aws-sns-component.adoc           |   30 +-
 .../camel/component/aws/sns/SnsComponent.java      |    1 +
 .../camel/component/aws/sns/SnsEndpoint.java       |    4 +
 .../camel/component/aws/sns/SnsProducer.java       |   12 +
 .../camel/component/aws/sns/SnsProducerTest.java   |   12 +-
 .../integration/SnsComponentIntegrationTest.java   |    1 +
 .../SnsTopicWithKmsEncryptionIntegrationTest.java  |    1 +
 .../src/main/docs/aws-sqs-component.adoc           |   48 +-
 .../camel/component/aws/sqs/SqsConsumer.java       |    1 +
 .../camel/component/aws/sqs/SqsEndpoint.java       |    4 +
 .../camel/component/aws/sqs/SqsProducer.java       |    1 +
 .../component/aws/sqs/SqsBatchConsumerTest.java    |   11 +-
 .../camel/component/aws/sqs/SqsComponentTest.java  |   13 +-
 .../aws/sqs/SqsConcurrentConsumerTest.java         |   11 +-
 .../aws/sqs/SqsConsumerIdleMessageTest.java        |   15 +-
 .../sqs/SqsDoesNotExtendMessageVisibilityTest.java |   18 +-
 .../aws/sqs/SqsEndpointUseExistingQueueTest.java   |   15 +-
 .../aws/sqs/SqsExtendMessageVisibilityTest.java    |   20 +-
 .../integration/SqsComponentIntegrationTest.java   |    1 +
 .../SqsConsumerMessageIntegrationTest.java         |    1 +
 .../SqsProducerBatchSendFifoIntegrationTest.java   |    1 +
 .../SqsProducerBatchSendIntegrationTest.java       |    1 +
 .../SqsProducerDeleteMessageIntegrationTest.java   |    1 +
 .../src/main/docs/aws-swf-component.adoc           |   32 +-
 .../component/aws/swf/SWFActivityProducer.java     |    1 +
 .../camel/component/aws/swf/SWFComponent.java      |    1 +
 .../camel/component/aws/swf/SWFEndpoint.java       |    2 +
 .../component/aws/swf/SWFWorkflowProducer.java     |    1 +
 .../camel-aws-xray/src/main/docs/aws-xray.adoc     |   12 +-
 .../decorators/http/Http4SegmentDecorator.java     |   25 -
 ...pache.camel.component.aws.xray.SegmentDecorator |    1 -
 .../src/main/docs/azure-blob-component.adoc        |   26 +-
 .../src/main/docs/azure-queue-component.adoc       |   22 +-
 components/camel-azure/src/main/docs/azure.adoc    |    2 +-
 .../component/azure/blob/BlobServiceComponent.java |    1 +
 .../component/azure/blob/BlobServiceEndpoint.java  |    2 +
 .../azure/queue/QueueServiceComponent.java         |    1 +
 .../azure/queue/QueueServiceEndpoint.java          |    2 +
 .../src/main/docs/barcode-dataformat.adoc          |   14 +-
 .../barcode/BarcodeDataFormatSpringTest.java       |    2 +
 .../src/main/docs/base64-dataformat.adoc           |   12 +-
 .../src/main/docs/bean-validator-component.adoc    |   18 +-
 .../bean/validator/BeanValidatorProducer.java      |    1 +
 .../validator/BeanValidatorConfigurationTest.java  |    5 +
 .../BeanValidatorXMLConfigurationRouteTest.java    |    1 +
 .../bean/validator/CarWithAnnotations.java         |    4 +
 .../validator/CarWithRedefinedDefaultGroup.java    |    4 +
 .../bean/validator/CarWithoutAnnotations.java      |    4 +
 .../camel-bean/src/main/docs/bean-component.adoc   |   18 +-
 .../camel-bean/src/main/docs/bean-language.adoc    |   33 +-
 .../camel-bean/src/main/docs/class-component.adoc  |   16 +-
 .../component/bean/AbstractBeanProcessor.java      |    3 +
 .../bean/AbstractCamelInvocationHandler.java       |   15 +-
 .../apache/camel/component/bean/BeanComponent.java |    1 +
 .../org/apache/camel/component/bean/BeanInfo.java  |    3 -
 .../apache/camel/component/bean/BeanProcessor.java |    1 +
 .../camel/component/bean/ConstantBeanHolder.java   |    5 +
 .../component/bean/ConstantTypeBeanHolder.java     |    6 +
 .../bean/DefaultParameterMappingStrategy.java      |    1 +
 .../apache/camel/component/bean/MethodInfo.java    |   22 +-
 .../apache/camel/component/bean/RegistryBean.java  |    5 +
 .../camel/component/beanclass/ClassComponent.java  |    1 +
 .../apache/camel/language/bean/BeanExpression.java |    5 +-
 .../apache/camel/language/bean/BeanLanguage.java   |    3 +
 .../src/main/docs/beanio-dataformat.adoc           |   14 +-
 .../camel/dataformat/beanio/BeanIODataFormat.java  |    4 +
 .../src/main/docs/beanstalk-component.adoc         |   20 +-
 .../src/main/docs/bindy-dataformat.adoc            |   44 +-
 .../dataformat/bindy/BindyAbstractFactory.java     |    3 +
 .../dataformat/bindy/csv/BindyCsvDataFormat.java   |    2 +
 .../bindy/fixed/BindyFixedLengthDataFormat.java    |    2 +
 .../bindy/format/NumberPatternFormat.java          |    3 +
 .../format/factories/BigDecimalFormatFactory.java  |    2 +
 .../format/factories/BigIntegerFormatFactory.java  |    2 +
 .../format/factories/BooleanFormatFactory.java     |    2 +
 .../bindy/format/factories/ByteFormatFactory.java  |    2 +
 .../format/factories/CharacterFormatFactory.java   |    2 +
 .../bindy/format/factories/DateFormatFactory.java  |    3 +
 .../format/factories/DoubleFormatFactory.java      |    2 +
 .../bindy/format/factories/EnumFormatFactory.java  |    2 +
 .../bindy/format/factories/FloatFormatFactory.java |    2 +
 .../format/factories/IntegerFormatFactory.java     |    2 +
 .../format/factories/LocalDateFormatFactory.java   |    3 +
 .../factories/LocalDateTimeFormatFactory.java      |    3 +
 .../format/factories/LocalTimeFormatFactory.java   |    3 +
 .../bindy/format/factories/LongFormatFactory.java  |    2 +
 .../bindy/format/factories/ShortFormatFactory.java |    2 +
 .../format/factories/StringFormatFactory.java      |    2 +
 .../bindy/kvp/BindyKeyValuePairDataFormat.java     |    3 +
 .../BindyComplexCsvGenerateHeaderMarshallTest.java |    1 +
 .../bindy/csv/BindyComplexCsvUnmarshallTest.java   |    1 +
 ...mplexCsvUnmarshallUnwrapSingleInstanceTest.java |    1 +
 .../bindy/csv/BindyCsvBigFileUnmarshallTest.java   |    1 +
 .../bindy/csv/BindyCsvSkipFieldTest.java           |    1 +
 .../BindyDoNotRemoveQuotesCsvUnmarshallTest.java   |    1 +
 .../csv/BindyDoubleQuotesCsvUnmarshallTest.java    |    1 +
 .../BindyDoubleQuotesInFieldCsvUnmarshallTest.java |    1 +
 .../csv/BindyInlinedQuotesCsvUnmarshallTest.java   |    1 +
 .../csv/BindyMarshalOneToManyWithHeadersTest.java  |    1 +
 .../bindy/csv/BindyPojoSimpleCsvMarshallTest.java  |    1 +
 .../BindySimpleCsvBooleanFalseMarshallTest.java    |    1 +
 .../csv/BindySimpleCsvBooleanTrueMarshallTest.java |    1 +
 .../csv/BindySimpleCsvBooleanUnmarshallTest.java   |    1 +
 .../BindySimpleCsvGenerateHeaderMarshallTest.java  |    1 +
 .../csv/BindySimpleCsvIntegerMarshallTest.java     |    1 +
 ...indySimpleCsvMandatoryFieldsUnmarshallTest.java |    1 +
 .../bindy/csv/BindySimpleCsvMarshallDslTest.java   |    1 +
 ...BindySimpleCsvMarshallPositionModifiedTest.java |    1 +
 .../bindy/csv/BindySimpleCsvMarshallTest.java      |    1 +
 .../csv/BindySimpleCsvMarshallTrimClipTest.java    |    1 +
 .../bindy/csv/BindySimpleCsvNullMarshallTest.java  |    1 +
 .../csv/BindySimpleCsvOneToManyMarshallTest.java   |    1 +
 ...ndySimpleCsvRemoveWhitespaceUnmarshallTest.java |    1 +
 .../BindySimpleCsvSkipFirstLineUnmarshallTest.java |    1 +
 .../BindySimpleCsvUnmarshallBadIntegerTest.java    |    1 +
 ...ndySimpleCsvUnmarshallPositionModifiedTest.java |    1 +
 .../bindy/csv/BindySimpleCsvUnmarshallTest.java    |    1 +
 ...indySimpleCsvUnmarshallUnicodeNextLineTest.java |    1 +
 ...BindySingleQuoteStartWordCsvUnmarshallTest.java |    1 +
 .../csv/BindySingleQuotesCsvUnmarshallTest.java    |    1 +
 ...esWithDoubleQuotesInFieldCsvUnmarshallTest.java |    1 +
 ...ComplexOneToManyKeyValuePairUnMarshallTest.java |    1 +
 .../BindySimpleKeyValuePairMarshallDslTest.java    |    1 +
 .../fix/BindySimpleKeyValuePairMarshallTest.java   |    1 +
 .../BindySimpleKeyValuePairNullMarshallTest.java   |    1 +
 .../BindySimpleKeyValuePairSortedMarshallTest.java |    1 +
 ...indySimpleKeyValuePairSortedUnmarshallTest.java |    1 +
 .../BindySimpleKeyValuePairTabMarshallTest.java    |    1 +
 .../BindySimpleKeyValuePairTabUnmarshallTest.java  |    1 +
 ...BindySimpleKeyValuePairUnicodeNextLineTest.java |    1 +
 .../BindySimpleKeyValuePairUnmarshallDslTest.java  |    1 +
 .../fix/BindySimpleKeyValuePairUnmarshallTest.java |    1 +
 ...eKeyValuePairWithoutSectionMarshallDslTest.java |    1 +
 .../bindy/fixed/implied/BindyImpliedTest.java      |    1 +
 .../simple/BindySimpleFixedLengthMarshallTest.java |    1 +
 .../bindy/fixed/number/BindyNumberTest.java        |    1 +
 ...SimpleFixedLengthUnmarshallClassMethodTest.java |    1 +
 ...pleFixedLengthUnmarshallExternalMethodTest.java |    1 +
 .../trim/BindySimpleFixedLengthUnmarshallTest.java |    1 +
 ...FixedLengthUnmarshallTrimAlignedBFieldTest.java |    1 +
 ...dySimpleFixedLengthUnmarshallTrimFieldTest.java |    1 +
 .../date/BindyDatePatternCsvUnmarshallTest.java    |    1 +
 .../camel-blueprint/src/main/docs/blueprint.adoc   |    6 +-
 .../camel/blueprint/BlueprintCamelContext.java     |    1 +
 .../BlueprintModelJAXBContextFactory.java          |    1 +
 .../camel/blueprint/CamelContextFactoryBean.java   |   60 ++
 .../blueprint/CamelErrorHandlerFactoryBean.java    |    6 +
 .../camel/blueprint/CamelProxyFactoryBean.java     |    5 +
 .../blueprint/handler/CamelNamespaceHandler.java   |   66 +-
 .../src/main/docs/bonita-component.adoc            |   18 +-
 .../camel/component/bonita/BonitaComponent.java    |    1 +
 .../camel/component/bonita/BonitaEndpoint.java     |    2 +
 .../bonita/producer/BonitaStartProducer.java       |    1 +
 components/camel-boon/pom.xml                      |  102 --
 .../camel-boon/src/main/docs/boon-dataformat.adoc  |  104 --
 .../camel/component/boon/BoonDataFormat.java       |  145 ---
 .../camel/component/boon/BoonConcurrentTest.java   |   75 --
 .../camel/component/boon/BoonDataFormatTest.java   |  141 ---
 .../org/apache/camel/component/boon/TestPojo.java  |   45 -
 .../src/test/resources/log4j2.properties           |   28 -
 .../src/main/docs/box-component.adoc               |   48 +-
 .../apache/camel/component/box/BoxEndpoint.java    |    3 +
 .../src/main/docs/braintree-component.adoc         |   60 +-
 .../src/main/docs/browse-component.adoc            |   16 +-
 .../camel/component/browse/BrowseComponent.java    |    1 +
 .../camel/component/browse/BrowseEndpoint.java     |    3 +
 .../src/main/docs/caffeine-cache-component.adoc    |   16 +-
 .../main/docs/caffeine-loadcache-component.adoc    |   12 +-
 .../camel/component/caffeine/EvictionType.java     |    1 +
 .../caffeine/cache/CaffeineCacheProducer.java      |    2 +-
 .../caffeine/load/CaffeineLoadCacheProducer.java   |    2 +-
 .../CaffeineIdempotentRepositoryTest.java          |    1 +
 .../src/main/docs/cql-component.adoc               |   26 +-
 .../component/cassandra/CassandraEndpoint.java     |    2 +
 .../component/cassandra/CassandraProducer.java     |    1 +
 .../cassandra/CassandraComponentBeanRefTest.java   |    7 +-
 .../CassandraAggregationRepositoryTest.java        |    2 +
 .../NamedCassandraAggregationRepositoryTest.java   |    2 +
 .../CassandraIdempotentRepositoryTest.java         |    2 +
 .../NamedCassandraIdempotentRepositoryTest.java    |    2 +
 .../camel-cbor/src/main/docs/cbor-dataformat.adoc  |   10 +-
 components/camel-cdi/src/main/docs/cdi.adoc        |  353 +------
 .../org/apache/camel/cdi/AnnotatedDelegate.java    |    9 +
 .../org/apache/camel/cdi/CamelContextProducer.java |    4 +-
 .../camel/cdi/CdiCamelBeanPostProcessor.java       |   78 --
 .../org/apache/camel/cdi/CdiCamelExtension.java    |   28 +-
 .../org/apache/camel/cdi/CdiEventEndpoint.java     |   18 -
 .../java/org/apache/camel/cdi/ContextName.java     |   97 --
 .../java/org/apache/camel/cdi/ContextNames.java    |   28 -
 .../org/apache/camel/cdi/SyntheticAnnotated.java   |    6 +
 .../org/apache/camel/cdi/XmlCdiBeanFactory.java    |    9 +-
 .../camel/cdi/XmlErrorHandlerFactoryBean.java      |    3 +
 .../transaction/JtaTransactionErrorHandler.java    |    1 +
 .../JtaTransactionErrorHandlerBuilder.java         |    2 +
 .../cdi/transaction/TransactionErrorHandler.java   |    4 +
 .../camel/cdi/xml/CamelContextFactoryBean.java     |   60 ++
 .../camel/cdi/xml/ErrorHandlerDefinition.java      |   11 +
 .../cdi/bean/EndpointInjectWrongContextRoute.java  |   36 -
 .../camel/cdi/bean/FirstCamelContextBean.java      |    3 +-
 .../cdi/bean/FirstCamelContextConvertingRoute.java |    5 +-
 .../bean/FirstCamelContextEndpointInjectRoute.java |    5 +-
 .../bean/FirstCamelContextEventConsumingRoute.java |    3 -
 .../bean/FirstCamelContextEventProducingRoute.java |    3 -
 .../bean/FirstCamelContextProduceTemplateBean.java |   30 -
 .../bean/FirstCamelContextPropertyInjectBean.java  |   38 -
 .../camel/cdi/bean/FirstCamelContextRoute.java     |    5 +-
 .../camel/cdi/bean/FirstNamedCamelContextBean.java |    2 -
 .../cdi/bean/FirstNamedCamelContextRoute.java      |    5 +-
 .../camel/cdi/bean/SecondCamelContextBean.java     |    4 +-
 .../bean/SecondCamelContextConvertingRoute.java    |    7 +-
 .../SecondCamelContextEndpointInjectRoute.java     |   34 -
 .../SecondCamelContextEventConsumingRoute.java     |    6 +-
 .../SecondCamelContextEventProducingRoute.java     |    6 +-
 .../SecondCamelContextProduceTemplateBean.java     |   30 -
 .../bean/SecondCamelContextPropertyInjectBean.java |   38 -
 .../cdi/bean/SecondNamedCamelContextBean.java      |    2 -
 .../cdi/bean/SecondNamedCamelContextRoute.java     |    7 +-
 .../InjectedTypeConverterMultipleContextsTest.java |  120 ---
 .../cdi/test/MultiCamelContextProducerTest.java    |  168 ----
 .../MultiCamelContextReusedRouteCdi20Test.java     |  118 ---
 .../camel/cdi/test/MultiCamelContextTest.java      |  159 ---
 .../cdi/test/MultiContextConsumerTemplateTest.java |  123 ---
 .../cdi/test/MultiContextEndpointInjectTest.java   |  137 ---
 .../cdi/test/MultiContextEventEndpointTest.java    |  190 ----
 .../cdi/test/MultiContextEventNotifierTest.java    |  300 ------
 .../cdi/test/MultiContextProduceTemplateTest.java  |  157 ---
 .../cdi/test/MultiContextProducerTemplateTest.java |  137 ---
 .../cdi/test/MultiContextPropertyInjectTest.java   |  193 ----
 .../cdi/test/QualifiedMultiCamelContextTest.java   |  173 ----
 .../cdi/test/RouteBuilderWithContextNameTest.java  |   93 --
 .../test/RouteBuildersWithContextNamesTest.java    |  113 ---
 .../test/RouteBuildersWithSameContextNameTest.java |   91 --
 .../UnsatisfiedContextForEndpointInjectTest.java   |   58 --
 .../cdi/test/UriQualifierWithContextTest.java      |   12 +-
 .../camel/cdi/test/UriWithWrongContextTest.java    |    6 +-
 .../camel/cdi/test/XmlMultiContextsTest.java       |  142 ---
 .../src/main/docs/chatscript-component.adoc        |   12 +-
 .../component/chatscript/ChatScriptComponent.java  |    1 +
 .../component/chatscript/ChatScriptEndpoint.java   |    2 +
 .../component/chatscript/ChatScriptProducer.java   |    1 +
 .../camel-chunk/src/main/docs/chunk-component.adoc |   22 +-
 .../camel/component/chunk/ChunkLetterTest.java     |    1 +
 .../src/main/docs/cm-sms-component.adoc            |   12 +-
 .../camel-cmis/src/main/docs/cmis-component.adoc   |   22 +-
 .../apache/camel/component/cmis/CMISComponent.java |    1 +
 .../apache/camel/component/cmis/CMISProducer.java  |  292 +++++-
 .../camel/component/cmis/CMISQueryProducer.java    |    1 +
 .../camel/component/cmis/CMISSessionFacade.java    |    4 +
 .../camel/component/cmis/CamelCMISActions.java     |   44 +
 .../camel/component/cmis/CamelCMISConstants.java   |    6 +
 .../cmis/exception/CamelCmisException.java         |   40 +
 .../CamelCmisObjectNotFoundException.java          |   39 +
 .../exception/CamelCmisUnauthorizedException.java  |   39 +
 .../camel/component/cmis/CMISProducerTest.java     |  269 ++++--
 .../camel/component/cmis/CMISTestSupport.java      |   10 +-
 .../camel-coap/src/main/docs/coap-component.adoc   |   14 +-
 .../org/apache/camel/coap/CamelCoapResource.java   |    2 +-
 .../java/org/apache/camel/coap/CoAPComponent.java  |    1 +
 .../java/org/apache/camel/coap/CoAPProducer.java   |    1 +
 .../org/apache/camel/coap/CoAPTestSupport.java     |    1 +
 .../src/main/docs/cometd-component.adoc            |   22 +-
 .../camel/component/cometd/CometdConsumer.java     |    2 +
 .../camel/component/cometd/CometdEndpoint.java     |    3 +
 .../camel/component/cometd/CometdProducer.java     |    3 +
 ...oducerConsumerInteractiveAuthenticatedMain.java |    5 +
 ...tdProducerConsumerInteractiveExtensionMain.java |    5 +
 components/camel-consul/pom.xml                    |    2 +-
 .../src/main/docs/consul-component.adoc            |   14 +-
 .../consul/endpoint/ConsulCatalogProducer.java     |    2 +-
 .../consul/endpoint/ConsulCoordinatesProducer.java |    2 +-
 .../consul/endpoint/ConsulEventProducer.java       |    2 +-
 .../consul/endpoint/ConsulHealthProducer.java      |    2 +-
 .../consul/endpoint/ConsulKeyValueProducer.java    |    2 +-
 .../endpoint/ConsulPreparedQueryProducer.java      |    2 +-
 .../consul/endpoint/ConsulSessionProducer.java     |    2 +-
 ...erviceRegistrationWithServiceComponentTest.java |    1 +
 .../src/main/docs/controlbus-component.adoc        |   18 +-
 .../camel-corda/src/main/docs/corda-component.adoc |   16 +-
 .../camel/component/corda/CordaComponent.java      |    1 +
 .../camel/component/corda/CordaProducer.java       |    3 +-
 .../src/main/docs/couchbase-component.adoc         |   14 +-
 .../component/couchbase/CouchbaseConsumer.java     |    1 +
 .../src/main/docs/couchdb-component.adoc           |   18 +-
 .../component/couchdb/CouchDbChangesetTracker.java |    1 +
 .../src/main/docs/crypto-cms-component.adoc        |   14 +-
 .../cms/common/CryptoCmsMarshallerAbstract.java    |    2 +-
 ...DefaultEnvelopedDataDecryptorConfiguration.java |    1 +
 .../cms/crypt/DefaultKeyTransRecipientInfo.java    |    1 +
 .../crypto/cms/crypt/EnvelopedDataDecryptor.java   |    2 +-
 .../DefaultSignedDataVerifierConfiguration.java    |    1 +
 .../crypto/cms/sig/DefaultSignerInfo.java          |    1 +
 .../crypto/cms/sig/SignedDataVerifier.java         |    2 +-
 .../camel/component/crypto/cms/ComponentTest.java  |    1 +
 .../camel/component/crypto/cms/ProcessorsTest.java |    1 +
 .../component/crypto/cms/SpringComponentTest.java  |    3 +-
 .../src/main/docs/crypto-component.adoc            |   30 +-
 .../src/main/docs/crypto-dataformat.adoc           |   20 +-
 .../camel-crypto/src/main/docs/pgp-dataformat.adoc |   26 +-
 .../crypto/DigitalSignatureComponent.java          |    1 +
 .../crypto/DigitalSignatureConfiguration.java      |    2 +
 .../component/crypto/DigitalSignatureEndpoint.java |    2 +
 .../component/crypto/DigitalSignatureProducer.java |    1 +
 .../crypto/processor/SigningProcessor.java         |    1 +
 .../crypto/processor/VerifyingProcessor.java       |    1 +
 .../camel/converter/crypto/CryptoDataFormat.java   |    5 +-
 .../converter/crypto/PGPKeyAccessDataFormat.java   |    4 +-
 .../camel/component/crypto/ECDSASignatureTest.java |    1 +
 .../camel/component/crypto/SignatureTest.java      |   59 +-
 .../component/crypto/SpringSignatureTest.java      |   11 +-
 .../converter/crypto/CryptoDataFormatTest.java     |    1 +
 .../converter/crypto/PGPDataFormatDynamicTest.java |    1 +
 .../converter/crypto/PGPDataFormatElGamalTest.java |    2 +
 .../camel/converter/crypto/PGPDataFormatTest.java  |    1 +
 .../crypto/PGPDataFormatWithProvider.java          |    1 +
 .../crypto/PGPKeyAccessDataFormatTest.java         |    1 +
 .../crypto/SpringCryptoDataFormatTest.java         |    1 +
 .../SpringPGPDataFormatNoPassPhraseTest.java       |    1 +
 .../converter/crypto/SpringPGPDataFormatTest.java  |    1 +
 .../camel-csv/src/main/docs/csv-dataformat.adoc    |   24 +-
 .../apache/camel/dataformat/csv/CsvDataFormat.java |    2 +
 .../camel/dataformat/csv/CsvUnmarshaller.java      |    1 +
 .../dataformat/csv/CsvMarshalCharsetTest.java      |    1 +
 ...MarshalHeaderWithCustomMarshallFactoryTest.java |    1 +
 .../camel/dataformat/csv/CsvRouteCharsetTest.java  |    1 +
 .../apache/camel/dataformat/csv/CsvRouteTest.java  |    1 +
 .../dataformat/csv/CsvUnmarshalStreamTest.java     |    1 +
 .../src/main/docs/cxf-transport.adoc               |   20 +-
 .../cxf/common/header/SoapMessageHeaderFilter.java |    2 +
 .../common/message/DefaultCxfMessageMapper.java    |    6 +-
 .../component/cxf/transport/CamelConduit.java      |    4 +
 .../component/cxf/transport/CamelDestination.java  |   10 +
 .../component/cxf/transport/CamelOutputStream.java |    3 +
 .../cxf/transport/CamelTransportFactory.java       |    6 +
 .../blueprint/CamelTransportNameSpaceHandler.java  |    3 +
 .../AbstractCamelContextBeanDefinitionParser.java  |    1 +
 .../cxf/transport/spring/NamespaceHandler.java     |    1 +
 .../component/cxf/transport/CamelConduitTest.java  |    2 +
 .../cxf/transport/CamelDestinationTest.java        |    2 +
 .../cxf/transport/CamelTransportTestSupport.java   |    2 +
 .../cxf/transport/JaxWSCamelConduitTest.java       |    1 +
 .../cxf/transport/JaxWSCamelDestinationTest.java   |    1 +
 components/camel-cxf/pom.xml                       |    2 +-
 .../camel-cxf/src/main/docs/cxf-component.adoc     |  105 +-
 .../camel-cxf/src/main/docs/cxfrs-component.adoc   |   28 +-
 .../camel/component/cxf/CxfBlueprintEndpoint.java  |    2 +
 .../camel/component/cxf/CxfClientCallback.java     |    2 +
 .../apache/camel/component/cxf/CxfConsumer.java    |    1 +
 .../apache/camel/component/cxf/CxfEndpoint.java    |    5 +
 .../org/apache/camel/component/cxf/CxfPayload.java |    1 +
 .../apache/camel/component/cxf/CxfProducer.java    |    2 +
 .../camel/component/cxf/CxfSpringEndpoint.java     |    5 +-
 .../camel/component/cxf/DefaultCxfBinding.java     |   18 +-
 .../component/cxf/DefaultPayloadProviderSEI.java   |    1 +
 .../component/cxf/WSDLServiceFactoryBean.java      |    3 +
 .../cxf/blueprint/CxfNamespaceHandler.java         |    4 +
 .../cxf/blueprint/RsClientBlueprintBean.java       |    4 +
 .../cxf/blueprint/RsServerBlueprintBean.java       |    4 +
 .../cxf/converter/DelegatingXMLStreamReader.java   |   34 +
 .../component/cxf/converter/NodeListWrapper.java   |    2 +
 .../ConfigureDocLitWrapperInterceptor.java         |    1 +
 .../CxfMessageSoapHeaderOutInterceptor.java        |    1 +
 .../OneWayOutgoingChainInterceptor.java            |    1 +
 .../RawMessageContentRedirectInterceptor.java      |    1 +
 .../interceptors/RawMessageWSDLGetInterceptor.java |    1 +
 .../RawMessageWSDLGetOutInterceptor.java           |    1 +
 .../interceptors/SetSoapVersionInterceptor.java    |    1 +
 .../camel/component/cxf/jaxrs/CxfRsEndpoint.java   |    4 +
 .../camel/component/cxf/jaxrs/CxfRsInvoker.java    |    1 +
 .../camel/component/cxf/jaxrs/CxfRsProducer.java   |    4 +
 .../component/cxf/jaxrs/CxfRsSpringEndpoint.java   |    2 +
 .../component/cxf/jaxrs/DefaultCxfRsBinding.java   |   11 +-
 .../component/cxf/jaxrs/SimpleCxfRsBinding.java    |    2 +-
 .../component/cxf/spring/NamespaceHandler.java     |    1 +
 .../component/cxf/spring/SpringBusFactoryBean.java |    5 +
 .../cxf/spring/SpringJAXRSClientFactoryBean.java   |    7 +-
 .../cxf/spring/SpringJAXRSServerFactoryBean.java   |    3 +
 .../component/cxf/util/DataInInterceptor.java      |    1 +
 .../component/cxf/util/DataOutInterceptor.java     |    1 +
 .../cxf/AbstractCXFGreeterRouterTest.java          |    2 +
 .../camel/component/cxf/CXFGreeterEnrichTest.java  |    1 +
 .../camel/component/cxf/CXFGreeterRouterTest.java  |    1 +
 .../CXFWsdlOnlyPayloadModeNoSpringSoap12Test.java  |    1 +
 .../camel/component/cxf/CXFWsdlOnlyTest.java       |    3 +
 ...fConsumerClientDisconnectedSynchronousTest.java |    1 +
 .../cxf/CxfConsumerClientDisconnectedTest.java     |    1 +
 .../cxf/CxfConsumerContinuationTimeoutTest.java    |    1 +
 .../component/cxf/CxfConsumerMessageTest.java      |    1 +
 .../cxf/CxfConsumerPayLoadConvertorTest.java       |    1 +
 .../CxfConsumerPayloadFaultCauseEnabledTest.java   |    1 +
 .../component/cxf/CxfConsumerPayloadTest.java      |    1 +
 .../component/cxf/CxfConsumerProviderTest.java     |    1 +
 .../component/cxf/CxfConsumerResponseTest.java     |    1 +
 .../component/cxf/CxfConsumerStreamCacheTest.java  |    1 +
 .../camel/component/cxf/CxfConsumerTest.java       |    1 +
 .../component/cxf/CxfConsumerWithTryCatchTest.java |    2 +
 .../cxf/CxfConusmerNamespacePayLoadTest.java       |    2 +
 .../component/cxf/CxfCustomizedExceptionTest.java  |    2 +
 .../cxf/CxfGreeterConverterRouterTest.java         |    1 +
 .../cxf/CxfMessageStreamExceptionTest.java         |    1 +
 .../component/cxf/CxfMixedModeRouterTest.java      |    1 +
 .../camel/component/cxf/CxfNonWrapperTest.java     |    2 +
 .../camel/component/cxf/CxfOneWayRouteTest.java    |    1 +
 .../component/cxf/CxfPayLoadBareSoapTest.java      |    1 +
 .../component/cxf/CxfPayLoadMessageRouterTest.java |    1 +
 .../cxf/CxfPayLoadMessageXmlBindingRouterTest.java |    3 +
 .../cxf/CxfPayLoadSoapHeaderSpringTest.java        |    4 +
 .../CxfPayLoadSoapHeaderViaCamelHeaderTest.java    |    1 +
 ...dConsumerDuplicateNamespaceStreamCacheTest.java |    1 +
 .../CxfPayloadConsumerNamespaceOnEnvelopeTest.java |    2 +
 .../CxfPayloadProducerNamespaceOnEnvelopeTest.java |    2 +
 .../cxf/CxfPayloadProviderRouterTest.java          |    1 +
 .../cxf/CxfPayloadRouterContentLengthTest.java     |    2 +
 .../component/cxf/CxfProducerOperationTest.java    |    4 +
 .../cxf/CxfProducerProtocalHeaderTest.java         |    1 +
 .../camel/component/cxf/CxfProducerRouterTest.java |    1 +
 .../component/cxf/CxfProducerSessionTest.java      |    1 +
 .../component/cxf/CxfProducerSoapActionTest.java   |    1 +
 .../cxf/CxfProducerSynchronousFalseTest.java       |    1 +
 .../component/cxf/CxfProducerSynchronousTest.java  |    1 +
 .../component/cxf/CxfRawMessageRouterTest.java     |    1 +
 .../camel/component/cxf/CxfSimpleRouterTest.java   |    2 +
 .../cxf/CxfSimpleRouterWithUnwrappedStyleTest.java |    5 +
 .../cxf/CxfSpringCustomizedExceptionTest.java      |    2 +
 .../camel/component/cxf/CxfSpringRouterTest.java   |    2 +
 .../component/cxf/CxfWsdlFirstPayloadModeTest.java |    2 +
 .../component/cxf/CxfWsdlFirstProcessorTest.java   |    1 +
 .../camel/component/cxf/CxfWsdlFirstTest.java      |    1 +
 .../component/cxf/EchoServiceSessionImpl.java      |    1 +
 .../camel/component/cxf/HelloServiceImpl.java      |    6 +
 .../cxf/JaxWsWebFaultAnnotationToFaultTest.java    |    1 +
 .../camel/component/cxf/ParameterProcessor.java    |    1 +
 .../camel/component/cxf/RouteBuilderCxfTracer.java |    4 +
 .../camel/component/cxf/ServiceProvider.java       |    1 +
 .../camel/component/cxf/SoapMessageProvider.java   |    1 +
 .../apache/camel/component/cxf/TestCxfFeature.java |    1 +
 .../cxf/WriteXmlDeclarationInterceptor.java        |    1 +
 .../converter/CxfPayLoadStreamCacheRouterTest.java |    1 +
 .../cxf/converter/PayLoadConvertToPOJOTest.java    |    2 +
 .../component/cxf/holder/CXFHolderRouteTest.java   |    1 +
 .../cxf/holder/CxfHolderConsumerTest.java          |    1 +
 .../camel/component/cxf/holder/MyProcessor.java    |    1 +
 .../cxf/jaxrs/CxfRsAsyncProducerTest.java          |    1 +
 .../CxfRsBindingConfigurationSelectionTest.java    |    1 +
 ...sConsumerClientDisconnectedSynchronousTest.java |    1 +
 .../jaxrs/CxfRsConsumerClientDisconnectedTest.java |    1 +
 .../component/cxf/jaxrs/CxfRsConsumerTest.java     |    4 +
 .../cxf/jaxrs/CxfRsConsumerWithBeanTest.java       |    1 +
 .../cxf/jaxrs/CxfRsConvertBodyToTest.java          |    1 +
 .../jaxrs/CxfRsProducerAddressOverrideTest.java    |    1 +
 .../jaxrs/CxfRsProducerEndpointConfigurerTest.java |    1 +
 .../cxf/jaxrs/CxfRsProducerHeaderTest.java         |    1 +
 .../component/cxf/jaxrs/CxfRsProducerTest.java     |    1 +
 .../cxf/jaxrs/CxfRsSpringConsumerTest.java         |    1 +
 .../component/cxf/jaxrs/CxfRsStreamCacheTest.java  |    1 +
 .../component/cxf/jaxrs/JettyCxfRsRouterTest.java  |    3 +-
 .../CxfRsConsumerSimpleBindingTest.java            |    3 +
 .../cxf/jms/CxfEndpointJMSConsumerTest.java        |    3 +
 .../cxf/mtom/CxfJavaMtomProducerPayloadTest.java   |    1 +
 .../cxf/mtom/CxfMtomConsumerPayloadModeTest.java   |    1 +
 .../component/cxf/mtom/CxfMtomConsumerTest.java    |    3 +-
 .../CxfMtomDisabledConsumerPayloadModeTest.java    |    1 +
 .../component/cxf/multipart/CXFMultiPartTest.java  |    3 +
 .../cxf/soap/headers/CustomHeaderFilter.java       |    4 +-
 .../soap/headers/CxfMessageHeadersRelayTest.java   |    2 +
 .../component/cxf/spring/CxfEndpointBeanTest.java  |    1 +
 .../cxf/spring/CxfEndpointBeanWithBusTest.java     |    1 +
 .../cxf/spring/CxfEndpointBeansRouterTest.java     |    1 +
 .../camel/component/cxf/spring/MyProcessor.java    |    1 +
 .../cxf/transport/CxfRsCamelTransportTest.java     |    1 +
 .../cxf/util/CxfEndpointUtilsWithSpringTest.java   |    4 +
 .../component/cxf/util/SplitterWithXqureyTest.java |    1 +
 .../camel/component/cxf/wsa/WSAddressingTest.java  |    1 +
 .../camel/component/cxf/wsrm/HelloWorldImpl.java   |    1 +
 .../component/cxf/wsrm/MessageLossSimulator.java   |    1 +
 .../camel/component/cxf/wsrm/MyProcessor.java      |    1 +
 .../cxf/wssecurity/client/UTPasswordCallback.java  |    1 +
 .../cxf/wssecurity/server/UTPasswordCallback.java  |    1 +
 .../apache/camel/non_wrapper/PersonProcessor.java  |    1 +
 .../apache/camel/wsdl_first/JaxwsTestHandler.java  |    7 +-
 .../apache/camel/wsdl_first/PersonProcessor.java   |    1 +
 .../src/main/docs/dataformat-component.adoc        |   14 +-
 .../src/main/docs/dataset-component.adoc           |   33 +-
 .../src/main/docs/dataset-test-component.adoc      |   17 +-
 .../camel/component/dataset/DataSetSupport.java    |    4 +
 .../camel/component/dataset/ListDataSet.java       |    1 +
 .../camel/component/dataset/SimpleDataSet.java     |    1 +
 .../src/main/docs/digitalocean-component.adoc      |   40 +-
 .../digitalocean/DigitalOceanComponent.java        |    1 +
 .../digitalocean/DigitalOceanEndpoint.java         |    2 +
 .../producer/DigitalOceanAccountProducer.java      |    1 +
 .../producer/DigitalOceanActionsProducer.java      |    1 +
 .../DigitalOceanBlockStoragesProducer.java         |    1 +
 .../producer/DigitalOceanDropletsProducer.java     |    1 +
 .../producer/DigitalOceanFloatingIPsProducer.java  |    1 +
 .../producer/DigitalOceanImagesProducer.java       |    1 +
 .../producer/DigitalOceanKeysProducer.java         |    1 +
 .../producer/DigitalOceanRegionsProducer.java      |    1 +
 .../producer/DigitalOceanSizesProducer.java        |    1 +
 .../producer/DigitalOceanSnapshotsProducer.java    |    1 +
 .../producer/DigitalOceanTagsProducer.java         |    1 +
 .../src/main/docs/direct-component.adoc            |   16 +-
 .../camel/component/direct/DirectComponent.java    |    1 +
 .../camel/component/direct/DirectConsumer.java     |    3 +
 .../camel/component/direct/DirectEndpoint.java     |    2 +
 .../camel/component/direct/DirectProducer.java     |    2 +
 .../src/main/docs/direct-vm-component.adoc         |   14 +-
 .../directvm/DirectVmBlockingProducer.java         |    2 +
 .../camel/component/directvm/DirectVmProducer.java |    2 +-
 .../src/main/docs/disruptor-component.adoc         |   26 +-
 .../component/disruptor/DisruptorProducer.java     |    4 +-
 .../MultipleConsumerSynchronizedExchange.java      |    1 +
 .../disruptor/SedaDisruptorCompareTest.java        |    1 +
 .../vm/DisruptorVmShouldNotUseSameThreadTest.java  |    1 +
 .../camel-dns/src/main/docs/dns-component.adoc     |   24 +-
 .../apache/camel/component/dns/DnsComponent.java   |    1 +
 .../component/dns/policy/DnsActivationPolicy.java  |    7 +
 .../camel/component/dns/DnsDigEndpointTest.java    |    1 +
 .../camel/component/dns/DnsIpEndpointTest.java     |    1 +
 .../component/dns/DnsIpHeaderTransferTest.java     |    1 +
 .../camel/component/dns/DnsLookupEndpointTest.java |    1 +
 .../camel/component/dns/WikipediaEndpointTest.java |    1 +
 .../src/main/docs/docker-component.adoc            |   18 +-
 .../docker/consumer/DockerEventsConsumer.java      |    1 +
 .../docker/consumer/DockerStatsConsumer.java       |    1 +
 .../component/docker/producer/DockerProducer.java  |    1 +
 .../camel-dozer/src/main/docs/dozer-component.adoc |   24 +-
 .../camel/component/dozer/DozerComponent.java      |    1 +
 .../camel/component/dozer/DozerProducer.java       |    2 +-
 .../converter/dozer/DozerTypeConverterLoader.java  |    2 +
 .../camel-drill/src/main/docs/drill-component.adoc |   16 +-
 .../camel/component/drill/DrillEndpoint.java       |    2 +
 .../src/main/docs/dropbox-component.adoc           |   54 +-
 .../camel/component/dropbox/DropboxComponent.java  |    1 +
 .../camel/component/dropbox/DropboxEndpoint.java   |    2 +
 .../component/dropbox/core/DropboxAPIFacade.java   |    2 +-
 .../src/main/docs/ehcache-component.adoc           |   22 +-
 .../camel/component/ehcache/EhcacheComponent.java  |   10 +-
 .../component/ehcache/EhcacheConfiguration.java    |   10 +-
 .../camel/component/ehcache/EhcacheProducer.java   |    2 +-
 .../EhcacheIdempotentRepositoryTest.java           |    1 +
 components/camel-ejb/pom.xml                       |  117 ---
 .../camel-ejb/src/main/docs/ejb-component.adoc     |  225 -----
 .../apache/camel/component/ejb/EjbComponent.java   |   88 --
 .../apache/camel/component/ejb/EjbEndpoint.java    |   32 -
 .../camel/component/ejb/EjbRegistryBean.java       |   45 -
 .../camel/component/ejb/GreaterCamelBeanTest.java  |   60 --
 .../ejb/GreaterCamelEjbPropertiesTest.java         |   68 --
 .../camel/component/ejb/GreaterCamelEjbTest.java   |   78 --
 .../apache/camel/component/ejb/GreaterImpl.java    |   34 -
 .../apache/camel/component/ejb/GreaterLocal.java   |   27 -
 .../apache/camel/component/ejb/GreaterTest.java    |   50 -
 .../component/ejb/SpringGreaterCamelEjbTest.java   |   46 -
 .../src/test/resources/META-INF/ejb-jar.xml        |   20 -
 .../camel-ejb/src/test/resources/log4j2.properties |   32 -
 .../component/ejb/SpringGreaterCamelEjbTest.xml    |   52 -
 .../main/docs/elasticsearch-rest-component.adoc    |   22 +-
 .../elasticsearch/ElasticsearchComponent.java      |    1 +
 .../elasticsearch/ElasticsearchEndpoint.java       |    2 +
 .../elasticsearch/ElasticsearchProducer.java       |    1 +
 .../ElasticsearchScrollRequestIterator.java        |    1 +
 .../camel-elsql/src/main/docs/elsql-component.adoc |   20 +-
 .../camel/component/elsql/ElsqlEndpoint.java       |    2 +
 .../elsql/ElsqlSqlPrepareStatementStrategy.java    |    3 +
 .../camel/component/elsql/ElSqlComponentTest.java  |    1 +
 .../component/elsql/ElSqlConsumerDeleteTest.java   |    2 +
 .../elsql/ElSqlConsumerDynamicParameterTest.java   |    1 +
 .../camel/component/elsql/ElSqlConsumerTest.java   |    1 +
 .../camel/component/elsql/ElSqlDataSourceTest.java |    1 +
 .../component/elsql/ElSqlProducerBatchTest.java    |    1 +
 .../elsql/ElSqlProducerBodySimpleTest.java         |    1 +
 .../elsql/ElSqlProducerStreamListTest.java         |    1 +
 components/camel-etcd/pom.xml                      |    2 +-
 .../camel-etcd/src/main/docs/etcd-component.adoc   |   12 +-
 .../camel/component/etcd/EtcdTestSupport.java      |    1 +
 .../src/main/docs/eventadmin-component.adoc        |   18 +-
 .../component/eventadmin/EventAdminConsumer.java   |    1 +
 .../component/eventadmin/EventAdminEndpoint.java   |    3 +
 .../component/eventadmin/EventAdminProducer.java   |    1 +
 .../camel-exec/src/main/docs/exec-component.adoc   |   30 +-
 .../apache/camel/component/exec/ExecEndpoint.java  |    2 +
 .../apache/camel/component/exec/ExecProducer.java  |    1 +
 .../component/exec/impl/DefaultExecBinding.java    |    2 +
 .../component/exec/ExecutableJavaProgram.java      |    2 +
 .../exec/impl/ExecCommandExecutorMock.java         |    1 +
 .../src/main/docs/facebook-component.adoc          |   24 +-
 .../component/facebook/FacebookComponent.java      |    1 +
 .../camel/component/facebook/FacebookEndpoint.java |    2 +
 .../src/main/docs/json-fastjson-dataformat.adoc    |    8 +-
 .../component/fastjson/FastjsonDataFormat.java     |    2 +-
 .../src/main/docs/fhir-component.adoc              |   10 +-
 .../src/main/docs/fhirJson-dataformat.adoc         |   10 +-
 .../src/main/docs/fhirXml-dataformat.adoc          |   10 +-
 .../apache/camel/component/fhir/FhirEndpoint.java  |    3 +
 .../fhir/FhirCustomClientConfigurationIT.java      |    1 -
 .../Hl7v2PatientToFhirPatientIntegrationTest.java  |    1 +
 .../fhir/dataformat/FhirJsonDataFormatTest.java    |    1 +
 .../FhirJsonDataformatErrorHandlerTest.java        |    1 +
 .../fhir/dataformat/FhirXmlDataFormatTest.java     |    1 +
 .../FhirXmlDataformatErrorHandlerTest.java         |    1 +
 .../src/main/docs/file-watch-component.adoc        |   22 +-
 .../component/file/watch/FileWatchComponent.java   |    1 +
 .../component/file/watch/FileWatchEndpoint.java    |    1 +
 .../camel-file/src/main/docs/file-component.adoc   |   84 +-
 .../component/file/AntPathMatcherFileFilter.java   |    1 +
 .../file/AntPathMatcherGenericFileFilter.java      |    1 +
 .../apache/camel/component/file/FileBinding.java   |    3 +
 .../apache/camel/component/file/FileComponent.java |    2 +
 .../apache/camel/component/file/FileEndpoint.java  |    3 +
 .../camel/component/file/FileOperations.java       |   12 +
 .../apache/camel/component/file/GenericFile.java   |    1 +
 .../camel/component/file/GenericFileComponent.java |    1 +
 .../component/file/GenericFileConfiguration.java   |    1 +
 .../camel/component/file/GenericFileConsumer.java  |    2 +
 .../component/file/GenericFileDefaultBinding.java  |    3 +
 .../camel/component/file/GenericFileEndpoint.java  |    2 +
 .../component/file/GenericFileOnCompletion.java    |    2 +
 .../camel/component/file/GenericFileProducer.java  |    1 +
 ...dempotentChangedRepositoryReadLockStrategy.java |    7 +
 ...IdempotentRenameRepositoryReadLockStrategy.java |    7 +
 .../FileIdempotentRepositoryReadLockStrategy.java  |    7 +
 .../strategy/GenericFileExpressionRenamer.java     |    1 +
 .../GenericFileProcessStrategySupport.java         |    5 +
 .../src/main/docs/flatpack-component.adoc          |   32 +-
 .../src/main/docs/flatpack-dataformat.adoc         |   10 +-
 .../camel/component/flatpack/DataSetList.java      |    2 +
 .../component/flatpack/FlatpackComponent.java      |    1 +
 .../camel/component/flatpack/FlatpackEndpoint.java |    2 +
 .../camel/component/flatpack/FlatpackProducer.java |    1 +
 .../dataformat/flatpack/FlatpackDataFormat.java    |    2 +
 .../camel-flink/src/main/docs/flink-component.adoc |   20 +-
 .../camel/component/flink/FlinkProducerTest.java   |   34 +-
 .../camel-fop/src/main/docs/fop-component.adoc     |   20 +-
 .../apache/camel/component/fop/FopComponent.java   |    1 +
 .../apache/camel/component/fop/FopEndpoint.java    |    2 +
 .../apache/camel/component/fop/FopProducer.java    |    1 +
 .../src/main/docs/freemarker-component.adoc        |   26 +-
 .../component/freemarker/FreemarkerComponent.java  |    1 +
 .../FreemarkerBodyAsDomainObjectTest.java          |    2 +
 .../freemarker/FreemarkerConcurrentTest.java       |    1 +
 .../freemarker/FreemarkerContentCacheTest.java     |    2 +
 .../freemarker/FreemarkerEncodingTest.java         |    1 +
 .../freemarker/FreemarkerEndpointTest.java         |    1 +
 .../freemarker/FreemarkerFileLetterTest.java       |    1 +
 .../component/freemarker/FreemarkerLetterTest.java |    1 +
 .../FreemarkerLetterWithoutHeaderTest.java         |    1 +
 .../freemarker/FreemarkerTemplateInHeaderTest.java |    1 +
 .../camel/component/freemarker/FreemarkerTest.java |    1 +
 .../FreemarkerValuesInPropertiesTest.java          |    1 +
 .../camel-ftp/src/main/docs/ftp-component.adoc     |   60 +-
 .../camel-ftp/src/main/docs/ftps-component.adoc    |   10 +-
 .../camel-ftp/src/main/docs/sftp-component.adoc    |    8 +-
 .../camel/component/file/remote/FtpComponent.java  |    1 +
 .../camel/component/file/remote/FtpConsumer.java   |    1 +
 .../camel/component/file/remote/FtpEndpoint.java   |    2 +
 .../camel/component/file/remote/FtpOperations.java |   17 +
 .../camel/component/file/remote/FtpsEndpoint.java  |    1 +
 .../component/file/remote/RemoteFileConsumer.java  |    1 +
 .../component/file/remote/RemoteFileProducer.java  |    2 +
 .../camel/component/file/remote/SftpComponent.java |    1 +
 .../camel/component/file/remote/SftpConsumer.java  |    1 +
 .../camel/component/file/remote/SftpEndpoint.java  |    2 +
 .../component/file/remote/SftpOperations.java      |   21 +
 .../FtpChangedExclusiveReadLockStrategy.java       |    1 +
 .../SftpChangedExclusiveReadLockStrategy.java      |    1 +
 ...LWithClientAuthAndSSLContextParametersTest.java |   11 +-
 .../FileToFtpsExplicitSSLWithClientAuthTest.java   |    1 +
 ...lientAuthAndGlobalSSLContextParametersTest.java |    1 +
 ...thoutClientAuthAndSSLContextParametersTest.java |   11 +-
 ...FileToFtpsExplicitSSLWithoutClientAuthTest.java |    1 +
 ...SWithClientAuthAndSSLContextParametersTest.java |   24 +-
 .../FileToFtpsExplicitTLSWithClientAuthTest.java   |    1 +
 ...thoutClientAuthAndSSLContextParametersTest.java |   11 +-
 ...FileToFtpsExplicitTLSWithoutClientAuthTest.java |    1 +
 ...LWithClientAuthAndSSLContextParametersTest.java |   11 +-
 .../FileToFtpsImplicitSSLWithClientAuthTest.java   |    1 +
 ...thoutClientAuthAndSSLContextParametersTest.java |   11 +-
 ...FileToFtpsImplicitSSLWithoutClientAuthTest.java |    1 +
 ...SWithClientAuthAndSSLContextParametersTest.java |   11 +-
 .../FileToFtpsImplicitTLSWithClientAuthTest.java   |    1 +
 ...thoutClientAuthAndSSLContextParametersTest.java |   11 +-
 ...FileToFtpsImplicitTLSWithoutClientAuthTest.java |    1 +
 ...psWithCustomKeyAndTrustStorePropertiesTest.java |    1 +
 ...leToFtpsWithCustomTrustStorePropertiesTest.java |    1 +
 .../FileToFtpsWithDefaultSettingsIPV6Test.java     |    1 +
 .../remote/FileToFtpsWithDefaultSettingsTest.java  |    1 +
 .../FileToFtpsWithFtpClientConfigRefTest.java      |   27 +-
 .../remote/FromFilePercentSignInPasswordTest.java  |    1 +
 ...lePercentSignInPasswordUserInfoEncodedTest.java |    1 +
 .../FromFilePercentSignInPasswordUserInfoTest.java |    1 +
 ...FromFileToFtpDefaultRootRenameStrategyTest.java |    2 +
 .../file/remote/FromFileToFtpDeleteTest.java       |    1 +
 .../file/remote/FromFileToFtpNotStepwiseTest.java  |    1 +
 .../component/file/remote/FromFileToFtpTest.java   |    1 +
 .../file/remote/FromFileToFtpWithChmodTest.java    |    1 +
 .../remote/FromFileTransferLoggingLevelTest.java   |    1 +
 .../FromFileTransferLoggingLevelVerboseTest.java   |    1 +
 .../file/remote/FromFtpActivePortRangeTest.java    |    1 +
 .../file/remote/FromFtpAsyncProcessTest.java       |    1 +
 .../file/remote/FromFtpClientConfigRefTest.java    |   11 +-
 .../file/remote/FromFtpClientDataTimeoutTest.java  |    1 +
 .../file/remote/FromFtpClientSoTimeout2Test.java   |    1 +
 .../file/remote/FromFtpClientSoTimeoutTest.java    |    1 +
 .../remote/FromFtpDeleteFileNotStepwiseTest.java   |    1 +
 .../file/remote/FromFtpDeleteFileTest.java         |    1 +
 .../remote/FromFtpDirectoryToBinaryFilesTest.java  |    1 +
 .../FromFtpDoNotDeleteFileIfProcessFailsTest.java  |    1 +
 .../FromFtpExclusiveReadNoneStrategyTest.java      |    1 +
 .../file/remote/FromFtpFilterNotStepwiseTest.java  |    1 +
 .../component/file/remote/FromFtpFilterTest.java   |   18 +-
 .../FromFtpKeepLastModifiedNotStepwiseTest.java    |    1 +
 ...FileAbsoluteFolderRecursiveNotStepwiseTest.java |    1 +
 ...FromFtpMoveFileAbsoluteFolderRecursiveTest.java |    1 +
 .../remote/FromFtpMoveFileNotStepwiseTest.java     |    1 +
 .../FromFtpMoveFilePostfixNotStepwiseTest.java     |    1 +
 .../file/remote/FromFtpMoveFilePostfixTest.java    |    1 +
 .../FromFtpMoveFilePrefixNotStepwiseTest.java      |    1 +
 .../file/remote/FromFtpMoveFilePrefixTest.java     |    1 +
 .../FromFtpMoveFileRecursiveNotStepwiseTest.java   |    1 +
 .../file/remote/FromFtpMoveFileRecursiveTest.java  |    1 +
 .../component/file/remote/FromFtpMoveFileTest.java |    1 +
 ...FileToHiddenFolderRecursiveNotStepwiseTest.java |    1 +
 ...FromFtpMoveFileToHiddenFolderRecursiveTest.java |    1 +
 ...tPathRelativeMoveToAbsoluteNotStepwiseTest.java |    1 +
 ...tpNoEndpointPathRelativeMoveToAbsoluteTest.java |    1 +
 .../component/file/remote/FromFtpNoFilesTest.java  |    1 +
 .../remote/FromFtpNoopIdempotentFalseTest.java     |    1 +
 .../component/file/remote/FromFtpNoopTest.java     |    1 +
 .../file/remote/FromFtpNotDownloadTest.java        |    1 +
 .../file/remote/FromFtpPassiveModeTest.java        |    1 +
 .../file/remote/FromFtpPollFileOnlyTest.java       |    1 +
 .../FromFtpPreMoveDeleteNotStepwiseTest.java       |    1 +
 .../file/remote/FromFtpPreMoveDeleteTest.java      |    1 +
 .../remote/FromFtpPreMoveFileExpressionTest.java   |    1 +
 .../FromFtpPreMoveFilePostfixNotStepwiseTest.java  |    1 +
 .../file/remote/FromFtpPreMoveFilePostfixTest.java |    1 +
 .../FromFtpPreMoveFilePrefixNotStepwiseTest.java   |    1 +
 .../file/remote/FromFtpPreMoveFilePrefixTest.java  |    1 +
 .../remote/FromFtpPreMoveNoopNotStepwiseTest.java  |    1 +
 .../file/remote/FromFtpPreMoveNoopTest.java        |    1 +
 .../FromFtpRecursiveNoopNotStepwiseTest.java       |    1 +
 .../file/remote/FromFtpRegexPatternTest.java       |    1 +
 .../FromFtpRemoteFileFilterDirectoryTest.java      |   31 +-
 .../file/remote/FromFtpRemoteFileFilterTest.java   |   30 +-
 .../file/remote/FromFtpRemoteFileSorterTest.java   |   23 +-
 .../file/remote/FromFtpSedaDeleteFileTest.java     |    1 +
 .../FromFtpServerLanguageCodeAndTimeoutTest.java   |    1 +
 .../file/remote/FromFtpServerLanguageCodeTest.java |    1 +
 .../FromFtpSetNamesWithMultiDirectoriesTest.java   |    1 +
 ...tPathRelativeMoveToAbsoluteNotStepwiseTest.java |    1 +
 ...leNoEndpointPathRelativeMoveToAbsoluteTest.java |    1 +
 ...tPathRelativeMoveToRelativeNotStepwiseTest.java |    1 +
 ...leNoEndpointPathRelativeMoveToRelativeTest.java |    1 +
 ...impleRelativeMoveToAbsoluteNotStepwiseTest.java |    1 +
 .../FromFtpSimpleRelativeMoveToAbsoluteTest.java   |    1 +
 ...impleRelativeMoveToRelativeNotStepwiseTest.java |    1 +
 .../FromFtpSimpleRelativeMoveToRelativeTest.java   |    1 +
 .../FromFtpSimulateNetworkIssueRecoverTest.java    |   17 +-
 .../FromFtpStartingDirAndFileNameClashTest.java    |    1 +
 .../file/remote/FromFtpThirdPoolOkTest.java        |    1 +
 .../FromFtpToAsciiFileNoBodyConversionTest.java    |    1 +
 .../file/remote/FromFtpToAsciiFileTest.java        |    1 +
 .../file/remote/FromFtpToBinaryFileTest.java       |    1 +
 .../file/remote/FromFtpToBinaryFilesTest.java      |    1 +
 .../file/remote/FromFtpToBinarySampleTest.java     |    1 +
 .../remote/FromFtpToFileNoFileNameHeaderTest.java  |    1 +
 .../component/file/remote/FromFtpToMockTest.java   |    1 +
 .../file/remote/FromFtpTwoSlashesIssueTest.java    |    1 +
 .../file/remote/FromFtpUseListFalseTest.java       |    1 +
 .../remote/FromQueueThenConsumeFtpToMockTest.java  |    1 +
 .../component/file/remote/FtpAnonymousTest.java    |    1 +
 .../file/remote/FtpBadLoginConnectionLeakTest.java |   14 +-
 .../FtpBadLoginInProducerConnectionLeakTest.java   |   14 +-
 .../FtpBadLoginMockNoopConnectionLeakTest.java     |   14 +-
 .../FtpChangedReadLockFastExistCheckTest.java      |    1 +
 .../remote/FtpChangedReadLockLoggingLevelTest.java |    1 +
 .../file/remote/FtpChangedReadLockTimeoutTest.java |    1 +
 ...tpChangedRootDirReadLockFastExistCheckTest.java |    1 +
 .../file/remote/FtpConnectTimeoutTest.java         |    1 +
 .../file/remote/FtpConsumerAbsolutePathTest.java   |    1 +
 .../file/remote/FtpConsumerBodyAsStringTest.java   |    1 +
 .../FtpConsumerDirectoriesNotMatchedTest.java      |    1 +
 .../FtpConsumerDoneFileNameFixedStepwiseTest.java  |    1 +
 .../FtpConsumerDoneFileNameStepwiseTest.java       |    1 +
 .../file/remote/FtpConsumerExcludeNameTest.java    |    1 +
 .../file/remote/FtpConsumerFileSplitTest.java      |    1 +
 .../remote/FtpConsumerIPV6BodyAsStringTest.java    |    1 +
 .../remote/FtpConsumerIdempotentMemoryRefTest.java |   10 +-
 .../file/remote/FtpConsumerIdempotentRefTest.java  |   19 +-
 .../file/remote/FtpConsumerIncludeNameTest.java    |    1 +
 ...nsumerLocalWorkDirectoryAsAbsolutePathTest.java |    1 +
 .../FtpConsumerLocalWorkDirectoryDirectTest.java   |    1 +
 .../remote/FtpConsumerLocalWorkDirectoryTest.java  |    1 +
 ...onsumerLocalWorkDirectoryWorkOnPayloadTest.java |    1 +
 .../remote/FtpConsumerMaxMessagesPerPollTest.java  |    1 +
 .../file/remote/FtpConsumerMoveExpressionTest.java |   17 +-
 .../remote/FtpConsumerMultipleDirectoriesTest.java |    1 +
 .../FtpConsumerNotEagerMaxMessagesPerPollTest.java |    1 +
 .../remote/FtpConsumerProcessStrategyTest.java     |   21 +-
 .../file/remote/FtpConsumerResumeDownloadTest.java |    1 +
 .../file/remote/FtpConsumerSkipDotFilesTest.java   |    1 +
 ...FtpConsumerThrowExceptionOnLoginFailedTest.java |   15 +-
 .../FtpConsumerUsingFTPClientConfigTest.java       |   13 +-
 .../file/remote/FtpConsumerWithCharsetTest.java    |    1 +
 .../remote/FtpConsumerWithNoFileOptionTest.java    |    1 +
 .../FtpNoReconnectAttemptUnknownHostTest.java      |    1 +
 .../remote/FtpProducerConnectErrorsHeaderTest.java |    1 +
 .../file/remote/FtpProducerExpressionTest.java     |   25 +-
 ...rrideNotEagerDeleteTargetFileTwoUploadTest.java |    1 +
 .../remote/FtpProducerFileFastExistFailTest.java   |    1 +
 .../remote/FtpProducerMultipleSiteCommandTest.java |   12 +-
 .../FtpReconnectAttemptServerStoppedTest.java      |    1 +
 .../remote/FtpReconnectAttemptUnknownHostTest.java |    1 +
 .../component/file/remote/FtpSoTimeoutTest.java    |   10 +-
 ...ServerExplicitSSLWithClientAuthTestSupport.java |    3 +
 ...verExplicitSSLWithoutClientAuthTestSupport.java |    3 +
 ...ServerExplicitTLSWithClientAuthTestSupport.java |    3 +
 ...verExplicitTLSWithoutClientAuthTestSupport.java |    3 +
 ...ServerImplicitSSLWithClientAuthTestSupport.java |    3 +
 ...verImplicitSSLWithoutClientAuthTestSupport.java |    3 +
 ...ServerImplicitTLSWithClientAuthTestSupport.java |    3 +
 ...verImplicitTLSWithoutClientAuthTestSupport.java |    3 +
 .../remote/ToFtpTempFileTargetFileExistTest.java   |    1 +
 .../sftp/SftpConsumerProcessStrategyTest.java      |   19 +-
 .../remote/sftp/SftpFromSedaDeleteFileTest.java    |    1 +
 .../file/remote/sftp/SftpKeyConsumeTest.java       |   16 +-
 .../sftp/SftpSimpleConsumeThroughProxyTest.java    |   11 +-
 .../sftp/SftpSimpleProduceThroughProxyTest.java    |   11 +-
 .../src/main/docs/ganglia-component.adoc           |   22 +-
 .../camel/component/ganglia/GangliaEndpoint.java   |    2 +
 .../camel/component/ganglia/GangliaProducer.java   |    1 +
 .../src/main/docs/geocoder-component.adoc          |   18 +-
 .../component/geocoder/GeoCoderComponent.java      |    1 +
 .../camel/component/geocoder/GeoCoderEndpoint.java |    2 +
 .../camel/component/geocoder/GeoCoderProducer.java |    1 +
 .../camel-git/src/main/docs/git-component.adoc     |   16 +-
 .../apache/camel/component/git/GitComponent.java   |    1 +
 .../git/consumer/AbstractGitConsumer.java          |    1 +
 .../src/main/docs/github-component.adoc            |   16 +-
 .../camel/component/github/GitHubComponent.java    |    1 +
 .../camel/component/github/GitHubEndpoint.java     |    2 +
 .../github/consumer/AbstractGitHubConsumer.java    |    1 +
 .../github/producer/AbstractGitHubProducer.java    |    1 +
 .../github/producer/ClosePullRequestProducer.java  |    1 +
 .../github/producer/CreateIssueProducer.java       |    1 +
 .../github/producer/GetCommitFileProducer.java     |    1 +
 .../producer/PullRequestCommentProducer.java       |    1 +
 .../github/producer/PullRequestFilesProducer.java  |    1 +
 .../github/producer/PullRequestStateProducer.java  |    1 +
 .../github/services/MockPullRequestService.java    |    1 +
 .../src/main/docs/google-bigquery-component.adoc   |   24 +-
 .../main/docs/google-bigquery-sql-component.adoc   |   18 +-
 .../google/bigquery/GoogleBigQueryEndpoint.java    |    1 +
 .../bigquery/sql/GoogleBigQuerySQLEndpoint.java    |    1 +
 .../bigquery/integration/BigQueryTestSupport.java  |   11 +-
 .../src/main/docs/google-calendar-component.adoc   |   20 +-
 .../docs/google-calendar-stream-component.adoc     |   14 +-
 .../src/main/docs/google-drive-component.adoc      |   20 +-
 .../google/drive/GoogleDriveEndpoint.java          |    3 +
 .../google/drive/CustomClientFactoryTest.java      |   12 +-
 .../drive/GoogleDriveFilesConverterTest.java       |    1 +
 .../src/main/docs/google-mail-component.adoc       |   20 +-
 .../main/docs/google-mail-stream-component.adoc    |   14 +-
 .../src/main/docs/google-pubsub-component.adoc     |   24 +-
 .../google/pubsub/GooglePubsubEndpoint.java        |    3 +
 .../component/google/pubsub/PubsubTestSupport.java |   11 +-
 .../src/main/docs/google-sheets-component.adoc     |   20 +-
 .../main/docs/google-sheets-stream-component.adoc  |   14 +-
 .../camel-gora/src/main/docs/gora-component.adoc   |   24 +-
 .../apache/camel/component/gora/GoraEndpoint.java  |    1 +
 .../camel/component/gora/GoraProducerTest.java     |    1 +
 .../camel-grape/src/main/docs/grape-component.adoc |   28 +-
 .../camel-grok/src/main/docs/grok-dataformat.adoc  |   16 +-
 .../src/main/docs/groovy-language.adoc             |   22 +-
 .../camel/language/groovy/GroovyExpression.java    |    2 +
 .../camel/language/groovy/GroovyLanguage.java      |    2 +
 .../camel/language/groovy/GroovyLanguageTest.java  |    1 +
 .../camel/language/groovy/GroovyListMapTest.java   |    1 +
 .../camel-grpc/src/main/docs/grpc-component.adoc   |   26 +-
 .../apache/camel/component/grpc/GrpcComponent.java |    1 +
 .../apache/camel/component/grpc/GrpcEndpoint.java  |    2 +
 .../component/grpc/GrpcConsumerConcurrentTest.java |    1 +
 .../src/main/docs/json-gson-dataformat.adoc        |    8 +-
 .../camel/component/gson/GsonConcurrentTest.java   |    1 +
 .../src/main/docs/guava-eventbus-component.adoc    |   18 +-
 .../guava/eventbus/GuavaEventBusComponentTest.java |   11 +-
 .../guava/eventbus/GuavaEventBusConsumerTest.java  |   20 +-
 .../GuavaEventBusConsumingDeadEventsTest.java      |   17 +-
 .../guava/eventbus/GuavaEventBusProducerTest.java  |   11 +-
 .../main/docs/hazelcast-atomicvalue-component.adoc |   22 +-
 .../main/docs/hazelcast-instance-component.adoc    |   12 +-
 .../src/main/docs/hazelcast-list-component.adoc    |   22 +-
 .../src/main/docs/hazelcast-map-component.adoc     |   24 +-
 .../main/docs/hazelcast-multimap-component.adoc    |   22 +-
 .../src/main/docs/hazelcast-queue-component.adoc   |   38 +-
 .../docs/hazelcast-replicatedmap-component.adoc    |   20 +-
 .../main/docs/hazelcast-ringbuffer-component.adoc  |   16 +-
 .../src/main/docs/hazelcast-seda-component.adoc    |   14 +-
 .../src/main/docs/hazelcast-set-component.adoc     |   10 +-
 .../src/main/docs/hazelcast-topic-component.adoc   |   16 +-
 .../camel-hazelcast/src/main/docs/hazelcast.adoc   |   16 +-
 .../hazelcast/HazelcastDefaultEndpoint.java        |    2 +
 .../component/hazelcast/HazelcastOperation.java    |    1 +
 .../HazelcastAtomicnumberEndpoint.java             |    2 +
 .../HazelcastAtomicnumberProducer.java             |    1 +
 .../instance/HazelcastInstanceConsumer.java        |    3 +
 .../instance/HazelcastInstanceEndpoint.java        |    2 +
 .../hazelcast/list/HazelcastListProducer.java      |    1 +
 .../hazelcast/listener/CamelEntryListener.java     |    6 +
 .../hazelcast/listener/CamelItemListener.java      |    2 +
 .../hazelcast/listener/CamelMessageListener.java   |    1 +
 .../hazelcast/map/HazelcastMapEndpoint.java        |    2 +
 .../hazelcast/map/HazelcastMapProducer.java        |    1 +
 .../multimap/HazelcastMultimapEndpoint.java        |    2 +
 .../multimap/HazelcastMultimapProducer.java        |    1 +
 .../queue/HazelcastQueueConsumerMode.java          |    1 +
 .../hazelcast/queue/HazelcastQueueProducer.java    |    1 +
 .../HazelcastReplicatedmapEndpoint.java            |    2 +
 .../HazelcastReplicatedmapProducer.java            |    1 +
 .../ringbuffer/HazelcastRingbufferEndpoint.java    |    2 +
 .../ringbuffer/HazelcastRingbufferProducer.java    |    1 +
 .../hazelcast/seda/HazelcastSedaConsumer.java      |    1 +
 .../hazelcast/seda/HazelcastSedaEndpoint.java      |    2 +
 .../hazelcast/seda/HazelcastSedaProducer.java      |    1 +
 .../hazelcast/set/HazelcastSetProducer.java        |    1 +
 .../hazelcast/topic/HazelcastTopicProducer.java    |    1 +
 .../HazelcastSedaConcurrentConsumersTest.java      |    1 -
 ...tSedaRecoverableConsumerNewTransactionTest.java |    2 +
 ...zelcastSedaRecoverableConsumerRollbackTest.java |    2 +
 .../HazelcastIdempotentRepositoryTest.java         |    3 +
 .../camel-hbase/src/main/docs/hbase-component.adoc |   38 +-
 .../camel/component/hbase/HBaseComponent.java      |    1 +
 .../camel/component/hbase/HBaseEndpoint.java       |    2 +
 .../camel/component/hbase/HBaseProducer.java       |    1 +
 .../filters/ModelAwareColumnMatchingFilter.java    |    1 +
 .../hbase/mapping/BodyMappingStrategy.java         |    2 +
 .../hbase/mapping/HeaderMappingStrategy.java       |    2 +
 .../camel/component/hbase/model/HBaseCell.java     |    1 +
 .../component/hbase/CamelHBaseFilterTest.java      |   13 +-
 .../component/hbase/CamelHBaseTestSupport.java     |    2 +
 .../idempotent/HBaseIdempotentRepositoryTest.java  |    2 +
 components/camel-hdfs/pom.xml                      |  186 ++++
 .../camel-hdfs/src/main/docs/hdfs-component.adoc   |  323 +++++++
 .../camel/component/hdfs2/HdfsComponent.java       |   83 ++
 .../component/hdfs2/HdfsCompressionCodec.java      |    0
 .../camel/component/hdfs2/HdfsConfiguration.java   |  514 ++++++++++
 .../camel/component/hdfs2/HdfsConstants.java       |    0
 .../apache/camel/component/hdfs2/HdfsConsumer.java |  197 ++++
 .../apache/camel/component/hdfs2/HdfsEndpoint.java |   62 ++
 .../camel/component/hdfs2/HdfsFileSystemType.java  |    0
 .../apache/camel/component/hdfs2/HdfsFileType.java |    0
 .../apache/camel/component/hdfs2/HdfsHeader.java   |    0
 .../org/apache/camel/component/hdfs2/HdfsInfo.java |    0
 .../camel/component/hdfs2/HdfsInfoFactory.java     |    0
 .../camel/component/hdfs2/HdfsInputStream.java     |    0
 .../camel/component/hdfs2/HdfsOsgiHelper.java      |   58 ++
 .../camel/component/hdfs2/HdfsOutputStream.java    |    0
 .../apache/camel/component/hdfs2/HdfsProducer.java |    0
 .../component/hdfs2/HdfsWritableFactories.java     |    0
 .../org/apache/camel/component/hdfs2/Holder.java   |    0
 .../apache/camel/component/hdfs2/WritableType.java |    0
 .../camel/component/hdfs2/osgi/HdfsActivator.java  |    0
 .../camel/component/hdfs2/FromFileToHdfsTest.java  |  113 +++
 .../camel/component/hdfs2/HdfsConsumerTest.java    |  581 +++++++++++
 .../component/hdfs2/HdfsProducerConsumerTest.java  |   95 ++
 .../component/hdfs2/HdfsProducerSplitTest.java     |  136 +++
 .../camel/component/hdfs2/HdfsProducerTest.java    |  425 ++++++++
 .../camel/component/hdfs2/HdfsTestSupport.java     |    0
 .../hdfs2/integration/HdfsAppendTest.java          |  130 +++
 .../HdfsProducerConsumerIntegrationTest.java       |  139 +++
 .../src/test/resources/hdfs-default.xml            |    0
 .../src/test/resources/hdfs-test.xml               |    0
 .../src/test/resources/log4j2.properties           |   28 +
 components/camel-hdfs2/pom.xml                     |  186 ----
 .../camel-hdfs2/src/main/docs/hdfs2-component.adoc |  323 -------
 .../camel/component/hdfs2/HdfsComponent.java       |   82 --
 .../camel/component/hdfs2/HdfsConfiguration.java   |  514 ----------
 .../apache/camel/component/hdfs2/HdfsConsumer.java |  196 ----
 .../apache/camel/component/hdfs2/HdfsEndpoint.java |   62 --
 .../camel/component/hdfs2/HdfsOsgiHelper.java      |   58 --
 .../camel/component/hdfs2/FromFileToHdfsTest.java  |  112 ---
 .../camel/component/hdfs2/HdfsConsumerTest.java    |  580 -----------
 .../component/hdfs2/HdfsProducerConsumerTest.java  |   94 --
 .../component/hdfs2/HdfsProducerSplitTest.java     |  135 ---
 .../camel/component/hdfs2/HdfsProducerTest.java    |  424 --------
 .../hdfs2/integration/HdfsAppendTest.java          |  130 ---
 .../HdfsProducerConsumerIntegrationTest.java       |  139 ---
 .../src/test/resources/log4j2.properties           |   28 -
 .../src/main/docs/hipchat-component.adoc           |   26 +-
 .../camel/component/hipchat/HipchatComponent.java  |    1 +
 .../camel/component/hipchat/HipchatEndpoint.java   |    2 +
 .../camel/component/hipchat/HipchatProducer.java   |    1 +
 .../HipchatComponentCustomHttpClientTest.java      |   12 +-
 .../hipchat/HipchatEPSuccessTestSupport.java       |    1 +
 .../HipchatConsumerIntegrationTest.java            |    1 +
 .../HipchatProducerIntegrationTest.java            |    1 +
 .../camel-hl7/src/main/docs/hl7-dataformat.adoc    |   26 +-
 .../src/main/docs/hl7terser-language.adoc          |   10 +-
 .../apache/camel/component/hl7/HL7DataFormat.java  |    2 +
 .../apache/camel/component/hl7/HL7MLLPCodec.java   |    2 +
 .../apache/camel/component/hl7/HL7MLLPEncoder.java |    1 +
 .../camel/component/hl7/HL7ByteArrayRouteTest.java |   53 +-
 .../camel/component/hl7/HL7DataFormatTest.java     |    1 +
 .../component/hl7/HL7MLLPCodecBoundaryTest.java    |   14 +-
 .../camel/component/hl7/HL7MLLPCodecLongTest.java  |   17 +-
 .../hl7/HL7MLLPCodecMessageFloodingTest.java       |   39 +-
 .../component/hl7/HL7MLLPCodecPlainStringTest.java |   35 +-
 .../hl7/HL7MLLPCodecStandAndEndBytesTest.java      |   41 +-
 .../camel/component/hl7/HL7MLLPCodecTest.java      |   42 +-
 .../hl7/HL7MLLPNettyCodecBoundaryTest.java         |   25 +-
 .../hl7/HL7MLLPNettyCodecByteArrayRouteTest.java   |   58 +-
 .../component/hl7/HL7MLLPNettyCodecLongTest.java   |   22 +-
 .../hl7/HL7MLLPNettyCodecStandAndEndBytesTest.java |   44 +-
 .../camel/component/hl7/HL7MLLPNettyCodecTest.java |   50 +-
 .../hl7/HL7MLLPNettyDecoderResourceLeakTest.java   |   38 +-
 .../component/hl7/HL7MLLPNettyRouteToTest.java     |   60 +-
 .../camel/component/hl7/HL7NettyRouteTest.java     |   56 +-
 .../apache/camel/component/hl7/HL7RouteTest.java   |   47 +-
 .../camel/component/hl7/HL7ValidateTest.java       |    1 +
 .../camel/component/hl7/HL7XmlDataFormatTest.java  |    1 +
 .../camel/http/common/CamelFileDataSource.java     |    3 +
 .../org/apache/camel/http/common/CamelServlet.java |    1 +
 .../camel/http/common/DefaultHttpBinding.java      |   26 +-
 .../camel/http/common/HttpCommonEndpoint.java      |    7 +-
 .../org/apache/camel/http/common/HttpConsumer.java |    1 +
 .../camel/http/common/HttpSendDynamicAware.java    |    2 +-
 .../UrlRewriteHttpServletRequestAdapter.java       |    1 +
 .../http/common/HttpHeaderFilterStrategyTest.java  |    1 +
 .../http/common/HttpSendDynamicAwareTest.java      |   16 -
 .../http/common/cookie/CookieHandlerTest.java      |    1 +
 components/camel-http/pom.xml                      |  123 +++
 .../camel-http/src/main/docs/http-component.adoc   |  725 ++++++++++++++
 .../BasicAuthenticationHttpClientConfigurer.java   |   52 +
 .../component/http4/CompositeHttpConfigurer.java   |   57 ++
 .../component/http4/HttpClientConfigurer.java      |    0
 .../camel/component/http4/HttpComponent.java       |  668 +++++++++++++
 .../http4/HttpComponentVerifierExtension.java      |  248 +++++
 .../camel/component/http4/HttpConstants.java       |    0
 .../component/http4/HttpDeleteWithBodyMethod.java  |   37 +
 .../apache/camel/component/http4/HttpEndpoint.java |  542 +++++++++++
 .../camel/component/http4/HttpEntityConverter.java |    0
 .../apache/camel/component/http4/HttpMethods.java  |   69 ++
 .../component/http4/HttpMethodsConverter.java      |   40 +
 .../camel/component/http4/HttpPollingConsumer.java |  177 ++++
 .../apache/camel/component/http4/HttpProducer.java |  582 +++++++++++
 .../component/http4/HttpSendDynamicAware.java      |   24 +
 .../org/apache/camel/component/http4/HttpUtil.java |    0
 .../camel/component/http4/NoopCookieStore.java     |    0
 .../component/http4/PreemptiveAuthInterceptor.java |   51 +
 .../component/http4/ProxyHttpClientConfigurer.java |   72 ++
 .../http4/cloud/Http4ServiceExpression.java        |   32 +
 .../http4/cloud/Http4ServiceExpressionFactory.java |   30 +
 .../component/http4/helper/HttpMethodHelper.java   |    0
 .../org/apache/camel/component/http4/package.html  |    0
 .../src/test/data/logo.jpeg                        |  Bin
 .../http4/AdviceAndInterceptHttp4IssueTest.java    |   95 ++
 .../apache/camel/component/http4/BaseHttpTest.java |    0
 .../camel/component/http4/BaseHttpsTest.java       |    0
 .../http4/CamelComponentVerifierExtensionTest.java |  262 +++++
 .../http4/CamelComponentVerifierTest.java          |  261 +++++
 .../camel/component/http4/GoogleUrlRewrite.java    |    0
 .../camel/component/http4/HeaderFilteringTest.java |    0
 .../component/http4/HttpAuthenticationTest.java    |  140 +++
 .../apache/camel/component/http4/HttpBodyTest.java |  131 +++
 .../http4/HttpBodyWithOtherProtocalNameTest.java   |   39 +
 .../component/http4/HttpBridgeEndpointTest.java    |  119 +++
 .../http4/HttpCamelHeadersNotCopiedTest.java       |    0
 .../component/http4/HttpCamelHeadersTest.java      |  125 +++
 .../camel/component/http4/HttpCharsetTest.java     |  110 +++
 .../component/http4/HttpClientConfigurerTest.java  |   45 +
 .../camel/component/http4/HttpCompressionTest.java |  202 ++++
 .../camel/component/http4/HttpConcurrentTest.java  |  123 +++
 .../http4/HttpCustomComponentNameTest.java         |    0
 .../component/http4/HttpDefaultPortNumberTest.java |  152 +++
 .../http4/HttpDisableStreamCacheTest.java          |   84 ++
 .../HttpEndpointOptionsNotChangeComponentTest.java |   82 ++
 .../camel/component/http4/HttpEndpointURLTest.java |   71 ++
 .../http4/HttpInvalidConfigurationTest.java        |   59 ++
 .../HttpInvalidHttpClientConfigurationTest.java    |   59 ++
 .../camel/component/http4/HttpMethodsTest.java     |  238 +++++
 .../component/http4/HttpNoCamelHeaderTest.java     |  100 ++
 .../http4/HttpNoConnectionRedeliveryTest.java      |  101 ++
 .../component/http4/HttpNoConnectionTest.java      |   84 ++
 .../apache/camel/component/http4/HttpPathTest.java |  113 +++
 .../component/http4/HttpPollingConsumerTest.java   |   97 ++
 .../http4/HttpProducerConnectionCloseTest.java     |   99 ++
 .../http4/HttpProducerContentLengthTest.java       |  135 +++
 .../http4/HttpProducerContentTypeTest.java         |  112 +++
 .../HttpProducerContentTypeWithSemiColomnTest.java |  112 +++
 .../HttpProducerExplicitConnectionCloseTest.java   |   82 ++
 .../http4/HttpProducerSelectMethodTest.java        |  199 ++++
 .../component/http4/HttpProducerSessionTest.java   |  117 +++
 .../HttpProducerTwoHeadersWithSameKeyTest.java     |  125 +++
 .../HttpProducerTwoParametersWithSameKeyTest.java  |   96 ++
 .../HttpProducerWithSystemPropertiesTest.java      |   92 ++
 .../camel/component/http4/HttpProxyServerTest.java |  172 ++++
 .../camel/component/http4/HttpQueryTest.java       |  100 ++
 .../camel/component/http4/HttpRedirectTest.java    |  123 +++
 .../http4/HttpReferenceParameterTest.java          |   97 ++
 .../camel/component/http4/HttpSNIHostNameTest.java |    0
 .../camel/component/http4/HttpSOTimeoutTest.java   |   97 ++
 .../component/http4/HttpSendDynamicAwareTest.java  |   89 ++
 .../component/http4/HttpServerTestSupport.java     |    0
 .../http4/HttpThrowExceptionOnFailureTest.java     |  125 +++
 .../component/http4/HttpWithHttpUriHeaderTest.java |   67 ++
 .../component/http4/HttpsAuthenticationTest.java   |  101 ++
 .../apache/camel/component/http4/HttpsGetTest.java |   78 ++
 .../component/http4/HttpsServerTestSupport.java    |    0
 .../http4/HttpsSslContextParametersGetTest.java    |   70 ++
 ...psTwoComponentsSslContextParametersGetTest.java |  103 ++
 ...tpsTwoDifferentSslContextParametersGetTest.java |   96 ++
 .../http4/ManagedHttpProducerPoolStatsTest.java    |  130 +++
 .../camel/component/http4/UrlRewriteTest.java      |   58 ++
 .../handler/AuthenticationValidationHandler.java   |   55 ++
 .../handler/BasicRawQueryValidationHandler.java    |   46 +
 .../http4/handler/BasicValidationHandler.java      |   96 ++
 .../http4/handler/DelayValidationHandler.java      |   47 +
 .../http4/handler/DrinkValidationHandler.java      |    0
 .../http4/handler/HeaderValidationHandler.java     |   67 ++
 .../ProxyAuthenticationValidationHandler.java      |   56 ++
 .../http4/handler/SessionReflectionHandler.java    |    0
 .../component/http4/helper/HttpHelperTest.java     |    0
 .../http4/rest/RestCamelComponentVerifierTest.java |  178 ++++
 .../src/test/resources/localhost.ks                |  Bin
 .../src/test/resources/log4j2.properties           |    0
 .../camel/component/http4/CamelHttp4Context.xml    |    0
 components/camel-http4/pom.xml                     |  114 ---
 .../camel-http4/src/main/docs/http4-component.adoc |  732 --------------
 .../BasicAuthenticationHttpClientConfigurer.java   |   51 -
 .../component/http4/CompositeHttpConfigurer.java   |   56 --
 .../camel/component/http4/HttpComponent.java       |  678 -------------
 .../http4/HttpComponentVerifierExtension.java      |  248 -----
 .../component/http4/HttpDeleteWithBodyMethod.java  |   36 -
 .../apache/camel/component/http4/HttpEndpoint.java |  539 -----------
 .../apache/camel/component/http4/HttpMethods.java  |   68 --
 .../component/http4/HttpMethodsConverter.java      |   40 -
 .../camel/component/http4/HttpPollingConsumer.java |  172 ----
 .../apache/camel/component/http4/HttpProducer.java |  581 -----------
 .../component/http4/HttpSendDynamicAware.java      |   24 -
 .../component/http4/PreemptiveAuthInterceptor.java |   50 -
 .../component/http4/ProxyHttpClientConfigurer.java |   71 --
 .../http4/cloud/Http4ServiceExpression.java        |   32 -
 .../http4/cloud/Http4ServiceExpressionFactory.java |   30 -
 .../http4/AdviceAndInterceptHttp4IssueTest.java    |   95 --
 .../http4/CamelComponentVerifierExtensionTest.java |  262 -----
 .../http4/CamelComponentVerifierTest.java          |  261 -----
 .../component/http4/HttpAuthenticationTest.java    |  140 ---
 .../apache/camel/component/http4/HttpBodyTest.java |  131 ---
 .../http4/HttpBodyWithOtherProtocalNameTest.java   |   38 -
 .../component/http4/HttpBridgeEndpointTest.java    |  119 ---
 .../component/http4/HttpCamelHeadersTest.java      |  124 ---
 .../camel/component/http4/HttpCharsetTest.java     |  110 ---
 .../component/http4/HttpClientConfigurerTest.java  |   45 -
 .../camel/component/http4/HttpCompressionTest.java |  200 ----
 .../camel/component/http4/HttpConcurrentTest.java  |  123 ---
 .../component/http4/HttpDefaultPortNumberTest.java |  152 ---
 .../http4/HttpDisableStreamCacheTest.java          |   84 --
 .../HttpEndpointOptionsNotChangeComponentTest.java |   84 --
 .../camel/component/http4/HttpEndpointURLTest.java |   71 --
 .../http4/HttpInvalidConfigurationTest.java        |   59 --
 .../HttpInvalidHttpClientConfigurationTest.java    |   59 --
 .../camel/component/http4/HttpMethodsTest.java     |  238 -----
 .../component/http4/HttpNoCamelHeaderTest.java     |  100 --
 .../http4/HttpNoConnectionRedeliveryTest.java      |  101 --
 .../component/http4/HttpNoConnectionTest.java      |   84 --
 .../apache/camel/component/http4/HttpPathTest.java |  113 ---
 .../component/http4/HttpPollingConsumerTest.java   |   97 --
 .../http4/HttpProducerConnectionCloseTest.java     |   99 --
 .../http4/HttpProducerContentLengthTest.java       |  135 ---
 .../http4/HttpProducerContentTypeTest.java         |  112 ---
 .../HttpProducerContentTypeWithSemiColomnTest.java |  112 ---
 .../HttpProducerExplicitConnectionCloseTest.java   |   82 --
 .../http4/HttpProducerSelectMethodTest.java        |  199 ----
 .../component/http4/HttpProducerSessionTest.java   |  117 ---
 .../HttpProducerTwoHeadersWithSameKeyTest.java     |  125 ---
 .../HttpProducerTwoParametersWithSameKeyTest.java  |   96 --
 .../HttpProducerWithSystemPropertiesTest.java      |   92 --
 .../camel/component/http4/HttpProxyServerTest.java |  170 ----
 .../camel/component/http4/HttpQueryTest.java       |  100 --
 .../camel/component/http4/HttpRedirectTest.java    |  122 ---
 .../http4/HttpReferenceParameterTest.java          |  100 --
 .../camel/component/http4/HttpSOTimeoutTest.java   |   97 --
 .../component/http4/HttpSendDynamicAwareTest.java  |   89 --
 .../http4/HttpThrowExceptionOnFailureTest.java     |  125 ---
 .../component/http4/HttpWithHttpUriHeaderTest.java |   67 --
 .../component/http4/HttpsAuthenticationTest.java   |  104 --
 .../apache/camel/component/http4/HttpsGetTest.java |   81 --
 .../http4/HttpsSslContextParametersGetTest.java    |   69 --
 ...psTwoComponentsSslContextParametersGetTest.java |  101 --
 ...tpsTwoDifferentSslContextParametersGetTest.java |   97 --
 .../http4/ManagedHttpProducerPoolStatsTest.java    |  130 ---
 .../camel/component/http4/UrlRewriteTest.java      |   62 --
 .../handler/AuthenticationValidationHandler.java   |   54 --
 .../handler/BasicRawQueryValidationHandler.java    |   45 -
 .../http4/handler/BasicValidationHandler.java      |   95 --
 .../http4/handler/DelayValidationHandler.java      |   46 -
 .../http4/handler/HeaderValidationHandler.java     |   66 --
 .../ProxyAuthenticationValidationHandler.java      |   55 --
 .../http4/rest/RestCamelComponentVerifierTest.java |  178 ----
 .../camel-hystrix/src/main/docs/hystrix.adoc       |    4 +-
 .../hystrix/processor/HystrixProcessorCommand.java |    6 +-
 .../HystrixProcessorCommandFallbackViaNetwork.java |    2 +-
 .../camel-ical/src/main/docs/ical-dataformat.adoc  |   10 +-
 .../src/main/docs/iec60870-client-component.adoc   |   12 +-
 .../src/main/docs/iec60870-server-component.adoc   |   12 +-
 .../src/main/docs/ignite-cache-component.adoc      |   12 +-
 .../src/main/docs/ignite-compute-component.adoc    |   14 +-
 .../src/main/docs/ignite-events-component.adoc     |   10 +-
 .../src/main/docs/ignite-idgen-component.adoc      |   10 +-
 .../src/main/docs/ignite-messaging-component.adoc  |   12 +-
 .../src/main/docs/ignite-queue-component.adoc      |   12 +-
 .../src/main/docs/ignite-set-component.adoc        |   12 +-
 components/camel-ignite/src/main/docs/ignite.adoc  |   14 +-
 .../src/main/docs/infinispan-component.adoc        |  595 +++++++++++-
 .../component/infinispan/InfinispanConsumer.java   |   10 +-
 .../infinispan/InfinispanCustomListener.java       |    1 +
 .../component/infinispan/InfinispanProducer.java   |    2 +-
 .../infinispan/InfinispanClusterTestSupport.java   |   14 +-
 .../InfinispanClusteredConsumerTest.java           |   24 +-
 .../InfinispanConsumerEntryCreatedTest.java        |   18 +-
 .../InfinispanConsumerEntryRemovedTest.java        |   18 +-
 .../InfinispanConsumerEntryUpdatedTest.java        |   18 +-
 .../InfinispanConsumerEntryVisitedTest.java        |   18 +-
 .../infinispan/InfinispanContinuousQueryIT.java    |   33 +-
 .../InfinispanLocalConsumerCustomListenerIT.java   |   18 +-
 .../infinispan/InfinispanLocalConsumerTest.java    |   24 +-
 .../InfinispanRemoteQueryProducerIT.java           |   21 +-
 .../infinispan/InfinispanTestSupport.java          |   10 +-
 .../infinispan/MyEmbeddedCustomListener.java       |    1 +
 .../src/main/docs/influxdb-component.adoc          |   16 +-
 .../camel-iota/src/main/docs/iota-component.adoc   |   16 +-
 .../apache/camel/component/iota/IOTAComponent.java |    1 +
 .../apache/camel/component/iota/IOTAEndpoint.java  |    2 +
 .../apache/camel/component/iota/IOTAProducer.java  |    1 +
 .../camel-ipfs/src/main/docs/ipfs-component.adoc   |   18 +-
 .../camel-irc/src/main/docs/irc-component.adoc     |   24 +-
 .../apache/camel/component/irc/IrcComponent.java   |    2 +
 .../camel/component/irc/IrcConfiguration.java      |    1 +
 .../apache/camel/component/irc/IrcEndpoint.java    |    4 +
 .../apache/camel/component/irc/IrcProducer.java    |    1 +
 .../component/irc/it/IrcMultiChannelRouteTest.java |    1 +
 .../camel/component/irc/it/IrcOnReplyTest.java     |    2 +
 .../camel/component/irc/it/IrcPrivmsgTest.java     |    1 +
 .../camel/component/irc/it/IrcRouteTest.java       |    3 +
 .../irc/it/IrcsWithSslContextParamsRouteTest.java  |   12 +-
 .../src/main/docs/ironmq-component.adoc            |   24 +-
 .../camel/component/ironmq/IronMQEndpoint.java     |    2 +
 .../camel/component/ironmq/IronMQProducer.java     |    1 +
 .../component/ironmq/FromQueueToQueueTest.java     |   14 +-
 .../src/main/docs/json-jackson-dataformat.adoc     |   10 +-
 .../camel/component/jackson/JacksonDataFormat.java |    4 +
 .../component/jackson/JacksonConcurrentTest.java   |    1 +
 .../component/jackson/JacksonModuleRefTest.java    |   10 +-
 .../JacksonNotUseDefaultObjectMapperTest.java      |   12 +-
 .../jackson/JacksonObjectMapperRegistryTest.java   |   12 +-
 .../src/main/docs/jacksonxml-dataformat.adoc       |   28 +-
 .../component/jacksonxml/JacksonXMLDataFormat.java |    4 +
 .../jacksonxml/JacksonConcurrentTest.java          |    1 +
 .../component/jacksonxml/JacksonModuleRefTest.java |   10 +-
 components/camel-jasypt/src/main/docs/jasypt.adoc  |   16 +-
 .../org/apache/camel/component/jasypt/Main.java    |    2 +
 .../camel-jaxb/src/main/docs/jaxb-dataformat.adoc  |   30 +-
 .../converter/jaxb/FilteringXmlStreamWriter.java   |   32 +
 .../camel/converter/jaxb/JaxbDataFormat.java       |    4 +
 .../camel/converter/jaxb/NonXmlFilterReader.java   |    1 +
 .../camel/example/DataFormatComponentTest.java     |    1 +
 .../camel/example/DataFormatDataSetTest.java       |    1 +
 .../org/apache/camel/example/DataFormatTest.java   |    1 +
 .../example/JaxbConcurrentDataFormatTest.java      |    1 +
 .../camel/example/SpringDataFormatPartialTest.java |    1 +
 .../apache/camel/example/SpringDataFormatTest.java |    1 +
 .../example/SpringDataFormatWithEncodingTest.java  |    1 +
 ...aFormatWithMarshalAndUnmarshalUsingRefTest.java |    1 +
 ...WithMarshalAndUnmarshalUsingSpringBeanTest.java |    1 +
 .../org/apache/camel/example/UnmarshalTest.java    |    1 +
 ...melJaxbNoNamespaceSchemaLocationSpringTest.java |    1 +
 .../org/apache/camel/jaxb/CamelJaxbSpringTest.java |    1 +
 .../jaxb/JaxbMarshalNamespacePrefixMapperTest.java |   12 +-
 .../camel-jbpm/src/main/docs/jbpm-component.adoc   |   32 +-
 .../src/main/docs/jcache-component.adoc            |   36 +-
 .../component/jcache/JCacheConfigurationTest.java  |   28 +-
 .../camel/component/jcache/JCacheConsumerTest.java |   27 +-
 .../policy/CacheManagerFromRegistryTest.java       |   31 +-
 .../idempotent/JCacheIdempotentRepositoryTest.java |    2 +
 .../src/main/docs/jclouds-component.adoc           |   34 +-
 .../jclouds/JcloudsBlobStoreConsumer.java          |    1 +
 .../camel/component/jclouds/JcloudsComponent.java  |    1 +
 .../component/jclouds/JcloudsComputeEndpoint.java  |   16 +
 .../jclouds/JcloudsSpringComputeTest.java          |    1 +
 .../camel-jcr/src/main/docs/jcr-component.adoc     |   18 +-
 .../camel/component/jcr/EndpointEventListener.java |    1 +
 .../apache/camel/component/jcr/JcrConsumer.java    |    1 +
 .../apache/camel/component/jcr/JcrEndpoint.java    |    2 +
 .../apache/camel/component/jcr/JcrProducer.java    |    1 +
 .../camel-jdbc/src/main/docs/jdbc-component.adoc   |   26 +-
 .../apache/camel/component/jdbc/JdbcEndpoint.java  |    2 +
 .../apache/camel/component/jdbc/JdbcProducer.java  |    1 +
 .../component/jdbc/AbstractJdbcTestSupport.java    |   12 +-
 .../jdbc/JdbcRouteUsingSqlSelectAliasTest.java     |    1 +
 .../camel/component/jetty/CamelFilterWrapper.java  |    3 +
 components/camel-jetty/pom.xml                     |    7 +-
 .../camel-jetty/src/main/docs/jetty-component.adoc |   54 +-
 .../component/jetty9/AttachmentHttpBinding.java    |    1 +
 .../camel/component/jetty9/CamelHttpClient9.java   |    3 +
 .../component/jetty9/JettyContentExchange9.java    |   19 +-
 .../component/jetty9/JettyHttpComponent9.java      |    7 +-
 .../camel/component/jetty/BaseJettyTest.java       |   15 +-
 .../camel/component/jetty/CustomFiltersTest.java   |   31 +-
 .../camel/component/jetty/EnableCORSTest.java      |    1 +
 .../jetty/ExplicitJettyAsyncRouteTest.java         |    1 +
 .../component/jetty/ExplicitJettyRouteTest.java    |    1 +
 .../apache/camel/component/jetty/HandlerTest.java  |   71 +-
 .../component/jetty/Http4DeleteWithBodyTest.java   |    4 +-
 .../jetty/HttpAuthMethodPriorityTest.java          |   46 +-
 .../HttpBasicAuthComponentConfiguredTest.java      |   43 +-
 .../camel/component/jetty/HttpBasicAuthTest.java   |   34 +-
 .../camel/component/jetty/HttpBindingRefTest.java  |   22 +-
 .../component/jetty/HttpBridgeAsyncRouteTest.java  |    1 +
 .../component/jetty/HttpBridgeEncodedPathTest.java |    1 +
 .../jetty/HttpBridgeMultipartRouteTest.java        |    1 +
 .../camel/component/jetty/HttpBridgeRouteTest.java |    1 +
 .../component/jetty/HttpCharacterEncodingTest.java |    1 +
 .../jetty/HttpClientRouteEnableChunkedTest.java    |    1 +
 .../camel/component/jetty/HttpClientRouteTest.java |    1 +
 .../jetty/HttpFilterCamelHeadersTest.java          |   12 +-
 .../component/jetty/HttpGZipEncodingTest.java      |   52 +-
 .../component/jetty/HttpMethodRestrictTest.java    |    1 +
 .../jetty/HttpProducerConcurrentTest.java          |    1 +
 .../jetty/HttpProxyRouteContentTypeTest.java       |    1 +
 .../camel/component/jetty/HttpProxyRouteTest.java  |    1 +
 .../component/jetty/HttpRequestResponseTest.java   |    1 +
 .../camel/component/jetty/HttpToFileTest.java      |    1 +
 .../camel/component/jetty/HttpUrlRewriteTest.java  |   17 +-
 .../camel/component/jetty/HttpsAsyncRouteTest.java |    7 +
 .../HttpsRouteSslContextParametersInUriTest.java   |   13 +-
 .../jetty/JettyContentBasedRouteTest.java          |    1 +
 .../component/jetty/JettyContentTypeTest.java      |    1 +
 .../jetty/JettyHttpBridgeEncodedPathTest.java      |    1 +
 .../jetty/JettyHttpEndpointDisconnectTest.java     |    1 +
 .../JettyHttpGetWithParamAsExchangeHeaderTest.java |    1 +
 .../component/jetty/JettyHttpGetWithParamTest.java |    2 +
 .../jetty/JettyHttpMapHttpMessageHeadersTest.java  |    1 +
 .../camel/component/jetty/JettyImageFileTest.java  |    3 +-
 .../jetty/JettyResponseBodyWhenErrorTest.java      |    1 +
 .../camel/component/jetty/JettyRouteTest.java      |    1 +
 .../jetty/JettyRouteWithSocketPropertiesTest.java  |    1 +
 .../camel/component/jetty/JettySteveIssueTest.java |    1 +
 .../component/jetty/JettyWithXPathChoiceTest.java  |    1 +
 .../component/jetty/MultiPartFormOkHttpTest.java   |    1 +
 .../camel/component/jetty/MultiPartFormTest.java   |    1 +
 .../jetty/MultiPartFormWithCustomFilterTest.java   |   61 +-
 .../camel/component/jetty/MyErrorHandler.java      |    1 +
 .../component/jetty/async/MyAsyncEndpoint.java     |    3 +
 .../component/jetty/async/MyAsyncProducer.java     |    2 +
 .../component/jetty/proxy/MyCoolServiceBean.java   |    1 +
 .../component/jetty/rest/RestApiJettyYamlTest.java |    1 +
 .../jetty/rest/RestHttpsClientAuthRouteTest.java   |    2 +-
 .../jetty/rest/RestJettyDefaultValueTest.java      |   41 +-
 .../rest/RestJettyGetCustomHttpBindingTest.java    |   27 +-
 .../component/jetty/rest/RestJettyGetToDTest.java  |   30 +-
 .../jetty/rest/RestJettyGetWildcardsTest.java      |   40 +-
 .../rest/producer/Http4RestProducerGetTest.java    |    4 +-
 .../rest/producer/Http4RestProducerPutTest.java    |    2 +-
 .../src/main/docs/jgroups-raft-component.adoc      |   22 +-
 .../src/main/docs/jgroups-component.adoc           |   28 +-
 .../camel-jing/src/main/docs/jing-component.adoc   |   16 +-
 .../component/validator/jing/JingComponent.java    |    1 +
 .../component/validator/jing/JingValidator.java    |    1 +
 .../component/validator/jing/RNCRouteTest.java     |    1 +
 .../component/validator/jing/RNGRouteTest.java     |    1 +
 .../camel-jira/src/main/docs/jira-component.adoc   |   38 +-
 .../apache/camel/component/jira/JiraComponent.java |    1 +
 .../apache/camel/component/jira/JiraEndpoint.java  |    2 +
 .../jira/consumer/AbstractJiraConsumer.java        |    1 +
 .../jira/oauth/OAuthHttpClientDecorator.java       |    6 +
 .../camel-jms/src/main/docs/jms-component.adoc     |   94 +-
 .../component/jms/DefaultJmsKeyFormatStrategy.java |    2 +
 .../component/jms/DefaultQueueBrowseStrategy.java  |    1 +
 .../org/apache/camel/component/jms/JmsBinding.java |    4 +-
 .../apache/camel/component/jms/JmsComponent.java   |    1 +
 .../camel/component/jms/JmsConfiguration.java      |    2 +
 .../apache/camel/component/jms/JmsConsumer.java    |    1 +
 .../apache/camel/component/jms/JmsEndpoint.java    |   13 +
 .../org/apache/camel/component/jms/JmsMessage.java |    1 +
 .../camel/component/jms/JmsPollingConsumer.java    |    5 +
 .../apache/camel/component/jms/JmsProducer.java    |    3 +
 .../camel/component/jms/JmsQueueEndpoint.java      |    1 +
 .../component/jms/JmsTemporaryQueueEndpoint.java   |    2 +
 .../component/jms/JmsTemporaryTopicEndpoint.java   |    2 +
 .../jms/PassThroughJmsKeyFormatStrategy.java       |    2 +
 .../component/jms/reply/QueueReplyManager.java     |    6 +
 .../component/jms/reply/ReplyManagerSupport.java   |    8 +
 .../jms/reply/TemporaryQueueReplyHandler.java      |    2 +
 .../jms/reply/TemporaryQueueReplyManager.java      |    4 +
 ...essageIdAsCorrelationIdMessageSentCallback.java |    1 +
 .../jms/ActiveMQOriginalDestinationTest.java       |    1 +
 .../component/jms/AggregratedJmsRouteTest.java     |    3 +
 .../camel/component/jms/BrowsableQueueTest.java    |    2 +
 .../component/jms/ConsumeJmsBytesMessageTest.java  |    2 +
 .../component/jms/ConsumeJmsMapMessageTest.java    |    2 +
 .../component/jms/ConsumeJmsObjectMessageTest.java |    2 +
 .../component/jms/ConsumeMessageConverterTest.java |   17 +-
 .../jms/ConsumerTemplateJmsSelectorTest.java       |    1 +
 .../jms/FileRouteJmsKeepLastModifiedTest.java      |    2 +
 .../component/jms/FileRouteJmsPreMoveTest.java     |    2 +
 .../camel/component/jms/FileRouteToJmsTest.java    |    2 +
 .../component/jms/FileRouteToJmsToFileTest.java    |    2 +
 .../component/jms/FromTextToBytesMessageTest.java  |    1 +
 .../jms/JmsAddAndRemoveRouteManagementTest.java    |    1 +
 .../jms/JmsAllowAdditionalHeadersTest.java         |    1 +
 .../camel/component/jms/JmsAllowNullBodyTest.java  |    1 +
 .../component/jms/JmsAsyncStartListenerTest.java   |    2 +
 .../jms/JmsAsyncStartStopListenerTest.java         |    2 +
 .../component/jms/JmsAsyncStopListenerTest.java    |    2 +
 .../camel/component/jms/JmsAutoStartupTest.java    |    1 +
 .../jms/JmsBatchResequencerJMSPriorityTest.java    |    1 +
 .../camel/component/jms/JmsClientAckTest.java      |    1 +
 .../camel/component/jms/JmsComponentTest.java      |    2 +
 .../component/jms/JmsConsumeTemplateTest.java      |    1 +
 ...sumerRestartPickupConfigurationChangesTest.java |    1 +
 .../jms/JmsCustomHeaderFilterStrategyTest.java     |    3 +
 .../jms/JmsDeadLetterChannelInOutTest.java         |    1 +
 .../component/jms/JmsDeadLetterQueueTest.java      |    1 +
 ...msDeadLetterQueueUsingTransferExchangeTest.java |    1 +
 .../jms/JmsDefaultTaskExecutorTypeTest.java        |    1 +
 .../component/jms/JmsDestinationResolverTest.java  |    2 +
 .../camel/component/jms/JmsDurableTopicTest.java   |    1 +
 .../jms/JmsEagerLoadingPropertiesTest.java         |    1 +
 .../jms/JmsEndpointConfigurationTest.java          |   16 +-
 .../jms/JmsErrorHandlerLogStackTraceTest.java      |    1 +
 .../apache/camel/component/jms/JmsFilterTest.java  |    1 +
 .../component/jms/JmsHeaderFilteringTest.java      |    2 +
 .../jms/JmsInOnlyDisableTimeToLiveTest.java        |    2 +
 .../jms/JmsInOnlyIncludeSentJMSMessageIDTest.java  |    1 +
 .../jms/JmsInOnlyInvalidDestinationTest.java       |   14 +-
 .../jms/JmsInOnlyWithReplyToAsHeaderTest.java      |    1 +
 ...ToDisabledButJMSReplyToHeaderPreservedTest.java |    1 +
 .../jms/JmsInOnlyWithReplyToDisabledTest.java      |    1 +
 .../jms/JmsInOnlyWithReplyToHeaderTest.java        |    1 +
 .../jms/JmsInOnlyWithReplyToHeaderTopicTest.java   |    1 +
 .../jms/JmsInOnlyWithReplyToNotPreservedTest.java  |    1 +
 .../component/jms/JmsInOnlyWithReplyToTest.java    |    1 +
 .../component/jms/JmsInOutBeanReturnNullTest.java  |    1 +
 .../jms/JmsInOutDisableTimeToLiveTest.java         |    2 +
 .../jms/JmsInOutFixedReplyQueueTimeoutTest.java    |    2 +
 ...ueueTimeoutUseMessageIDAsCorrelationIDTest.java |    1 +
 .../jms/JmsInOutIndividualRequestTimeoutTest.java  |    2 +
 .../component/jms/JmsInOutNonPersistentTest.java   |    1 +
 .../jms/JmsInOutSynchronousFalseTest.java          |    2 +
 .../component/jms/JmsInOutSynchronousTest.java     |    2 +
 .../component/jms/JmsInOutWithNoOutBodyTest.java   |    2 +
 .../jms/JmsIncludeAllJMSXPropertiesTest.java       |    2 +
 .../component/jms/JmsLoadBalanceFailoverTest.java  |    1 +
 ...ailoverWithForceSendOriginalJmsMessageTest.java |    1 +
 ...geAsOriginalMessageInDefaultUnitOfWorkTest.java |    1 +
 .../component/jms/JmsMessageBodySetNullTest.java   |    1 +
 .../JmsMessageCreatedStrategyComponentTest.java    |    1 +
 .../jms/JmsMessageCreatedStrategyEndpointTest.java |   17 +-
 .../jms/JmsMessageIDNotOverridenAMQTest.java       |    1 +
 .../camel/component/jms/JmsMessageTypeTest.java    |    1 +
 .../component/jms/JmsMultipleConsumersTest.java    |    1 +
 .../component/jms/JmsNoRequestTimeoutTest.java     |    2 +
 .../JmsNotInOnlyIncludeSentJMSMessageIDTest.java   |    1 +
 .../jms/JmsNotIncludeAllJMSXPropertiesTest.java    |    2 +
 ...OnCompletionAndInterceptAndOnExceptionTest.java |    2 +
 .../camel/component/jms/JmsOnCompletionTest.java   |    2 +
 .../component/jms/JmsPollingConsumerTest.java      |    1 +
 .../jms/JmsProducerDisableReplyToTest.java         |    1 +
 .../jms/JmsProducerWithJMSHeaderTest.java          |    1 +
 .../component/jms/JmsProduerConcurrentTest.java    |    1 +
 .../jms/JmsProduerConcurrentWithReplyTest.java     |    1 +
 .../camel/component/jms/JmsQosRouteTest.java       |    2 +
 .../camel/component/jms/JmsRemoveHeaderTest.java   |    1 +
 ...sRequestReplyExclusiveReplyToComponentTest.java |    1 +
 ...RequestReplyExclusiveReplyToConcurrentTest.java |    1 +
 ...estReplyExclusiveReplyToRemoveAddRouteTest.java |    1 +
 .../jms/JmsRequestReplyExclusiveReplyToTest.java   |    1 +
 .../JmsRequestReplyFixedReplyToInEndpointTest.java |    1 +
 .../jms/JmsRequestReplyManualReplyTest.java        |    1 +
 .../JmsRequestReplyManualWithJMSReplyToTest.java   |    1 +
 ...lyProcessRepliesConcurrentUsingThreadsTest.java |    1 +
 .../jms/JmsRequestReplyReplyToOverrideTest.java    |    1 +
 .../jms/JmsRequestReplySharedReplyToTest.java      |    1 +
 ...RequestReplyTempQueueMultipleConsumersTest.java |    1 +
 .../jms/JmsRequestReplyTemporaryCacheNoneTest.java |    1 +
 .../jms/JmsRouteDeliveryModePreserveQoSTest.java   |    1 +
 .../component/jms/JmsRouteRequestReplyTest.java    |   10 +
 .../apache/camel/component/jms/JmsRouteTest.java   |    2 +
 .../jms/JmsRouteTimeoutCheckerIntervalTest.java    |    2 +
 .../camel/component/jms/JmsRouteTimeoutTest.java   |    2 +
 .../camel/component/jms/JmsRouteToFileTest.java    |    2 +
 .../jms/JmsRouteUsingDifferentHeadersTest.java     |    1 +
 .../component/jms/JmsRouteUsingJMSXGroupTest.java  |    1 +
 .../jms/JmsRouteUsingSpringAndJmsNameTest.java     |    1 +
 .../jms/JmsRouteUsingSpringJMSTemplateTest.java    |    1 +
 .../jms/JmsRouteUsingSpringWithAutoWireTest.java   |    1 +
 .../JmsRouteWithCustomKeyFormatStrategyTest.java   |   17 +-
 .../JmsRouteWithCustomListenerContainerTest.java   |   42 +-
 .../JmsRouteWithDefaultKeyFormatStrategyTest.java  |    1 +
 .../jms/JmsRouteWithInOnlyAndMultipleAcksTest.java |   42 +-
 .../component/jms/JmsRouteWithInOnlyTest.java      |   19 +-
 .../component/jms/JmsRoutingSlipInOutTest.java     |   31 +-
 .../camel/component/jms/JmsRoutingSlipTest.java    |    2 +
 .../camel/component/jms/JmsSelectorInTest.java     |    2 +
 .../camel/component/jms/JmsSelectorOptionTest.java |    2 +
 .../camel/component/jms/JmsSelectorTest.java       |    2 +
 .../apache/camel/component/jms/JmsSessionTest.java |    1 +
 ...BodyNullErrorHandlerUseOriginalMessageTest.java |    1 +
 .../camel/component/jms/JmsSimpleHeaderTest.java   |    1 +
 .../component/jms/JmsSimpleInOnlyNoMutateTest.java |    2 +
 .../jms/JmsSimpleRequestCustomReplyToTest.java     |    3 +
 .../jms/JmsSimpleRequestLateReplyTest.java         |    3 +
 .../component/jms/JmsSimpleRequestReply2Test.java  |    2 +
 .../JmsSimpleRequestReplyFixedReplyQueueTest.java  |    2 +
 .../component/jms/JmsSimpleRequestReplyTest.java   |    2 +
 .../jms/JmsSplitterParallelChainedTest.java        |    1 +
 .../component/jms/JmsSplitterParallelTest.java     |    1 +
 .../jms/JmsSpringLoadBalanceFailoverTest.java      |    1 +
 .../camel/component/jms/JmsSuspendResumeTest.java  |    2 +
 .../jms/JmsTestConnectionOnStartupTest.java        |    1 +
 .../jms/JmsThrottlingInflightRoutePolicyTest.java  |    1 +
 .../org/apache/camel/component/jms/JmsToDTest.java |    1 +
 .../org/apache/camel/component/jms/JmsToTest.java  |    1 +
 .../component/jms/JmsTransactedRouteTest.java      |    2 +
 .../component/jms/JmsTransferExceptionTest.java    |    1 +
 .../jms/JmsTransferExchangeFromSplitterTest.java   |    1 +
 .../component/jms/JmsTransferExchangeTest.java     |    1 +
 .../component/jms/JmsUseOriginalBodyTest.java      |    2 +
 .../camel/component/jms/JmsXMLRouteTest.java       |    1 +
 .../camel/component/jms/JmsXPathHeaderTest.java    |    1 +
 .../component/jms/ManagedJmsEndpointTest.java      |    1 +
 .../component/jms/ManagedJmsEndpointTopicTest.java |    1 +
 .../component/jms/ManagedJmsSelectorTest.java      |    1 +
 .../camel/component/jms/MapJmsMessageTest.java     |    2 +
 .../camel/component/jms/MyDestinationResolver.java |    1 +
 .../component/jms/PayloadByteArrayJmsTest.java     |    2 +
 .../component/jms/ProduceMessageConverterTest.java |   18 +-
 .../jms/ReplyToDestinationSelectorNameTest.java    |    1 +
 .../component/jms/TwoConsumerOnSameQueueTest.java  |    1 +
 .../component/jms/TwoConsumerOnSameTopicTest.java  |    1 +
 .../ActiveMQConsumeWildcardQueuesTest.java         |    2 +
 .../activemq/TwoEmbeddedActiveMQBrokersTest.java   |    1 +
 .../jms/async/AsyncConsumerFalseTest.java          |    1 +
 .../jms/async/AsyncConsumerInOutTest.java          |    1 +
 .../jms/async/AsyncConsumerInOutTwoTest.java       |    1 +
 .../component/jms/async/AsyncConsumerTest.java     |    1 +
 .../component/jms/async/AsyncJmsInOutTest.java     |    1 +
 .../component/jms/async/AsyncJmsProducerTest.java  |    1 +
 .../camel/component/jms/async/MyAsyncEndpoint.java |    3 +
 .../camel/component/jms/async/MyAsyncProducer.java |    2 +
 .../component/jms/bind/JmsMessageBindTest.java     |    1 +
 .../component/jms/discovery/JmsDiscoveryTest.java  |    2 +
 .../jms/issues/ActiveMQPropagateHeadersTest.java   |    2 +
 .../component/jms/issues/AdviceWithIssueTest.java  |    1 +
 .../jms/issues/BruceHandlingBeanExceptionTest.java |    1 +
 .../camel/component/jms/issues/DummyOrder.java     |    3 +
 .../jms/issues/JmsAnotherCustomJMSReplyToTest.java |    2 +
 .../jms/issues/JmsBeanMethodHeaderTest.java        |   28 +-
 .../issues/JmsBlockedAsyncRoutingEngineTest.java   |    2 +
 .../issues/JmsChainedEndpointDelayTimeoutTest.java |    1 +
 .../issues/JmsConcurrentConsumerInOnlyTest.java    |    2 +
 .../jms/issues/JmsConcurrentConsumersTest.java     |    2 +
 .../jms/issues/JmsCustomJMSReplyToIssueTest.java   |    2 +
 .../jms/issues/JmsDirectStartupOrderIssueTest.java |    2 +
 .../jms/issues/JmsFilenameHeaderTest.java          |    2 +
 .../jms/issues/JmsGetHeaderKeyFormatIssueTest.java |    1 +
 ...derKeyFormatIssueWithContentTypeHeaderTest.java |    1 +
 .../jms/issues/JmsHeaderAsObjectTest.java          |    2 +
 .../component/jms/issues/JmsInOnlyIssueTest.java   |    2 +
 .../jms/issues/JmsInOnlyParameterTest.java         |    2 +
 .../JmsInOutExclusiveTopicRecipientListTest.java   |    2 +
 .../jms/issues/JmsInOutExclusiveTopicTest.java     |    2 +
 .../component/jms/issues/JmsInOutIssueTest.java    |    2 +
 .../component/jms/issues/JmsInOutParallelTest.java |    2 +
 .../issues/JmsInOutPersistentReplyQueueTest.java   |    2 +
 .../jms/issues/JmsInOutPipelineWithBeanTest.java   |   12 +-
 .../issues/JmsInOutRepeatedInvocationsTest.java    |    2 +
 .../jms/issues/JmsInOutRoutingSlipTest.java        |    1 +
 .../JmsInOutUseMessageIDasCorrelationIDTest.java   |    2 +
 ...msJMSReplyToConsumerEndpointUsingInOutTest.java |    2 +
 .../JmsJMSReplyToEndpointUsingInOutTest.java       |    2 +
 .../jms/issues/JmsLifecycleIssueTest.java          |    1 +
 .../jms/issues/JmsMQSpecialHeaderTest.java         |    1 +
 .../JmsMessageHeaderContentBasedRouterTest.java    |    1 +
 .../component/jms/issues/JmsMutateMessageTest.java |    1 +
 .../issues/JmsMutateRemoveHeaderMessageTest.java   |    1 +
 ...roughtJmsKeyFormatStrategyEndUserIssueTest.java |    1 +
 ...ssThroughtJmsKeyFormatStrategyEndpointTest.java |    1 +
 .../JmsPassThroughtJmsKeyFormatStrategyTest.java   |    1 +
 ...KeyFormatStrategyUsingJmsConfigurationTest.java |    1 +
 .../issues/JmsReplyToComponentEndlessLoopTest.java |   61 ++
 .../jms/issues/JmsReplyToLoopIssueTest.java        |    1 +
 .../jms/issues/JmsRoutingSlipIssueTest.java        |    1 +
 ...endToAlotOfDestinationWithSameEndpointTest.java |    1 +
 ...etterChannelHandlerRollbackOnExceptionTest.java |    1 +
 ...erChannelNotHandlerRollbackOnExceptionTest.java |    1 +
 ...ansactedOnExceptionRollbackOnExceptionTest.java |    1 +
 .../jms/issues/JmsTypeConverterIssueTest.java      |    4 +
 .../camel/component/jms/issues/LarsIssueTest.java  |    2 +
 .../component/jms/issues/MQSeriesHeaderTest.java   |    2 +
 .../component/jms/issues/MyFailureProcessor.java   |    1 +
 .../NoClassDefFoundErrorWrapExceptionTest.java     |    1 +
 .../issues/RequestReplyWithProducerIssueTest.java  |    1 +
 .../component/jms/issues/TempReplyToIssueTest.java |    1 +
 ...TransactionErrorHandlerRedeliveryDelayTest.java |    1 +
 .../component/jms/remoting/JmsRemotingTest.java    |    1 +
 .../camel/component/jms/remoting/SayService.java   |    1 +
 .../camel/component/jms/temp/JmsReconnectTest.java |    1 +
 .../jms/temp/TemporaryQueueRouteTest.java          |    2 +
 .../jms/tuning/PerformanceRoutePojoTest.java       |    1 +
 .../component/jms/tuning/PerformanceRouteTest.java |    1 +
 .../component/jms/tx/AbstractTransactionTest.java  |    2 +
 .../jms/tx/ConditionalExceptionProcessor.java      |    1 +
 .../jms/tx/JMSTransactionErrorHandlerTest.java     |    2 +
 .../JMSTransactionIsTransactedRedeliveredTest.java |    2 +
 .../jms/tx/JMSTransactionRollbackTest.java         |    2 +
 .../JMSTransactionThrottlingRoutePolicyTest.java   |    1 +
 .../jms/tx/JMSTransactionalClientTest.java         |    2 +
 .../tx/JMSTransactionalClientWithRollbackTest.java |    2 +
 ...MXTXUseOriginalBodyWithDLCErrorHandlerTest.java |    2 +
 ...JMXTXUseOriginalBodyWithTXErrorHandlerTest.java |    2 +
 .../jms/tx/JmsToJmsTransactedSecurityTest.java     |    1 +
 .../component/jms/tx/JmsToJmsTransactedTest.java   |    1 +
 ...sactionWithoutDefineTransactionManagerTest.java |    1 +
 .../component/jms/tx/RouteIdTransactedTest.java    |    1 +
 .../jms/tx/TransactedAsyncUsingThreadsTest.java    |    1 +
 ...sactionErrorHandlerBuilderAsSpringBeanTest.java |    2 +
 ...actionErrorHandlerCustomerSpringParserTest.java |    2 +
 .../tx/TransactionInterceptSendToEndpointTest.java |    1 +
 .../tx/TransactionMinimalConfigurationTest.java    |    2 +
 .../jms/tx/XMLQueueToProcessorTransactionTest.java |    1 +
 .../jms/tx/XMLQueueToQueueTransactionTest.java     |    1 +
 .../camel-jmx/src/main/docs/jmx-component.adoc     |   12 +-
 .../apache/camel/component/jmx/JMXConsumer.java    |    1 +
 .../apache/camel/component/jmx/JMXEndpoint.java    |    3 +
 .../apache/camel/component/jmx/JMXUriBuilder.java  |    1 +
 .../camel/component/jmx/JMXConsumerTest.java       |    1 +
 .../camel/component/jmx/JMXHandbackTest.java       |    1 +
 .../apache/camel/component/jmx/JMXRemoteTest.java  |    1 +
 .../jmx/JMXRobustRemoteConnectionTest.java         |    1 +
 .../camel/component/jmx/beans/SimpleBean.java      |   12 +
 .../src/main/docs/json-johnzon-dataformat.adoc     |    8 +-
 .../camel-jolt/src/main/docs/jolt-component.adoc   |   16 +-
 .../apache/camel/component/jolt/JoltComponent.java |    1 +
 .../camel-jooq/src/main/docs/jooq-component.adoc   |   18 +-
 .../camel-jpa/src/main/docs/jpa-component.adoc     |   46 +-
 .../apache/camel/component/jpa/JpaConsumer.java    |    1 +
 .../apache/camel/component/jpa/JpaEndpoint.java    |    9 +-
 .../apache/camel/component/jpa/JpaProducer.java    |    1 +
 .../apache/camel/component/jpa/QueryBuilder.java   |    1 +
 .../idempotent/jpa/JpaMessageIdRepository.java     |    4 +
 .../camel/component/jpa/AbstractJpaMethodTest.java |    1 +
 .../camel/component/jpa/JpaUseMergeTest.java       |    1 +
 .../camel/component/jpa/JpaUsePersistTest.java     |    1 +
 .../jpa/JpaUsingCustomPersistenceUnitTest.java     |    1 +
 .../camel/processor/jpa/AbstractJpaTest.java       |    2 +
 .../jpa/FileConsumerJpaIdempotentTest.java         |    1 +
 .../camel-jsch/src/main/docs/scp-component.adoc    |   16 +-
 .../apache/camel/component/scp/ScpComponent.java   |    1 +
 .../camel/component/scp/ScpSimpleProduceTest.java  |   10 +-
 .../src/main/docs/json-validator-component.adoc    |   14 +-
 .../jsonvalidator/JsonValidatorComponent.java      |    1 +
 .../jsonvalidator/FileValidatorRouteTest.java      |    1 +
 .../src/main/docs/jsonApi-dataformat.adoc          |    6 +-
 .../src/main/docs/jsonpath-language.adoc           |   28 +-
 .../camel-jt400/src/main/docs/jt400-component.adoc |   28 +-
 .../component/jt400/Jt400DataQueueProducer.java    |    1 +
 .../camel/component/jt400/Jt400Endpoint.java       |    1 +
 .../camel/component/jt400/Jt400PgmProducer.java    |    1 +
 .../Jt400ComponentDefaultConnectionPoolTest.java   |    2 +
 ...00ComponentDefaultSecureConnectionPoolTest.java |    2 +
 .../jt400/Jt400ConfigurationConnectionTest.java    |    2 +
 .../Jt400ConfigurationSecureConnectionTest.java    |    2 +
 .../component/jt400/Jt400ConfigurationTest.java    |    1 +
 .../component/jt400/Jt400SecureTestSupport.java    |   19 +-
 .../camel/component/jt400/Jt400TestSupport.java    |   15 +-
 .../camel-kafka/src/main/docs/kafka-component.adoc |   40 +-
 .../camel/component/kafka/KafkaConfiguration.java  |    2 +
 .../component/kafka/BaseEmbeddedKafkaTest.java     |   11 +-
 .../component/kafka/KafkaConsumerFullTest.java     |   13 +-
 .../KafkaConsumerOffsetRepositoryEmptyTest.java    |   10 +-
 .../KafkaConsumerOffsetRepositoryResumeTest.java   |   10 +-
 .../KafkaConsumerRebalancePartitionRevokeTest.java |   10 +-
 .../kafka/KafkaConsumerRebalanceTest.java          |   10 +-
 .../component/kafka/KafkaProducerFullTest.java     |   16 +-
 .../kafka/embedded/EmbeddedKafkaBroker.java        |    2 +
 .../camel/component/kafka/embedded/SystemTime.java |   10 +
 .../kafka/KafkaIdempotentRepositoryEagerTest.java  |   15 +-
 .../KafkaIdempotentRepositoryNonEagerTest.java     |   17 +-
 components/camel-kubernetes/pom.xml                |    2 +-
 .../docs/kubernetes-config-maps-component.adoc     |   12 +-
 .../docs/kubernetes-deployments-component.adoc     |   12 +-
 .../src/main/docs/kubernetes-hpa-component.adoc    |   12 +-
 .../src/main/docs/kubernetes-job-component.adoc    |   12 +-
 .../main/docs/kubernetes-namespaces-component.adoc |   12 +-
 .../src/main/docs/kubernetes-nodes-component.adoc  |   12 +-
 ...rnetes-persistent-volumes-claims-component.adoc |   12 +-
 .../kubernetes-persistent-volumes-component.adoc   |   12 +-
 .../src/main/docs/kubernetes-pods-component.adoc   |   12 +-
 ...bernetes-replication-controllers-component.adoc |   12 +-
 .../docs/kubernetes-resources-quota-component.adoc |   12 +-
 .../main/docs/kubernetes-secrets-component.adoc    |   12 +-
 .../kubernetes-service-accounts-component.adoc     |   12 +-
 .../main/docs/kubernetes-services-component.adoc   |   12 +-
 .../camel-kubernetes/src/main/docs/kubernetes.adoc |   12 +-
 .../docs/openshift-build-configs-component.adoc    |   10 +-
 .../src/main/docs/openshift-builds-component.adoc  |   10 +-
 .../kubernetes/AbstractKubernetesComponent.java    |    3 +-
 .../config_maps/KubernetesConfigMapsComponent.java |    1 +
 .../KubernetesDeploymentsComponent.java            |    1 +
 .../kubernetes/hpa/KubernetesHPAComponent.java     |    1 +
 .../kubernetes/job/KubernetesJobComponent.java     |    1 +
 .../namespaces/KubernetesNamespacesComponent.java  |    1 +
 .../kubernetes/nodes/KubernetesNodesComponent.java |    1 +
 .../KubernetesPersistentVolumesComponent.java      |    1 +
 ...KubernetesPersistentVolumesClaimsComponent.java |    1 +
 .../kubernetes/pods/KubernetesPodsComponent.java   |    1 +
 .../KubernetesReplicationControllersComponent.java |    1 +
 .../KubernetesResourcesQuotaComponent.java         |    1 +
 .../secrets/KubernetesSecretsComponent.java        |    1 +
 .../KubernetesServiceAccountsComponent.java        |    1 +
 .../services/KubernetesServicesComponent.java      |    1 +
 .../OpenshiftBuildConfigsComponent.java            |    1 +
 .../openshift/builds/OpenshiftBuildsComponent.java |    1 +
 .../producer/KubernetesConfigMapsProducerTest.java |   13 +-
 .../KubernetesDeploymentsProducerTest.java         |   70 +-
 .../producer/KubernetesHPAProducerTest.java        |   11 +-
 .../producer/KubernetesJobProducerTest.java        |   14 +-
 .../producer/KubernetesNamespacesProducerTest.java |   11 +-
 .../producer/KubernetesNodesProducerTest.java      |   31 +-
 ...ernetesPersistentVolumesClaimsProducerTest.java |   11 +-
 .../KubernetesPersistentVolumesProducerTest.java   |   11 +-
 .../producer/KubernetesPodsProducerTest.java       |   11 +-
 ...bernetesReplicationControllersProducerTest.java |   11 +-
 .../KubernetesResourcesQuotaProducerTest.java      |   30 +-
 .../producer/KubernetesSecretsProducerTest.java    |   11 +-
 .../KubernetesServiceAccountsProducerTest.java     |   11 +-
 .../producer/KubernetesServicesProducerTest.java   |   11 +-
 .../OpenshiftBuildConfigsProducerTest.java         |   10 +-
 .../producer/OpenshiftBuildsProducerTest.java      |   10 +-
 components/camel-kura/src/main/docs/kura.adoc      |   28 +-
 .../src/main/docs/language-component.adoc          |   18 +-
 .../component/language/LanguageComponent.java      |    1 +
 .../camel/component/language/LanguageEndpoint.java |    3 +
 .../camel/component/language/LanguageProducer.java |    1 +
 .../camel-ldap/src/main/docs/ldap-component.adoc   |   24 +-
 .../apache/camel/component/ldap/LdapComponent.java |    1 +
 .../apache/camel/component/ldap/LdapEndpoint.java  |    2 +
 .../apache/camel/component/ldap/LdapProducer.java  |    1 +
 .../camel-ldif/src/main/docs/ldif-component.adoc   |   25 +-
 .../apache/camel/component/ldif/LdifProducer.java  |    1 +
 .../camel-leveldb/src/main/docs/leveldb.adoc       |   16 +-
 .../leveldb/LevelDBAggregationRepository.java      |   16 +
 .../camel/component/leveldb/LevelDBFile.java       |    2 +
 ...elDBAggregateConcurrentDifferentGroupsTest.java |    1 +
 .../LevelDBAggregateConcurrentSameGroupTest.java   |    1 +
 .../LevelDBAggregateDiscardOnTimeoutTest.java      |    1 +
 .../LevelDBAggregateForceCompletionHeaderTest.java |    1 +
 .../LevelDBAggregateLoadAndRecoverTest.java        |    1 +
 .../LevelDBAggregateLoadConcurrentTest.java        |    1 +
 .../leveldb/LevelDBAggregateLoadTest.java          |    1 +
 ...DBAggregateNotLostRemovedWhenConfirmedTest.java |    1 +
 .../leveldb/LevelDBAggregateNotLostTest.java       |    1 +
 ...ggregateRecoverDeadLetterChannelFailedTest.java |    1 +
 ...velDBAggregateRecoverDeadLetterChannelTest.java |    1 +
 .../leveldb/LevelDBAggregateRecoverTest.java       |    1 +
 ...DBAggregateRecoverWithRedeliveryPolicyTest.java |    1 +
 .../LevelDBAggregateRecoverWithSedaTest.java       |    1 +
 .../LevelDBAggregateSerializedHeadersTest.java     |    1 +
 .../component/leveldb/LevelDBAggregateTest.java    |    1 +
 ...velDBAggregateTimeoutCompletionRestartTest.java |    1 +
 ...ngAggregateRecoverWithRedeliveryPolicyTest.java |    2 +
 .../leveldb/LevelDBSpringAggregateTest.java        |    1 +
 .../component/linkedin/api/DoubleAdapter.java      |    2 +
 .../component/linkedin/api/LinkedInException.java  |    1 +
 .../camel/component/linkedin/api/LongAdapter.java  |    2 +
 .../src/main/docs/linkedin-component.adoc          |   36 +-
 .../camel/component/linkedin/LinkedInEndpoint.java |    3 +
 .../camel-log/src/main/docs/log-component.adoc     |   31 +-
 .../apache/camel/component/log/LogComponent.java   |    1 +
 .../apache/camel/component/log/LogProducer.java    |    1 +
 components/camel-lra/src/main/docs/lra.adoc        |    4 +-
 .../src/main/docs/lucene-component.adoc            |   30 +-
 .../camel/component/lucene/LuceneEndpoint.java     |    2 +
 .../component/lucene/LuceneIndexProducer.java      |    1 +
 .../component/lucene/LuceneQueryProducer.java      |    1 +
 .../processor/lucene/LuceneQueryProcessor.java     |    1 +
 .../src/main/docs/lumberjack-component.adoc        |   18 +-
 .../camel-lzf/src/main/docs/lzf-dataformat.adoc    |   12 +-
 .../apache/camel/dataformat/lzf/LZFDataFormat.java |    3 +-
 .../camel/dataformat/lzf/LZFDataFormatTest.java    |    1 +
 .../camel-mail/src/main/docs/mail-component.adoc   |   50 +-
 .../src/main/docs/mime-multipart-dataformat.adoc   |   12 +-
 .../camel/component/mail/DefaultAuthenticator.java |    1 +
 .../component/mail/DefaultJavaMailSender.java      |   14 +
 .../apache/camel/component/mail/MailConsumer.java  |    2 +
 .../apache/camel/component/mail/MailEndpoint.java  |    5 +
 .../apache/camel/component/mail/MailMessage.java   |    2 +
 .../apache/camel/component/mail/MailProducer.java  |    1 +
 .../apache/camel/component/mail/NowSearchTerm.java |    1 +
 .../mail/MailAttachmentDuplicateNamesTest.java     |    1 +
 .../mail/MailAttachmentRedeliveryTest.java         |    1 +
 .../camel/component/mail/MailAttachmentTest.java   |    1 +
 .../mail/MailAttachmentsUmlautIssueTest.java       |    1 +
 .../component/mail/MailBatchConsumerTest.java      |    1 +
 .../component/mail/MailCollectionHeaderTest.java   |    1 +
 .../component/mail/MailCommitOnCompletionTest.java |    1 +
 .../mail/MailConsumerUnsupportedCharsetTest.java   |    1 +
 .../mail/MailContentTypeResolverTest.java          |    1 +
 .../camel/component/mail/MailContentTypeTest.java  |    1 +
 .../camel/component/mail/MailCopyToTest.java       |    1 +
 .../component/mail/MailCustomContentTypeTest.java  |    1 +
 .../component/mail/MailCustomMailSenderTest.java   |   10 +-
 .../mail/MailDefaultDelayForMailConsumeTest.java   |    1 +
 .../camel/component/mail/MailDisconnectTest.java   |    1 +
 .../mail/MailDoNotDeleteIfProcessFailsTest.java    |    1 +
 .../camel/component/mail/MailFetchSizeTest.java    |    1 +
 .../component/mail/MailFetchSizeZeroTest.java      |    1 +
 ...aderOverrulePreConfigurationRecipientsTest.java |    1 +
 .../component/mail/MailHtmlAttachmentTest.java     |    1 +
 ...IdempotentRepositoryDuplicateNotRemoveTest.java |    2 +
 .../MailIdempotentRepositoryDuplicateTest.java     |   14 +-
 .../mail/MailIdempotentRepositoryTest.java         |   17 +-
 .../component/mail/MailMaxMessagesPerPollTest.java |    1 +
 .../component/mail/MailMimeDecodeHeadersTest.java  |    1 +
 .../component/mail/MailMultipleRecipientsTest.java |    1 +
 .../MailMultipleRecipientsUsingHeadersTest.java    |    1 +
 .../mail/MailNameAndEmailInRecipientTest.java      |    1 +
 .../camel/component/mail/MailNoRecipientsTest.java |    1 +
 .../component/mail/MailPollEnrichNoMailTest.java   |    1 +
 .../camel/component/mail/MailPollEnrichTest.java   |    1 +
 .../component/mail/MailPostProcessActionTest.java  |   15 +-
 .../mail/MailProcessOnlyUnseenMessagesTest.java    |    1 +
 .../mail/MailRecipientsPipeIssueTest.java          |    1 +
 .../camel/component/mail/MailRecipientsTest.java   |    1 +
 .../camel/component/mail/MailReplyToTest.java      |    1 +
 .../component/mail/MailSearchTermNotSpamTest.java  |    1 +
 .../camel/component/mail/MailSearchTermTest.java   |   14 +-
 .../mail/MailSearchTermUriConfigBeanTest.java      |   11 +-
 .../MailSearchTermUriConfigLast24HoursTest.java    |    1 +
 .../mail/MailSearchTermUriConfigTest.java          |    1 +
 .../MailShutdownCompleteCurrentTaskOnlyTest.java   |    1 +
 .../camel/component/mail/MailSortTermTest.java     |   34 +-
 .../component/mail/MailSortTermThreeTest.java      |   31 +-
 .../camel/component/mail/MailSortTermTwoTest.java  |   31 +-
 .../camel/component/mail/MailSubjectTest.java      |    1 +
 .../component/mail/MailUsernameWithAtSignTest.java |    1 +
 .../component/mail/MailUsingCustomSessionTest.java |   17 +-
 .../camel/component/mail/MailUsingHeadersTest.java |    1 +
 .../component/mail/MapMailMessagesBugRoute.java    |    1 +
 .../mail/MimeMultipartAlternativeTest.java         |    1 +
 ...imeMultipartAlternativeWithContentTypeTest.java |    1 +
 ...MultipartAlternativeWithLongerFilenameTest.java |    1 +
 .../camel/component/mail/mock/MyMockFolder.java    |    2 +
 .../SslContextParametersMailRouteTest.java         |   62 +-
 .../multipart/MimeMultipartDataFormatTest.java     |    1 +
 .../src/main/docs/master-component.adoc            |   20 +-
 .../src/main/docs/metrics-component.adoc           |   58 +-
 .../messagehistory/MetricsMessageHistory.java      |    1 +
 .../MetricsMessageHistoryService.java              |    4 +
 .../routepolicy/MetricsRegistryService.java        |    3 +
 .../messagehistory/ManagedMessageHistoryTest.java  |   25 +-
 .../routepolicy/ManagedMetricsRoutePolicyTest.java |   22 +-
 .../src/main/docs/micrometer-component.adoc        |   50 +-
 .../messagehistory/MicrometerMessageHistory.java   |    1 +
 .../AbstractMicrometerEventNotifierTest.java       |   12 +-
 .../messagehistory/ManagedMessageHistoryTest.java  |   31 +-
 .../AbstractMicrometerRoutePolicyTest.java         |   11 +-
 .../src/main/docs/microprofile-config.adoc         |    4 +-
 .../src/main/docs/milo-client-component.adoc       |   24 +-
 .../src/main/docs/milo-server-component.adoc       |   16 +-
 .../camel-mina2/src/main/docs/mina2-component.adoc |   28 +-
 .../component/mina2/Mina2TextLineCodecFactory.java |    2 +
 .../mina2/Mina2UdpProtocolCodecFactory.java        |    2 +
 .../camel/component/mina2/BaseMina2Test.java       |   30 +-
 .../Mina2ClientModeTcpTextlineDelimiterTest.java   |    2 +
 .../component/mina2/Mina2ClientServerTest.java     |    1 +
 .../camel/component/mina2/Mina2ConsumerTest.java   |    1 +
 .../component/mina2/Mina2CustomCodecTest.java      |   21 +-
 .../mina2/Mina2ExchangeDefaultTimeOutTest.java     |    1 +
 .../component/mina2/Mina2ExchangeTimeOutTest.java  |    1 +
 .../camel/component/mina2/Mina2FileTcpTest.java    |    1 +
 .../camel/component/mina2/Mina2FileUdpTest.java    |    1 +
 .../component/mina2/Mina2MaxLineLengthTest.java    |    1 +
 .../mina2/Mina2NoResponseFromServerTest.java       |   26 +-
 .../mina2/Mina2ProducerShutdownMockTest.java       |    1 +
 .../component/mina2/Mina2ProducerShutdownTest.java |    1 +
 .../mina2/Mina2ReverseProtocolHandler.java         |    2 +
 .../mina2/Mina2SslContextParametersTcpTest.java    |    1 +
 .../mina2/Mina2SslContextParametersUdpTest.java    |    1 +
 .../mina2/Mina2SslContextParametersVmTest.java     |    1 +
 .../Mina2SslGlobalContextParametersTcpTest.java    |    1 +
 .../Mina2TcpLineDelimiterUsingPlainSocketTest.java |    1 +
 .../apache/camel/component/mina2/Mina2TcpTest.java |    1 +
 .../mina2/Mina2TcpTextlineDelimiterTest.java       |    1 +
 .../mina2/Mina2TcpTextlineProtocolTest.java        |    1 +
 .../Mina2TcpWithInOutUsingPlainSocketTest.java     |    1 +
 .../Mina2TcpWithIoOutProcessorExceptionTest.java   |    1 +
 .../mina2/Mina2TransferExchangeOptionTest.java     |    1 +
 .../component/mina2/Mina2UdpConcurrentTest.java    |    1 +
 .../apache/camel/component/mina2/Mina2UdpTest.java |    1 +
 .../component/mina2/Mina2UdpUsingTemplateTest.java |    1 +
 .../Mina2UdpWithInOutUsingPlainSocketTest.java     |    1 +
 .../component/mina2/Mina2VMCustomCodecTest.java    |   19 +-
 .../camel/component/mina2/Mina2VMFileTcpTest.java  |    1 +
 .../mina2/Mina2VMTextlineProtocolTest.java         |    1 +
 .../mina2/Mina2VMTransferExchangeOptionTest.java   |    1 +
 .../apache/camel/component/mina2/Mina2VmTest.java  |    1 +
 .../camel-mllp/src/main/docs/mllp-component.adoc   |   22 +-
 .../apache/camel/component/mllp/MllpEndpoint.java  |    2 +
 .../component/mllp/MllpTcpClientProducer.java      |    3 +-
 .../component/mllp/MllpTcpServerConsumer.java      |    2 +-
 .../mllp/internal/TcpServerAcceptThread.java       |    1 +
 ...umerOptionalEndOfDataWithoutValidationTest.java |    2 +
 .../mllp/MllpTcpServerConsumerTransactionTest.java |   10 +-
 .../internal/MllpSocketBufferReadFromTest.java     |    1 +
 .../test/junit/rule/mllp/MllpServerResource.java   |    2 +
 .../camel-mock/src/main/docs/mock-component.adoc   |   42 +-
 .../camel/component/mock/AssertionClause.java      |   16 +-
 .../camel/component/mock/AssertionClauseTask.java  |   27 +
 .../apache/camel/component/mock/AssertionTask.java |   31 +
 .../apache/camel/component/mock/MockEndpoint.java  |  359 +++++--
 .../camel/component/mock/MockExpressionClause.java |   35 -
 .../mock/MockExpressionClauseSupport.java          |   35 -
 .../src/main/docs/mongodb-gridfs-component.adoc    |   30 +-
 .../component/mongodb/gridfs/GridFsComponent.java  |    1 +
 .../component/mongodb/gridfs/GridFsProducer.java   |    1 +
 components/camel-mongodb/pom.xml                   |  117 +++
 .../src/main/docs/mongodb-component.adoc           | 1016 ++++++++++++++++++++
 .../component/mongodb3/CamelMongoDbException.java  |    0
 .../mongodb3/MongoAbstractConsumerThread.java      |    0
 .../mongodb3/MongoDbChangeStreamsConsumer.java     |    0
 .../mongodb3/MongoDbChangeStreamsThread.java       |    0
 .../camel/component/mongodb3/MongoDbComponent.java |   96 ++
 .../camel/component/mongodb3/MongoDbConstants.java |    0
 .../component/mongodb3/MongoDbConsumerType.java    |    0
 .../camel/component/mongodb3/MongoDbEndpoint.java  |  662 +++++++++++++
 .../camel/component/mongodb3/MongoDbOperation.java |    0
 .../component/mongodb3/MongoDbOutputType.java      |    0
 .../camel/component/mongodb3/MongoDbProducer.java  |  635 ++++++++++++
 .../mongodb3/MongoDbTailTrackingConfig.java        |    0
 .../mongodb3/MongoDbTailTrackingManager.java       |    0
 .../mongodb3/MongoDbTailableCursorConsumer.java    |    0
 .../component/mongodb3/MongoDbTailingThread.java   |    0
 .../converters/MongoDbBasicConverters.java         |    0
 .../converters/MongoDbFallbackConverter.java       |    0
 .../idempotent/MongoDbIdempotentRepository.java    |    0
 .../component/mongodb3/AbstractMongoDbTest.java    |    0
 .../mongodb3/EmbedMongoConfiguration.java          |    0
 .../MongoBasicOperationsConfiguration.java         |    0
 .../mongodb3/MongoDbAggregateOperationTest.java    |  121 +++
 .../mongodb3/MongoDbBigDecimalConverterTest.java   |   61 ++
 .../mongodb3/MongoDbBulkWriteOperationTest.java    |  121 +++
 .../mongodb3/MongoDbChangeStreamsConsumerTest.java |  113 +++
 .../mongodb3/MongoDbConnectionBeansTest.java       |   79 ++
 .../component/mongodb3/MongoDbConversionsTest.java |  128 +++
 .../component/mongodb3/MongoDbDynamicityTest.java  |  147 +++
 .../mongodb3/MongoDbExceptionHandlingTest.java     |   93 ++
 .../mongodb3/MongoDbFindOperationTest.java         |  296 ++++++
 .../mongodb3/MongoDbHeaderHandlingTest.java        |  127 +++
 .../camel/component/mongodb3/MongoDbIndexTest.java |  202 ++++
 .../component/mongodb3/MongoDbOperationsTest.java  |  397 ++++++++
 .../component/mongodb3/MongoDbOutputTypeTest.java  |  134 +++
 .../mongodb3/MongoDbReadPreferenceOptionTest.java  |   88 ++
 .../mongodb3/MongoDbSpringDslOperationsTest.java   |    0
 .../mongodb3/MongoDbStopEndpointTest.java          |   56 ++
 .../MongoDbTailableCursorConsumerTest.java         |  434 +++++++++
 .../MongoDbIdempotentRepositoryTest.java           |    0
 .../src/test/resources/log4j2.properties           |    0
 .../src/test/resources/mongodb.test.properties     |    0
 .../mongodb3/mongoBasicOperationsTest.xml          |   92 ++
 components/camel-mongodb3/pom.xml                  |  117 ---
 .../src/main/docs/mongodb3-component.adoc          | 1015 -------------------
 .../camel/component/mongodb3/MongoDbComponent.java |   95 --
 .../camel/component/mongodb3/MongoDbEndpoint.java  |  660 -------------
 .../camel/component/mongodb3/MongoDbProducer.java  |  634 ------------
 .../mongodb3/MongoDbAggregateOperationTest.java    |  121 ---
 .../mongodb3/MongoDbBigDecimalConverterTest.java   |   61 --
 .../mongodb3/MongoDbBulkWriteOperationTest.java    |  121 ---
 .../mongodb3/MongoDbChangeStreamsConsumerTest.java |  113 ---
 .../mongodb3/MongoDbConnectionBeansTest.java       |   79 --
 .../component/mongodb3/MongoDbConversionsTest.java |  128 ---
 .../component/mongodb3/MongoDbDynamicityTest.java  |  147 ---
 .../mongodb3/MongoDbExceptionHandlingTest.java     |   93 --
 .../mongodb3/MongoDbFindOperationTest.java         |  296 ------
 .../mongodb3/MongoDbHeaderHandlingTest.java        |  127 ---
 .../camel/component/mongodb3/MongoDbIndexTest.java |  202 ----
 .../component/mongodb3/MongoDbOperationsTest.java  |  397 --------
 .../component/mongodb3/MongoDbOutputTypeTest.java  |  134 ---
 .../mongodb3/MongoDbReadPreferenceOptionTest.java  |   88 --
 .../mongodb3/MongoDbStopEndpointTest.java          |   56 --
 .../MongoDbTailableCursorConsumerTest.java         |  434 ---------
 .../src/test/resources/mongodb.test.properties     |   21 -
 .../mongodb3/mongoBasicOperationsTest.xml          |   92 --
 .../camel-mqtt/src/main/docs/mqtt-component.adoc   |   18 +-
 .../apache/camel/component/mqtt/MQTTComponent.java |    1 +
 .../apache/camel/component/mqtt/MQTTConsumer.java  |    2 +
 .../apache/camel/component/mqtt/MQTTProducer.java  |    1 +
 .../apache/camel/component/mqtt/MQTTBaseTest.java  |    2 +
 .../mqtt/MQTTConsumerMultipleTopicsTest.java       |    1 +
 .../camel/component/mqtt/MQTTConsumerTest.java     |    1 +
 .../mqtt/MQTTConsumerWildcardTopicsTest.java       |    1 +
 .../camel/component/mqtt/MQTTLoopProducerTest.java |    1 +
 .../component/mqtt/MQTTProducerReconnectTest.java  |    1 +
 .../camel/component/mqtt/MQTTProducerTest.java     |    1 +
 .../camel-msv/src/main/docs/msv-component.adoc     |   16 +-
 .../component/validator/msv/RelaxNGRouteTest.java  |    1 +
 .../src/main/docs/mustache-component.adoc          |   22 +-
 .../component/mustache/MustacheLetterTest.java     |    1 +
 .../camel-mvel/src/main/docs/mvel-component.adoc   |   24 +-
 .../camel-mvel/src/main/docs/mvel-language.adoc    |   14 +-
 .../apache/camel/component/mvel/MvelComponent.java |    1 +
 .../apache/camel/language/mvel/MvelExpression.java |    3 +
 .../apache/camel/language/mvel/MvelLanguage.java   |    2 +
 .../camel/language/mvel/MvelComponentTest.java     |    1 +
 .../org/apache/camel/language/mvel/MvelTest.java   |    1 +
 .../src/main/docs/mybatis-bean-component.adoc      |   16 +-
 .../src/main/docs/mybatis-component.adoc           |   34 +-
 .../mybatis/DefaultMyBatisProcessingStrategy.java  |    2 +
 .../component/mybatis/MyBatisBeanEndpoint.java     |    1 +
 .../component/mybatis/MyBatisBeanProducer.java     |    1 +
 .../camel/component/mybatis/MyBatisConsumer.java   |    2 +
 .../camel/component/mybatis/MyBatisEndpoint.java   |    2 +
 .../camel/component/mybatis/MyBatisProducer.java   |    1 +
 .../camel/component/mybatis/MyBatisQueueTest.java  |    2 +
 .../src/main/docs/nagios-component.adoc            |   18 +-
 .../camel/component/nagios/NagiosEndpoint.java     |    2 +
 .../component/nagios/NagiosEventNotifier.java      |    2 +
 .../camel/component/nagios/NagiosProducer.java     |    1 +
 .../camel-nats/src/main/docs/nats-component.adoc   |   14 +-
 components/camel-netty4-http/pom.xml               |    7 +-
 .../src/main/docs/netty4-http-component.adoc       |   34 +-
 .../netty4/http/DefaultNettySharedHttpServer.java  |    9 +
 .../netty4/http/HttpServerBootstrapFactory.java    |    1 +
 .../component/netty4/http/NettyHttpComponent.java  |    2 +
 .../netty4/http/NettyHttpConfiguration.java        |    2 +
 .../component/netty4/http/NettyHttpEndpoint.java   |    2 +
 .../component/netty4/http/NettyHttpProducer.java   |    2 +-
 .../netty4/http/RestNettyHttpBinding.java          |    1 +
 .../netty4/http/SecurityAuthenticatorSupport.java  |    3 +
 .../HttpServerMultiplexChannelHandler.java         |    6 +
 .../camel/component/netty4/http/BaseNettyTest.java |   11 +-
 .../netty4/http/ManagedNettyEndpointTest.java      |    1 +
 .../NettyHttpBasicAuthConstraintMapperTest.java    |   11 +-
 ...tpBasicAuthCustomSecurityAuthenticatorTest.java |   18 +-
 .../netty4/http/NettyHttpBasicAuthTest.java        |   11 +-
 .../http/NettyHttpBridgeEncodedPathTest.java       |    1 +
 .../NettyHttpBridgeRouteUsingHttpClientTest.java   |    1 +
 .../http/NettyHttpCharacterEncodingTest.java       |    1 +
 .../netty4/http/NettyHttpCompressTest.java         |   11 +-
 ...pEndpointUriCustomHeaderFilterStrategyTest.java |   23 +-
 .../http/NettyHttpFilterCamelHeadersTest.java      |   12 +-
 .../http/NettyHttpGetWithInvalidMessageTest.java   |   37 +-
 .../NettyHttpGetWithParamAsExchangeHeaderTest.java |    1 +
 .../netty4/http/NettyHttpGetWithParamTest.java     |    2 +
 .../NettyHttpHeaderFilterStrategyRemovalTest.java  |   13 +-
 .../netty4/http/NettyHttpMethodRestrictTest.java   |    1 +
 .../http/NettyHttpProducerConcurrentTest.java      |    1 +
 .../netty4/http/NettyHttpProducerSessionTest.java  |   60 +-
 ...ttyHttpSimpleBasicAuthConstraintMapperTest.java |   11 +-
 ...ttyHttpTwoRoutesBootstrapConfigurationTest.java |   11 +-
 .../netty4/http/NettySharedHttpServerTest.java     |   10 +-
 .../netty4/http/rest/RestNettyHttpGetTest.java     |   11 +-
 .../http/rest/RestNettyHttpGetWildcardsTest.java   |   10 +-
 .../src/main/docs/netty4-component.adoc            |   46 +-
 .../ClientModeTCPNettyServerBootstrapFactory.java  |    6 +
 .../netty4/DefaultClientInitializerFactory.java    |    1 +
 .../camel/component/netty4/NettyEndpoint.java      |    2 +
 .../camel/component/netty4/NettyProducer.java      |    1 +
 .../netty4/ShareableChannelHandlerFactory.java     |    1 +
 .../SingleTCPNettyServerBootstrapFactory.java      |    6 +
 .../SingleUDPNettyServerBootstrapFactory.java      |    6 +
 .../component/netty4/codec/ObjectDecoder.java      |    1 +
 .../camel/component/netty4/BaseNettyTest.java      |   22 +-
 .../camel/component/netty4/MultipleCodecsTest.java |   46 +-
 .../NettyConsumerClientModeReconnectTest.java      |    2 +
 .../NettyConsumerClientModeReuseChannelTest.java   |    2 +
 .../netty4/NettyConsumerClientModeTest.java        |    2 +
 .../camel/component/netty4/NettyConverterTest.java |    1 +
 .../component/netty4/NettyCustomCodecTest.java     |   30 +-
 .../netty4/NettyCustomCorrelationManagerTest.java  |   23 +-
 .../NettyCustomPipelineFactoryAsynchTest.java      |   33 +-
 .../NettyCustomPipelineFactorySynchTest.java       |   42 +-
 .../camel/component/netty4/NettyFileTcpTest.java   |    1 +
 .../netty4/NettySSLClientCertHeadersTest.java      |   34 +-
 .../netty4/NettySSLConsumerClientModeTest.java     |   77 +-
 .../netty4/NettySSLContextParametersTest.java      |   41 +-
 .../netty4/NettySSLPassphaseBeanTest.java          |   18 +-
 .../camel/component/netty4/NettySSLTest.java       |   27 +-
 .../component/netty4/NettySingleCodecTest.java     |   20 +-
 .../NettyTcpWithInOutUsingPlainSocketTest.java     |    1 +
 .../netty4/NettyTransferExchangeOptionTest.java    |    1 +
 ...yUDPMessageLargerThanDefaultBufferSizeTest.java |   16 +-
 .../NettyUdpWithInOutUsingPlainSocketTest.java     |    1 +
 ...ttyUseSharedWorkerThreadPoolManyRoutesTest.java |   29 +-
 .../netty4/NettyUseSharedWorkerThreadPoolTest.java |   38 +-
 .../netty4/UnsharableCodecsConflicts2Test.java     |   23 +-
 .../netty4/UnsharableCodecsConflictsTest.java      |   29 +-
 .../camel-nsq/src/main/docs/nsq-component.adoc     |   12 +-
 .../apache/camel/component/nsq/NsqComponent.java   |    1 +
 .../apache/camel/component/nsq/NsqEndpoint.java    |    2 +
 .../camel-ognl/src/main/docs/ognl-language.adoc    |   14 +-
 .../apache/camel/language/ognl/OgnlExpression.java |    2 +
 .../apache/camel/language/ognl/OgnlLanguage.java   |    2 +
 .../camel/language/ognl/MyClassResolver.java       |    1 +
 .../org/apache/camel/language/ognl/OgnlTest.java   |    1 +
 .../camel/language/ognl/patterns/FilterTest.java   |    1 +
 .../olingo2/api/batch/Olingo2BatchRequest.java     |    1 +
 .../src/main/docs/olingo2-component.adoc           |   28 +-
 .../camel/component/olingo2/Olingo2Endpoint.java   |    3 +
 .../olingo4/api/batch/Olingo4BatchRequest.java     |    1 +
 .../src/main/docs/olingo4-component.adoc           |   26 +-
 .../camel/component/olingo4/Olingo4Endpoint.java   |    3 +
 .../src/main/docs/openstack-cinder-component.adoc  |   30 +-
 .../src/main/docs/openstack-glance-component.adoc  |   20 +-
 .../main/docs/openstack-keystone-component.adoc    |   48 +-
 .../src/main/docs/openstack-neutron-component.adoc |   42 +-
 .../src/main/docs/openstack-nova-component.adoc    |   36 +-
 .../src/main/docs/openstack-swift-component.adoc   |   30 +-
 .../camel-openstack/src/main/docs/openstack.adoc   |    2 +-
 .../component/openstack/cinder/CinderEndpoint.java |    2 +
 .../component/openstack/glance/GlanceEndpoint.java |    2 +
 .../openstack/keystone/KeystoneEndpoint.java       |    2 +
 .../openstack/neutron/NeutronEndpoint.java         |    2 +
 .../component/openstack/nova/NovaEndpoint.java     |    2 +
 .../component/openstack/swift/SwiftEndpoint.java   |    2 +
 .../src/main/docs/opentracing.adoc                 |   14 +-
 .../opentracing/decorators/Http4SpanDecorator.java |   26 -
 .../org.apache.camel.opentracing.SpanDecorator     |    1 -
 .../OpentracingSpanCollectorInRegistryTest.java    |   11 +-
 .../agent/InstallOpenTracingTracerRuleTest.java    |   15 +-
 .../src/main/docs/optaplanner-component.adoc       |   22 +-
 .../optaplanner/OptaPlannerComponent.java          |    1 +
 .../optaplanner/OptaPlannerAsyncSolverTest.java    |    1 +
 .../optaplanner/OptaPlannerConsumerTest.java       |    1 +
 .../optaplanner/OptaPlannerDaemonSolverTest.java   |    1 +
 .../optaplanner/OptaPlannerSyncSolverTest.java     |    1 +
 .../camel-paho/src/main/docs/paho-component.adoc   |   19 +-
 .../apache/camel/component/paho/PahoConstants.java |    5 +
 .../apache/camel/component/paho/PahoEndpoint.java  |   21 +-
 .../camel/component/paho/PahoComponentTest.java    |   29 +-
 .../component/paho/PahoOverrideTopicTest.java      |   10 +-
 .../src/main/docs/paxlogging-component.adoc        |   16 +-
 .../component/paxlogging/PaxLoggingConsumer.java   |    1 +
 .../component/paxlogging/PaxLoggingEndpoint.java   |    3 +
 .../camel-pdf/src/main/docs/pdf-component.adoc     |   16 +-
 .../pdf/text/DefaultLineBuilderStrategy.java       |    1 +
 .../main/docs/pg-replication-slot-component.adoc   |   16 +-
 .../src/main/docs/pgevent-component.adoc           |   12 +-
 .../camel/component/pgevent/PgEventConsumer.java   |    1 +
 ...gEventWithDefinedDatasourceIntegrationTest.java |   10 +-
 .../camel-printer/src/main/docs/lpr-component.adoc |   24 +-
 .../camel/component/printer/PrintDocument.java     |    7 +-
 .../camel/component/printer/PrinterEndpoint.java   |    3 +
 .../camel/component/printer/PrinterOperations.java |    1 +
 .../camel/component/printer/PrinterProducer.java   |    1 +
 .../src/main/docs/properties-component.adoc        |   76 +-
 .../AbstractLocationPropertiesSource.java          |    1 +
 .../properties/DefaultPropertiesParser.java        |    1 +
 .../component/properties/FilePropertiesSource.java |    1 +
 .../component/properties/PropertiesComponent.java  |   10 +
 .../component/properties/RefPropertiesSource.java  |    1 +
 .../src/main/docs/protobuf-dataformat.adoc         |   22 +-
 .../dataformat/protobuf/ProtobufDataFormat.java    |    4 +
 .../src/main/docs/pubnub-component.adoc            |   28 +-
 .../camel/component/pubnub/PubNubTestBase.java     |   13 +-
 components/camel-pulsar/pom.xml                    |   65 ++
 .../src/main/docs/pulsar-component.adoc            |   12 +-
 .../component/pulsar/PulsarComponentTest.java      |    1 +
 .../pulsar/PulsarConcurrentConsumerInTest.java     |   19 +-
 .../pulsar/PulsarConcurrentProducerInTest.java     |   20 +-
 .../component/pulsar/PulsarConsumerInTest.java     |   20 +-
 .../component/pulsar/PulsarProducerInTest.java     |   20 +-
 .../src/main/docs/quartz2-component.adoc           |   44 +-
 .../quartz2/CronScheduledRoutePolicy.java          |    1 +
 .../camel/routepolicy/quartz2/ScheduledJob.java    |    1 +
 .../quartz2/SimpleScheduledRoutePolicy.java        |    1 +
 .../quartz2/QuartzCustomCalendarFireTest.java      |   18 +-
 .../quartz2/QuartzCustomCalendarNoFireTest.java    |   18 +-
 .../QuartzStartDelayedWithReferenceTest.java       |   19 +-
 .../src/main/docs/quickfix-component.adoc          |   62 +-
 .../src/main/docs/rabbitmq-component.adoc          |   24 +-
 .../camel/component/rabbitmq/RabbitConsumer.java   |    5 +
 .../rabbitmq/RabbitMQMessagePublisher.java         |    2 +-
 .../camel/component/rabbitmq/RabbitMQProducer.java |    1 +
 .../rabbitmq/reply/ReplyManagerSupport.java        |    7 +
 .../rabbitmq/reply/TemporaryQueueReplyHandler.java |    2 +
 .../rabbitmq/reply/TemporaryQueueReplyManager.java |    2 +
 ...essageIdAsCorrelationIdMessageSentCallback.java |    1 +
 .../rabbitmq/RabbitMQConsumerIntTest.java          |   16 +-
 .../component/rabbitmq/RabbitMQEndpointTest.java   |    8 +-
 .../component/rabbitmq/RabbitMQInOutIntTest.java   |   11 +-
 .../RabbitMQLookupConnectionFactoryTest.java       |    8 +-
 .../src/main/docs/reactive-executor-vertx.adoc     |    8 +-
 .../src/main/docs/reactive-streams-component.adoc  |   38 +-
 .../engine/DefaultCamelReactiveStreamsService.java |    3 +
 .../reactive/streams/DirectClientAPITest.java      |   91 +-
 .../src/main/docs/reactor-component.adoc           |    2 +-
 .../reactor/engine/ReactorStreamsService.java      |    1 +
 .../reactor/engine/ReactorStreamsServiceTest.java  |   12 +-
 .../camel-ref/src/main/docs/ref-component.adoc     |   16 +-
 .../apache/camel/component/ref/RefComponent.java   |    1 +
 components/camel-rest-swagger/pom.xml              |    2 +-
 .../src/main/docs/rest-swagger-component.adoc      |   17 +-
 .../camel/component/rest/swagger/HttpsTest.java    |    6 -
 .../src/main/docs/rest-api-component.adoc          |   12 +-
 .../camel-rest/src/main/docs/rest-component.adoc   |   29 +-
 .../camel/component/rest/DefaultRestRegistry.java  |   19 +-
 .../rest/RestProducerBindingProcessor.java         |    2 +-
 components/camel-restlet/pom.xml                   |   11 +-
 .../src/main/docs/restlet-component.adoc           |   30 +-
 .../component/restlet/DefaultRestletBinding.java   |   10 +-
 .../camel/component/restlet/RestletComponent.java  |    2 +
 .../camel/component/restlet/RestletEndpoint.java   |    4 +
 .../RecipientListInflightExchangesTest.java        |    1 +
 .../RestRestletCustomDataFormatInvalidTest.java    |   22 +-
 .../component/restlet/RestRestletGetTest.java      |   28 +-
 .../component/restlet/RestRestletRouterIdTest.java |  100 +-
 .../RestletHttpsWithSSLContextParametersTest.java  |   46 +-
 .../restlet/RestletMultiMethodsEndpointTest.java   |    1 +
 .../restlet/RestletMultiRoutesEndpointTest.java    |    1 +
 .../component/restlet/RestletPostContentTest.java  |    3 +-
 .../component/restlet/RestletPostFormTest.java     |    3 +-
 .../component/restlet/RestletProducerSSLTest.java  |   14 +-
 .../restlet/RestletProducerSessionTest.java        |   66 +-
 .../camel/component/restlet/RestletQueryTest.java  |    3 +-
 .../restlet/RestletValidUriQueryTest.java          |    3 +-
 components/camel-ribbon/pom.xml                    |    2 +-
 components/camel-ribbon/src/main/docs/ribbon.adoc  |    6 +-
 .../camel-rss/src/main/docs/rss-component.adoc     |   22 +-
 .../camel-rss/src/main/docs/rss-dataformat.adoc    |    6 +-
 .../component/rss/AggregateRssFeedStrategy.java    |    1 +
 .../apache/camel/component/rss/RssComponent.java   |    1 +
 .../camel/component/rss/RssDateComparator.java     |    1 +
 .../component/rss/RssEntryPollingConsumer.java     |    1 +
 .../camel/component/rss/UpdatedDateFilter.java     |    1 +
 .../apache/camel/dataformat/rss/RssDataFormat.java |    2 +
 .../camel/component/rss/RssEndpointTest.java       |    1 +
 .../component/rss/RssEntryPollingConsumerTest.java |    1 +
 .../rss/RssEntryPollingConsumerWithFilterTest.java |    1 +
 .../component/rss/RssEntrySortDefaultsTest.java    |    1 +
 .../camel/component/rss/RssEntrySortTest.java      |    1 +
 .../apache/camel/component/rss/RssFilterTest.java  |    1 +
 .../component/rss/RssPollingConsumerTest.java      |    1 +
 ...sPollingConsumerWithFeedHeaderDisabledTest.java |    1 +
 .../camel/dataformat/rss/RssConverterTest.java     |    1 +
 .../camel/dataformat/rss/RssDataFormatTest.java    |    1 +
 .../dataformat/rss/RssFilterWithXPathTest.java     |    1 +
 components/camel-rxjava/pom.xml                    |   97 ++
 components/camel-rxjava/src/main/docs/rxjava.adoc  |   20 +
 .../rxjava2/engine/RxJavaCamelProcessor.java       |    0
 .../rxjava2/engine/RxJavaStreamsConstants.java     |   38 +
 .../rxjava2/engine/RxJavaStreamsService.java       |  329 +++++++
 .../engine/RxJavaStreamsServiceFactory.java        |    0
 .../org/apache/camel/reactive-streams/rxjava}      |    0
 .../RxJavaStreamsServiceBackpressureTest.java      |    0
 .../engine/RxJavaStreamsServiceEventTypeTest.java  |    0
 .../engine/RxJavaStreamsServiceSubscriberTest.java |    0
 .../rxjava2/engine/RxJavaStreamsServiceTest.java   |  334 +++++++
 .../engine/RxJavaStreamsServiceTestSupport.java    |    0
 .../rxjava2/engine/suport/TestSubscriber.java      |    0
 .../src/test/resources/log4j2.properties           |   33 +
 components/camel-rxjava2/pom.xml                   |   97 --
 .../camel-rxjava2/src/main/docs/rxjava2.adoc       |   20 -
 .../rxjava2/engine/RxJavaStreamsConstants.java     |   38 -
 .../rxjava2/engine/RxJavaStreamsService.java       |  328 -------
 .../rxjava2/engine/RxJavaStreamsServiceTest.java   |  403 --------
 .../src/test/resources/log4j2.properties           |   33 -
 .../camel-saga/src/main/docs/saga-component.adoc   |   12 +-
 .../src/main/docs/salesforce-component.adoc        |   56 +-
 .../component/salesforce/SalesforceComponent.java  |    4 +-
 .../component/salesforce/SalesforceConsumer.java   |    1 +
 .../component/salesforce/SalesforceEndpoint.java   |    3 +
 .../salesforce/api/dto/SObjectDescription.java     |    1 +
 .../internal/client/AbstractClientBase.java        |    1 +
 .../internal/client/DefaultRestClient.java         |    1 +
 .../internal/client/SalesforceSecurityHandler.java |    1 +
 .../internal/processor/XmlRestProcessor.java       |    1 +
 .../ApprovalExamplesIntegrationTest.java           |   11 +-
 .../CompositeApiBatchIntegrationTest.java          |    4 +-
 components/camel-sap-netweaver/pom.xml             |    2 +-
 .../src/main/docs/sap-netweaver-component.adoc     |   22 +-
 .../src/main/docs/xquery-component.adoc            |   30 +-
 .../camel-saxon/src/main/docs/xquery-language.adoc |   26 +-
 .../camel/component/xquery/XQueryBuilder.java      |    5 +
 .../camel/component/xquery/XQueryComponent.java    |    1 +
 .../component/xquery/XQueryModuleURIResolver.java  |    1 +
 .../camel/language/xquery/XQueryLanguage.java      |    2 +
 .../camel/builder/XsltAggregationStrategyTest.java |    1 +
 .../builder/saxon/BeanWithXQueryInjectionTest.java |    1 +
 .../saxon/XPathAnnotationResultTypeTest.java       |    1 +
 .../camel/builder/saxon/XQueryFilterTest.java      |    1 +
 ...XQueryHeaderNameResultTypeAndNamespaceTest.java |    1 +
 .../camel/builder/saxon/XQueryHeaderNameTest.java  |    1 +
 .../builder/saxon/XQueryRecipientListTest.java     |    1 +
 .../camel/builder/saxon/XQueryTransformTest.java   |    1 +
 .../builder/saxon/XQueryTransformTextTest.java     |    1 +
 .../saxon/XQueryWithNamespacesFilterTest.java      |    1 +
 .../component/xquery/XQueryConcurrencyTest.java    |    1 +
 .../camel/component/xquery/XQueryEndpointTest.java |    1 +
 .../camel/component/xquery/XQueryExampleTest.java  |    1 +
 .../camel/component/xquery/XQueryFromFileTest.java |    1 +
 .../xquery/XQueryLanguageFromFileTest.java         |    1 +
 .../component/xquery/XQueryNullHeaderTest.java     |    1 +
 .../xquery/XQueryPropogateHeadersTest.java         |    1 +
 .../xquery/XQueryURLBasedConcurrencyTest.java      |    1 +
 .../xquery/XQueryWithExplicitTypeTest.java         |    1 +
 .../component/xquery/XQueryWithExtensionTest.java  |   11 +-
 .../component/xslt/SaxonXsltFeatureRouteTest.java  |    4 +-
 .../camel/converter/saxon/SaxonConverterTest.java  |    1 +
 .../camel/language/xpath/XPathLanguageTest.java    |    1 +
 .../src/main/docs/scheduler-component.adoc         |   24 +-
 .../src/main/docs/schematron-component.adoc        |   18 +-
 .../component/schematron/SchematronComponent.java  |    1 +
 .../component/schematron/SchematronEndpoint.java   |    2 +
 .../component/schematron/SchematronProducer.java   |    1 +
 .../camel-seda/src/main/docs/seda-component.adoc   |   28 +-
 .../apache/camel/component/seda/SedaConsumer.java  |    7 +
 .../apache/camel/component/seda/SedaEndpoint.java  |    4 +
 .../apache/camel/component/seda/SedaProducer.java  |    4 +-
 .../src/main/docs/service-component.adoc           |   18 +-
 .../src/main/docs/servicenow-component.adoc        |   16 +-
 .../component/servicenow/ServiceNowParams.java     |    6 +
 components/camel-servlet/pom.xml                   |    5 +
 .../src/main/docs/servlet-component.adoc           |   36 +-
 .../camel/component/servlet/ServletEndpoint.java   |    2 +-
 .../ExposedServletEndpointURIToJMXTest.java        |    1 +
 .../servlet/HttpClientRouteExampleSpringTest.java  |    2 +
 .../servlet/HttpClientRouteSpringTest.java         |    2 +
 .../component/servlet/HttpClientRouteTest.java     |    1 +
 .../servlet/MultiServletConsumerTest.java          |    2 +
 .../servlet/ServletCamelRouterTestSupport.java     |    2 +
 .../servlet/ServletNoSlashNeededTest.java          |    1 +
 .../component/servlet/ServletRootPathTest.java     |    1 +
 .../component/servlet/ServletSetBodyTest.java      |    1 +
 .../component/servlet/rest/RestServletGetTest.java |   31 +-
 .../servlet/rest/RestServletGetWildcardsTest.java  |   45 +-
 .../rest/RestServletMethodNotAllowedTest.java      |   31 +-
 .../servlet/rest/RestServletOptionsTest.java       |   25 +-
 components/camel-shiro/src/main/docs/shiro.adoc    |   18 +-
 .../shiro/security/ShiroSecurityPolicy.java        |    2 +
 .../shiro/security/ShiroSecurityTokenInjector.java |    1 +
 .../security/ShiroAuthenticationBase64Test.java    |    2 +
 ...nticationReauthenticateFalseAndNewUserTest.java |    2 +
 .../shiro/security/ShiroAuthenticationTest.java    |    2 +
 .../shiro/security/ShiroAuthorizationTest.java     |    1 +
 .../security/ShiroRolesAuthorizationTest.java      |    1 +
 .../camel-sip/src/main/docs/sip-component.adoc     |   18 +-
 .../apache/camel/component/sip/SipEndpoint.java    |    2 +
 .../apache/camel/component/sip/SipPublisher.java   |    1 +
 .../sip/listener/SipPresenceAgentListener.java     |    6 +
 .../component/sip/listener/SipPublishListener.java |    8 +-
 .../sip/listener/SipSubscriptionListener.java      |    6 +
 .../src/main/docs/sjms-batch-component.adoc        |   12 +-
 .../camel-sjms/src/main/docs/sjms-component.adoc   |   46 +-
 .../apache/camel/component/sjms/SjmsEndpoint.java  |    4 +
 .../apache/camel/component/sjms/SjmsMessage.java   |    1 +
 .../apache/camel/component/sjms/SjmsProducer.java  |    2 +
 .../component/sjms/batch/SjmsBatchConsumer.java    |    1 +
 .../component/sjms/batch/SjmsBatchEndpoint.java    |    2 +
 .../sjms/consumer/InOutMessageHandler.java         |    3 +-
 .../sjms/jms/DefaultJmsKeyFormatStrategy.java      |    2 +
 .../component/sjms/jms/Jms11ObjectFactory.java     |    2 +
 .../tx/SessionBatchTransactionSynchronization.java |    1 +
 .../component/sjms/AsyncStartStopListenerTest.java |    1 +
 .../component/sjms/JmsSelectorOptionTest.java      |    1 +
 .../camel/component/sjms/JmsSelectorTest.java      |    1 +
 .../component/sjms/SjmsComponentRestartTest.java   |   14 +-
 .../sjms/SjmsEndpointNameOverrideTest.java         |    1 +
 .../camel/component/sjms/SjmsEndpointTest.java     |    1 +
 .../component/sjms/bugfixes/CAMEL6820Test.java     |    1 +
 .../sjms/consumer/AsyncConsumerFalseTest.java      |    1 +
 .../sjms/consumer/AsyncConsumerInOutTest.java      |    1 +
 .../sjms/consumer/EmptyMessageBodyTest.java        |    1 +
 .../InOnlyConsumerQueueSynchronousTest.java        |    1 +
 .../sjms/consumer/InOnlyConsumerQueueTest.java     |    1 +
 .../sjms/consumer/InOnlyConsumerTempQueueTest.java |    1 +
 .../sjms/consumer/InOnlyConsumerTopicTest.java     |    1 +
 .../sjms/consumer/InOutConcurrentConsumerTest.java |    2 +
 .../sjms/consumer/InOutConsumerQueueAsyncTest.java |    1 +
 .../sjms/consumer/InOutConsumerQueueTest.java      |    1 +
 .../consumer/InOutConsumerTempQueueAsyncTest.java  |    1 +
 .../sjms/consumer/InOutConsumerTempQueueTest.java  |    1 +
 .../sjms/consumer/InOutConsumerTopicTest.java      |    1 +
 .../consumer/InOutSynchronousConsumerTest.java     |    1 +
 .../sjms/producer/AsyncQueueProducerTest.java      |    1 +
 .../sjms/producer/AsyncTopicProducerTest.java      |    1 +
 .../component/sjms/producer/PrefillPoolTest.java   |    1 +
 .../component/sjms/support/MockConnection.java     |    1 +
 .../sjms/support/MockConnectionFactory.java        |    2 +
 .../sjms/support/MockMessageConsumer.java          |    1 +
 .../camel/component/sjms/support/MockSession.java  |    2 +
 .../component/sjms/support/MyAsyncEndpoint.java    |    3 +
 .../component/sjms/support/MyAsyncProducer.java    |    2 +
 .../sjms/support/MyInOutTestConsumer.java          |    1 +
 .../camel-sjms2/src/main/docs/sjms2-component.adoc |   50 +-
 .../component/sjms2/Sjms2ComponentRestartTest.java |   18 +-
 .../sjms2/Sjms2EndpointNameOverrideTest.java       |    1 +
 .../camel/component/sjms2/Sjms2EndpointTest.java   |    1 +
 .../camel-slack/src/main/docs/slack-component.adoc |   20 +-
 .../camel/component/slack/SlackConsumerTest.java   |    1 +
 .../camel-smpp/src/main/docs/smpp-component.adoc   |   30 +-
 .../smpp/MessageReceiverListenerImpl.java          |    3 +
 .../component/smpp/SmppConnectionFactory.java      |    1 +
 .../apache/camel/component/smpp/SmppEndpoint.java  |    2 +
 .../camel/component/smpp/SmppNLSTSplitter.java     |    1 +
 .../apache/camel/component/smpp/SmppProducer.java  |    1 +
 .../integration/SmppComponentIntegrationTest.java  |    1 +
 .../SmppConsumerReconnectIntegrationTest.java      |    1 +
 .../SmppProducerReconnectIntegrationTest.java      |    1 +
 .../src/main/docs/yaml-snakeyaml-dataformat.adoc   |   12 +-
 .../camel-snmp/src/main/docs/snmp-component.adoc   |   20 +-
 .../apache/camel/component/snmp/SnmpEndpoint.java  |    3 +
 .../apache/camel/component/snmp/SnmpOIDPoller.java |    1 +
 .../camel/component/snmp/SnmpTrapConsumer.java     |    1 +
 .../apache/camel/component/snmp/PollOIDTest.java   |    1 +
 .../org/apache/camel/component/snmp/TrapTest.java  |    1 +
 .../src/main/docs/soapjaxb-dataformat.adoc         |   24 +-
 .../dataformat/soap/Soap11DataFormatAdapter.java   |    1 +
 .../dataformat/soap/Soap12DataFormatAdapter.java   |    1 +
 .../camel/dataformat/soap/SoapJaxbDataFormat.java  |    2 +
 .../camel/dataformat/soap/name/QNameStrategy.java  |    2 +
 .../soap/name/ServiceInterfaceStrategy.java        |    2 +
 .../dataformat/soap/name/TypeNameStrategy.java     |    2 +
 .../camel/dataformat/soap/FileReplyProcessor.java  |    1 +
 .../camel/dataformat/soap/SoapCxfClientTest.java   |    1 +
 .../camel/dataformat/soap/SoapCxfServerTest.java   |    1 +
 .../camel-solr/src/main/docs/solr-component.adoc   |   22 +-
 .../src/main/docs/soroush-component.adoc           |   24 +-
 .../soroushbot/support/SoroushMockServer.java      |    1 +
 components/camel-spark-rest/pom.xml                |    2 +-
 .../src/main/docs/spark-rest-component.adoc        |   18 +-
 .../camel/component/sparkrest/CamelSparkRoute.java |    2 +-
 .../camel-spark/src/main/docs/spark-component.adoc |   30 +-
 .../camel/component/spark/SparkProducerTest.java   |    7 +-
 .../src/main/docs/splunk-component.adoc            |   24 +-
 .../splunk/DefaultSplunkConfigurationFactory.java  |    1 +
 .../camel/component/splunk/SplunkComponent.java    |    1 +
 .../camel/component/splunk/SplunkEndpoint.java     |    2 +
 .../camel/component/splunk/SplunkProducer.java     |    1 +
 .../component/splunk/support/SplunkDataWriter.java |    3 +
 .../src/main/docs/spring-batch-component.adoc      |   26 +-
 .../spring/batch/SpringBatchEndpointTest.java      |    6 +-
 .../spring/batch/SpringBatchIntegrationTest.java   |    1 +
 .../spring/batch/SpringBatchJobLauncherTest.java   |    1 +
 components/camel-spring-boot/pom.xml               |    2 +-
 .../src/main/docs/spring-boot.adoc                 |   38 +-
 .../spring/boot/CamelConfigurationProperties.java  |   15 +
 .../cloud/CamelCloudConfigurationProperties.java   |    2 +-
 components/camel-spring-cloud-consul/pom.xml       |    2 +-
 .../src/main/docs/spring-cloud-consul.adoc         |    2 +-
 components/camel-spring-cloud-netflix/pom.xml      |    2 +-
 .../src/main/docs/spring-cloud-netflix.adoc        |    4 +-
 components/camel-spring-cloud-zookeeper/pom.xml    |    2 +-
 .../src/main/docs/spring-cloud-zookeeper.adoc      |    2 +-
 components/camel-spring-cloud/pom.xml              |    2 +-
 .../src/main/docs/spring-cloud.adoc                |    4 +-
 .../main/docs/spring-integration-component.adoc    |   22 +-
 .../integration/SpringIntegrationComponent.java    |    1 +
 .../integration/SpringIntegrationConsumer.java     |    3 +
 .../integration/SpringIntegrationEndpoint.java     |    3 +
 .../integration/SpringIntegrationMessage.java      |    1 +
 .../integration/SpringIntegrationProducer.java     |    1 +
 .../integration/adapter/CamelSourceAdapter.java    |    3 +
 .../integration/adapter/CamelTargetAdapter.java    |    1 +
 .../AbstractCamelContextBeanDefinitionParaser.java |    1 +
 .../adapter/config/NamespaceHandler.java           |    1 +
 .../component/spring/integration/MyProcessor.java  |    1 +
 .../SpringIntegrationChannelConverterTest.java     |    1 +
 .../SpringIntegrationOneWayConsumerTest.java       |    1 +
 .../integration/SpringIntegrationProducerTest.java |    1 +
 .../SpringIntegrationTwoWayConsumerTest.java       |    1 +
 .../src/main/docs/spring-javaconfig.adoc           |    8 +-
 .../spring/javaconfig/CamelConfiguration.java      |    2 +
 .../org/apache/camel/spring/javaconfig/Main.java   |    1 +
 .../spring/javaconfig/config/ContextConfig.java    |    1 +
 .../spring/javaconfig/patterns/FilterTest.java     |    1 +
 .../test/JavaConfigWithNestedConfigClassTest.java  |    1 +
 .../test/JavaConfigWithPostProcessorTest.java      |    1 +
 .../spring/javaconfig/test/MyPostProcessor.java    |    2 +
 .../src/main/docs/spring-ldap-component.adoc       |   26 +-
 .../springldap/SpringLdapProducerTest.java         |    1 +
 .../src/main/docs/spring-redis-component.adoc      |   20 +-
 .../component/redis/AllRedisProcessorsCreator.java |    1 +
 .../camel/component/redis/RedisComponent.java      |    1 +
 .../camel/component/redis/RedisEndpoint.java       |    3 +
 .../idempotent/RedisIdempotentRepository.java      |    8 +
 .../camel/component/redis/RedisConnectionTest.java |   10 +-
 .../redis/RedisConsumerIntegrationTest.java        |    7 +-
 .../camel/component/redis/RedisConsumerTest.java   |   11 +-
 .../apache/camel/component/redis/RedisGeoTest.java |   10 +-
 .../camel/component/redis/RedisHashTest.java       |    7 +-
 .../apache/camel/component/redis/RedisKeyTest.java |   10 +-
 .../camel/component/redis/RedisListTest.java       |    7 +-
 .../redis/RedisProducerIntegrationTest.java        |   12 +-
 .../apache/camel/component/redis/RedisSetTest.java |    7 +-
 .../camel/component/redis/RedisSortedSetTest.java  |    7 +-
 .../camel/component/redis/RedisStringTest.java     |    7 +-
 .../component/redis/RedisTransactionTest.java      |   10 +-
 ...sStringIdempotentRepositoryIntegrationTest.java |    7 +-
 .../src/main/docs/spring-security.adoc             |   14 +-
 .../security/DefaultAuthenticationAdapter.java     |    1 +
 .../SpringSecurityAuthorizationPolicy.java         |    5 +
 .../security/config/BeanDefinitionParser.java      |    2 +
 .../spring/security/config/NamespaceHandler.java   |    1 +
 .../SpringSecurityAuthorizationPolicyParser.java   |    2 +
 .../src/main/docs/spring-ws-component.adoc         |   40 +-
 .../spring/ws/SpringWebserviceComponent.java       |    1 +
 .../spring/ws/SpringWebserviceConsumer.java        |    3 +-
 .../spring/ws/SpringWebserviceEndpoint.java        |    2 +
 .../spring/ws/SpringWebserviceProducer.java        |    2 +
 .../spring/ws/bean/CamelEndpointDispatcher.java    |    1 +
 .../spring/ws/bean/CamelEndpointMapping.java       |    6 +
 .../spring/ws/bean/WSACamelEndpointMapping.java    |    2 +
 .../spring/ws/filter/impl/BasicMessageFilter.java  |    2 +-
 .../impl/HeaderTransformationMessageFilter.java    |    2 +-
 .../spring/ws/ConsumerBreadcrumbIdTest.java        |    9 +-
 ...ConsumerEndpointMappingByBeanNameRouteTest.java |    1 +
 ...erEndpointMappingResponseHandlingRouteTest.java |    1 +
 .../ws/ConsumerEndpointMappingRouteTest.java       |    1 +
 .../ws/ConsumerExceptionPropagationRouteTest.java  |    7 +-
 .../spring/ws/ConsumerMarshallingRouteTest.java    |    7 +-
 .../ws/MessageFilterResolvingDefaultsTest.java     |    1 +
 .../spring/ws/MessageFilterResolvingTest.java      |    1 +
 .../spring/ws/SoapAttachmentResponseProcessor.java |    1 +
 .../spring/ws/SoapHeaderResponseProcessor.java     |    1 +
 .../spring/ws/StockQuoteResponseProcessor.java     |    1 +
 .../spring/ws/addressing/AbstractWSATests.java     |    1 +
 .../ws/addressing/CamelDirectSenderTest.java       |    1 +
 .../ConsumerWSAEndpointMappingRouteTest.java       |    1 +
 .../ConsumerWSANewChannelParamsActionTests.java    |    1 +
 .../ConsumerWSANewChannelParamsToTests.java        |    1 +
 .../ConsumerWSASameChannelParamsActionTests.java   |    1 +
 .../ConsumerWSASameChannelParamsToTests.java       |    1 +
 .../ws/addressing/ProducerParamsBasicTest.java     |    1 +
 .../addressing/ProducerParamsPrecedenceTest.java   |    1 +
 .../spring/ws/addressing/StaticIdStrategy.java     |    1 +
 .../ws/processor/FaultResponseProcessor.java       |    1 +
 .../spring/ws/processor/OkResponseProcessor.java   |    1 +
 .../spring/ws/processor/PrecedenceProcessor.java   |    1 +
 ...ProducerWss4JSecurityHeaderTestInterceptor.java |    1 +
 components/camel-spring/pom.xml                    |    5 +
 .../camel-spring/src/main/docs/spel-language.adoc  |   16 +-
 .../src/main/docs/spring-event-component.adoc      |   14 +-
 components/camel-spring/src/main/docs/spring.adoc  |   30 +-
 .../camel/component/event/EventComponent.java      |    2 +
 .../camel/component/event/EventEndpoint.java       |    3 +
 .../org/apache/camel/language/spel/RootObject.java |    5 +
 .../apache/camel/language/spel/SpelExpression.java |    2 +
 .../apache/camel/language/spel/SpelLanguage.java   |    2 +
 .../spring/CamelConsumerTemplateFactoryBean.java   |    1 +
 .../camel/spring/CamelContextFactoryBean.java      |   70 ++
 .../camel/spring/CamelEndpointFactoryBean.java     |    1 +
 .../CamelFluentProducerTemplateFactoryBean.java    |    1 +
 .../spring/CamelProducerTemplateFactoryBean.java   |    1 +
 .../spring/CamelRedeliveryPolicyFactoryBean.java   |    1 +
 .../camel/spring/CamelRestContextFactoryBean.java  |    3 +
 .../camel/spring/CamelRouteContextFactoryBean.java |    3 +
 .../camel/spring/CamelThreadPoolFactoryBean.java   |    1 +
 .../camel/spring/ErrorHandlerDefinition.java       |   77 +-
 .../main/java/org/apache/camel/spring/Main.java    |    2 +
 .../spring/SpringModelJAXBContextFactory.java      |    1 +
 .../apache/camel/spring/SpringRouteBuilder.java    |    3 +-
 .../camel/spring/handler/BeanDefinitionParser.java |    2 +
 .../spring/handler/CamelNamespaceHandler.java      |    1 +
 .../handler/ErrorHandlerDefinitionParser.java      |    8 +
 .../spring/remoting/CamelProxyFactoryBean.java     |    9 +
 .../spring/remoting/CamelServiceExporter.java      |    5 +
 .../spi/BridgePropertyPlaceholderConfigurer.java   |    1 +
 .../apache/camel/spring/spi/SpringInjector.java    |    1 +
 .../spring/spi/SpringManagementMBeanAssembler.java |    1 +
 .../camel/spring/spi/SpringTransactionPolicy.java  |    2 +
 .../camel/spring/spi/TransactionErrorHandler.java  |    3 +-
 .../spring/spi/TransactionErrorHandlerBuilder.java |    3 +
 .../spring/spi/TransactionErrorHandlerReifier.java |    1 +
 .../org/apache/camel/spring/util/MainRunner.java   |    3 +
 .../spring/KeyManagersParametersFactoryBean.java   |    1 +
 .../util/spring/KeyStoreParametersFactoryBean.java |    1 +
 .../SSLContextClientParametersFactoryBean.java     |    1 +
 .../spring/SSLContextParametersFactoryBean.java    |    1 +
 .../SSLContextServerParametersFactoryBean.java     |    1 +
 .../spring/SecureRandomParametersFactoryBean.java  |    1 +
 .../spring/TrustManagersParametersFactoryBean.java |    1 +
 .../bean/AutowireConstructorRouteTest.java         |    1 +
 .../bean/AutowireConstructorRouteTwoTest.java      |    1 +
 .../camel/component/bean/BeanBindingTest.java      |    1 +
 .../apache/camel/component/bean/BeanRouteTest.java |    1 +
 .../bean/SpringRouteMethodCallStaticTest.java      |    1 +
 .../camel/component/event/EventRouteTest.java      |    1 +
 .../camel/component/event/MistypedPackageTest.java |    1 +
 .../component/log/CustomExchangeFormatterTest.java |    1 +
 .../camel/component/log/SpringLogMarkerTest.java   |    1 +
 .../apache/camel/component/log/SpringLogTest.java  |    1 +
 .../SpringOptionalPropertiesDslTest.java           |    1 +
 ...pertiesComponentEIPChoiceConvertBodyToTest.java |    1 +
 ...ingPropertiesComponentEIPConvertBodyToTest.java |    1 +
 ...SpringPropertiesComponentInterceptFromTest.java |    1 +
 ...pringPropertiesComponentOnExceptionRefTest.java |    1 +
 .../SpringPropertiesComponentOnExceptionTest.java  |    1 +
 .../properties/SpringPropertiesRouteFromTest.java  |    1 +
 .../properties/SpringPropertiesRouteIdTest.java    |    1 +
 ...pringPropertyPlaceholderOnExceptionRefTest.java |    1 +
 .../rest/SpringFromRestConfigurationTest.java      |    1 +
 .../rest/SpringFromRestGetEmbeddedRouteTest.java   |    1 +
 .../rest/SpringFromRestGetInterceptTest.java       |    1 +
 .../rest/SpringFromRestGetOnExceptionTest.java     |    1 +
 .../SpringFromRestGetRouteOnExceptionTest.java     |    1 +
 .../component/rest/SpringFromRestGetTest.java      |    1 +
 .../rest/SpringFromRestIdAndDescriptionTest.java   |    1 +
 .../rest/SpringFromRestUriPrefixTest.java          |    1 +
 .../validator/SpringValidatorRouteTest.java        |    1 +
 .../component/xslt/SpringXsltRouteFileTest.java    |    1 +
 .../camel/component/xslt/SpringXsltRouteTest.java  |    1 +
 .../SpringTokenXMLPairNamespaceSplitTest.java      |    1 +
 .../camel/language/SpringXMLTokenSplitTest.java    |    1 +
 .../apache/camel/language/spel/SpelRouteTest.java  |    2 +-
 .../apache/camel/language/spel/SpelSpringTest.java |    1 +
 .../org/apache/camel/language/spel/SpelTest.java   |    3 +
 .../camel/processor/RemoveHeadersExcludeTest.java  |    1 +
 .../apache/camel/spring/CamelContextAwareBean.java |    2 +
 .../apache/camel/spring/CamelContextAwareTest.java |    1 +
 .../camel/spring/CamelLoadRoutesFromXMLTest.java   |    1 +
 .../apache/camel/spring/EndpointReferenceTest.java |    2 +
 .../apache/camel/spring/EndpointToIdRefTest.java   |    1 +
 .../org/apache/camel/spring/InjectedBeanTest.java  |    1 +
 .../apache/camel/spring/RegistryInjectionTest.java |    6 +-
 .../RouteRefCamelContextFactoryBeanTest.java       |    2 +
 .../spring/SpringLogDebugBodyMaxCharsTest.java     |    1 +
 .../org/apache/camel/spring/SpringMDCTest.java     |    2 +
 .../camel/spring/SpringMDCTransactedTest.java      |   62 +-
 .../SpringMDCWithBreadcrumbDisabledTest.java       |    2 +
 .../camel/spring/SpringMDCWithBreadcrumbTest.java  |    2 +
 .../camel/spring/StartAndStopEventNotifier.java    |    4 +
 .../aop/SpringAopClassLevelCamelBeanTest.java      |    1 +
 .../camel/spring/bind/BeanAsEndpointTest.java      |    1 +
 .../camel/spring/bind/ProcessorAsEndpointTest.java |    1 +
 .../apache/camel/spring/bind/ProcessorStub.java    |    1 +
 .../DefaultPackageResolverConfigureTest.java       |    1 +
 .../DualCamelContextEndpointOutsideTest.java       |    1 +
 .../spring/config/DummyErrorHandlerBuilder.java    |    3 +
 .../camel/spring/config/ErrorHandlerTest.java      |    1 +
 .../camel/spring/config/MyFailureProcessor.java    |    1 +
 ...lContextCustomDefaultThreadPoolProfileTest.java |    1 +
 ...ingCamelContextCustomThreadPoolProfileTest.java |    1 +
 ...xtSimpleCustomDefaultThreadPoolProfileTest.java |    1 +
 .../SpringCamelContextThreadPoolProfilesTest.java  |    1 +
 ...ntextThreadPoolProfilesWithPlaceholderTest.java |    1 +
 .../spring/config/scan/component/MyProcessor.java  |    1 +
 .../spring/example/ContentBasedRouteTest.java      |    1 +
 .../camel/spring/example/FooEventRouteTest.java    |    1 +
 .../camel/spring/example/MyCamel1Consumer.java     |   49 -
 .../camel/spring/example/MyCamel2Consumer.java     |   49 -
 .../spring/example/MyCamel2RecipientList.java      |   36 -
 .../apache/camel/spring/example/MyProcessor.java   |    1 +
 .../camel/spring/example/PojoConsumerTest.java     |    1 +
 .../example/PojoDualCamelContextConsumerTest.java  |  117 ---
 .../camel/spring/example/PojoSenderTest.java       |    1 +
 .../camel/spring/example/PojoVmConsumerTest.java   |    1 +
 .../camel/spring/example/SimpleRouteTest.java      |    1 +
 .../camel/spring/example/test1/MyRouteBuilder.java |    1 +
 .../SpringFileAntPathMatcherFileFilterTest.java    |    1 +
 .../file/SpringFileConsumerPreMoveIssueTest.java   |    1 +
 .../spring/file/SpringFileConsumerPreMoveTest.java |    1 +
 .../camel/spring/file/SpringFileRouteTest.java     |    1 +
 .../file/SpringSimpleFileNameWithQuoteTest.java    |    1 +
 .../camel/spring/handler/MyErrorProcessor.java     |    2 +
 ...melContextAllowUseOriginalMessageFalseTest.java |    1 +
 ...amelContextAllowUseOriginalMessageTrueTest.java |    1 +
 .../camel/spring/impl/SpringRefDataFormatTest.java |    1 +
 .../spring/impl/SpringRoutePolicyFactoryTest.java  |    1 +
 .../impl/SpringRoutePolicyRefCallbackTest.java     |    1 +
 ...TypeConverterRegistryStatisticsEnabledTest.java |    1 +
 .../transformer/SpringTransformerRouteTest.java    |    2 +
 .../impl/validator/SpringValidatorRouteTest.java   |    1 +
 .../interceptor/AnnotatedBookServiceImpl.java      |    1 +
 .../spring/interceptor/AnnotatedConsumeImpl.java   |    1 +
 .../camel/spring/interceptor/AnnotatedRoute.java   |    1 +
 .../interceptor/ContainerWideInterceptor.java      |    1 +
 .../spring/interceptor/DelayerInterceptorTest.java |    1 +
 .../MixedPropagationTransactedTest.java            |    2 +
 .../MixedStreamCachingInterceptorTest.java         |    1 +
 .../MixedTransactionPropagationTest.java           |    2 +
 .../NoStreamCachingInterceptorTest.java            |    1 +
 ...eWithTwoRoutesContextScopedOnExceptionTest.java |    1 +
 .../SpringAdviceWithTwoRoutesOnExceptionTest.java  |    1 +
 .../interceptor/SpringAdviceWithTwoRoutesTest.java |    1 +
 .../SpringInterceptorStrategyOrderedTest.java      |    1 +
 ...ransactionalClientDataSourceTransactedTest.java |    1 +
 ...ctionalClientDataSourceUsingTransactedTest.java |    1 +
 ...hOnExceptionAndRollbackUsingTransactedTest.java |    2 +
 ...dOnExceptionAndRollbackUsingTransactedTest.java |    1 +
 .../interceptor/StreamCachingInterceptorTest.java  |    1 +
 .../TransactedInterceptSendToEndpointTest.java     |    3 +
 ...InterceptUsingAdviceWithSendToEndpointTest.java |    3 +
 .../TransactionClientDataSourceSupport.java        |    1 +
 .../TransactionalClientDataSourceAsyncTest.java    |    2 +
 .../TransactionalClientDataSourceHandledTest.java  |    2 +
 ...ransactionalClientDataSourceLookupTypeTest.java |    1 +
 .../TransactionalClientDataSourceMDCTest.java      |    1 +
 ...alClientDataSourceMinimalConfigurationTest.java |    1 +
 ...entDataSourceMixedTransactedRedeliveryTest.java |    1 +
 ...ctionalClientDataSourceMixedTransactedTest.java |    2 +
 ...sactionalClientDataSourceNotTransactedTest.java |    2 +
 ...lClientDataSourceOnExceptionRedeliveryTest.java |    1 +
 ...ransactionalClientDataSourceRedeliveryTest.java |    1 +
 .../TransactionalClientDataSourceTest.java         |    1 +
 ...ransactionalClientDataSourceTransactedTest.java |    1 +
 ...taSourceTransactedWithChoiceRedeliveryTest.java |    1 +
 ...alClientDataSourceTransactedWithChoiceTest.java |    1 +
 ...urceTransactedWithFileLocalOnExceptionTest.java |    1 +
 ...ataSourceTransactedWithFileOnExceptionTest.java |    1 +
 ...onalClientDataSourceTransactedWithFileTest.java |    1 +
 ...taSourceTransactedWithLocalOnExceptionTest.java |    1 +
 ...lientDataSourceTransactionErrorHandlerTest.java |    1 +
 ...tDataSourceWithNoErrorHandlerConfigureTest.java |    1 +
 ...ourceWithOnExceptionHandledAndRollbackTest.java |    2 +
 ...ptionHandledAndRollbackUsingTransactedTest.java |    2 +
 ...rceWithOnExceptionMinimalConfigurationTest.java |    1 +
 ...lientDataSourceWithOnExceptionRollbackTest.java |    2 +
 ...ctionalClientDataSourceWithOnExceptionTest.java |    2 +
 ...actedErrorHandlerOnExceptionRedeliveryTest.java |    1 +
 .../TransactionalClientWithAnnotatedBeanTest.java  |    1 +
 .../TransactionalClientWithRollbackTest.java       |    2 +
 .../route/DataSourceSpringRouteBuilder.java        |    1 +
 ...dSpringOnExceptionErrorHandlerRefIssueTest.java |    1 +
 ...xceptionNotHandledErrorHandlerRefIssueTest.java |    1 +
 ...otHandledErrorHandlerRefIssueTwoRoutesTest.java |    1 +
 ...HandledRouteScopedErrorHandlerRefIssueTest.java |    1 +
 ...uteScopedErrorHandlerRefIssueTwoRoutesTest.java |    1 +
 ...ceptionRouteScopedErrorHandlerRefIssueTest.java |    1 +
 ...uteScopedErrorHandlerRefIssueTwoRoutesTest.java |    1 +
 .../spring/issues/MyInjectionRouteBuilder.java     |    1 +
 .../apache/camel/spring/issues/MyProcessor.java    |    1 +
 .../apache/camel/spring/issues/MyRouteBuilder.java |    1 +
 .../spring/issues/SampleInitializingBean.java      |    1 +
 .../issues/SampleInitializingRouteBuilder.java     |    1 +
 .../spring/issues/SampleRouteBuilderContainer.java |    1 +
 ...ingAdviceWithTwoRoutesOnExceptionIssueTest.java |    1 +
 .../spring/issues/SpringCatchNestedFailTest.java   |    1 +
 ...ngCharlesSplitAndTryCatchRollbackIssueTest.java |    1 +
 .../issues/SpringExceptionCamel4022Test.java       |    1 +
 .../spring/issues/SpringFinallyNestedFailTest.java |    1 +
 ...ngMultipleErrorHandlerOnExceptionIssueTest.java |    1 +
 .../SpringOnExceptionErrorHandlerRefIssueTest.java |    1 +
 ...ExceptionErrorHandlerRefIssueTwoRoutesTest.java |    1 +
 ...xceptionNotHandledErrorHandlerRefIssueTest.java |    1 +
 ...otHandledErrorHandlerRefIssueTwoRoutesTest.java |    1 +
 ...HandledRouteScopedErrorHandlerRefIssueTest.java |    1 +
 ...uteScopedErrorHandlerRefIssueTwoRoutesTest.java |    1 +
 ...ceptionRouteScopedErrorHandlerRefIssueTest.java |    1 +
 ...uteScopedErrorHandlerRefIssueTwoRoutesTest.java |    1 +
 .../camel/spring/issues/SpringPackageTest.java     |    1 +
 .../SpringPropertiesAvailableEverywhereTest.java   |    1 +
 ...uteScopedErrorHandlerRefIssueTwoRoutesTest.java |    1 +
 .../issues/SpringRouteIdAutoAssignClashIssue.java  |    1 +
 ...andlerAndContextScopedOnExceptionIssueTest.java |    1 +
 .../SpringTryCatchFinallyAndErrorHandlerTest.java  |    1 +
 .../issues/SpringTryCatchWithSplitIssueTest.java   |    1 +
 .../spring/issues/SpringTryNestedFailTest.java     |    1 +
 .../org/apache/camel/spring/main/MyHelloBean.java  |    1 +
 ...ualCamelContextManagedAutoAssignedNameTest.java |    2 +
 .../management/DualCamelContextManagedTest.java    |    1 +
 .../JmxInstrumentationWithConnectorTest.java       |    1 +
 .../camel/spring/management/MyEventNotifier.java   |    1 +
 .../SpringCamelContextStartingFailedEventTest.java |    1 +
 .../SpringDualLoggingEventNotifierTest.java        |    1 +
 .../management/SpringLoggingEventNotifierTest.java |    1 +
 .../management/SpringManagedCamelContextTest.java  |    1 +
 .../SpringManagedCustomProcessorTest.java          |    1 +
 .../management/SpringManagedErrorHandlerTest.java  |    1 +
 .../SpringManagedNamePatternFixedTest.java         |    1 +
 .../management/SpringManagedNamePatternTest.java   |    1 +
 .../management/SpringManagedResourceTest.java      |    1 +
 ...edRouteRemoveContextScopedErrorHandlerTest.java |    1 +
 ...emoveRouteAndContextScopedErrorHandlerTest.java |    1 +
 ...agedRouteRemoveRouteScopedErrorHandlerTest.java |    1 +
 .../management/SpringManagedSanitizeTest.java      |    1 +
 .../SpringManagedStatisticsLevelOffTest.java       |    1 +
 ...SpringManagedStatisticsLevelRoutesOnlyTest.java |    1 +
 .../management/SpringPublishEventNotifierTest.java |    1 +
 .../org/apache/camel/spring/mock/BeanMockTest.java |    1 +
 .../org/apache/camel/spring/mock/MyAssertions.java |    1 +
 ...LanguageWithSpringPropertyPlaceholderRoute.java |    1 +
 ...uageWithSpringPropertyPlaceholderRouteTest.java |    1 +
 ...CamelCustomPostProcessorOnRouteBuilderTest.java |    1 +
 .../MyRouteBuilderWithAutowiredPojo.java           |    1 +
 .../camel/spring/processor/MyAggregator.java       |    1 +
 .../apache/camel/spring/processor/MyProcessor.java |    1 +
 .../camel/spring/processor/SetHeaderProcessor.java |    1 +
 .../processor/SpringAggregateFromWireTapTest.java  |    1 +
 .../SpringAggregatorWithCustomStrategyTest.java    |    1 +
 .../SpringBatchResequencerAllowDuplicatesTest.java |    1 +
 .../SpringBatchResequencerJMSPriorityTest.java     |    1 +
 .../processor/SpringCBRHeaderPredicateTest.java    |    1 +
 ...ingCamelContextLogExhaustedMessageBodyTest.java |    1 +
 .../camel/spring/processor/SpringChoiceTest.java   |    1 +
 .../SpringClaimCheckEipGetAndRemoveSetTest.java    |    1 +
 .../processor/SpringClaimCheckEipGetSetTest.java   |    1 +
 .../SpringClaimCheckEipPushPopBodyTest.java        |    1 +
 ...ringClaimCheckEipPushPopHeadersPatternTest.java |    1 +
 .../SpringClaimCheckEipPushPopHeadersTest.java     |    1 +
 ...SpringClaimCheckEipPushPopRemoveHeaderTest.java |    1 +
 .../processor/SpringClaimCheckEipPushPopTest.java  |    1 +
 .../processor/SpringComplexBlockWithEndTest.java   |    4 +-
 .../spring/processor/SpringConvertBodyTest.java    |    1 +
 .../processor/SpringCustomPredicateTest.java       |    1 +
 .../SpringCustomProcessorFactoryTest.java          |    1 +
 .../processor/SpringCustomRefLoadBalanceTest.java  |    1 +
 ...etterChannelLogExhaustedMessageHistoryTest.java |    1 +
 .../SpringDeadLetterChannelNewExceptionTest.java   |    1 +
 .../SpringDeadLetterChannelNoRedeliveryTest.java   |    1 +
 ...DeadLetterChannelNotHandleNewExceptionTest.java |    1 +
 .../SpringDeadLetterChannelOnPrepareTestTest.java  |    1 +
 ...ingDeadLetterChannelUseOriginalBodyNewTest.java |    1 +
 ...SpringDeadLetterChannelUseOriginalBodyTest.java |    1 +
 ...adLetterChannelUseOriginalBodyWithFileTest.java |    1 +
 ...efaultErrorHandlerExchangeFormatterRefTest.java |    1 +
 ...ErrorHandlerLogExhaustedMessageHistoryTest.java |    1 +
 ...SpringDefaultErrorHandlerOnPrepareTestTest.java |    1 +
 .../SpringDefaultErrorHandlerRetryWhileTest.java   |    1 +
 .../processor/SpringDelayerPerRouteTest.java       |    1 +
 .../camel/spring/processor/SpringDelayerTest.java  |    1 +
 .../spring/processor/SpringDynamicRouterTest.java  |    1 +
 .../processor/SpringEnrichExpressionTest.java      |    1 +
 .../SpringEnricherAggregateOnExceptionTest.java    |    1 +
 .../spring/processor/SpringEnricherRefTest.java    |    1 +
 .../camel/spring/processor/SpringEnricherTest.java |    1 +
 ...SpringEventNotifierExchangeSentExampleTest.java |    1 +
 ...ingFailOverLoadBalanceAutoStartupFalseTest.java |    1 +
 .../processor/SpringFailOverLoadBalanceTest.java   |    1 +
 .../SpringFailoverMaximumFailoverAttemptsTest.java |    1 +
 .../SpringFailoverRoundRobinStickyTest.java        |    1 +
 .../processor/SpringFailoverRoundRobinTest.java    |    1 +
 ...pringIdempotentConsumerRemoveOnFailureTest.java |    1 +
 .../SpringInheritErrorHandlerDefaultTest.java      |    1 +
 .../SpringInheritErrorHandlerFalseTest.java        |    1 +
 .../SpringInheritErrorHandlerTrueTest.java         |    1 +
 .../SpringInterceptFromEndpointRefTest.java        |    1 +
 .../spring/processor/SpringInterceptFromTest.java  |    1 +
 .../processor/SpringInterceptFromUriRegexTest.java |    1 +
 .../SpringInterceptFromUriSimpleLogTest.java       |    1 +
 .../SpringInterceptFromUriWildcardTest.java        |    1 +
 .../SpringInterceptFromWhenNoStopTest.java         |    1 +
 .../processor/SpringInterceptFromWhenTest.java     |    1 +
 .../SpringInterceptFromWhenWithChoiceTest.java     |    1 +
 .../processor/SpringInterceptFromWithStopTest.java |    1 +
 .../SpringInterceptSendToEndpointDynamicTest.java  |    1 +
 ...ngInterceptSendToEndpointInOnExceptionTest.java |    1 +
 .../SpringInterceptSendToEndpointSkipTest.java     |    1 +
 .../SpringInterceptSendToEndpointTest.java         |    1 +
 .../SpringInterceptSendToEndpointWhenTest.java     |    1 +
 .../SpringInterceptSimpleRouteStopTest.java        |    1 +
 .../processor/SpringInterceptSimpleRouteTest.java  |    1 +
 .../SpringInterceptSimpleRouteWhenStopTest.java    |    1 +
 .../SpringInterceptSimpleRouteWhenTest.java        |    1 +
 .../spring/processor/SpringLogProcessorTest.java   |    1 +
 .../SpringLogProcessorWithProvidedLoggerTest.java  |    1 +
 .../processor/SpringMarkRollbackOnlyTest.java      |    1 +
 .../SpringMessageHistoryDumpRoutingTest.java       |    1 +
 .../spring/processor/SpringMethodCallTest.java     |    1 +
 .../SpringMulticastNoStopOnExceptionTest.java      |    1 +
 .../processor/SpringMulticastOnPrepareTest.java    |    1 +
 .../SpringMulticastStopOnExceptionTest.java        |    1 +
 .../SpringMulticastSubUnitOfWorkTest.java          |    1 +
 .../spring/processor/SpringMulticastTest.java      |    1 +
 .../processor/SpringNestedChoiceIssueTest.java     |    1 +
 .../spring/processor/SpringNormalizerTest.java     |    1 +
 ...letionAndInterceptAndOnExceptionGlobalTest.java |    1 +
 .../SpringOnCompletionAndInterceptGlobalTest.java  |    1 +
 .../SpringOnCompletionAndInterceptTest.java        |    1 +
 .../processor/SpringOnCompletionGlobalTest.java    |    1 +
 .../processor/SpringOnCompletionModeTest.java      |    1 +
 .../SpringOnCompletionOnCompleteOnlyTest.java      |    1 +
 .../SpringOnCompletionOnFailureOnlyTest.java       |    1 +
 ...ompletionRouteScopeOverrideGlobalScopeTest.java |    1 +
 .../spring/processor/SpringOnCompletionTest.java   |    1 +
 .../SpringOnCompletionUseOriginalBodyTest.java     |    1 +
 .../processor/SpringOnCompletionWhenTest.java      |    1 +
 .../SpringOnExceptionContinueToRouteTest.java      |    1 +
 .../processor/SpringPolicyPerProcessorTest.java    |    1 +
 .../spring/processor/SpringPolicyPerRouteTest.java |    1 +
 .../processor/SpringPollEnrichExpressionTest.java  |    1 +
 .../processor/SpringPollEnricherRefTest.java       |    1 +
 .../spring/processor/SpringPollEnricherTest.java   |    1 +
 .../processor/SpringRandomLoadBalanceTest.java     |    1 +
 ...SpringRecipientListAggregationStrategyTest.java |    1 +
 ...pringRecipientListDoNotStopOnExceptionTest.java |    1 +
 ...ingRecipientListIgnoreInvalidEndpointsTest.java |    1 +
 .../SpringRecipientListOnPrepareTest.java          |    1 +
 ...ecipientListParallelOptionalPropertiesTest.java |    1 +
 .../SpringRecipientListParallelStreamingTest.java  |    1 +
 .../processor/SpringRecipientListParallelTest.java |    1 +
 .../SpringRecipientListStopOnExceptionTest.java    |    1 +
 .../SpringRecipientListSubUnitOfWorkTest.java      |    1 +
 .../SpringRecipientListWithArrayHeaderTest.java    |    1 +
 ...RecipientListWithStringDelimitedHeaderTest.java |    1 +
 ...cipientListWithStringDelimitedPropertyTest.java |    1 +
 .../processor/SpringRedeliverToSubRouteTest.java   |    1 +
 ...veryErrorHandlerNoRedeliveryOnShutdownTest.java |    1 +
 .../spring/processor/SpringRemoveHeaderTest.java   |    1 +
 .../processor/SpringRemoveHeadersExcludeTest.java  |    1 +
 .../spring/processor/SpringRemoveHeadersTest.java  |    1 +
 .../SpringRemovePropertiesWithExclusionTest.java   |    1 +
 ...SpringRemovePropertiesWithoutExclusionTest.java |    1 +
 .../spring/processor/SpringRemovePropertyTest.java |    1 +
 ...ringResequenceStreamRejectOldExchangesTest.java |    1 +
 .../spring/processor/SpringResequencerTest.java    |    1 +
 .../camel/spring/processor/SpringRollbackTest.java |    1 +
 .../processor/SpringRoundRobinLoadBalanceTest.java |    1 +
 .../processor/SpringRouteNoAutoStartupTest.java    |    1 +
 .../SpringRouteStartupOrderSimpleTest.java         |    1 +
 .../processor/SpringRouteStartupOrderTest.java     |    1 +
 .../SpringRouteStartupOrderWithDefaultTest.java    |    1 +
 .../spring/processor/SpringRouteStopTest.java      |    1 +
 ...RouteWithConstantFieldFromExchangeFailTest.java |    1 +
 ...ringRouteWithConstantFieldFromExchangeTest.java |    1 +
 ...pringRoutingSlipIgnoreInvalidEndpointsTest.java |    1 +
 .../spring/processor/SpringRoutingSlipTest.java    |    1 +
 .../camel/spring/processor/SpringSagaTest.java     |    1 +
 .../processor/SpringSamplingThrottlerTest.java     |    1 +
 .../spring/processor/SpringScriptExternalTest.java |    1 +
 .../camel/spring/processor/SpringScriptTest.java   |    1 +
 .../camel/spring/processor/SpringSetBodyTest.java  |    1 +
 .../processor/SpringSetExchangePatternTest.java    |    1 +
 .../SpringSetExchangePatternWithCustomIdTest.java  |    1 +
 .../processor/SpringSetHeaderNameDynamicTest.java  |    1 +
 .../spring/processor/SpringSetHeaderTest.java      |    1 +
 .../processor/SpringSetHeaderWithConstantTest.java |    1 +
 .../SpringSetPropertyNameDynamicTest.java          |    1 +
 .../spring/processor/SpringSetPropertyTest.java    |    1 +
 .../SpringShutdownCompleteAllTasksTest.java        |    1 +
 .../SpringShutdownCompleteCurrentTaskOnlyTest.java |    1 +
 .../SpringSimpleProcessorIdAwareTest.java          |    1 +
 .../processor/SpringSimpleResultTypeRouteTest.java |    1 +
 .../camel/spring/processor/SpringSortBodyTest.java |    1 +
 .../spring/processor/SpringSortExpressionTest.java |    1 +
 .../processor/SpringSplitCustomExpressionTest.java |    1 +
 .../processor/SpringSplitGroupMultiLinesTest.java  |    1 +
 .../processor/SpringSplitGroupSkipFirstTest.java   |    1 +
 .../processor/SpringSplitSubUnitOfWorkTest.java    |    1 +
 .../SpringSplitTokenizerGroupDynamicTest.java      |    1 +
 .../processor/SpringSplitterMethodCallTest.java    |    1 +
 .../SpringSplitterNoStopOnExceptionTest.java       |    1 +
 .../processor/SpringSplitterOnPrepareTest.java     |    1 +
 .../SpringSplitterStopOnExceptionTest.java         |    1 +
 ...ngSplitterWithCustomThreadPoolExecutorTest.java |    1 +
 .../processor/SpringStaticRecipientListTest.java   |    1 +
 .../camel/spring/processor/SpringStepTest.java     |    1 +
 .../processor/SpringStickyLoadBalanceTest.java     |    1 +
 .../processor/SpringStreamCachingPerRouteTest.java |    1 +
 ...ringThreadsCoreAndMaxPoolKeepAliveTimeTest.java |    1 +
 .../processor/SpringThreadsCoreAndMaxPoolTest.java |    1 +
 .../processor/SpringThreadsCorePoolTest.java       |    1 +
 .../spring/processor/SpringThreadsDefaultTest.java |    1 +
 ...ngThreadsExternalThreadPoolFactoryBeanTest.java |    1 +
 .../SpringThreadsThreadPoolFactoryBeanTest.java    |    1 +
 .../processor/SpringThrottlerGroupingTest.java     |    1 +
 .../processor/SpringThrottlerMethodCallTest.java   |    1 +
 .../spring/processor/SpringThrottlerTest.java      |    1 +
 .../SpringThrottlerThreadPoolProfileTest.java      |    1 +
 .../SpringThrottlingInflightRoutePolicyTest.java   |    1 +
 .../processor/SpringThrowExceptionMessageTest.java |    1 +
 .../spring/processor/SpringThrowExceptionTest.java |    1 +
 .../processor/SpringToDynamicIgnoreTest.java       |    1 +
 ...DynamicLanguageSimpleAndXPathAndHeaderTest.java |    1 +
 .../SpringToDynamicLanguageSimpleAndXPathTest.java |    1 +
 .../SpringToDynamicLanguageXPathTest.java          |    1 +
 .../spring/processor/SpringToDynamicTest.java      |    1 +
 .../spring/processor/SpringTokenizerTest.java      |    1 +
 .../processor/SpringTopicLoadBalanceTest.java      |    1 +
 .../spring/processor/SpringTransformTest.java      |    1 +
 ...ingTryCatchMustHaveExceptionConfiguredTest.java |    1 +
 .../SpringTryProcessorMultipleExceptionTest.java   |    1 +
 .../processor/SpringTryProcessorOnWhenTest.java    |    1 +
 .../spring/processor/SpringValidateRegExpTest.java |    1 +
 .../spring/processor/SpringValidateSimpleTest.java |    1 +
 .../SpringWeightedRandomLoadBalanceTest.java       |    1 +
 .../SpringWeightedRoundRobinLoadBalanceTest.java   |    1 +
 .../processor/SpringWireTapExpressionTest.java     |    1 +
 .../processor/SpringWireTapNewExchangeTest.java    |    1 +
 .../processor/SpringWireTapOnPrepareTest.java      |    1 +
 .../camel/spring/processor/SpringWireTapTest.java  |    1 +
 .../SpringWireTapUsingFireAndForgetCopyTest.java   |    2 +
 .../SpringWireTapUsingFireAndForgetTest.java       |    2 +
 .../processor/SpringWireTapVoidBeanTest.java       |    1 +
 .../spring/processor/SpringXPathFilterTest.java    |    1 +
 ...ilterWithNamespaceOnImportRouteContextTest.java |    1 +
 ...XPathFilterWithNamespaceOnRouteContextTest.java |    1 +
 .../SpringXPathFilterWithNamespaceTest.java        |    1 +
 ...gXPathHeaderNameResultTypeAndNamespaceTest.java |    1 +
 .../processor/SpringXPathHeaderNameTest.java       |    1 +
 .../spring/processor/SpringXPathHeaderTest.java    |    1 +
 .../processor/TransformWithExpressionTest.java     |    1 +
 .../SpringAggregateCompleteAllOnStopTest.java      |    1 +
 .../SpringAggregateCompletionIntervalTest.java     |    1 +
 .../aggregator/SpringAggregateControllerTest.java  |    1 +
 .../SpringAggregateDiscardOnTimeoutTest.java       |    1 +
 .../SpringAggregateExpressionSizeFallbackTest.java |    1 +
 .../SpringAggregateExpressionSizeTest.java         |    1 +
 ...ringAggregateExpressionTimeoutFallbackTest.java |    1 +
 ...ringAggregateExpressionTimeoutPerGroupTest.java |    1 +
 .../SpringAggregateExpressionTimeoutTest.java      |    1 +
 .../SpringAggregateForceCompletionOnStopTest.java  |    1 +
 ...roupedExchangeCompletionExpressionSizeTest.java |    1 +
 .../SpringAggregateSimplePredicateEagerTest.java   |    1 +
 .../SpringAggregateSimplePredicateTest.java        |    1 +
 .../aggregator/SpringAggregateSimpleSizeTest.java  |    1 +
 .../SpringAggregateSimpleTimeoutTest.java          |    1 +
 .../SpringAggregateThreadPoolProfileTest.java      |    1 +
 ...ggregationStrategyBeanAdapterAllowNullTest.java |    1 +
 ...gationStrategyBeanAdapterRefMethodNameTest.java |    1 +
 ...pringAggregationStrategyBeanAdapterRefTest.java |    1 +
 .../processor/aggregator/SpringAggregatorTest.java |    1 +
 .../FileConsumerIdempotentLoadStoreTest.java       |    1 +
 .../idempotent/FileConsumerIdempotentTest.java     |    1 +
 .../idempotent/SpringCacheIdempotentTest.java      |    1 +
 .../SpringParentChildInterceptStrategyTest.java    |    1 +
 .../DeadLetterChannelHandledExampleTest.java       |    1 +
 .../spring/processor/onexception/OrderService.java |   17 +-
 .../onexception/RedeliveryPolicyReTest.java        |    1 +
 .../SpringContextScopeOnExceptionTest.java         |    1 +
 ...adLetterChannelOnExceptionOnRedeliveryTest.java |    1 +
 .../SpringOnExceptionContinueSubRouteTest.java     |    1 +
 .../SpringOnExceptionContinueSubSubRouteTest.java  |    1 +
 .../onexception/SpringOnExceptionContinueTest.java |    1 +
 ...ngOnExceptionFromChoiceUseOriginalBodyTest.java |    1 +
 ...ringOnExceptionLoadBalancerDoubleIssueTest.java |    1 +
 ...pringOnExceptionNotNormalizedClassNameTest.java |    1 +
 ...nExceptionOccurredProcessorOnExceptionTest.java |    1 +
 .../SpringOnExceptionOccurredProcessorTest.java    |    1 +
 .../onexception/SpringOnExceptionSubRouteTest.java |    1 +
 ...ceptionSubRouteWithDefaultErrorHandlerTest.java |    1 +
 .../SpringOnExceptionUseOriginalBodyTest.java      |    1 +
 .../SpringOnExceptionUseOriginalMessageTest.java   |    1 +
 .../SpringOnExceptionWithRouteAndContinueTest.java |    1 +
 .../LowestQuoteAggregationStrategy.java            |    1 +
 .../processor/scattergather/ScatterGatherTest.java |    1 +
 .../camel/spring/produce/MyListenerService.java    |    1 +
 .../org/apache/camel/spring/remoting/Bean.java     |    1 +
 .../apache/camel/spring/remoting/EchoService.java  |    1 +
 .../remoting/EchoSpringRemotingPojoDirectTest.java |    1 +
 ...choSpringRemotingPojoOutOfCamelContextTest.java |    1 +
 .../remoting/EchoSpringRemotingPojoTest.java       |    1 +
 ...SpringRemotingThrowingRuntimeExceptionTest.java |    1 +
 .../apache/camel/spring/remoting/SayService.java   |    1 +
 .../SpringRemotingWithExportAndProxyTest.java      |    1 +
 ...ingWithServiceExportAndNamespacesRouteTest.java |    1 +
 .../SpringRemotingWithServiceExportRouteTest.java  |    1 +
 .../spring/routebuilder/CamelRouteBuilderTest.java |    1 +
 .../camel/spring/routebuilder/MyOtherRoute.java    |    3 +
 .../apache/camel/spring/routebuilder/MyRoute.java  |    1 +
 .../scan/DefaultPackageScanClassResolverTest.java  |    1 +
 .../scan/PatternBasedPackageScanFilterTest.java    |    1 +
 .../apache/camel/spring/scan/ScanTestSupport.java  |    1 +
 .../camel/spring/xml/ConfiguredRouteBuilder.java   |    1 +
 .../camel/spring/xml/ConfiguredRouteBuilder2.java  |    1 +
 .../org/apache/camel/spring/RegistryInjection.xml  |    2 +-
 .../example/pojoDualCamelContextConsumer.xml       |   38 -
 .../aggregator/SpringAggregateControllerTest.xml   |    4 +-
 .../SpringAggregateExpressionSizeFallbackTest.xml  |    4 +-
 .../SpringAggregateExpressionSizeTest.xml          |    4 +-
 ...pringAggregateExpressionTimeoutFallbackTest.xml |    4 +-
 ...pringAggregateExpressionTimeoutPerGroupTest.xml |    4 +-
 .../SpringAggregateExpressionTimeoutTest.xml       |    4 +-
 ...GroupedExchangeCompletionExpressionSizeTest.xml |    4 +-
 .../camel-sql/src/main/docs/sql-component.adoc     |   54 +-
 .../src/main/docs/sql-stored-component.adoc        |   24 +-
 .../apache/camel/component/sql/SqlEndpoint.java    |    2 +
 .../apache/camel/component/sql/SqlProducer.java    |    1 +
 .../component/sql/stored/SqlStoredEndpoint.java    |    1 +
 .../component/sql/stored/SqlStoredProducer.java    |    1 +
 .../sql/stored/template/generated/Token.java       |    1 +
 .../stored/template/generated/TokenMgrError.java   |    1 +
 .../jdbc/ClassLoadingAwareObjectInputStream.java   |    2 +
 .../aggregate/jdbc/JdbcAggregationRepository.java  |    9 +
 .../sql/SqlConsumerDeleteBatchCompleteTest.java    |    2 +
 .../component/sql/SqlConsumerDeleteFailedTest.java |    2 +
 .../camel/component/sql/SqlConsumerDeleteTest.java |    2 +
 .../sql/SqlConsumerDeleteTransformTest.java        |    2 +
 .../sql/SqlConsumerDynamicParameterTest.java       |   13 +-
 .../sql/SqlConsumerMaxMessagesPerPollTest.java     |    2 +
 .../sql/SqlConsumerOutputTypeSelectListTest.java   |    2 +
 ...lConsumerOutputTypeSelectListWithClassTest.java |    2 +
 .../sql/SqlConsumerOutputTypeStreamListTest.java   |    2 +
 .../camel/component/sql/SqlConsumerTest.java       |    2 +
 .../camel/component/sql/SqlDataSourceRefTest.java  |   12 +-
 .../camel/component/sql/SqlDataSourceTest.java     |   14 +-
 .../camel/component/sql/SqlEndpointLikeTest.java   |   12 +-
 .../camel/component/sql/SqlEndpointTest.java       |    2 +
 .../camel/component/sql/SqlGeneratedKeysTest.java  |    2 +
 .../camel/component/sql/SqlPreserveHeaderTest.java |    2 +
 ...qlProducerAlwaysPopulateStatementFalseTest.java |   11 +-
 .../SqlProducerAlwaysPopulateStatementTest.java    |   10 +-
 .../camel/component/sql/SqlProducerAndInTest.java  |    2 +
 .../component/sql/SqlProducerConcurrentTest.java   |    2 +
 .../sql/SqlProducerExpressionParameterTest.java    |    2 +
 .../component/sql/SqlProducerInMultiTest.java      |    2 +
 .../camel/component/sql/SqlProducerInTest.java     |    2 +
 .../component/sql/SqlProducerInsertNullTest.java   |    2 +
 .../camel/component/sql/SqlProducerJSONTest.java   |    2 +
 .../sql/SqlProducerNamedParameterNotExistTest.java |    2 +
 .../sql/SqlProducerNamedParameterTest.java         |    2 +
 .../sql/SqlProducerNamedParametersTest.java        |    2 +
 .../camel/component/sql/SqlProducerNoopTest.java   |    2 +
 .../sql/SqlProducerNullBodyHeaderTest.java         |    2 +
 .../component/sql/SqlProducerNullBodyTest.java     |    2 +
 .../component/sql/SqlProducerOutputHeaderTest.java |    2 +
 .../sql/SqlProducerOutputHeaderWithQueryTest.java  |    2 +
 .../sql/SqlProducerOutputTypeSelectListTest.java   |    2 +
 ...lProducerOutputTypeSelectListWithClassTest.java |    2 +
 ...SqlProducerOutputTypeSelectOneNoResultTest.java |    2 +
 .../sql/SqlProducerOutputTypeStreamListTest.java   |    2 +
 .../sql/SqlProducerParametersCountTest.java        |    2 +
 .../sql/SqlProducerReuseParameterTest.java         |    2 +
 .../component/sql/SqlProducerSeparatorTest.java    |    2 +
 .../sql/SqlProducerUseMessageBodyForSqlTest.java   |    2 +
 .../component/sql/SqlProducerWhereIssueTest.java   |    2 +
 .../apache/camel/component/sql/SqlRouteTest.java   |    2 +
 .../component/sql/SqlTransactedRouteTest.java      |    9 +-
 .../sql/stored/CallableStatementWrapperTest.java   |    2 +
 .../sql/stored/ProducerBatchInvalidTest.java       |    2 +
 .../component/sql/stored/ProducerBatchTest.java    |    2 +
 .../sql/stored/ProducerBodyArrayTest.java          |    2 +
 .../component/sql/stored/ProducerInOutTest.java    |    2 +
 .../camel/component/sql/stored/ProducerTest.java   |    2 +
 .../ProducerUseMessageBodyForTemplateTest.java     |    2 +
 .../sql/stored/SqlFunctionDataSourceTest.java      |    2 +
 .../sql/stored/SqlStoredDataSourceTest.java        |   12 +-
 .../component/sql/stored/TemplateCacheTest.java    |    2 +
 .../jdbc/AbstractJdbcAggregationTestSupport.java   |    1 +
 ...ggregateRecoverDeadLetterChannelFailedTest.java |    1 +
 .../JdbcAggregateRecoverDeadLetterChannelTest.java |    1 +
 .../aggregate/jdbc/JdbcAggregateRecoverTest.java   |    1 +
 ...bcAggregateRecoverWithRedeliveryPolicyTest.java |    1 +
 .../jdbc/JdbcAggregateRecoverWithSedaTest.java     |    1 +
 .../jdbc/JdbcAggregationRepositoryTest.java        |    1 +
 ...ngAggregateRecoverWithRedeliveryPolicyTest.java |    1 +
 .../camel-ssh/src/main/docs/ssh-component.adoc     |   20 +-
 .../camel-stax/src/main/docs/stax-component.adoc   |   20 +-
 .../camel/component/stax/StaxStreamXMLReader.java  |   46 +-
 .../camel/component/stax/StAXComponentRefTest.java |   29 +-
 .../camel-stomp/src/main/docs/stomp-component.adoc |   18 +-
 .../camel/component/stomp/StompConsumer.java       |    2 +
 .../camel/component/stomp/StompEndpoint.java       |    4 +
 .../camel/component/stomp/StompProducer.java       |    1 +
 .../camel/component/stomp/StompBaseTest.java       |    7 +-
 .../camel/component/stomp/StompConsumerTest.java   |    1 +
 .../component/stomp/StompConsumerUriTest.java      |    1 +
 .../camel/component/stomp/StompProducerTest.java   |    1 +
 .../src/main/docs/stream-component.adoc            |   16 +-
 .../component/stream/FileWatcherStrategy.java      |    1 +
 .../camel/component/stream/StreamConsumer.java     |    1 +
 .../camel/component/stream/StreamEndpoint.java     |    3 +
 .../camel/component/stream/StreamProducer.java     |    1 +
 .../component/stream/ScanStreamDelayTest.java      |    1 +
 .../component/stream/ScanStreamFileManualTest.java |    1 +
 .../camel/component/stream/ScanStreamFileTest.java |    1 +
 .../stream/ScanStreamFileWithFilterTest.java       |    1 +
 .../component/stream/SplitStreamFileTest.java      |    1 +
 .../camel/component/stream/StreamDelayTest.java    |    1 +
 .../camel/component/stream/StreamEncodingTest.java |    1 +
 .../stream/StreamGroupLinesLastStrategyTest.java   |    1 +
 .../stream/StreamGroupLinesStrategyTest.java       |   16 +-
 .../camel/component/stream/StreamHeaderTest.java   |    2 +
 .../component/stream/StreamRouteBuilderTest.java   |    1 +
 .../component/stream/StreamSystemErrTest.java      |    1 +
 .../component/stream/StreamSystemOutTest.java      |    1 +
 .../camel/component/stream/StreamToUrlTest.java    |    1 +
 .../src/main/docs/string-template-component.adoc   |   24 +-
 .../stringtemplate/StringTemplateComponent.java    |    1 +
 .../StringTemplateConcurrentTest.java              |    1 +
 .../StringTemplateContentCacheTest.java            |    2 +
 .../stringtemplate/StringTemplateLetterTest.java   |    1 +
 .../stringtemplate/StringTemplateTest.java         |    1 +
 .../camel-stub/src/main/docs/stub-component.adoc   |   14 +-
 .../src/main/docs/swagger-java.adoc                |   14 +-
 .../RestSwaggerReaderApiDocsOverrideTest.java      |   29 +-
 .../swagger/RestSwaggerReaderApiDocsTest.java      |   29 +-
 .../swagger/RestSwaggerReaderDayOfWeekTest.java    |   30 +-
 ...RestSwaggerReaderEnableVendorExtensionTest.java |   32 +-
 .../RestSwaggerReaderModelApiSecurityTest.java     |   43 +-
 .../RestSwaggerReaderModelBookOrderTest.java       |   25 +-
 .../camel/swagger/RestSwaggerReaderModelTest.java  |   34 +-
 .../RestSwaggerReaderOverrideHostApiDocsTest.java  |    1 +
 .../RestSwaggerReaderPropertyPlaceholderTest.java  |   32 +-
 .../camel/swagger/RestSwaggerReaderTest.java       |   31 +-
 .../camel/swagger/producer/RestSwaggerGetTest.java |   14 +-
 .../producer/RestSwaggerGetUriParamTest.java       |   14 +-
 .../src/main/docs/syslog-dataformat.adoc           |   16 +-
 .../syslog/NettyRfc5425LongMessageTest.java        |   19 +-
 .../camel/component/syslog/NettyRfc5425Test.java   |   18 +-
 .../src/main/docs/tidyMarkup-dataformat.adoc       |   12 +-
 .../dataformat/tagsoup/TidyMarkupDataFormat.java   |    2 +
 .../src/main/docs/tarfile-dataformat.adoc          |   14 +-
 .../dataformat/tarfile/TarFileDataFormat.java      |    2 +-
 .../tarfile/TarFileMultipleFilesSplitterTest.java  |    1 +
 .../src/main/docs/telegram-component.adoc          |   28 +-
 .../telegram/TelegramProducerLocationTest.java     |    1 +
 .../src/main/docs/test-blueprint.adoc              |   11 +-
 .../test/blueprint/CamelBlueprintTestSupport.java  |    3 +
 .../test/blueprint/IsMockEndpointJUnit4Test.java   |    6 +-
 .../test/blueprint/SimpleWeaveAddMockLastTest.java |    1 +
 .../component/rest/FromRestConfigurationTest.java  |    1 +
 .../rest/FromRestIdAndDescriptionTest.java         |    1 +
 .../camel-test-cdi/src/main/docs/test-cdi.adoc     |   26 +-
 .../camel-test-karaf/src/main/docs/test-karaf.adoc |    2 +-
 .../src/main/docs/test-spring.adoc                 |   22 +-
 .../test/spring/CamelSpringActiveProfileTest.java  |    2 +-
 ...lSpringRouteProcessorDumpRouteCoverageTest.java |    2 +-
 ...pringRunnerDisableJmxInheritedOverrideTest.java |    1 +
 .../CamelSpringRunnerMockEndpointsAndSkipTest.java |   56 --
 .../spring/CamelSpringRunnerMockEndpointsTest.java |   57 --
 .../test/spring/CamelSpringRunnerPlainTest.java    |   29 +-
 .../CamelSpringRunnerProvidesBreakpointTest.java   |    3 +-
 .../spring/CamelSpringRunnerUseAdviceWithTest.java |    4 +-
 .../spring/CamelSpringRunnerPlainTest-context.xml  |   12 -
 .../org/apache/camel/test/spring/test.properties   |    1 -
 components/camel-test/src/main/docs/test.adoc      |    4 +-
 .../apache/camel/test/junit4/CamelTestSupport.java |   89 +-
 .../patterns/SimpleWeaveAddMockLastTest.java       |    1 +
 .../camel/test/patterns/GetMockEndpointTest.java   |   46 +
 components/camel-testcontainers-spring/pom.xml     |   83 ++
 .../src/main/docs/testcontainers-spring.adoc       |    2 +-
 .../spring/ContainerAwareSpringTestSupport.java    |    3 -
 components/camel-testcontainers/pom.xml            |   81 ++
 .../src/main/docs/testcontainers.adoc              |    2 +-
 .../testcontainers/ContainerAwareTestSupport.java  |    3 -
 .../src/main/docs/thrift-component.adoc            |   22 +-
 .../src/main/docs/thrift-dataformat.adoc           |   20 +-
 .../camel/component/thrift/ThriftComponent.java    |    1 +
 .../camel/component/thrift/ThriftEndpoint.java     |    2 +
 .../camel/dataformat/thrift/ThriftDataFormat.java  |    4 +
 .../thrift/ThriftConsumerSecurityTest.java         |   11 +-
 .../thrift/ThriftProducerSecurityTest.java         |   11 +-
 .../component/thrift/generated/Operation.java      |    1 +
 .../dataformat/thrift/generated/Operation.java     |    1 +
 .../camel-tika/src/main/docs/tika-component.adoc   |   14 +-
 .../apache/camel/component/tika/TikaParseTest.java |    7 +-
 .../camel-timer/src/main/docs/timer-component.adoc |   22 +-
 .../camel/component/timer/TimerEndpoint.java       |    3 +
 .../src/main/docs/twilio-component.adoc            |   20 +-
 .../camel/component/twilio/TwilioComponent.java    |    2 +
 .../main/docs/twitter-directmessage-component.adoc |   12 +-
 .../src/main/docs/twitter-search-component.adoc    |   12 +-
 .../src/main/docs/twitter-streaming-component.adoc |   12 +-
 .../src/main/docs/twitter-timeline-component.adoc  |   12 +-
 .../camel-twitter/src/main/docs/twitter.adoc       |   24 +-
 .../component/twitter/AbstractTwitterEndpoint.java |    2 +
 .../camel/component/twitter/TwitterHelper.java     |   16 -
 .../directmessage/DirectMessageProducer.java       |    1 +
 .../twitter/search/SearchConsumerHandler.java      |    2 +
 .../twitter/DirectMessageProducerTest.java         |    1 +
 .../twitter/SearchByExchangeDirectTest.java        |    1 +
 .../twitter/SearchDirectCustomComponentTest.java   |   11 +-
 .../camel/component/twitter/SearchEventTest.java   |    9 +-
 .../component/twitter/UserProducerInOnlyTest.java  |    1 +
 .../component/twitter/UserProducerInOutTest.java   |    1 +
 .../deprecated/SearchByExchangeDirectTest.java     |    1 +
 .../twitter/deprecated/SearchEventTest.java        |    9 +-
 .../twitter/deprecated/UserProducerInOnlyTest.java |    1 +
 .../twitter/deprecated/UserProducerInOutTest.java  |    1 +
 components/camel-undertow/pom.xml                  |    7 +-
 .../src/main/docs/undertow-component.adoc          |   24 +-
 .../component/undertow/DefaultUndertowHost.java    |    1 +
 .../undertow/DefaultUndertowHttpBinding.java       |    2 +
 .../component/undertow/UndertowConstants.java      |    2 +
 .../camel/component/undertow/UndertowConsumer.java |   33 +-
 .../camel/component/undertow/UndertowEndpoint.java |    2 +
 .../undertow/handlers/CamelMethodHandler.java      |    1 +
 .../undertow/handlers/CamelPathHandler.java        |    1 +
 .../handlers/CamelPathTemplateHandler.java         |    1 +
 .../undertow/handlers/CamelRootHandler.java        |    2 +
 .../undertow/handlers/CamelWebSocketHandler.java   |   45 +-
 .../camel/component/undertow/BaseUndertowTest.java |   10 +-
 .../component/undertow/MultiPartFormTest.java      |    1 +
 .../undertow/UndertowHttpProducerSessionTest.java  |   16 +-
 .../undertow/rest/RestUndertowHttpGetTest.java     |   12 +-
 .../rest/RestUndertowHttpGetWildcardsTest.java     |   43 +-
 .../undertow/ws/UndertowWsConsumerRouteTest.java   |   17 +-
 .../src/main/docs/univocity-csv-dataformat.adoc    |   22 +-
 .../src/main/docs/univocity-fixed-dataformat.adoc  |   22 +-
 .../src/main/docs/univocity-tsv-dataformat.adoc    |   22 +-
 .../src/main/docs/validator-component.adoc         |   16 +-
 .../component/validator/ValidatorComponent.java    |    1 +
 .../src/main/docs/velocity-component.adoc          |   26 +-
 .../velocity/CamelVelocityDelegateClassLoader.java |    1 +
 .../component/velocity/VelocityComponent.java      |    1 +
 .../velocity/VelocityBodyAsDomainObjectTest.java   |    2 +
 .../component/velocity/VelocityConcurrentTest.java |    1 +
 .../velocity/VelocityContentCacheTest.java         |    2 +
 .../velocity/VelocityDynamicTemplateTest.java      |    1 +
 .../component/velocity/VelocityEncodingTest.java   |    1 +
 .../component/velocity/VelocityEndpointTest.java   |    1 +
 .../component/velocity/VelocityFileLetterTest.java |    1 +
 .../VelocityFileLetterWithPropertyTest.java        |    1 +
 .../component/velocity/VelocityLetterTest.java     |    1 +
 .../velocity/VelocityLetterWithParserTest.java     |    1 +
 .../velocity/VelocityLetterWithoutHeaderTest.java  |    1 +
 .../velocity/VelocityMethodInvokationTest.java     |    1 +
 .../velocity/VelocityOverridesPropertiesTest.java  |    1 +
 .../velocity/VelocitySetTemplateViaHeaderTest.java |    1 +
 .../VelocitySomeValuesNotInExchangeTest.java       |    1 +
 .../velocity/VelocityTemplateInHeaderTest.java     |    1 +
 .../camel/component/velocity/VelocityTest.java     |    1 +
 .../velocity/VelocityValuesInPropertiesTest.java   |    1 +
 .../camel-vertx/src/main/docs/vertx-component.adoc |   16 +-
 .../camel/component/vertx/VertxComponent.java      |    1 +
 .../camel/component/vertx/VertxConsumer.java       |    2 +
 .../camel/component/vertx/VertxEndpoint.java       |    2 +
 .../apache/camel/component/vertx/VertxHelper.java  |    2 +-
 .../component/vertx/VertxMultipleConsumerTest.java |    1 +
 .../component/vertx/VertxRequestReplyTest.java     |    1 +
 .../component/vertx/VertxRoutePubSubTest.java      |    1 +
 .../camel/component/vertx/VertxRouteTest.java      |    1 +
 .../camel-vm/src/main/docs/vm-component.adoc       |   16 +-
 .../org/apache/camel/component/vm/VmConsumer.java  |    1 +
 .../src/main/docs/weather-component.adoc           |   22 +-
 .../weather/http/CompositeHttpConfigurer.java      |    1 +
 .../weather/CurrentWeatherMadridProducerTest.java  |    1 +
 .../camel-web3j/src/main/docs/web3j-component.adoc |   16 +-
 .../camel/component/web3j/Web3jComponent.java      |    1 +
 .../camel/component/web3j/Web3jProducer.java       |    9 +-
 .../component/web3j/Web3jMockTestSupport.java      |   10 +-
 .../component/web3j/Web3jQuorumProducerTest.java   |   11 +-
 .../integration/Web3jConsumerMainnetTest.java      |    1 +
 .../integration/Web3jProducerMainnetTest.java      |    1 +
 .../src/main/docs/webhook-component.adoc           |   14 +-
 .../src/main/docs/websocket-jsr356-component.adoc  |   12 +-
 .../src/main/docs/websocket-component.adoc         |   24 +-
 .../component/websocket/WebsocketConsumer.java     |    1 +
 .../component/websocket/WebsocketProducer.java     |    1 +
 .../websocket/AllowAllHostnameVerifier.java        |    1 +
 .../WebsocketSSLContextInUriRouteExampleTest.java  |    7 +-
 .../src/main/docs/wordpress-component.adoc         |   18 +-
 .../component/wordpress/WordpressComponent.java    |    1 +
 .../component/wordpress/WordpressEndpoint.java     |    2 +
 .../impl/AbstractWordpressCrudServiceAdapter.java  |    4 +
 .../wordpress/producer/WordpressPostProducer.java  |    3 +
 .../wordpress/producer/WordpressUserProducer.java  |    3 +
 .../src/main/docs/xchange-component.adoc           |   18 +-
 .../apache/camel/component/xchange/XChange.java    |   10 +
 .../src/main/docs/secureXML-dataformat.adoc        |   28 +-
 .../src/main/docs/xmlsecurity-component.adoc       |   30 +-
 .../component/xmlsecurity/XmlSignerEndpoint.java   |    1 +
 .../component/xmlsecurity/XmlVerifierEndpoint.java |    1 +
 .../xmlsecurity/api/DefaultKeySelector.java        |    1 +
 .../xmlsecurity/api/XmlSignatureHelper.java        |    3 +
 .../processor/XmlSignatureConfiguration.java       |    2 +
 .../processor/XmlVerifierConfiguration.java        |    1 +
 .../xmlsecurity/XMLSecurityDataFormat.java         |    1 +
 .../component/xmlsecurity/ECDSASignatureTest.java  |    8 +-
 .../xmlsecurity/SignatureAlgorithmTest.java        |   10 +-
 .../xmlsecurity/SignatureDigestMethodTest.java     |   10 +-
 .../xmlsecurity/SpringXmlSignatureTest.java        |    8 +-
 .../xmlsecurity/XAdESSignaturePropertiesTest.java  |    8 +-
 .../component/xmlsecurity/XmlSignatureTest.java    |   10 +-
 .../util/SameDocumentUriDereferencer.java          |    1 +
 ...ature2Message2MessageWithTimestampProperty.java |    1 +
 .../xmlsecurity/XMLSecurityConcurrencyTest.java    |    1 +
 .../camel-xmpp/src/main/docs/xmpp-component.adoc   |   18 +-
 .../apache/camel/component/xmpp/XmppEndpoint.java  |    4 +
 .../component/xmpp/XmppGroupChatProducer.java      |    1 +
 .../apache/camel/component/xmpp/XmppLogger.java    |    1 +
 .../component/xmpp/XmppPrivateChatProducer.java    |    1 +
 .../camel/component/xmpp/XmppPubSubProducer.java   |    1 +
 .../component/xmpp/EmbeddedXmppTestServer.java     |    4 +-
 .../component/xmpp/GoogleTalkEndpointTest.java     |    1 +
 .../camel/component/xmpp/GoogleTalkTest.java       |    1 +
 .../component/xmpp/XmppDeferredConnectionTest.java |    7 +-
 .../component/xmpp/XmppMultiUserChatTest.java      |    8 +-
 .../component/xmpp/XmppProducerConcurrentTest.java |    7 +-
 .../component/xmpp/XmppRobustConnectionTest.java   |    7 +-
 .../camel/component/xmpp/XmppRouteChatTest.java    |    8 +-
 ...ppRouteMultipleProducersSingleConsumerTest.java |    8 +-
 .../camel-xpath/src/main/docs/xpath-language.adoc  |   40 +-
 .../language/xpath/DefaultNamespaceContext.java    |    5 +
 .../language/xpath/MessageVariableResolver.java    |    1 +
 .../apache/camel/language/xpath/XPathBuilder.java  |    4 +
 .../apache/camel/language/xpath/XPathLanguage.java |    3 +
 .../camel-xslt/src/main/docs/xslt-component.adoc   |   32 +-
 .../xslt/DefaultTransformErrorHandler.java         |    6 +
 .../camel/component/xslt/DomResultHandler.java     |    2 +
 .../component/xslt/DomResultHandlerFactory.java    |    1 +
 .../camel/component/xslt/FileResultHandler.java    |    2 +
 .../component/xslt/FileResultHandlerFactory.java   |    1 +
 .../camel/component/xslt/StreamResultHandler.java  |    2 +
 .../component/xslt/StreamResultHandlerFactory.java |    1 +
 .../camel/component/xslt/StringResultHandler.java  |    2 +
 .../component/xslt/StringResultHandlerFactory.java |    1 +
 .../apache/camel/component/xslt/XsltBuilder.java   |    1 +
 .../src/main/docs/json-xstream-dataformat.adoc     |   12 +-
 .../src/main/docs/xstream-dataformat.adoc          |   20 +-
 .../dataformat/xstream/AbstractXStreamWrapper.java |    2 +
 .../camel/dataformat/xstream/JsonDataFormat.java   |    2 +
 .../dataformat/xstream/XStreamDataFormat.java      |    2 +
 .../xstream/MarshalDomainObjectJSONTest.java       |    1 +
 .../xstream/MarshalDomainObjectTest.java           |    1 +
 .../camel/dataformat/xstream/MarshalListTest.java  |    1 +
 .../camel/dataformat/xstream/PurchaseOrder.java    |    1 +
 .../xstream/SpringMarshalDomainObjectJSONTest.java |    1 +
 .../dataformat/xstream/SpringMarshalListTest.java  |    1 +
 .../xstream/SpringMarshalOmitFieldsTest.java       |    1 +
 .../xstream/SpringXStreamConfigurationTest.java    |    1 +
 .../xstream/UnmarshalThenMarshalJSONTest.java      |    1 +
 .../xstream/UnmarshalThenMarshalTest.java          |    1 +
 .../dataformat/xstream/XStreamConcurrencyTest.java |    1 +
 .../xstream/XStreamConfigurationTest.java          |    9 +
 .../xstream/XStreamDataFormatOmitFieldsTest.java   |    1 +
 .../src/main/docs/yammer-component.adoc            |   24 +-
 .../camel/component/yammer/YammerComponent.java    |    1 +
 .../camel/component/yammer/YammerEndpoint.java     |    2 +
 .../yammer/scribe/JsonTokenExtractor.java          |    1 +
 .../yammer/YammerMessageAndUserRouteTest.java      |    1 +
 .../src/main/docs/zendesk-component.adoc           |   20 +-
 .../camel/component/zendesk/ZendeskEndpoint.java   |    3 +
 .../src/main/docs/gzipdeflater-dataformat.adoc     |   10 +-
 .../src/main/docs/zipdeflater-dataformat.adoc      |    8 +-
 .../deflater/GzipDeflaterDataFormat.java           |    4 +-
 .../dataformat/deflater/ZipDeflaterDataFormat.java |    4 +-
 .../deflater/ZipDeflaterDataFormatTest.java        |    1 +
 .../src/main/docs/zipfile-dataformat.adoc          |   14 +-
 .../dataformat/zipfile/ZipFileDataFormat.java      |    6 +-
 .../zipfile/ZipFileMultipleFilesSplitterTest.java  |    1 +
 components/camel-zipkin/src/main/docs/zipkin.adoc  |   18 +-
 .../camel/zipkin/ZipkinClientRequestAdapter.java   |    2 +-
 .../camel/zipkin/ZipkinClientResponseAdaptor.java  |    4 +-
 .../java/org/apache/camel/zipkin/ZipkinHelper.java |    2 +-
 .../camel/zipkin/ZipkinServerRequestAdapter.java   |    2 +-
 .../camel/zipkin/ZipkinServerResponseAdapter.java  |    4 +-
 .../java/org/apache/camel/zipkin/ZipkinTracer.java |    2 +
 .../zipkin/ZipkinSpanReporterInRegistryTest.java   |    7 +-
 .../src/main/docs/zookeeper-master-component.adoc  |   20 +-
 .../component/zookeepermaster/MasterEndpoint.java  |    3 +
 .../zookeepermaster/ZookeeperGroupSupport.java     |    1 +
 .../component/zookeepermaster/group/Group.java     |    1 +
 .../internal/DelegateZooKeeperMultiGroup.java      |    1 +
 .../group/internal/ZooKeeperGroup.java             |    1 +
 .../zookeepermaster/CuratorFactoryBean.java        |    4 +
 .../zookeepermaster/ZKServerFactoryBean.java       |    5 +
 components/camel-zookeeper/pom.xml                 |    2 +-
 .../src/main/docs/zookeeper-component.adoc         |   20 +-
 .../component/zookeeper/ConnectionHolder.java      |    1 +
 .../component/zookeeper/NaturalSortComparator.java |    1 +
 .../component/zookeeper/ZooKeeperComponent.java    |    1 +
 .../zookeeper/ZooKeeperConnectionManager.java      |    2 +
 .../component/zookeeper/ZooKeeperConsumer.java     |    1 +
 .../component/zookeeper/ZooKeeperEndpoint.java     |    2 +
 .../component/zookeeper/ZooKeeperProducer.java     |    2 +
 .../zookeeper/operations/DataChangedOperation.java |    1 +
 .../zookeeper/operations/DeleteOperation.java      |    1 +
 .../operations/FutureEventDrivenOperation.java     |    3 +
 .../zookeeper/operations/GetChildrenOperation.java |    1 +
 .../zookeeper/operations/GetDataOperation.java     |    1 +
 .../zookeeper/operations/SetDataOperation.java     |    1 +
 .../component/zookeeper/ZooKeeperTestSupport.java  |    1 +
 ...erviceRegistrationWithServiceComponentTest.java |   21 +-
 components/pom.xml                                 |   10 +-
 components/readme.adoc                             |   31 +-
 .../src/main/java/org/apache/camel/BeanInject.java |    4 -
 .../main/java/org/apache/camel/BindToRegistry.java |    5 -
 .../main/java/org/apache/camel/CamelContext.java   |   16 +
 .../src/main/java/org/apache/camel/Consume.java    |    5 -
 .../main/java/org/apache/camel/DynamicRouter.java  |    7 -
 .../main/java/org/apache/camel/EndpointInject.java |    4 -
 .../src/main/java/org/apache/camel/Exchange.java   |   10 +
 .../main/java/org/apache/camel/InvokeOnHeader.java |   39 -
 .../java/org/apache/camel/InvokeOnHeaders.java     |   37 -
 .../src/main/java/org/apache/camel/NamedRoute.java |   34 +
 .../src/main/java/org/apache/camel/OutHeaders.java |   34 -
 .../src/main/java/org/apache/camel/Produce.java    |    5 -
 .../main/java/org/apache/camel/PropertyInject.java |    4 -
 .../main/java/org/apache/camel/RecipientList.java  |    5 -
 .../main/java/org/apache/camel/RoutingSlip.java    |    5 -
 .../org/apache/camel/RuntimeConfiguration.java     |   33 +-
 .../org/apache/camel/spi/CamelContextTracker.java  |    1 +
 .../main/java/org/apache/camel/spi/CamelEvent.java |   32 +
 .../apache/camel/spi/InterceptSendToEndpoint.java  |   14 +-
 .../org/apache/camel/spi/InterceptStrategy.java    |   11 +-
 .../java/org/apache/camel/spi/InvokeOnHeader.java  |   43 +
 .../java/org/apache/camel/spi/InvokeOnHeaders.java |   41 +
 .../OptimisticLockingAggregationRepository.java    |    1 +
 .../java/org/apache/camel/spi/RouteContext.java    |    2 +
 .../java/org/apache/camel/spi/SubUnitOfWork.java   |   45 -
 .../apache/camel/spi/SubUnitOfWorkCallback.java    |   56 --
 .../src/main/java/org/apache/camel/spi/Tracer.java |  125 +++
 .../main/java/org/apache/camel/spi/UnitOfWork.java |   32 +-
 .../jsse/AliasedX509ExtendedKeyManager.java        |    6 +
 .../apache/camel/support/jsse/JsseParameters.java  |    2 +
 .../camel/support/service/ServiceSupport.java      |   14 +
 .../src/main/docs/constant-language.adoc           |   10 +-
 .../src/main/docs/exchangeProperty-language.adoc   |    8 +-
 core/camel-base/src/main/docs/file-language.adoc   |   18 +-
 core/camel-base/src/main/docs/header-language.adoc |    8 +-
 core/camel-base/src/main/docs/ref-language.adoc    |    8 +-
 core/camel-base/src/main/docs/simple-language.adoc |   44 +-
 .../src/main/docs/tokenize-language.adoc           |    4 +-
 .../org/apache/camel/converter/CamelConverter.java |    3 +-
 .../org/apache/camel/converter/IOConverter.java    |    4 -
 .../apache/camel/converter/ObjectConverter.java    |    1 +
 .../camel/impl/converter/ArrayTypeConverter.java   |    1 +
 .../impl/converter/BaseTypeConverterRegistry.java  |    5 +
 .../camel/impl/converter/DefaultTypeConverter.java |    1 +
 .../camel/impl/converter/EnumTypeConverter.java    |    1 +
 .../InstanceMethodFallbackTypeConverter.java       |    1 +
 .../converter/InstanceMethodTypeConverter.java     |    1 +
 .../StaticMethodFallbackTypeConverter.java         |    1 +
 .../impl/converter/StaticMethodTypeConverter.java  |    1 +
 .../camel/impl/engine/AbstractCamelContext.java    |  226 ++++-
 .../apache/camel/impl/engine/BaseRouteService.java |    2 +
 .../impl/engine/CamelPostProcessorHelper.java      |   16 +-
 .../engine/DefaultAsyncProcessorAwaitManager.java  |    4 +
 .../impl/engine/DefaultCamelBeanPostProcessor.java |   26 +-
 .../camel/impl/engine/DefaultClassResolver.java    |   14 +
 .../impl/engine/DefaultComponentResolver.java      |    1 +
 .../camel/impl/engine/DefaultConsumerCache.java    |   17 +
 .../camel/impl/engine/DefaultConsumerTemplate.java |   34 +-
 .../impl/engine/DefaultFactoryFinderResolver.java  |    2 +
 .../impl/engine/DefaultFluentProducerTemplate.java |   84 +-
 .../impl/engine/DefaultInflightRepository.java     |    5 +
 .../engine/DefaultInterceptSendToEndpoint.java     |   46 +-
 .../camel/impl/engine/DefaultLanguageResolver.java |    1 +
 .../impl/engine/DefaultManagementNameStrategy.java |    1 +
 .../impl/engine/DefaultManagementStrategy.java     |   21 +
 .../impl/engine/DefaultMessageHistoryFactory.java  |    4 +
 .../camel/impl/engine/DefaultNodeIdFactory.java    |    1 +
 .../engine/DefaultPackageScanClassResolver.java    |   10 +
 .../camel/impl/engine/DefaultProducerCache.java    |   19 +
 .../camel/impl/engine/DefaultProducerTemplate.java |   96 +-
 .../org/apache/camel/impl/engine/DefaultRoute.java |   14 +
 .../camel/impl/engine/DefaultRouteContext.java     |   74 ++
 .../impl/engine/DefaultRouteStartupOrder.java      |    4 +
 .../engine/DefaultRuntimeEndpointRegistry.java     |    8 +
 .../camel/impl/engine/DefaultShutdownStrategy.java |   20 +
 .../impl/engine/DefaultStreamCachingStrategy.java  |   41 +-
 .../camel/impl/engine/DefaultSubUnitOfWork.java    |   71 --
 .../apache/camel/impl/engine/DefaultTracer.java    |  264 +++++
 .../camel/impl/engine/DefaultUnitOfWork.java       |  107 +--
 .../camel/impl/engine/DefaultUuidGenerator.java    |    1 +
 .../impl/engine/DefaultValidatorRegistry.java      |    1 +
 .../impl/engine/DeferServiceStartupListener.java   |    1 +
 .../impl/engine/EventDrivenConsumerRoute.java      |    5 +
 .../engine/InterceptSendToEndpointProcessor.java   |   24 +-
 .../InterceptSendToMockEndpointStrategy.java       |    3 +-
 .../camel/impl/engine/JavaUuidGenerator.java       |    1 +
 .../engine/LimitedPollingConsumerPollStrategy.java |    3 +
 .../apache/camel/impl/engine/MDCUnitOfWork.java    |   12 +-
 .../camel/impl/event/AbstractContextEvent.java     |    1 +
 .../camel/impl/event/AbstractExchangeEvent.java    |    1 +
 .../camel/impl/event/AbstractRouteEvent.java       |    1 +
 .../camel/impl/event/DefaultEventFactory.java      |   30 +-
 .../impl/event/ExchangeFailureHandledEvent.java    |    3 +
 .../impl/event/ExchangeFailureHandlingEvent.java   |    3 +
 .../camel/impl/event/ExchangeRedeliveryEvent.java  |    1 +
 .../camel/impl/event/ExchangeSendingEvent.java     |    1 +
 .../apache/camel/impl/event/ExchangeSentEvent.java |    2 +
 .../impl/event/ServiceStartupFailureEvent.java     |    1 +
 .../camel/impl/event/ServiceStopFailureEvent.java  |    1 +
 .../scan/AnnotatedWithAnyPackageScanFilter.java    |    1 +
 .../impl/scan/AnnotatedWithPackageScanFilter.java  |    1 +
 .../impl/scan/AssignableToPackageScanFilter.java   |    1 +
 .../impl/scan/CompositePackageScanFilter.java      |    1 +
 .../impl/scan/InvertingPackageScanFilter.java      |    1 +
 .../impl/transformer/DataFormatTransformer.java    |    2 +-
 .../impl/transformer/ProcessorTransformer.java     |    2 +-
 .../camel/language/constant/ConstantLanguage.java  |    3 +
 .../camel/language/header/HeaderLanguage.java      |    3 +
 .../property/ExchangePropertyLanguage.java         |    3 +
 .../org/apache/camel/language/ref/RefLanguage.java |    3 +
 .../language/simple/SimpleExpressionBuilder.java   |    3 +-
 .../camel/language/simple/SimpleLanguage.java      |    2 +
 .../camel/language/simple/ast/BaseSimpleNode.java  |    1 +
 .../simple/ast/SimpleFunctionExpression.java       |   17 -
 .../camel/language/tokenizer/TokenizeLanguage.java |    3 +
 .../camel/processor/CamelInternalProcessor.java    |  114 ++-
 .../org/apache/camel/processor/CatchProcessor.java |    3 +
 .../apache/camel/processor/ChoiceProcessor.java    |    8 +
 .../org/apache/camel/processor/ContractAdvice.java |    2 +-
 .../camel/processor/ConvertBodyProcessor.java      |    6 +-
 .../camel/processor/DelayProcessorSupport.java     |    1 +
 .../java/org/apache/camel/processor/Delayer.java   |    4 +
 .../org/apache/camel/processor/DynamicRouter.java  |    2 +
 .../java/org/apache/camel/processor/Enricher.java  |    8 +
 .../processor/EvaluateExpressionProcessor.java     |    1 +
 .../camel/processor/ExchangePatternProcessor.java  |    3 +
 .../apache/camel/processor/FilterProcessor.java    |    3 +
 .../apache/camel/processor/FinallyProcessor.java   |    3 +
 .../InterceptorToAsyncProcessorBridge.java         |    2 +
 .../org/apache/camel/processor/LogProcessor.java   |    3 +
 .../org/apache/camel/processor/LoopProcessor.java  |    4 +
 .../camel/processor/MethodCallProcessor.java       |    7 +-
 .../apache/camel/processor/MulticastProcessor.java |   15 +
 .../camel/processor/OnCompletionProcessor.java     |    7 +
 .../java/org/apache/camel/processor/Pipeline.java  |    7 +-
 .../org/apache/camel/processor/PipelineHelper.java |   24 +-
 .../org/apache/camel/processor/PollEnricher.java   |   32 +-
 .../org/apache/camel/processor/RecipientList.java  |    6 +
 .../camel/processor/RecipientListProcessor.java    |    9 +
 .../camel/processor/RemoveHeaderProcessor.java     |    6 +-
 .../camel/processor/RemoveHeadersProcessor.java    |    6 +-
 .../camel/processor/RemovePropertiesProcessor.java |    3 +
 .../camel/processor/RemovePropertyProcessor.java   |    3 +
 .../org/apache/camel/processor/Resequencer.java    |    8 +
 .../apache/camel/processor/RestBindingAdvice.java  |   28 +-
 .../apache/camel/processor/RollbackProcessor.java  |    4 +
 .../org/apache/camel/processor/RoutingSlip.java    |   14 +-
 .../apache/camel/processor/SamplingThrottler.java  |    3 +
 .../apache/camel/processor/ScriptProcessor.java    |    4 +
 .../camel/processor/SendDynamicProcessor.java      |    7 +
 .../org/apache/camel/processor/SendProcessor.java  |    7 +
 .../apache/camel/processor/SetBodyProcessor.java   |    6 +-
 .../apache/camel/processor/SetHeaderProcessor.java |    6 +-
 .../camel/processor/SetPropertyProcessor.java      |    3 +
 .../org/apache/camel/processor/SortProcessor.java  |   12 +-
 .../org/apache/camel/processor/StopProcessor.java  |    3 +
 .../apache/camel/processor/StreamResequencer.java  |    7 +
 .../apache/camel/processor/ThreadsProcessor.java   |    7 +
 .../java/org/apache/camel/processor/Throttler.java |    3 +
 .../camel/processor/ThrowExceptionProcessor.java   |    7 +
 .../apache/camel/processor/TransformProcessor.java |    7 +-
 .../org/apache/camel/processor/TryProcessor.java   |   10 +
 .../apache/camel/processor/UnitOfWorkProducer.java |    2 +
 .../apache/camel/processor/WireTapProcessor.java   |    7 +-
 .../aggregate/AbstractListAggregationStrategy.java |    2 +
 .../processor/aggregate/AggregateProcessor.java    |   84 +-
 .../aggregate/AggregationStrategyBeanAdapter.java  |    2 +
 .../aggregate/DefaultAggregateController.java      |    4 +
 .../aggregate/GroupedBodyAggregationStrategy.java  |    1 +
 .../aggregate/MemoryAggregationRepository.java     |    6 +
 .../ShareUnitOfWorkAggregationStrategy.java        |    1 +
 .../aggregate/UseLatestAggregationStrategy.java    |    1 +
 .../aggregate/UseOriginalAggregationStrategy.java  |    1 +
 .../camel/processor/channel/DefaultChannel.java    |   37 +-
 .../processor/errorhandler/DeadLetterChannel.java  |    7 +-
 .../errorhandler/DefaultErrorHandler.java          |    2 +-
 .../processor/errorhandler/ExceptionPolicy.java    |   10 +-
 .../errorhandler/RedeliveryErrorHandler.java       |   54 +-
 .../processor/idempotent/IdempotentConsumer.java   |    7 +
 .../idempotent/IdempotentOnCompletion.java         |    2 +
 .../processor/interceptor/BacklogDebugger.java     |   61 +-
 .../camel/processor/interceptor/BacklogTracer.java |    9 -
 .../processor/interceptor/BreakpointSupport.java   |    6 +
 .../DefaultBacklogTracerEventMessage.java          |    7 +
 .../processor/interceptor/DefaultDebugger.java     |    1 +
 .../loadbalancer/FailOverLoadBalancer.java         |    2 +
 .../loadbalancer/LoadBalancerSupport.java          |   10 +
 .../processor/loadbalancer/QueueLoadBalancer.java  |    1 +
 .../processor/loadbalancer/RandomLoadBalancer.java |    1 +
 .../loadbalancer/RoundRobinLoadBalancer.java       |    1 +
 .../processor/loadbalancer/StickyLoadBalancer.java |    1 +
 .../processor/loadbalancer/TopicLoadBalancer.java  |    1 +
 .../WeightedRoundRobinLoadBalancer.java            |    1 +
 .../camel/processor/resequencer/Element.java       |    1 +
 .../camel/processor/resequencer/Sequence.java      |    3 +
 .../throttling/ThrottlingInflightRoutePolicy.java  |    2 +
 .../caffeine/lrucache/CaffeineLRUCache.java        |    7 +
 .../caffeine/lrucache/CaffeineLRUCacheFactory.java |   10 +
 .../caffeine/lrucache/CaffeineLRUCacheTest.java    |    2 +
 .../impl/cloud/DefaultServiceCallExpression.java   |   14 +-
 .../apache/camel/core/osgi/OsgiBeanRepository.java |    4 +
 .../camel/core/osgi/OsgiCamelContextPublisher.java |    2 +
 .../camel/core/osgi/OsgiComponentResolver.java     |    1 +
 .../camel/core/osgi/OsgiDataFormatResolver.java    |    2 +
 .../camel/core/osgi/OsgiEventAdminNotifier.java    |    2 +
 .../camel/core/osgi/OsgiFactoryFinderResolver.java |    2 +
 .../camel/core/osgi/OsgiLanguageResolver.java      |    1 +
 .../core/osgi/OsgiPackageScanClassResolver.java    |    1 +
 .../apache/camel/core/osgi/OsgiTypeConverter.java  |   24 +
 .../org/apache/camel/core/osgi/impl/Activator.java |   14 +
 .../osgi/utils/BundleDelegatingClassLoader.java    |    4 +
 .../apache/camel/core/osgi/CamelMockBundle.java    |    5 +
 .../camel/core/osgi/CamelMockBundleContext.java    |    4 +
 .../camel/core/osgi/CamelMockLanguageResolver.java |    1 +
 .../core/osgi/test/MockTypeConverterRegistry.java  |   20 +-
 .../AbstractCamelConsumerTemplateFactoryBean.java  |    3 +
 .../core/xml/AbstractCamelContextFactoryBean.java  |    7 +
 .../core/xml/AbstractCamelEndpointFactoryBean.java |    2 +
 .../camel/core/xml/AbstractCamelFactoryBean.java   |    2 +
 ...ractCamelFluentProducerTemplateFactoryBean.java |    3 +
 .../AbstractCamelProducerTemplateFactoryBean.java  |    3 +
 .../AbstractCamelRedeliveryPolicyFactoryBean.java  |    2 +
 .../xml/AbstractCamelThreadPoolFactoryBean.java    |    2 +
 .../core/xml/PatternBasedPackageScanFilter.java    |    1 +
 .../xml/util/jsse/AbstractJsseUtilFactoryBean.java |    3 +
 core/camel-core/readme-eip.adoc                    |    2 +-
 core/camel-core/readme.adoc                        |    2 +-
 .../src/main/docs/eips/aggregate-eip.adoc          |   45 +-
 .../src/main/docs/eips/batch-config-eip.adoc       |    2 +-
 core/camel-core/src/main/docs/eips/bean-eip.adoc   |   14 +-
 core/camel-core/src/main/docs/eips/choice-eip.adoc |    6 +-
 .../src/main/docs/eips/circuitBreaker-eip.adoc     |    2 +-
 .../src/main/docs/eips/claimCheck-eip.adoc         |   16 +-
 .../main/docs/eips/content-based-router-eip.adoc   |    8 +-
 .../src/main/docs/eips/content-filter-eip.adoc     |    8 +-
 .../src/main/docs/eips/convertBodyTo-eip.adoc      |    2 +-
 .../src/main/docs/eips/customLoadBalancer-eip.adoc |    2 +-
 core/camel-core/src/main/docs/eips/delay-eip.adoc  |   20 +-
 .../src/main/docs/eips/dynamic-router.adoc         |   12 +-
 .../src/main/docs/eips/dynamicRouter-eip.adoc      |   12 +-
 core/camel-core/src/main/docs/eips/enrich-eip.adoc |   18 +-
 .../main/docs/eips/eventDrivenConsumer-eip.adoc    |    6 +-
 .../src/main/docs/eips/failover-eip.adoc           |    6 +-
 core/camel-core/src/main/docs/eips/filter-eip.adoc |   10 +-
 core/camel-core/src/main/docs/eips/from-eip.adoc   |    6 +-
 .../camel-core/src/main/docs/eips/hystrix-eip.adoc |   10 +-
 .../main/docs/eips/hystrixConfiguration-eip.adoc   |    2 +-
 .../src/main/docs/eips/idempotentConsumer-eip.adoc |    4 +-
 core/camel-core/src/main/docs/eips/inOnly-eip.adoc |    4 +-
 core/camel-core/src/main/docs/eips/inOut-eip.adoc  |    4 +-
 .../src/main/docs/eips/loadBalance-eip.adoc        |   14 +-
 core/camel-core/src/main/docs/eips/log-eip.adoc    |   18 +-
 core/camel-core/src/main/docs/eips/loop-eip.adoc   |   16 +-
 .../camel-core/src/main/docs/eips/marshal-eip.adoc |    6 +-
 .../src/main/docs/eips/multicast-eip.adoc          |    8 +-
 .../src/main/docs/eips/onFallback-eip.adoc         |    2 +-
 .../src/main/docs/eips/otherwise-eip.adoc          |    6 +-
 .../src/main/docs/eips/pipeline-eip.adoc           |    6 +-
 .../src/main/docs/eips/pollEnrich-eip.adoc         |   18 +-
 .../camel-core/src/main/docs/eips/process-eip.adoc |   16 +-
 core/camel-core/src/main/docs/eips/random-eip.adoc |    2 +-
 .../src/main/docs/eips/recipientList-eip.adoc      |   40 +-
 .../src/main/docs/eips/removeHeader-eip.adoc       |    6 +-
 .../src/main/docs/eips/removeHeaders-eip.adoc      |    4 +-
 .../src/main/docs/eips/removeProperties-eip.adoc   |    6 +-
 .../src/main/docs/eips/removeProperty-eip.adoc     |    6 +-
 .../src/main/docs/eips/requestReply-eip.adoc       |    4 +-
 .../src/main/docs/eips/resequence-eip.adoc         |   18 +-
 .../src/main/docs/eips/rollback-eip.adoc           |   18 +-
 .../src/main/docs/eips/roundRobin-eip.adoc         |    6 +-
 .../src/main/docs/eips/routingSlip-eip.adoc        |   16 +-
 core/camel-core/src/main/docs/eips/saga-eip.adoc   |   26 +-
 core/camel-core/src/main/docs/eips/sample-eip.adoc |    6 +-
 core/camel-core/src/main/docs/eips/script-eip.adoc |    8 +-
 .../src/main/docs/eips/serviceCall-eip.adoc        |   32 +-
 .../camel-core/src/main/docs/eips/setBody-eip.adoc |    6 +-
 .../src/main/docs/eips/setHeader-eip.adoc          |    6 +-
 .../src/main/docs/eips/setOutHeader-eip.adoc       |    6 +-
 .../src/main/docs/eips/setProperty-eip.adoc        |    6 +-
 core/camel-core/src/main/docs/eips/sort-eip.adoc   |    6 +-
 core/camel-core/src/main/docs/eips/split-eip.adoc  |   50 +-
 core/camel-core/src/main/docs/eips/step-eip.adoc   |    8 +-
 core/camel-core/src/main/docs/eips/sticky-eip.adoc |    6 +-
 core/camel-core/src/main/docs/eips/stop-eip.adoc   |    2 +-
 .../src/main/docs/eips/stream-config-eip.adoc      |    2 +-
 .../camel-core/src/main/docs/eips/threads-eip.adoc |    6 +-
 .../src/main/docs/eips/throttle-eip.adoc           |   10 +-
 core/camel-core/src/main/docs/eips/to-eip.adoc     |    8 +-
 core/camel-core/src/main/docs/eips/toD-eip.adoc    |   13 +-
 core/camel-core/src/main/docs/eips/topic-eip.adoc  |    6 +-
 .../src/main/docs/eips/transform-eip.adoc          |    4 +-
 .../src/main/docs/eips/unmarshal-eip.adoc          |    6 +-
 .../src/main/docs/eips/validate-eip.adoc           |    6 +-
 .../src/main/docs/eips/weighted-eip.adoc           |    6 +-
 core/camel-core/src/main/docs/eips/when-eip.adoc   |    6 +-
 .../camel-core/src/main/docs/eips/wireTap-eip.adoc |   22 +-
 .../apache/camel/builder/AdviceWithBuilder.java    |    8 +-
 .../camel/builder/AdviceWithRouteBuilder.java      |   25 +
 .../org/apache/camel/builder/AdviceWithTasks.java  |   77 +-
 .../org/apache/camel/builder/DataFormatClause.java |   12 -
 .../camel/builder/DeadLetterChannelBuilder.java    |    6 +-
 .../camel/builder/DefaultErrorHandlerBuilder.java  |   70 +-
 .../camel/builder/ErrorHandlerBuilderRef.java      |    2 +
 .../camel/builder/ErrorHandlerBuilderSupport.java  |    6 +-
 .../org/apache/camel/builder/ExpressionClause.java |   94 --
 .../camel/builder/ExpressionClauseSupport.java     |   35 -
 .../camel/builder/NoErrorHandlerBuilder.java       |    2 +
 .../org/apache/camel/builder/NotifyBuilder.java    |   14 +
 .../org/apache/camel/builder/RouteBuilder.java     |    1 +
 .../org/apache/camel/builder/SimpleBuilder.java    |    3 +
 .../org/apache/camel/builder/ValueBuilder.java     |    1 +
 .../camel/impl/AbstractModelCamelContext.java      |    5 +
 .../org/apache/camel/impl/DefaultCamelContext.java |   58 +-
 .../camel/impl/DefaultModelJAXBContextFactory.java |    1 +
 .../java/org/apache/camel/impl/RouteService.java   |    4 +
 .../apache/camel/model/AdviceWithDefinition.java   |   40 +
 .../apache/camel/model/AggregateDefinition.java    |   58 +-
 .../org/apache/camel/model/DelayDefinition.java    |    6 +
 .../org/apache/camel/model/HystrixDefinition.java  |    2 +
 .../apache/camel/model/InterceptDefinition.java    |    8 -
 .../model/InterceptSendToEndpointDefinition.java   |   25 +
 .../apache/camel/model/LoadBalanceDefinition.java  |    1 +
 .../org/apache/camel/model/MarshalDefinition.java  |    2 -
 .../apache/camel/model/MulticastDefinition.java    |    7 +-
 .../org/apache/camel/model/NoOutputDefinition.java |    1 +
 .../apache/camel/model/OnCompletionDefinition.java |   11 +-
 .../apache/camel/model/OnExceptionDefinition.java  |   89 +-
 .../org/apache/camel/model/OutputDefinition.java   |    1 +
 .../apache/camel/model/ProcessorDefinition.java    |    8 +-
 .../camel/model/RecipientListDefinition.java       |    7 +-
 .../apache/camel/model/ResequenceDefinition.java   |    1 +
 .../org/apache/camel/model/RouteDefinition.java    |   23 +-
 .../org/apache/camel/model/RoutesDefinition.java   |    3 +
 .../org/apache/camel/model/SplitDefinition.java    |    7 +-
 .../org/apache/camel/model/ThreadsDefinition.java  |    6 +
 .../org/apache/camel/model/ThrottleDefinition.java |    6 +
 .../apache/camel/model/ToDynamicDefinition.java    |    5 +
 .../java/org/apache/camel/model/TryDefinition.java |    1 +
 .../apache/camel/model/UnmarshalDefinition.java    |    2 -
 .../org/apache/camel/model/WireTapDefinition.java  |    7 +
 ...klistServiceCallServiceFilterConfiguration.java |    1 +
 .../cloud/ServiceCallDefinitionConstants.java      |    2 +-
 ...icServiceCallServiceDiscoveryConfiguration.java |    1 +
 .../camel/model/dataformat/BoonDataFormat.java     |   89 --
 .../model/dataformat/DataFormatsDefinition.java    |    1 -
 .../camel/model/language/ConstantExpression.java   |    1 +
 .../model/language/ExchangePropertyExpression.java |    1 +
 .../camel/model/language/ExpressionDefinition.java |    3 +
 .../camel/model/language/GroovyExpression.java     |    1 +
 .../camel/model/language/HeaderExpression.java     |    1 +
 .../camel/model/language/Hl7TerserExpression.java  |    1 +
 .../camel/model/language/JsonPathExpression.java   |    1 +
 .../camel/model/language/LanguageExpression.java   |    1 +
 .../camel/model/language/MethodCallExpression.java |    1 +
 .../camel/model/language/MvelExpression.java       |    1 +
 .../model/language/NamespaceAwareExpression.java   |    2 +
 .../camel/model/language/OgnlExpression.java       |    1 +
 .../apache/camel/model/language/RefExpression.java |    1 +
 .../camel/model/language/SimpleExpression.java     |    1 +
 .../camel/model/language/SpELExpression.java       |    1 +
 .../camel/model/language/XPathExpression.java      |    1 +
 .../camel/model/language/XQueryExpression.java     |    1 +
 .../apache/camel/model/rest/RestsDefinition.java   |    3 +
 .../DataFormatTransformerDefinition.java           |    2 -
 .../org/apache/camel/reifier/AggregateReifier.java |    8 +
 .../reifier/InterceptSendToEndpointReifier.java    |   28 +-
 .../org/apache/camel/reifier/MulticastReifier.java |    1 +
 .../org/apache/camel/reifier/RouteReifier.java     |   20 +-
 .../reifier/dataformat/BindyDataFormatReifier.java |    1 +
 .../reifier/dataformat/BoonDataFormatReifier.java  |   53 -
 .../reifier/dataformat/DataFormatReifier.java      |    2 -
 .../errorhandler/DeadLetterChannelReifier.java     |    3 +-
 .../errorhandler/DefaultErrorHandlerReifier.java   |    1 +
 .../reifier/errorhandler/ErrorHandlerReifier.java  |    3 +-
 .../java/org/apache/camel/ContextTestSupport.java  |    2 +
 .../test/java/org/apache/camel/MyBarSingleton.java |    1 +
 .../org/apache/camel/SuspendableServiceTest.java   |    5 +
 .../test/java/org/apache/camel/TestSupport.java    |    2 +
 .../camel/builder/ContextErrorHandlerTest.java     |    3 +
 .../org/apache/camel/builder/ErrorHandlerTest.java |    2 +
 .../apache/camel/builder/ExceptionBuilderTest.java |    3 +-
 .../ExceptionBuilderWithHandledExceptionTest.java  |    3 +-
 .../camel/builder/ExpressionBuilderTest.java       |    1 +
 .../camel/builder/MyInterceptorProcessor.java      |    1 +
 .../java/org/apache/camel/builder/MyProcessor.java |    1 +
 .../builder/xml/ExtractXPathWithNamespaceTest.java |    1 +
 .../camel/builder/xml/XPathFunctionsTest.java      |    1 +
 .../XPathHeaderNameResultTypeAndNamespaceTest.java |    1 +
 .../camel/builder/xml/XPathHeaderNameTest.java     |    1 +
 .../apache/camel/builder/xml/XPathHeaderTest.java  |    1 +
 .../builder/xml/XPathNamespaceResultTypeTest.java  |    1 +
 .../camel/builder/xml/XPathNamespaceTest.java      |    1 +
 ...AmbiguousMethodCallExceptionSimplifiedTest.java |    1 +
 .../BeanExchangeAsReturnTypeNotAllowedTest.java    |    2 +
 .../component/bean/BeanHandlerMethodTest.java      |    1 +
 .../component/bean/BeanImplicitMethodTest.java     |    1 +
 .../camel/component/bean/BeanInPipelineTest.java   |    2 +
 .../component/bean/BeanInfoInheritanceTest.java    |    1 +
 .../apache/camel/component/bean/BeanInfoTest.java  |    3 +
 .../bean/BeanInfoWithBridgedMethodTest.java        |    2 +
 .../bean/BeanOverloadedCovariantMethodTest.java    |    1 +
 .../bean/BeanPackageScopeOutsideTest.java          |    1 +
 .../camel/component/bean/BeanPackageScopeTest.java |    1 +
 .../camel/component/bean/BeanPipelineTest.java     |    6 +-
 .../bean/BeanReturnCallableReturnNullTest.java     |    2 +
 .../component/bean/BeanReturnCallableTest.java     |    2 +
 .../bean/BeanWithAnnotationAndExchangeTest.java    |    2 +
 .../bean/BeanWithAnnotationInheritedTest.java      |    6 +
 .../BeanWithExchangeExceptionAnnotationTest.java   |    2 +
 .../BeanWithExpressionInjectionPredicateTest.java  |    1 +
 .../bean/BeanWithExpressionInjectionTest.java      |    1 +
 .../camel/component/bean/BeanWithHeaderTest.java   |    2 +
 .../bean/BeanWithHeadersAndBodyInject2Test.java    |    1 +
 .../bean/BeanWithHeadersAndBodyInject3Test.java    |   11 +-
 .../bean/BeanWithHeadersAndBodyInjectionTest.java  |    1 +
 .../component/bean/BeanWithMethodHeaderTest.java   |    1 +
 ...thPropertiesAndHeadersAndBodyInjectionTest.java |    1 +
 .../BeanWithPropertiesAndHeadersInjectionTest.java |    1 +
 .../BodyAnnotationToDisambiguateMethodsTest.java   |    1 +
 .../bean/CustomParameterMappingStrategyTest.java   |    1 +
 ...ressionAnnotationToDisambiguateMethodsTest.java |    1 +
 .../camel/component/bean/MyOtherFooBean.java       |    1 +
 .../camel/component/bean/MyServiceProxyTest.java   |    2 +-
 .../camel/component/bean/NewInstanceTest.java      |    1 +
 .../camel/component/bean/PredicateAsBeanTest.java  |    2 +
 .../camel/component/bean/issues/BaseClass.java     |    1 +
 .../camel/component/bean/issues/BaseSomething.java |    1 +
 .../bean/issues/MyMessageToProcessorConverter.java |    1 +
 .../component/dataset/DataSetProducerTest.java     |   28 +-
 .../camel/component/direct/DirectNoToTypeTest.java |    3 +-
 .../direct/DirectProducerBlockingTest.java         |    1 +
 .../direct/DirectShouldUseSameThreadTest.java      |    1 +
 .../directvm/DirectVmHeaderFilterStrategyTest.java |    5 +-
 ...DirectVmNoPropertyPropagationComponentTest.java |    1 +
 .../DirectVmNoPropertyPropagationTest.java         |    1 +
 .../directvm/DirectVmProducerBlockingTest.java     |    1 +
 .../directvm/DirectVmShouldUseSameThreadTest.java  |    1 +
 .../camel/component/file/BeanToFileTest.java       |    2 +
 .../file/FileBeginFailureOneTimeTest.java          |    9 +-
 .../file/FileConsumeMaxMessagesPerPollTest.java    |    1 +
 .../file/FileConsumeMoveRelativeNameTest.java      |    1 +
 .../file/FileConsumeMultipleDirectoriesTest.java   |    1 +
 .../FileConsumeNotEagerMaxMessagesPerPollTest.java |    1 +
 .../FileConsumerAbsolutePathDefaultMoveTest.java   |    1 +
 .../file/FileConsumerAbsolutePathTest.java         |    1 +
 ...leConsumerAbsolutePathWithAbsoluteMoveTest.java |    1 +
 ...leConsumerAbsolutePathWithRelativeMoveTest.java |    1 +
 ...ileConsumerAbsoluteRootPathDefaultMoveTest.java |    1 +
 ...BeginAndCommitExpressionRenameStrategyTest.java |    1 +
 ...leConsumerBeginAndCommitRenameStrategyTest.java |    1 +
 ...eConsumerBeginExpressionRenameStrategyTest.java |    1 +
 .../file/FileConsumerBeginRenameStrategyTest.java  |    1 +
 ...nsumerCommitRenameAbsolutePathStrategyTest.java |    1 +
 .../file/FileConsumerCommitRenameStrategyTest.java |    1 +
 .../file/FileConsumerDirectoryFilterTest.java      |    2 +
 .../file/FileConsumerDirectoryNotMatchedTest.java  |    1 +
 .../file/FileConsumerExcludeNameTest.java          |    1 +
 .../file/FileConsumerFailureHandledTest.java       |    4 +-
 ...leConsumerFileExpressionThrowExceptionTest.java |    3 +
 .../component/file/FileConsumerFileFilterTest.java |    2 +
 .../file/FileConsumerFilterDirectoryTest.java      |    1 +
 .../component/file/FileConsumerFilterFileTest.java |    1 +
 ...leConsumerIdempotentOnExceptionHandledTest.java |    1 +
 .../file/FileConsumerIdempotentRefTest.java        |    6 +
 .../FileConsumerIncludeAndExcludeNameTest.java     |    1 +
 .../file/FileConsumerIncludeNameTest.java          |    1 +
 .../file/FileConsumerInterceptEmptyFileTest.java   |    1 +
 .../file/FileConsumerPollStrategyNotBeginTest.java |    4 +
 ...FileConsumerPollStrategyPolledMessagesTest.java |    4 +
 ...umerPollStrategyRollbackThrowExceptionTest.java |    4 +
 ...FileConsumerPollStrategyStopOnRollbackTest.java |    4 +
 .../file/FileConsumerPollStrategyTest.java         |    4 +
 .../file/FileConsumerPreMoveDeleteTest.java        |    1 +
 .../file/FileConsumerPreMoveIssueTest.java         |    1 +
 .../file/FileConsumerPreMoveLastModifiedTest.java  |    1 +
 .../file/FileConsumerPreMoveNoopTest.java          |    1 +
 .../component/file/FileConsumerPreMoveTest.java    |    1 +
 .../FileConsumerSharedThreadPollStopRouteTest.java |    1 +
 .../file/FileConsumerSkipDotFilesTest.java         |    1 +
 .../file/FileConsumerSuspendAndResumeTest.java     |    1 +
 .../component/file/FileConsumerSuspendTest.java    |    1 +
 .../FileConsumerThreadsInProgressIssueTest.java    |    1 +
 .../file/FileExclusiveReadLockCopyTest.java        |    1 +
 .../file/FileExclusiveReadManuelTest.java          |    1 +
 .../file/FileExclusiveReadNoneStrategyTest.java    |    1 +
 .../file/FileHeaderFileNameProducedTest.java       |    1 +
 .../camel/component/file/FileMEPInOutTest.java     |    1 +
 .../camel/component/file/FileNoOpLockFileTest.java |    2 +
 .../file/FileProduceGeneratedFileNameTest.java     |    1 +
 .../file/FileProduceTempFileNameTest.java          |    1 +
 .../component/file/FileProduceTempPrefixTest.java  |    1 +
 .../file/FileProducerFileBodyGetsMovedTest.java    |    1 +
 .../file/FileRouteOnDosWithNoVolTest.java          |    1 +
 .../camel/component/file/FileSorterRefTest.java    |    1 +
 .../component/file/FilerProducerAbsoluteTest.java  |    1 +
 .../component/file/FilerProducerFileNamesTest.java |    1 +
 .../FromFileDoNotDeleteFileIfProcessFailsTest.java |    1 +
 .../FromFileDoNotMoveFileIfProcessFailsTest.java   |    1 +
 .../file/FromFileMoveFileIfProcessFailsTest.java   |    1 +
 .../file/FromFilePollThirdTimeOkTest.java          |    1 +
 .../camel/component/file/NewFileConsumerTest.java  |    1 +
 .../camel/component/file/ToFileRouteTest.java      |    7 +-
 .../GenericFileDeleteProcessStrategyTest.java      |   13 +
 .../log/DefaultExchangeFormatterTest.java          |   22 +-
 .../component/log/LogBodyWithNewLineTest.java      |    1 +
 .../camel/component/mock/MockEndpointTest.java     |    4 +-
 .../component/mock/MockEndpointTimeClauseTest.java |    1 +
 .../camel/component/mock/MockPredicateTest.java    |   16 -
 .../apache/camel/component/pojo/SayService.java    |    1 +
 .../component/rest/FromRestGetContentTypeTest.java |    4 +-
 .../rest/FromRestGetCorsAllowCredentialsTest.java  |   20 +-
 .../component/rest/FromRestGetCorsCustomTest.java  |    8 +-
 .../camel/component/rest/FromRestGetCorsTest.java  |    8 +-
 .../component/rest/FromRestGetEndPathTest.java     |    1 +
 .../rest/FromRestGetHttpErrorCodeTest.java         |    4 +-
 .../rest/FromRestIdAndDescriptionTest.java         |    1 +
 .../component/rest/FromRestUriPrefixTest.java      |    1 +
 .../rest/RestProducerBindingProcessorTest.java     |    4 +-
 .../component/seda/SedaAsyncProducerTest.java      |    4 +-
 .../seda/SedaShouldNotUseSameThreadTest.java       |    1 +
 .../camel/component/seda/SedaUnitOfWorkTest.java   |    1 +
 .../camel/component/seda/TracingWithDelayTest.java |    6 +-
 .../validator/CustomSchemaFactoryFeatureTest.java  |   14 +-
 .../ValidatorIncludeRelativeRouteTest.java         |    1 +
 .../apache/camel/component/vm/VMSplitterTest.java  |    1 +
 .../component/vm/VmShouldNotUseSameThreadTest.java |    1 +
 .../vm/VmWaitForTaskIfReplyExpectedTest.java       |    2 +-
 .../component/xslt/XsltUriResolverFactoryTest.java |    1 +
 .../apache/camel/converter/CamelConverterTest.java |    4 +-
 .../org/apache/camel/converter/ConverterTest.java  |    2 +
 .../camel/converter/ObjectConverterTest.java       |   10 +
 .../org/apache/camel/converter/PurchaseOrder.java  |    1 +
 .../converter/stream/CachedOutputStreamTest.java   |    1 +
 .../org/apache/camel/impl/CustomIdFactoryTest.java |    1 +
 .../camel/impl/DataFormatContextAwareTest.java     |    2 +
 .../impl/DefaultCamelContextStopFailureTest.java   |    2 +
 .../DefaultComponentReferencePropertiesTest.java   |    4 +
 .../apache/camel/impl/DefaultComponentTest.java    |    2 +
 .../camel/impl/DefaultConsumerTemplateTest.java    |    2 +-
 .../impl/DefaultProducerTemplateAsyncTest.java     |   14 +-
 .../apache/camel/impl/DummyLifecycleStrategy.java  |   15 +
 .../camel/impl/EndpointShutdownOnceTest.java       |    4 +
 .../apache/camel/impl/ExpressionAdapterTest.java   |    2 +
 .../apache/camel/impl/ExpressionSupportTest.java   |    2 +
 .../impl/ExtendedStartupListenerComponentTest.java |    1 +
 .../impl/HeaderFilterStrategyComponentTest.java    |    6 +
 .../camel/impl/LanguageCamelContextAwareTest.java  |    4 +
 .../camel/impl/MultipleConsumersSupportTest.java   |    8 +
 .../impl/PojoProduceInterceptEndpointTest.java     |    2 +-
 .../org/apache/camel/impl/RefDataFormatTest.java   |    2 +
 .../camel/impl/RouteSuspendResumeWarmUpTest.java   |    3 +
 .../StartupListenerComponentFromRegistryTest.java  |    1 +
 .../camel/impl/StartupListenerComponentTest.java   |    1 +
 .../org/apache/camel/impl/StartupListenerTest.java |    1 +
 .../camel/impl/TypeConverterAllowNullTest.java     |    1 +
 .../TypeConverterRegistryMissesThenAddTest.java    |    1 +
 .../camel/impl/TypeConverterRegistryTest.java      |    1 +
 .../impl/engine/CamelPostProcessorHelperTest.java  |    7 -
 .../camel/impl/engine/DefaultCamelContextTest.java |    2 +
 .../EventNotifierExchangeSentParallelTest.java     |    1 +
 ...ventNotifierServiceStoppingFailedEventTest.java |    2 +
 .../impl/transformer/TransformerRouteTest.java     |    8 +-
 .../camel/impl/validator/ValidatorRouteTest.java   |    4 +-
 .../issues/AdviceWithErrorHandlerRemoveTest.java   |  104 ++
 .../issues/AdviceWithInterceptFromRemoveTest.java  |   98 ++
 .../issues/AdviceWithInterceptRemoveTest.java      |   98 ++
 ...dviceWithInterceptSendToEndpointRemoveTest.java |  100 ++
 .../issues/AdviceWithOnCompletionRemoveTest.java   |  100 ++
 .../issues/AdviceWithOnExceptionRemoveTest.java    |   80 +-
 .../issues/AdviceWithStartTargetIssueTest.java     |    1 +
 .../issues/CBRCustomPredicateAsFilterTest.java     |    1 +
 .../apache/camel/issues/Camel4857UriIssueTest.java |    3 +
 .../CharlesSplitAndTryCatchRollbackIssueTest.java  |    1 +
 ...CharlesSplitUseBeanAsErrorHandlerIssueTest.java |    1 +
 .../camel/issues/ComponentUseRawUriTest.java       |    3 +
 .../camel/issues/CustomFailveOverProcessor.java    |    1 +
 .../org/apache/camel/issues/DavidSiefertTest.java  |    3 +-
 .../issues/DoCatchCaughExceptionIssueTest.java     |    2 +-
 .../issues/DynamicRouterWithInterceptorTest.java   |    1 +
 .../issues/FilterCustomPredicateAsFilterTest.java  |    1 +
 .../InterceptCustomPredicateAsFilterTest.java      |    1 +
 .../apache/camel/issues/InterceptFromLogTest.java  |    1 +
 .../java/org/apache/camel/issues/Issue170Test.java |    1 +
 ...icastAggregationStrategyThrowExceptionTest.java |    1 +
 ...essageBodyAndEnrichedHeadersClaimCheckTest.java |   81 ++
 ...xOriginalMessageBodyAndEnrichedHeadersTest.java |   78 ++
 ...eBodyAndEnrichedHeadersUseOriginalBodyTest.java |   76 ++
 ...lelStopOnExceptionWithOnExceptionIssueTest.java |    2 +
 ...thAggregationStrategyThrowingExceptionTest.java |    1 +
 .../MulticastPipelineAggregateIssueTest.java       |    1 +
 .../issues/MulticastSingleAggregateIssueTest.java  |    1 +
 .../org/apache/camel/issues/NeilSplitterTest.java  |    1 +
 .../camel/issues/OnExceptionWithTwoBeansTest.java  |    1 +
 .../camel/issues/ProxyReturnNullIssueTest.java     |    1 +
 ...thAggregationStrategyThrowingExceptionTest.java |    1 +
 .../issues/RecipientListWithInterceptorTest.java   |    1 +
 .../RouteStartupFailShouldStopAlsoIssueTest.java   |   11 +-
 .../issues/RoutingSlipWithInterceptorTest.java     |    1 +
 .../camel/issues/SetHeaderInDoCatchIssueTest.java  |    5 +-
 .../camel/issues/SplitPropertiesFileIssueTest.java |    1 +
 .../camel/issues/SplitWithInterceptorTest.java     |    1 +
 ...thAggregationStrategyThrowingExceptionTest.java |    1 +
 .../SplitterThrowExceptionInExpressionTest.java    |    1 +
 .../SplitterThrowExceptionInExpressionTwoTest.java |    1 +
 .../camel/issues/TryCatchWithSplitIssueTest.java   |    2 +
 .../apache/camel/issues/TwoTimerWithJMXIssue.java  |    6 +-
 .../java/org/apache/camel/language/BeanTest.java   |    1 +
 .../org/apache/camel/language/ConstantTest.java    |    1 +
 .../camel/language/FileLanguageExtSingleTest.java  |    4 +-
 .../apache/camel/language/FileLanguageTest.java    |    2 +
 .../java/org/apache/camel/language/HeaderTest.java |    1 +
 .../apache/camel/language/NoSuchLanguageTest.java  |    1 +
 .../org/apache/camel/language/PropertyTest.java    |    1 +
 .../apache/camel/language/RefPredicateTest.java    |    1 +
 .../java/org/apache/camel/language/RefTest.java    |    1 +
 .../TokenXMLPairMultiNamespaceSplitTest.java       |    2 +
 .../TokenXMLPairNamespaceMultilineSplitTest.java   |    2 +
 ...kenXMLPairNamespaceSplitChildNamespaceTest.java |  101 ++
 .../apache/camel/language/XPathFunctionTest.java   |    1 +
 .../camel/language/XPathOutFunctionTest.java       |    1 +
 .../java/org/apache/camel/language/XPathTest.java  |    1 +
 .../camel/language/simple/SimpleOperatorTest.java  |    1 +
 .../language/simple/SimpleParserPredicateTest.java |    1 +
 .../apache/camel/language/simple/SimpleTest.java   |   16 +-
 .../model/LoadRouteFromXmlWithOnExceptionTest.java |    1 +
 .../model/LoadRouteFromXmlWithPolicyTest.java      |    2 +
 .../camel/processor/AnimalDeepClonePrepare.java    |    1 +
 .../apache/camel/processor/AppendingProcessor.java |    1 +
 .../org/apache/camel/processor/AsyncLoopTest.java  |    1 +
 .../camel/processor/BeanCachedProcessorTest.java   |    1 +
 .../BeanInvocationThrowsExceptionTest.java         |    1 +
 .../BeanOgnMethodWithXPathInjectionTest.java       |    1 +
 .../BeanRecipientListInterfaceAnnotationTest.java  |    1 +
 .../BeanRecipientListNoMethodNameTest.java         |    1 +
 .../camel/processor/BeanRecipientListTest.java     |    1 +
 .../processor/BeanRecipientListTimeoutTest.java    |    3 +
 .../org/apache/camel/processor/BeanRouteTest.java  |    1 +
 .../camel/processor/BeanWithExceptionTest.java     |    1 +
 .../processor/BeanWithXPathInjectionTest.java      |    1 +
 .../camel/processor/BodyInAggregatingStrategy.java |    1 +
 .../BodyInPreCompleteAggregatingStrategy.java      |    1 +
 .../processor/BodyOutAggregatingStrategy.java      |    3 +-
 .../processor/Camel715ThreadProcessorTest.java     |    1 +
 .../apache/camel/processor/ChoiceAsyncTest.java    |    1 +
 .../processor/ChoiceCompoundPredicateTest.java     |    1 +
 .../apache/camel/processor/ChoiceNoActionTest.java |    1 +
 .../org/apache/camel/processor/ChoiceTest.java     |    1 +
 .../processor/ChoiceWhenBeanExpressionTest.java    |    1 +
 .../ChoiceWhenBeanExpressionWithExceptionTest.java |    1 +
 .../processor/ChoiceWhenNotPredicateTest.java      |    1 +
 .../processor/ChoiceWithSimpleExpressionTest.java  |    1 +
 .../camel/processor/ChoiceWithTranfromTest.java    |    1 +
 .../org/apache/camel/processor/ClaimCheckTest.java |    2 +
 .../processor/ComposedMessageProcessorTest.java    |    3 +
 .../apache/camel/processor/ConvertBodyTest.java    |    1 +
 .../CreateRouteWithNonExistingEndpointTest.java    |    1 +
 .../camel/processor/CustomLoadBalanceTest.java     |    2 +
 .../camel/processor/CustomRefLoadBalanceTest.java  |    1 +
 .../camel/processor/CustomRoutePolicyTest.java     |    1 +
 .../camel/processor/DataFormatServiceTest.java     |    4 +
 ...dLetterChannelExceptionCausePropagatedTest.java |    1 +
 ...CausePropagatedWithDefaultErrorHandlerTest.java |    1 +
 .../DeadLetterChannelHandledExampleTest.java       |   20 +-
 ...lHandledExampleWithDefaultErrorHandlerTest.java |    1 +
 ...adLetterChannelOnExceptionOnRedeliveryTest.java |    4 +
 .../DeadLetterChannelOnRedeliveryTest.java         |    1 +
 .../camel/processor/DeadLetterChannelTest.java     |    1 +
 .../DeadLetterChannelUseOriginalInBodyTest.java    |    1 +
 ...LetterChannelUseOriginalInBodyWithFileTest.java |    1 +
 ...ltConsumerBridgeErrorHandlerRedeliveryTest.java |    1 +
 .../DefinitionPolicyPerProcessorTest.java          |    2 +
 .../camel/processor/DelayInterceptorTest.java      |    1 +
 .../camel/processor/DelayerAsyncDelayedTest.java   |    1 +
 .../org/apache/camel/processor/DelayerTest.java    |    1 +
 .../camel/processor/DelayerWhileShutdownTest.java  |    1 +
 .../org/apache/camel/processor/DetourTest.java     |    2 +
 ...point2MustBeStartedBeforeSendProcessorTest.java |    4 +
 ...dpointMustBeStartedBeforeSendProcessorTest.java |    4 +
 .../processor/ExceptionHandlerStreamCacheTest.java |    1 +
 .../processor/FailOverAllFailedExceptionTest.java  |    1 +
 .../FailOverLoadBalanceAutoStartupFalseTest.java   |    1 +
 .../FailOverLoadBalanceMultipleExceptionTest.java  |    1 +
 ...verLoadBalanceNotInheritedErrorHandlerTest.java |    1 +
 .../camel/processor/FailOverLoadBalanceTest.java   |    3 +
 ...lOverLoadBalanceWrappedExceptionNoLuckTest.java |    1 +
 .../FailOverLoadBalanceWrappedExceptionTest.java   |    1 +
 .../FailOverLoadBalancerSetFaultTest.java          |    4 +-
 .../processor/FailOverNotCatchedExceptionTest.java |    1 +
 .../camel/processor/FileIdempotentClearTest.java   |    1 +
 .../FileIdempotentConsumerLoadStoreTest.java       |    1 +
 .../processor/FileIdempotentConsumerTest.java      |    1 +
 .../camel/processor/FileIdempotentRemoveTest.java  |    1 +
 .../processor/FileIdempotentTrunkStoreTest.java    |    1 +
 .../processor/FileRollbackOnCompletionTest.java    |    2 +
 .../camel/processor/FilterBeforeSplitTest.java     |    1 +
 .../camel/processor/FilterNotMatchedTest.java      |    1 +
 .../org/apache/camel/processor/FilterNotTest.java  |    1 +
 .../apache/camel/processor/FilterSimpleTest.java   |    1 +
 .../org/apache/camel/processor/FilterTest.java     |    1 +
 ...dempotentConsumerUsingCustomRepositoryTest.java |    6 +
 .../processor/InheritErrorHandlerDefaultTest.java  |    1 +
 .../processor/InheritErrorHandlerFalseTest.java    |    1 +
 .../processor/InheritErrorHandlerTrueTest.java     |    1 +
 .../org/apache/camel/processor/JoinRoutesTest.java |    1 +
 .../java/org/apache/camel/processor/LoopTest.java  |    1 +
 .../apache/camel/processor/LoopTestProcessor.java  |    1 +
 .../camel/processor/LoopWithAggregatorTest.java    |    1 +
 .../org/apache/camel/processor/MDCAsyncTest.java   |    5 +-
 .../org/apache/camel/processor/MDCResetTest.java   |    4 +-
 .../org/apache/camel/processor/MDCWireTapTest.java |   12 +-
 .../apache/camel/processor/MethodFilterTest.java   |    1 +
 .../MultiCastParallelAndStreamCachingTest.java     |    8 +-
 .../MultiCastStreamCachingInSubRouteTest.java      |    2 +-
 .../MultiErrorHandlerInRouteNotHandledTest.java    |    1 +
 .../processor/MultiErrorHandlerInRouteTest.java    |    1 +
 .../MulticastKeepOriginalMessageUnchangedTest.java |    1 +
 .../processor/MulticastNoStopOnExceptionTest.java  |    1 +
 .../MulticastParallelAllTimeoutAwareTest.java      |    2 +
 .../MulticastParallelNoStopOnExceptionTest.java    |    2 +
 .../MulticastParallelStopOnExceptionTest.java      |    2 +
 .../MulticastParallelTimeoutAwareTest.java         |    2 +
 ...castStopOnExceptionLastWithOnExceptionTest.java |    1 +
 .../processor/MulticastStopOnExceptionTest.java    |    1 +
 ...ulticastStopOnExceptionWithOnExceptionTest.java |    1 +
 .../processor/MulticastStreamCachingTest.java      |    1 +
 .../org/apache/camel/processor/MulticastTest.java  |    1 +
 .../camel/processor/MulticastUnitOfWorkTest.java   |    1 +
 .../processor/MulticastWithOnExceptionTest.java    |    1 +
 .../camel/processor/MyLoggingSentEventNotifer.java |    1 +
 .../org/apache/camel/processor/MyNormalizer.java   |    4 +-
 .../camel/processor/MySentEventNotifier.java       |    1 +
 .../org/apache/camel/processor/MyValidator.java    |    1 +
 .../processor/NewProcessorAndServiceTest.java      |    5 +-
 .../org/apache/camel/processor/NormalizerTest.java |    1 +
 ...letionAndInterceptAndOnExceptionGlobalTest.java |    1 +
 .../OnCompletionAndInterceptGlobalTest.java        |    1 +
 .../processor/OnCompletionAndInterceptTest.java    |    1 +
 .../camel/processor/OnCompletionAsyncTest.java     |    1 +
 .../OnCompletionGlobalCustomPoolTest.java          |    2 +
 .../camel/processor/OnCompletionGlobalTest.java    |    1 +
 .../OnCompletionMoreGlobalRouteCompletionTest.java |    1 +
 .../processor/OnCompletionMoreGlobalTest.java      |    1 +
 .../processor/OnCompletionOnCompleteOnlyTest.java  |    1 +
 .../processor/OnCompletionOnFailureOnlyTest.java   |    1 +
 ...ompletionRouteScopeOverrideGlobalScopeTest.java |    1 +
 .../OnCompletionShutdownProcessorTest.java         |    3 +
 .../apache/camel/processor/OnCompletionTest.java   |    1 +
 .../processor/OnCompletionUseOriginalBodyTest.java |    1 +
 .../camel/processor/PipelineConcurrentTest.java    |    3 +-
 .../apache/camel/processor/PipelineMEPTest.java    |    3 +-
 .../org/apache/camel/processor/PipelineTest.java   |   16 +-
 .../camel/processor/PolicyPerProcessorTest.java    |    2 +
 .../apache/camel/processor/PolicyPerRouteTest.java |    2 +
 .../camel/processor/RandomLoadBalanceTest.java     |    1 +
 .../camel/processor/RecipientListBeanTest.java     |    1 +
 ...istExchangePropertyAggregationStrategyTest.java |    1 +
 .../RecipientListExchangePropertyTest.java         |    1 +
 .../RecipientListFineGrainedErrorHandlingTest.java |    1 +
 .../processor/RecipientListFunctionalTest.java     |    1 +
 .../RecipientListIgnoreInvalidEndpointsTest.java   |    1 +
 ...cipientListInvalidEndpointErrorHandlerTest.java |    1 +
 ...tInvalidEndpointIgnoreInvalidEndpointsTest.java |    1 +
 .../camel/processor/RecipientListLeakTest.java     |    1 +
 .../camel/processor/RecipientListNoCacheTest.java  |    1 +
 .../processor/RecipientListReturnValueTest.java    |    1 +
 .../apache/camel/processor/RecipientListTest.java  |    1 +
 .../RecipientListWithArrayHeaderTest.java          |    1 +
 ...RecipientListWithStringDelimitedHeaderTest.java |    1 +
 ...cipientListWithStringDelimitedPropertyTest.java |    1 +
 .../RedeliveryPolicyPerExceptionTest.java          |    1 +
 .../org/apache/camel/processor/RegExRouteTest.java |    1 +
 .../apache/camel/processor/RemoveHeaderTest.java   |    1 +
 .../camel/processor/RemoveHeadersExcludeTest.java  |    1 +
 .../apache/camel/processor/RemoveHeadersTest.java  |    1 +
 .../RemovePropertiesWithExclusionTest.java         |    1 +
 .../RemovePropertiesWithoutExclusionTest.java      |    1 +
 .../apache/camel/processor/RemovePropertyTest.java |    1 +
 .../apache/camel/processor/ResequencerTest.java    |    2 +
 .../camel/processor/RoundRobinLoadBalanceTest.java |    1 +
 .../camel/processor/RoutePerformanceCountTest.java |    1 +
 .../processor/RouteServicesStartupOrderTest.java   |    4 +
 .../apache/camel/processor/RoutingSlipDslTest.java |    1 +
 .../camel/processor/RoutingSlipNoCacheTest.java    |    1 +
 .../camel/processor/SamplingThrottlerTest.java     |    1 +
 .../apache/camel/processor/ScriptExternalTest.java |    1 +
 .../org/apache/camel/processor/ScriptTest.java     |    1 +
 .../camel/processor/SetExchangePatternTest.java    |    1 +
 .../SetHeaderUsingDslExpressionsTest.java          |    2 +
 .../apache/camel/processor/SetPropertyTest.java    |    1 +
 .../processor/ShutdownCompleteAllTasksTest.java    |    1 +
 .../org/apache/camel/processor/SimpleMockTest.java |    2 +
 .../camel/processor/SimpleProcessorTest.java       |    2 +-
 .../processor/SimpleProcessorTraceableTest.java    |    2 +-
 .../org/apache/camel/processor/SimulatorTest.java  |    4 +-
 .../org/apache/camel/processor/SortBodyTest.java   |    1 +
 .../apache/camel/processor/SortExpressionTest.java |    2 +
 .../camel/processor/SplitAggregateInOutTest.java   |    1 +
 .../camel/processor/SplitParallelTimeoutTest.java  |    2 +
 .../camel/processor/SplitterMethodCallTest.java    |    2 +
 .../SplitterNoAggregationStrategyTest.java         |    1 +
 .../processor/SplitterNoStopOnExceptionTest.java   |    1 +
 .../camel/processor/SplitterOnCompletionTest.java  |    1 +
 .../processor/SplitterOnPrepareExceptionTest.java  |    1 +
 .../camel/processor/SplitterOnPrepareTest.java     |    1 +
 .../SplitterParallelNoStopOnExceptionTest.java     |    2 +
 .../SplitterParallelStopOnExceptionTest.java       |    2 +
 ...ParallelStopOnExceptionWithOnExceptionTest.java |    1 +
 .../apache/camel/processor/SplitterPojoTest.java   |    1 +
 ...SplitterShareUnitOfWorkCompletionAwareTest.java |    1 +
 .../processor/SplitterStopOnExceptionTest.java     |    1 +
 ...SplitterStopOnExceptionWithOnExceptionTest.java |    1 +
 .../camel/processor/SplitterStreamCacheTest.java   |    1 +
 .../SplitterStreamCachingInSubRouteTest.java       |    2 +-
 .../org/apache/camel/processor/SplitterTest.java   |    9 +-
 .../SplitterWithCustomThreadPoolExecutorTest.java  |    1 +
 .../camel/processor/SplitterWithXqureyTest.java    |    1 +
 .../camel/processor/StickyLoadBalanceTest.java     |    1 +
 .../camel/processor/StreamResequencerTest.java     |    1 +
 ...SourceContentBasedRouterNoErrorHandlerTest.java |    1 +
 ...tentBasedRouterSSEnabledOnCamelContextTest.java |    1 +
 .../StreamSourceContentBasedRouterTest.java        |    1 +
 .../camel/processor/ThrottlerAsyncDelayedTest.java |    1 +
 .../apache/camel/processor/ThrottlerDslTest.java   |    1 +
 .../camel/processor/ThrottlerMethodCallTest.java   |    1 +
 .../org/apache/camel/processor/ThrottlerTest.java  |    1 +
 .../processor/ThrottlerThreadPoolProfileTest.java  |    1 +
 ...xceptionRoutePolicyHalfOpenHandlerSedaTest.java |    1 +
 ...ingExceptionRoutePolicyHalfOpenHandlerTest.java |    1 +
 ...ThrottlingExceptionRoutePolicyHalfOpenTest.java |    1 +
 .../ThrottlingExceptionRoutePolicyTest.java        |    1 +
 .../camel/processor/TopicLoadBalanceTest.java      |    1 +
 .../apache/camel/processor/TraceDelayerTest.java   |    1 +
 .../camel/processor/TraceInterceptorTest.java      |    1 +
 .../camel/processor/TracerConfigurationTest.java   |    1 +
 .../processor/TransformExternalScriptTest.java     |    1 +
 .../camel/processor/TransformProcessorTest.java    |    1 +
 .../TransformProcessorWithHeaderTest.java          |    1 +
 .../org/apache/camel/processor/TransformTest.java  |    1 +
 .../camel/processor/TransformViaDSLTest.java       |    1 +
 .../apache/camel/processor/TransformXpathTest.java |    1 +
 .../TryProcessorHandleWrappedExceptionTest.java    |    3 +
 .../TryProcessorMultipleExceptionTest.java         |    1 +
 .../camel/processor/TryProcessorOnWhenTest.java    |    1 +
 .../apache/camel/processor/TryProcessorTest.java   |    5 +
 .../TypeConverterRegistryStatsPerformanceTest.java |    1 +
 .../UnitOfWorkSynchronizationAdapterTest.java      |    1 +
 .../org/apache/camel/processor/UnitOfWorkTest.java |    1 +
 .../apache/camel/processor/ValidateRegExpTest.java |    1 +
 .../camel/processor/ValidateSimpleRegExpTest.java  |    1 +
 .../apache/camel/processor/ValidateSimpleTest.java |    1 +
 .../processor/ValidatingDomProcessorTest.java      |    1 +
 .../ValidatingProcessorNotUseSharedSchemaTest.java |    1 +
 .../camel/processor/ValidatingProcessorTest.java   |    1 +
 .../ValidationFinallyBlockNoCatchTest.java         |    1 +
 .../processor/ValidationFinallyBlockTest.java      |    1 +
 .../org/apache/camel/processor/ValidationTest.java |    1 +
 ...dationWithErrorInHandleAndFinallyBlockTest.java |    1 +
 .../processor/ValidationWithExceptionTest.java     |    1 +
 .../ValidationWithFinallyBlockPipelineTest.java    |    1 +
 ...lidationWithHandlePipelineAndExceptionTest.java |    1 +
 .../ValidationWithHandlePipelineTest.java          |    1 +
 .../ValidationWithInFlowExceptionTest.java         |    1 +
 .../ValidationWithMultipleHandlesTest.java         |    1 +
 ...lidationWithNestedFinallyBlockPipelineTest.java |    1 +
 .../processor/ValidationWithTryCatchTest.java      |    1 +
 .../processor/WireTapBeanAsProcessorTest.java      |    1 +
 .../apache/camel/processor/WireTapBeanTest.java    |    1 +
 .../camel/processor/WireTapCustomPool2Test.java    |    2 +
 .../camel/processor/WireTapCustomPoolTest.java     |    2 +
 .../camel/processor/WireTapExpressionTest.java     |    1 +
 .../camel/processor/WireTapLogEndpointTest.java    |    1 +
 .../org/apache/camel/processor/WireTapLogTest.java |    1 +
 .../camel/processor/WireTapShutdownBeanTest.java   |    1 +
 .../camel/processor/WireTapShutdownRouteTest.java  |    1 +
 .../camel/processor/WireTapStreamCachingTest.java  |    1 +
 .../org/apache/camel/processor/WireTapTest.java    |    1 +
 .../camel/processor/WireTapUsingMulticastTest.java |    1 +
 .../camel/processor/WireTapVoidBeanTest.java       |    1 +
 .../apache/camel/processor/XPathChoiceTest.java    |    1 +
 .../apache/camel/processor/XPathFilterTest.java    |    1 +
 ...ithNamespaceBuilderFilterAndResultTypeTest.java |    1 +
 .../XPathWithNamespaceBuilderFilterTest.java       |    1 +
 .../processor/XPathWithNamespacesFilterTest.java   |    1 +
 .../aggregator/AbstractDistributedTest.java        |    2 +
 ...gregateCompletionOnNewCorrelationGroupTest.java |    1 +
 .../aggregator/AggregateControllerTest.java        |    1 +
 .../aggregator/AggregateDiscardOnFailureTest.java  |  140 +++
 ...eCompletionHeaderInAggregationStrategyTest.java |    1 +
 .../AggregateForceCompletionHeaderTest.java        |    1 +
 .../aggregator/AggregateFromWireTapTest.java       |    1 +
 .../aggregator/AggregateLostGroupIssueTest.java    |    4 +-
 .../aggregator/AggregateMultipleSourceTest.java    |    1 +
 .../AggregateNewExchangeAndConfirmTest.java        |    1 +
 .../AggregateRepositoryReturnNullTest.java         |    1 +
 .../AggregateShouldSkipFilteredExchangesTest.java  |    1 +
 .../AggregateSimpleExpressionIssueTest.java        |    1 +
 .../processor/aggregator/AggregateTimeoutTest.java |    2 +
 .../aggregator/AggregatorExceptionHandleTest.java  |    2 +-
 .../camel/processor/aggregator/AggregatorTest.java |    1 +
 .../aggregator/CustomAggregationStrategyTest.java  |    1 +
 .../aggregator/DistributedTimeoutTest.java         |    2 +
 .../AsyncEndpointCustomAsyncInterceptorTest.java   |    1 +
 .../async/AsyncEndpointCustomInterceptorTest.java  |    1 +
 .../async/AsyncEndpointCustomRoutePolicyTest.java  |    1 +
 .../processor/async/AsyncEndpointDelayUoWTest.java |    1 +
 .../processor/async/AsyncEndpointPolicyTest.java   |    2 +
 .../async/AsyncEndpointRecipientList3Test.java     |    2 +-
 .../async/AsyncEndpointRecipientList4Test.java     |    2 +-
 .../async/AsyncEndpointRecipientListBean3Test.java |    2 +-
 .../async/AsyncEndpointRecipientListBean4Test.java |    2 +-
 .../AsyncEndpointRecipientListParallel3Test.java   |    2 +-
 .../AsyncEndpointRecipientListParallel4Test.java   |    2 +-
 .../async/AsyncEndpointRoutingSlip3Test.java       |    2 +-
 .../async/AsyncEndpointRoutingSlipBean3Test.java   |    2 +-
 ...syncEndpointRoutingSlipBeanNonBlockingTest.java |    2 +-
 .../async/AsyncEndpointUoWFailedTest.java          |    1 +
 .../processor/async/AsyncEndpointUoWTest.java      |    1 +
 .../processor/async/AsyncRouteWithErrorTest.java   |    1 +
 .../camel/processor/async/MyAsyncEndpoint.java     |    3 +
 .../camel/processor/async/MyAsyncProducer.java     |    6 +-
 .../DynamicRouterConcurrentPOJOTest.java           |    1 +
 .../EnricherAsyncUnhandledExceptionTest.java       |    1 +
 .../processor/enricher/EnricherNoResourceTest.java |    1 +
 .../camel/processor/enricher/EnricherRefTest.java  |    2 +-
 .../processor/enricher/EnricherSendEventTest.java  |    1 +
 .../camel/processor/enricher/EnricherTest.java     |    1 +
 .../camel/processor/enricher/FailureProcessor.java |    1 +
 ...ollEnrichFileCustomAggregationStrategyTest.java |    1 +
 .../enricher/PollEnricherNoResourceTest.java       |    1 +
 .../camel/processor/enricher/PollEnricherTest.java |    3 +-
 .../camel/processor/enricher/SampleAggregator.java |    1 +
 .../errorhandler/ErrorHandlerSupportTest.java      |    5 +
 .../CustomExceptionPolicyStrategyTest.java         |    4 +-
 ...ltExceptionPolicyStrategyUsingOnlyWhenTest.java |    3 +-
 ...efaultExceptionPolicyStrategyUsingWhenTest.java |    3 +-
 .../intercept/DualInterceptSimpleRouteTest.java    |   59 --
 .../InterceptFromEndpointInstanceTest.java         |    1 +
 .../InterceptFromEndpointRefFixedTest.java         |    1 +
 .../intercept/InterceptFromEndpointRefTest.java    |    1 +
 .../InterceptFromEndpointRefUriFixedTest.java      |    1 +
 .../intercept/InterceptFromEndpointRefUriTest.java |    1 +
 .../intercept/InterceptFromSimpleLogTest.java      |    1 +
 .../InterceptFromSimplePredicateTest.java          |    2 +
 .../InterceptFromSimplePredicateWithStopTest.java  |    1 +
 .../intercept/InterceptFromSimpleRouteTest.java    |    1 +
 .../intercept/InterceptFromUriRegexTest.java       |    1 +
 .../intercept/InterceptFromUriSimpleLogTest.java   |    1 +
 .../InterceptFromUriWildcardHeaderUriTest.java     |    1 +
 .../intercept/InterceptFromUriWildcardTest.java    |    1 +
 .../InterceptSendToEndpointAfterTest.java          |  114 +++
 .../interceptor/AdviceWithRouteIdTest.java         |    1 +
 .../AuditInterceptorAsyncDelegateIssueTest.java    |    1 +
 .../AuditInterceptorDelegateIssueTest.java         |    1 +
 .../processor/interceptor/ConditionSupport.java    |    2 +
 .../InterceptorStrategyNotOrderedTest.java         |    2 +
 .../InterceptorStrategyOrderedTest.java            |    4 +
 ...efaultErrorHandlerExchangeFormatterRefTest.java |    1 +
 .../DefaultErrorHandlerRetryWhileTest.java         |    1 +
 ...rorHandlerRouteWithDefaultErrorHandlerTest.java |    1 +
 ...ceptionProcessorInspectCausedExceptionTest.java |    1 +
 ...CausedExceptionWithDefaultErrorHandlerTest.java |    1 +
 .../OnExceptionUseOriginalBodyTest.java            |    1 +
 .../OnExceptionUseOriginalMessageTest.java         |    2 +-
 .../OnExceptionWrappedExceptionTest.java           |    1 +
 .../resequencer/MyFileNameExpression.java          |    1 +
 .../resequencer/ResequencerBatchOrderTest.java     |    1 +
 .../resequencer/ResequencerEngineTest.java         |    2 +
 .../resequencer/ResequencerFileNameTest.java       |    1 +
 .../processor/resequencer/SequenceBuffer.java      |    1 +
 .../DynamicRouterEventNotifierTest.java            |    1 +
 .../RecipientListEventNotifierTest.java            |    1 +
 .../RoutingSlipDataModificationTest.java           |    1 +
 .../routingslip/RoutingSlipEventNotifierTest.java  |    1 +
 .../RoutingSlipIgnoreInvalidEndpointsTest.java     |    1 +
 .../processor/routingslip/RoutingSlipPOJOTest.java |    5 +-
 .../processor/routingslip/RoutingSlipTest.java     |    1 +
 .../RoutingSlipWithErrorHandlerTest.java           |    1 +
 .../routingslip/RoutingSlipWithExceptionTest.java  |    1 +
 .../validation/CatalogLSResourceResolver.java      |   16 +
 .../camel/support/IntrospectionSupportTest.java    |    1 +
 .../apache/camel/support/ServiceSupportTest.java   |    3 +
 .../org/apache/camel/support/jndi/ExampleBean.java |    1 +
 .../org/apache/camel/support/jndi/JndiTest.java    |    1 +
 .../org/apache/camel/util/AnotherExampleBean.java  |    1 +
 .../camel/util/ExpressionListComparatorTest.java   |    2 +
 .../apache/camel/util/OrderedComparatorTest.java   |    1 +
 .../builder/endpoint/AbstractEndpointBuilder.java  |    1 +
 .../builder/endpoint/EndpointBuilderFactory.java   |    1 -
 .../AtmosphereWebsocketEndpointBuilderFactory.java |   48 +-
 .../dsl/DataSetEndpointBuilderFactory.java         |   30 +
 .../dsl/EhcacheEndpointBuilderFactory.java         |   18 +-
 .../endpoint/dsl/EjbEndpointBuilderFactory.java    |  187 ----
 .../endpoint/dsl/HdfsEndpointBuilderFactory.java   |   16 +-
 .../endpoint/dsl/HttpEndpointBuilderFactory.java   |   24 +-
 .../dsl/JettyHttpEndpointBuilder9Factory.java      |   16 +-
 .../endpoint/dsl/JpaEndpointBuilderFactory.java    |  379 +++-----
 .../endpoint/dsl/LogEndpointBuilderFactory.java    |   22 -
 .../dsl/MongoDbEndpointBuilderFactory.java         |    8 +-
 .../dsl/ServletEndpointBuilderFactory.java         |   16 +-
 .../endpoint/ProcessorDefinitionDslTest.java       |    1 +
 .../camel-headersmap/src/main/docs/headersmap.adoc |    6 +-
 .../src/main/docs/xtokenize-language.adoc          |    4 +-
 .../language/xtokenizer/XMLTokenizeLanguage.java   |    3 +
 .../camel/support/builder/xml/StAX2SAXSource.java  |   15 +
 .../validation/DefaultValidationErrorHandler.java  |    5 +
 .../validation/PredicateValidatingProcessor.java   |    2 +
 .../processor/validation/ValidatingProcessor.java  |    1 +
 .../org/apache/camel/util/xml/BytesSource.java     |    3 +
 .../org/apache/camel/util/xml/SourceCache.java     |    5 +
 .../apache/camel/util/xml/StreamSourceCache.java   |    5 +
 .../org/apache/camel/util/xml/StringSource.java    |    5 +
 .../camel/main/DefaultConfigurationConfigurer.java |    2 +
 .../camel/main/DefaultConfigurationProperties.java |   39 +
 .../src/main/java/org/apache/camel/main/Main.java  |    3 +
 .../org/apache/camel/main/MainListenerSupport.java |    5 +
 .../java/org/apache/camel/main/MainSupport.java    |    7 +
 .../camel-main-configuration-metadata.json         |   12 +
 .../mbean/ManagedAggregateProcessorMBean.java      |    2 +
 .../mbean/ManagedDynamicRouterMBean.java           |    1 +
 .../api/management/mbean/ManagedEnricherMBean.java |    1 +
 .../management/mbean/ManagedErrorHandlerMBean.java |    3 +
 .../management/mbean/ManagedPollEnricherMBean.java |    1 +
 .../mbean/ManagedRecipientListMBean.java           |    1 +
 .../management/mbean/ManagedRoutingSlipMBean.java  |    1 +
 .../mbean/ManagedSendDynamicProcessorMBean.java    |    1 +
 .../mbean/ManagedSendProcessorMBean.java           |    1 +
 .../api/management/mbean/ManagedTracerMBean.java   |   48 +
 .../api/management/mbean/ManagedWireTapMBean.java  |    1 +
 .../DefaultInstrumentationProcessor.java           |    1 +
 .../camel/management/DefaultManagementAgent.java   |   45 +
 .../DefaultManagementObjectNameStrategy.java       |   23 +
 .../DefaultManagementObjectStrategy.java           |   15 +
 .../management/DelegatePerformanceCounter.java     |    5 +
 .../management/JmxManagementLifecycleStrategy.java |   23 +
 .../camel/management/JmxManagementStrategy.java    |    6 +
 .../management/JmxManagementStrategyFactory.java   |    1 +
 .../management/JmxNotificationEventNotifier.java   |    4 +
 .../camel/management/LoggingEventNotifier.java     |    3 +
 .../camel/management/ManagedCamelContextImpl.java  |    4 +
 .../camel/management/PublishEventNotifier.java     |    4 +
 .../mbean/ManagedAggregateProcessor.java           |   39 +
 .../management/mbean/ManagedBacklogDebugger.java   |   38 +
 .../management/mbean/ManagedBacklogTracer.java     |   25 +
 .../management/mbean/ManagedBrowsableEndpoint.java |   11 +-
 .../management/mbean/ManagedCamelContext.java      |   57 ++
 .../camel/management/mbean/ManagedComponent.java   |    5 +
 .../camel/management/mbean/ManagedConsumer.java    |    2 +
 .../management/mbean/ManagedConsumerCache.java     |    8 +
 .../camel/management/mbean/ManagedCounter.java     |    4 +
 .../camel/management/mbean/ManagedDelayer.java     |    4 +
 .../management/mbean/ManagedEndpointRegistry.java  |    8 +
 .../camel/management/mbean/ManagedEnricher.java    |    1 +
 .../management/mbean/ManagedErrorHandler.java      |   59 ++
 .../management/mbean/ManagedEventNotifier.java     |   23 +
 .../mbean/ManagedPerformanceCounter.java           |   27 +
 .../management/mbean/ManagedPollEnricher.java      |    1 +
 .../camel/management/mbean/ManagedProcessor.java   |   11 +
 .../camel/management/mbean/ManagedProducer.java    |    2 +
 .../management/mbean/ManagedProducerCache.java     |    9 +
 .../camel/management/mbean/ManagedRoute.java       |   29 +
 .../mbean/ManagedRuntimeCamelCatalog.java          |    1 +
 .../mbean/ManagedRuntimeEndpointRegistry.java      |    1 +
 .../mbean/ManagedScheduledPollConsumer.java        |   16 +
 .../mbean/ManagedSendDynamicProcessor.java         |    8 +
 .../management/mbean/ManagedSendProcessor.java     |    4 +
 .../camel/management/mbean/ManagedService.java     |   13 +
 .../mbean/ManagedStreamCachingStrategy.java        |   24 +
 .../management/mbean/ManagedSuspendableRoute.java  |    3 +
 .../camel/management/mbean/ManagedThreadPool.java  |   24 +
 .../camel/management/mbean/ManagedThrottler.java   |    7 +
 .../ManagedThrottlingInflightRoutePolicy.java      |    8 +
 .../management/mbean/ManagedThroughputLogger.java  |    5 +
 .../camel/management/mbean/ManagedTracer.java      |   96 ++
 .../mbean/ManagedTransformerRegistry.java          |    8 +
 .../mbean/ManagedTypeConverterRegistry.java        |   13 +
 .../management/mbean/ManagedValidatorRegistry.java |    8 +
 .../management/mbean/ManagedWireTapProcessor.java  |    8 +
 .../camel/management/mbean/StatisticCounter.java   |    3 +
 .../camel/management/mbean/StatisticDelta.java     |    3 +
 .../camel/management/mbean/StatisticMaximum.java   |    3 +
 .../camel/management/mbean/StatisticMinimum.java   |    3 +
 .../camel/management/mbean/StatisticValue.java     |    3 +
 .../component/controlbus/ControlBusStatsTest.java  |    1 +
 .../camel/management/BacklogDebuggerTest.java      |    1 +
 .../camel/management/BacklogTracerFilterTest.java  |    1 +
 .../management/BacklogTracerIdOnAllNodesTest.java  |    1 +
 .../management/BacklogTracerPatternRouteTest.java  |    1 +
 .../camel/management/BacklogTracerPatternTest.java |    1 +
 .../management/BacklogTracerStreamCachingTest.java |    1 +
 .../apache/camel/management/BacklogTracerTest.java |    1 +
 .../management/CamelChoiceWithManagementTest.java  |    1 +
 .../apache/camel/management/CustomEndpoint.java    |    3 +
 .../JmxInstrumentationCustomMBeanTest.java         |    4 +
 .../JmxInstrumentationUsingDefaultsTest.java       |    1 +
 .../JmxNotificationEventNotifierTest.java          |    1 +
 .../camel/management/JmxRecipientListTest.java     |    1 +
 .../management/ManagedAggregateControllerTest.java |    1 +
 .../management/ManagedCustomLoadBalancerTest.java  |    1 +
 .../management/ManagedCustomProcessorTest.java     |    1 +
 .../management/ManagedFileIdempotentClearTest.java |    1 +
 .../ManagedFileIdempotentConsumerTest.java         |    1 +
 .../management/ManagedInlinedProcessorTest.java    |    2 +-
 .../ManagedMemoryIdempotentClearTest.java          |    1 +
 .../ManagedMemoryIdempotentConsumerTest.java       |    1 +
 .../ManagedRouteStopAndStartCleanupTest.java       |    1 +
 .../camel/management/ManagedStartupFailedTest.java |   82 ++
 .../management/ManagedSuspendedServiceTest.java    |    1 +
 .../apache/camel/management/ManagedTracerTest.java |  101 ++
 .../apache/camel/component/ResourceEndpoint.java   |    6 +
 .../stream/ByteArrayInputStreamCache.java          |    3 +
 .../camel/converter/stream/CachedOutputStream.java |    8 +
 .../converter/stream/FileInputStreamCache.java     |    4 +
 .../camel/converter/stream/InputStreamCache.java   |    4 +
 .../converter/stream/OutputStreamBuilder.java      |   96 --
 .../apache/camel/converter/stream/ReaderCache.java |    5 +
 .../AsyncCallbackToCompletableFutureAdapter.java   |    2 +-
 .../support/AsyncProcessorConverterHelper.java     |    6 +
 .../camel/support/CamelObjectInputStream.java      |    1 +
 .../apache/camel/support/ChildServiceSupport.java  |    2 +
 .../apache/camel/support/DefaultAsyncProducer.java |    2 +
 .../org/apache/camel/support/DefaultComponent.java |    5 +
 .../org/apache/camel/support/DefaultConsumer.java  |    6 +
 .../org/apache/camel/support/DefaultEndpoint.java  |   10 +
 .../org/apache/camel/support/DefaultExchange.java  |   43 +
 .../camel/support/DefaultExchangeHolder.java       |    2 +
 .../camel/support/DefaultHeaderFilterStrategy.java |    2 +
 .../camel/support/DefaultLRUCacheFactory.java      |    6 +
 .../org/apache/camel/support/DefaultMessage.java   |   14 +
 .../DefaultPollingConsumerPollStrategy.java        |    3 +
 .../camel/support/DefaultPollingEndpoint.java      |    1 +
 .../org/apache/camel/support/DefaultProducer.java  |    1 +
 .../support/DefaultScheduledPollConsumer.java      |   11 +-
 .../DefaultScheduledPollConsumerScheduler.java     |    2 +
 .../camel/support/DefaultThreadPoolFactory.java    |    1 +
 .../apache/camel/support/DefaultTimeoutMap.java    |    5 +
 .../camel/support/EventDrivenPollingConsumer.java  |    7 +
 .../apache/camel/support/EventNotifierSupport.java |   24 +
 .../org/apache/camel/support/ExchangeHelper.java   |  109 +--
 .../apache/camel/support/ExpressionAdapter.java    |    2 +
 .../apache/camel/support/ExpressionComparator.java |    1 +
 .../camel/support/ExpressionListComparator.java    |    1 +
 .../apache/camel/support/ExpressionSupport.java    |    1 +
 .../support/ExpressionToPredicateAdapter.java      |    1 +
 .../support/HeaderFilterStrategyComponent.java     |    2 +
 .../camel/support/HeaderSelectorProducer.java      |    5 +-
 .../org/apache/camel/support/LanguageSupport.java  |    2 +
 .../camel/support/LoggingExceptionHandler.java     |    3 +
 .../org/apache/camel/support/MessageHelper.java    |   11 +-
 .../org/apache/camel/support/ObjectHelper.java     |   15 +-
 .../apache/camel/support/OrderedComparator.java    |    1 +
 .../camel/support/PollingConsumerSupport.java      |    1 +
 .../apache/camel/support/ProcessorEndpoint.java    |    2 +
 .../camel/support/ProcessorPollingConsumer.java    |    5 +
 .../apache/camel/support/RoutePolicySupport.java   |    4 +
 .../camel/support/ScheduledPollConsumer.java       |    1 +
 .../camel/support/ScheduledPollEndpoint.java       |    1 +
 .../apache/camel/support/SimpleUuidGenerator.java  |    1 +
 .../camel/support/SynchronizationAdapter.java      |    6 +
 .../camel/support/SynchronousDelegateProducer.java |    6 +
 .../org/apache/camel/support/TimeoutMapEntry.java  |    5 +
 .../support/builder/BinaryPredicateSupport.java    |    5 +
 .../camel/support/builder/ExpressionBuilder.java   |  129 ---
 .../camel/support/builder/OutputStreamBuilder.java |   95 ++
 .../builder/TokenXMLExpressionIterator.java        |   46 +-
 .../support/component/AbstractApiComponent.java    |    1 +
 .../support/component/AbstractApiEndpoint.java     |    1 +
 .../support/component/AbstractApiProducer.java     |    4 +-
 .../support/jndi/CamelInitialContextFactory.java   |    1 +
 .../jndi/CamelSingletonInitialContextFactory.java  |    1 +
 .../camel/support/jndi/JndiBeanRepository.java     |    4 +
 .../org/apache/camel/support/jndi/JndiContext.java |   36 +
 .../DefaultAnnotationExpressionFactory.java        |    1 +
 .../DefaultManagementMBeanAssembler.java           |    1 +
 .../camel/support/processor/CamelLogProcessor.java |    4 +
 .../processor/DefaultExchangeFormatter.java        |   56 +-
 .../support/processor/DefaultMaskingFormatter.java |    1 +
 .../support/processor/DelegateAsyncProcessor.java  |    7 +
 .../camel/support/processor/DelegateProcessor.java |    6 +
 .../support/processor/DelegateSyncProcessor.java   |    1 +
 .../camel/support/processor/MarshalProcessor.java  |    8 +-
 .../camel/support/processor/ThroughputLogger.java  |    5 +
 .../support/processor/UnmarshalProcessor.java      |    7 +
 .../idempotent/FileIdempotentRepository.java       |    5 +
 .../idempotent/MemoryIdempotentRepository.java     |    5 +
 .../org/apache/camel/util/CamelVersionHelper.java  |   16 +
 .../java/org/apache/camel/util/FilterIterator.java |    3 +
 .../main/java/org/apache/camel/util/Scanner.java   |    3 +
 .../util/concurrent/AsyncCompletionService.java    |    2 +
 .../camel/util/concurrent/CamelThreadFactory.java  |    2 +
 .../concurrent/SubmitOrderedCompletionService.java |    7 +
 .../concurrent/SynchronousExecutorService.java     |    6 +
 docs/components/modules/ROOT/nav.adoc              |   10 +-
 .../modules/ROOT/pages/activemq-component.adoc     |   14 +-
 .../modules/ROOT/pages/ahc-component.adoc          |   46 +-
 .../modules/ROOT/pages/ahc-ws-component.adoc       |   18 +-
 .../modules/ROOT/pages/amqp-component.adoc         |   20 +-
 .../modules/ROOT/pages/apns-component.adoc         |   30 +-
 .../modules/ROOT/pages/as2-component.adoc          |   16 +-
 .../modules/ROOT/pages/asn1-dataformat.adoc        |   10 +-
 .../modules/ROOT/pages/asterisk-component.adoc     |   14 +-
 .../modules/ROOT/pages/atmos-component.adoc        |   18 +-
 .../ROOT/pages/atmosphere-websocket-component.adoc |   20 +-
 .../modules/ROOT/pages/atom-component.adoc         |   20 +-
 .../modules/ROOT/pages/atomix-map-component.adoc   |   18 +-
 .../ROOT/pages/atomix-messaging-component.adoc     |   10 +-
 .../ROOT/pages/atomix-multimap-component.adoc      |   10 +-
 .../modules/ROOT/pages/atomix-queue-component.adoc |   10 +-
 .../modules/ROOT/pages/atomix-set-component.adoc   |   10 +-
 .../modules/ROOT/pages/atomix-value-component.adoc |   10 +-
 .../modules/ROOT/pages/avro-component.adoc         |   20 +-
 .../modules/ROOT/pages/avro-dataformat.adoc        |   10 +-
 .../modules/ROOT/pages/aws-cw-component.adoc       |   24 +-
 .../modules/ROOT/pages/aws-ddb-component.adoc      |   42 +-
 .../ROOT/pages/aws-ddbstream-component.adoc        |   34 +-
 .../modules/ROOT/pages/aws-ec2-component.adoc      |   20 +-
 .../modules/ROOT/pages/aws-ecs-component.adoc      |   22 +-
 .../modules/ROOT/pages/aws-eks-component.adoc      |   22 +-
 .../modules/ROOT/pages/aws-iam-component.adoc      |   22 +-
 .../modules/ROOT/pages/aws-kinesis-component.adoc  |   32 +-
 .../ROOT/pages/aws-kinesis-firehose-component.adoc |   26 +-
 .../modules/ROOT/pages/aws-kms-component.adoc      |   22 +-
 .../modules/ROOT/pages/aws-lambda-component.adoc   |   26 +-
 .../modules/ROOT/pages/aws-mq-component.adoc       |   20 +-
 .../modules/ROOT/pages/aws-msk-component.adoc      |   22 +-
 .../modules/ROOT/pages/aws-s3-component.adoc       |   40 +-
 .../modules/ROOT/pages/aws-sdb-component.adoc      |   30 +-
 .../modules/ROOT/pages/aws-ses-component.adoc      |   26 +-
 .../modules/ROOT/pages/aws-sns-component.adoc      |   30 +-
 .../modules/ROOT/pages/aws-sqs-component.adoc      |   48 +-
 .../modules/ROOT/pages/aws-swf-component.adoc      |   32 +-
 docs/components/modules/ROOT/pages/aws-xray.adoc   |   12 +-
 .../modules/ROOT/pages/azure-blob-component.adoc   |   26 +-
 .../modules/ROOT/pages/azure-queue-component.adoc  |   22 +-
 docs/components/modules/ROOT/pages/azure.adoc      |    2 +-
 .../modules/ROOT/pages/barcode-dataformat.adoc     |   14 +-
 .../modules/ROOT/pages/base64-dataformat.adoc      |   12 +-
 .../modules/ROOT/pages/bean-component.adoc         |   18 +-
 .../modules/ROOT/pages/bean-language.adoc          |   33 +-
 .../ROOT/pages/bean-validator-component.adoc       |   18 +-
 .../modules/ROOT/pages/beanio-dataformat.adoc      |   14 +-
 .../modules/ROOT/pages/beanstalk-component.adoc    |   20 +-
 .../modules/ROOT/pages/bindy-dataformat.adoc       |   44 +-
 docs/components/modules/ROOT/pages/blueprint.adoc  |    6 +-
 .../modules/ROOT/pages/bonita-component.adoc       |   18 +-
 .../modules/ROOT/pages/boon-dataformat.adoc        |  104 --
 .../modules/ROOT/pages/box-component.adoc          |   48 +-
 .../modules/ROOT/pages/braintree-component.adoc    |   60 +-
 .../modules/ROOT/pages/browse-component.adoc       |   16 +-
 .../ROOT/pages/caffeine-cache-component.adoc       |   16 +-
 .../ROOT/pages/caffeine-loadcache-component.adoc   |   12 +-
 .../modules/ROOT/pages/cbor-dataformat.adoc        |   10 +-
 docs/components/modules/ROOT/pages/cdi.adoc        |  353 +------
 .../modules/ROOT/pages/chatscript-component.adoc   |   12 +-
 .../modules/ROOT/pages/chunk-component.adoc        |   22 +-
 .../modules/ROOT/pages/class-component.adoc        |   16 +-
 .../modules/ROOT/pages/cm-sms-component.adoc       |   12 +-
 .../modules/ROOT/pages/cmis-component.adoc         |   22 +-
 .../modules/ROOT/pages/coap-component.adoc         |   14 +-
 .../modules/ROOT/pages/cometd-component.adoc       |   22 +-
 .../modules/ROOT/pages/consul-component.adoc       |   14 +-
 .../modules/ROOT/pages/controlbus-component.adoc   |   18 +-
 .../modules/ROOT/pages/corda-component.adoc        |   16 +-
 .../modules/ROOT/pages/couchbase-component.adoc    |   14 +-
 .../modules/ROOT/pages/couchdb-component.adoc      |   18 +-
 .../modules/ROOT/pages/cql-component.adoc          |   26 +-
 .../modules/ROOT/pages/crypto-cms-component.adoc   |   14 +-
 .../modules/ROOT/pages/crypto-component.adoc       |   30 +-
 .../modules/ROOT/pages/crypto-dataformat.adoc      |   20 +-
 .../modules/ROOT/pages/csv-dataformat.adoc         |   24 +-
 .../modules/ROOT/pages/cxf-component.adoc          |  105 +-
 .../modules/ROOT/pages/cxf-transport.adoc          |   20 +-
 .../modules/ROOT/pages/cxfrs-component.adoc        |   28 +-
 .../modules/ROOT/pages/dataformat-component.adoc   |   14 +-
 .../modules/ROOT/pages/dataset-component.adoc      |   33 +-
 .../modules/ROOT/pages/dataset-test-component.adoc |   17 +-
 .../modules/ROOT/pages/digitalocean-component.adoc |   40 +-
 .../modules/ROOT/pages/direct-component.adoc       |   16 +-
 .../modules/ROOT/pages/direct-vm-component.adoc    |   14 +-
 .../modules/ROOT/pages/disruptor-component.adoc    |   26 +-
 .../modules/ROOT/pages/dns-component.adoc          |   24 +-
 .../modules/ROOT/pages/docker-component.adoc       |   18 +-
 .../modules/ROOT/pages/dozer-component.adoc        |   24 +-
 .../modules/ROOT/pages/drill-component.adoc        |   16 +-
 .../modules/ROOT/pages/dropbox-component.adoc      |   54 +-
 .../modules/ROOT/pages/ehcache-component.adoc      |   22 +-
 .../modules/ROOT/pages/ejb-component.adoc          |  225 -----
 .../ROOT/pages/elasticsearch-rest-component.adoc   |   22 +-
 .../modules/ROOT/pages/elsql-component.adoc        |   20 +-
 .../modules/ROOT/pages/etcd-component.adoc         |   12 +-
 .../modules/ROOT/pages/eventadmin-component.adoc   |   18 +-
 .../modules/ROOT/pages/exec-component.adoc         |   30 +-
 .../modules/ROOT/pages/facebook-component.adoc     |   24 +-
 .../modules/ROOT/pages/fhir-component.adoc         |   10 +-
 .../modules/ROOT/pages/fhirJson-dataformat.adoc    |   10 +-
 .../modules/ROOT/pages/fhirXml-dataformat.adoc     |   10 +-
 .../modules/ROOT/pages/file-component.adoc         |   84 +-
 .../modules/ROOT/pages/file-watch-component.adoc   |   22 +-
 .../modules/ROOT/pages/flatpack-component.adoc     |   32 +-
 .../modules/ROOT/pages/flatpack-dataformat.adoc    |   10 +-
 .../modules/ROOT/pages/flink-component.adoc        |   20 +-
 .../modules/ROOT/pages/fop-component.adoc          |   20 +-
 .../modules/ROOT/pages/freemarker-component.adoc   |   26 +-
 .../modules/ROOT/pages/ftp-component.adoc          |   60 +-
 .../modules/ROOT/pages/ftps-component.adoc         |   10 +-
 .../modules/ROOT/pages/ganglia-component.adoc      |   22 +-
 .../modules/ROOT/pages/geocoder-component.adoc     |   18 +-
 .../modules/ROOT/pages/git-component.adoc          |   16 +-
 .../modules/ROOT/pages/github-component.adoc       |   16 +-
 .../ROOT/pages/google-bigquery-component.adoc      |   24 +-
 .../ROOT/pages/google-bigquery-sql-component.adoc  |   18 +-
 .../ROOT/pages/google-calendar-component.adoc      |   20 +-
 .../pages/google-calendar-stream-component.adoc    |   14 +-
 .../modules/ROOT/pages/google-drive-component.adoc |   20 +-
 .../modules/ROOT/pages/google-mail-component.adoc  |   20 +-
 .../ROOT/pages/google-mail-stream-component.adoc   |   14 +-
 .../ROOT/pages/google-pubsub-component.adoc        |   24 +-
 .../ROOT/pages/google-sheets-component.adoc        |   20 +-
 .../ROOT/pages/google-sheets-stream-component.adoc |   14 +-
 .../modules/ROOT/pages/gora-component.adoc         |   24 +-
 .../modules/ROOT/pages/grape-component.adoc        |   28 +-
 .../modules/ROOT/pages/grok-dataformat.adoc        |   16 +-
 .../modules/ROOT/pages/groovy-language.adoc        |   22 +-
 .../modules/ROOT/pages/grpc-component.adoc         |   26 +-
 .../ROOT/pages/guava-eventbus-component.adoc       |   18 +-
 .../ROOT/pages/gzipdeflater-dataformat.adoc        |   10 +-
 .../pages/hazelcast-atomicvalue-component.adoc     |   22 +-
 .../ROOT/pages/hazelcast-instance-component.adoc   |   12 +-
 .../ROOT/pages/hazelcast-list-component.adoc       |   22 +-
 .../ROOT/pages/hazelcast-map-component.adoc        |   24 +-
 .../ROOT/pages/hazelcast-multimap-component.adoc   |   22 +-
 .../ROOT/pages/hazelcast-queue-component.adoc      |   38 +-
 .../pages/hazelcast-replicatedmap-component.adoc   |   20 +-
 .../ROOT/pages/hazelcast-ringbuffer-component.adoc |   16 +-
 .../ROOT/pages/hazelcast-seda-component.adoc       |   14 +-
 .../ROOT/pages/hazelcast-set-component.adoc        |   10 +-
 .../ROOT/pages/hazelcast-topic-component.adoc      |   16 +-
 docs/components/modules/ROOT/pages/hazelcast.adoc  |   16 +-
 .../modules/ROOT/pages/hbase-component.adoc        |   38 +-
 .../modules/ROOT/pages/hdfs-component.adoc         |  323 +++++++
 .../modules/ROOT/pages/hdfs2-component.adoc        |  323 -------
 .../modules/ROOT/pages/hipchat-component.adoc      |   26 +-
 .../modules/ROOT/pages/hl7-dataformat.adoc         |   26 +-
 .../modules/ROOT/pages/hl7terser-language.adoc     |   10 +-
 .../modules/ROOT/pages/http-component.adoc         |  725 ++++++++++++++
 .../modules/ROOT/pages/http4-component.adoc        |  732 --------------
 docs/components/modules/ROOT/pages/hystrix.adoc    |    4 +-
 .../modules/ROOT/pages/ical-dataformat.adoc        |   10 +-
 .../ROOT/pages/iec60870-client-component.adoc      |   12 +-
 .../ROOT/pages/iec60870-server-component.adoc      |   12 +-
 .../modules/ROOT/pages/ignite-cache-component.adoc |   12 +-
 .../ROOT/pages/ignite-compute-component.adoc       |   14 +-
 .../ROOT/pages/ignite-events-component.adoc        |   10 +-
 .../modules/ROOT/pages/ignite-idgen-component.adoc |   10 +-
 .../ROOT/pages/ignite-messaging-component.adoc     |   12 +-
 .../modules/ROOT/pages/ignite-queue-component.adoc |   12 +-
 .../modules/ROOT/pages/ignite-set-component.adoc   |   12 +-
 docs/components/modules/ROOT/pages/ignite.adoc     |   14 +-
 .../modules/ROOT/pages/infinispan-component.adoc   |  595 +++++++++++-
 .../modules/ROOT/pages/influxdb-component.adoc     |   16 +-
 .../modules/ROOT/pages/iota-component.adoc         |   16 +-
 .../modules/ROOT/pages/ipfs-component.adoc         |   18 +-
 .../modules/ROOT/pages/irc-component.adoc          |   24 +-
 .../modules/ROOT/pages/ironmq-component.adoc       |   24 +-
 .../modules/ROOT/pages/jacksonxml-dataformat.adoc  |   28 +-
 docs/components/modules/ROOT/pages/jasypt.adoc     |   16 +-
 .../modules/ROOT/pages/jaxb-dataformat.adoc        |   30 +-
 .../modules/ROOT/pages/jbpm-component.adoc         |   32 +-
 .../modules/ROOT/pages/jcache-component.adoc       |   36 +-
 .../modules/ROOT/pages/jclouds-component.adoc      |   34 +-
 .../modules/ROOT/pages/jcr-component.adoc          |   18 +-
 .../modules/ROOT/pages/jdbc-component.adoc         |   26 +-
 .../modules/ROOT/pages/jetty-component.adoc        |   54 +-
 .../modules/ROOT/pages/jgroups-component.adoc      |   28 +-
 .../modules/ROOT/pages/jgroups-raft-component.adoc |   22 +-
 .../modules/ROOT/pages/jing-component.adoc         |   16 +-
 .../modules/ROOT/pages/jira-component.adoc         |   38 +-
 .../modules/ROOT/pages/jms-component.adoc          |   94 +-
 .../modules/ROOT/pages/jmx-component.adoc          |   12 +-
 .../modules/ROOT/pages/jolt-component.adoc         |   16 +-
 .../modules/ROOT/pages/jooq-component.adoc         |   18 +-
 .../modules/ROOT/pages/jpa-component.adoc          |   46 +-
 .../ROOT/pages/json-fastjson-dataformat.adoc       |    8 +-
 .../modules/ROOT/pages/json-gson-dataformat.adoc   |    8 +-
 .../ROOT/pages/json-jackson-dataformat.adoc        |   10 +-
 .../ROOT/pages/json-johnzon-dataformat.adoc        |    8 +-
 .../ROOT/pages/json-validator-component.adoc       |   14 +-
 .../ROOT/pages/json-xstream-dataformat.adoc        |   12 +-
 .../modules/ROOT/pages/jsonApi-dataformat.adoc     |    6 +-
 .../modules/ROOT/pages/jsonpath-language.adoc      |   28 +-
 .../modules/ROOT/pages/jt400-component.adoc        |   28 +-
 .../modules/ROOT/pages/kafka-component.adoc        |   40 +-
 .../pages/kubernetes-config-maps-component.adoc    |   12 +-
 .../pages/kubernetes-deployments-component.adoc    |   12 +-
 .../ROOT/pages/kubernetes-hpa-component.adoc       |   12 +-
 .../ROOT/pages/kubernetes-job-component.adoc       |   12 +-
 .../pages/kubernetes-namespaces-component.adoc     |   12 +-
 .../ROOT/pages/kubernetes-nodes-component.adoc     |   12 +-
 ...rnetes-persistent-volumes-claims-component.adoc |   12 +-
 .../kubernetes-persistent-volumes-component.adoc   |   12 +-
 .../ROOT/pages/kubernetes-pods-component.adoc      |   12 +-
 ...bernetes-replication-controllers-component.adoc |   12 +-
 .../kubernetes-resources-quota-component.adoc      |   12 +-
 .../ROOT/pages/kubernetes-secrets-component.adoc   |   12 +-
 .../kubernetes-service-accounts-component.adoc     |   12 +-
 .../ROOT/pages/kubernetes-services-component.adoc  |   12 +-
 docs/components/modules/ROOT/pages/kubernetes.adoc |   12 +-
 docs/components/modules/ROOT/pages/kura.adoc       |   28 +-
 .../modules/ROOT/pages/language-component.adoc     |   18 +-
 .../modules/ROOT/pages/ldap-component.adoc         |   24 +-
 .../modules/ROOT/pages/ldif-component.adoc         |   25 +-
 docs/components/modules/ROOT/pages/leveldb.adoc    |   16 +-
 .../modules/ROOT/pages/linkedin-component.adoc     |   36 +-
 .../modules/ROOT/pages/log-component.adoc          |   31 +-
 .../modules/ROOT/pages/lpr-component.adoc          |   24 +-
 docs/components/modules/ROOT/pages/lra.adoc        |    4 +-
 .../modules/ROOT/pages/lucene-component.adoc       |   30 +-
 .../modules/ROOT/pages/lumberjack-component.adoc   |   18 +-
 .../modules/ROOT/pages/lzf-dataformat.adoc         |   12 +-
 .../modules/ROOT/pages/mail-component.adoc         |   50 +-
 .../modules/ROOT/pages/master-component.adoc       |   20 +-
 .../modules/ROOT/pages/metrics-component.adoc      |   58 +-
 .../modules/ROOT/pages/micrometer-component.adoc   |   50 +-
 .../modules/ROOT/pages/microprofile-config.adoc    |    4 +-
 .../modules/ROOT/pages/milo-client-component.adoc  |   24 +-
 .../modules/ROOT/pages/milo-server-component.adoc  |   16 +-
 .../ROOT/pages/mime-multipart-dataformat.adoc      |   12 +-
 .../modules/ROOT/pages/mina2-component.adoc        |   28 +-
 .../modules/ROOT/pages/mllp-component.adoc         |   22 +-
 .../modules/ROOT/pages/mock-component.adoc         |   42 +-
 .../modules/ROOT/pages/mongodb-component.adoc      | 1016 ++++++++++++++++++++
 .../ROOT/pages/mongodb-gridfs-component.adoc       |   30 +-
 .../modules/ROOT/pages/mongodb3-component.adoc     | 1015 -------------------
 .../modules/ROOT/pages/mqtt-component.adoc         |   18 +-
 .../modules/ROOT/pages/msv-component.adoc          |   16 +-
 .../modules/ROOT/pages/mustache-component.adoc     |   22 +-
 .../modules/ROOT/pages/mvel-component.adoc         |   24 +-
 .../modules/ROOT/pages/mvel-language.adoc          |   14 +-
 .../modules/ROOT/pages/mybatis-bean-component.adoc |   16 +-
 .../modules/ROOT/pages/mybatis-component.adoc      |   34 +-
 .../modules/ROOT/pages/nagios-component.adoc       |   18 +-
 .../modules/ROOT/pages/nats-component.adoc         |   14 +-
 .../modules/ROOT/pages/netty4-component.adoc       |   46 +-
 .../modules/ROOT/pages/netty4-http-component.adoc  |   34 +-
 .../modules/ROOT/pages/nsq-component.adoc          |   12 +-
 .../modules/ROOT/pages/ognl-language.adoc          |   14 +-
 .../modules/ROOT/pages/olingo2-component.adoc      |   28 +-
 .../modules/ROOT/pages/olingo4-component.adoc      |   26 +-
 .../pages/openshift-build-configs-component.adoc   |   10 +-
 .../ROOT/pages/openshift-builds-component.adoc     |   10 +-
 .../ROOT/pages/openstack-cinder-component.adoc     |   30 +-
 .../ROOT/pages/openstack-glance-component.adoc     |   20 +-
 .../ROOT/pages/openstack-keystone-component.adoc   |   48 +-
 .../ROOT/pages/openstack-neutron-component.adoc    |   42 +-
 .../ROOT/pages/openstack-nova-component.adoc       |   36 +-
 .../ROOT/pages/openstack-swift-component.adoc      |   30 +-
 docs/components/modules/ROOT/pages/openstack.adoc  |    2 +-
 .../components/modules/ROOT/pages/opentracing.adoc |   14 +-
 .../modules/ROOT/pages/optaplanner-component.adoc  |   22 +-
 .../modules/ROOT/pages/paho-component.adoc         |   19 +-
 .../modules/ROOT/pages/paxlogging-component.adoc   |   16 +-
 .../modules/ROOT/pages/pdf-component.adoc          |   16 +-
 .../ROOT/pages/pg-replication-slot-component.adoc  |   16 +-
 .../modules/ROOT/pages/pgevent-component.adoc      |   12 +-
 .../modules/ROOT/pages/pgp-dataformat.adoc         |   26 +-
 .../modules/ROOT/pages/properties-component.adoc   |   76 +-
 .../modules/ROOT/pages/protobuf-dataformat.adoc    |   22 +-
 .../modules/ROOT/pages/pubnub-component.adoc       |   28 +-
 .../modules/ROOT/pages/pulsar-component.adoc       |   12 +-
 .../modules/ROOT/pages/quartz2-component.adoc      |   44 +-
 .../modules/ROOT/pages/quickfix-component.adoc     |   62 +-
 .../modules/ROOT/pages/rabbitmq-component.adoc     |   24 +-
 .../ROOT/pages/reactive-executor-vertx.adoc        |    8 +-
 .../ROOT/pages/reactive-streams-component.adoc     |   38 +-
 .../modules/ROOT/pages/reactor-component.adoc      |    2 +-
 .../modules/ROOT/pages/ref-component.adoc          |   16 +-
 .../modules/ROOT/pages/rest-api-component.adoc     |   12 +-
 .../modules/ROOT/pages/rest-component.adoc         |   29 +-
 .../modules/ROOT/pages/rest-swagger-component.adoc |   17 +-
 .../modules/ROOT/pages/restlet-component.adoc      |   30 +-
 docs/components/modules/ROOT/pages/ribbon.adoc     |    6 +-
 .../modules/ROOT/pages/rss-component.adoc          |   22 +-
 .../modules/ROOT/pages/rss-dataformat.adoc         |    6 +-
 docs/components/modules/ROOT/pages/rxjava.adoc     |   20 +
 docs/components/modules/ROOT/pages/rxjava2.adoc    |   20 -
 .../modules/ROOT/pages/saga-component.adoc         |   12 +-
 .../modules/ROOT/pages/salesforce-component.adoc   |   56 +-
 .../ROOT/pages/sap-netweaver-component.adoc        |   22 +-
 .../modules/ROOT/pages/scheduler-component.adoc    |   24 +-
 .../modules/ROOT/pages/schematron-component.adoc   |   18 +-
 .../modules/ROOT/pages/scp-component.adoc          |   16 +-
 .../modules/ROOT/pages/secureXML-dataformat.adoc   |   28 +-
 .../modules/ROOT/pages/seda-component.adoc         |   28 +-
 .../modules/ROOT/pages/service-component.adoc      |   18 +-
 .../modules/ROOT/pages/servicenow-component.adoc   |   16 +-
 .../modules/ROOT/pages/servlet-component.adoc      |   36 +-
 .../modules/ROOT/pages/sftp-component.adoc         |    8 +-
 docs/components/modules/ROOT/pages/shiro.adoc      |   18 +-
 .../modules/ROOT/pages/sip-component.adoc          |   18 +-
 .../modules/ROOT/pages/sjms-batch-component.adoc   |   12 +-
 .../modules/ROOT/pages/sjms-component.adoc         |   46 +-
 .../modules/ROOT/pages/sjms2-component.adoc        |   50 +-
 .../modules/ROOT/pages/slack-component.adoc        |   20 +-
 .../modules/ROOT/pages/smpp-component.adoc         |   30 +-
 .../modules/ROOT/pages/snmp-component.adoc         |   20 +-
 .../modules/ROOT/pages/soapjaxb-dataformat.adoc    |   24 +-
 .../modules/ROOT/pages/solr-component.adoc         |   22 +-
 .../modules/ROOT/pages/soroush-component.adoc      |   24 +-
 .../modules/ROOT/pages/spark-component.adoc        |   30 +-
 .../modules/ROOT/pages/spark-rest-component.adoc   |   18 +-
 .../modules/ROOT/pages/spel-language.adoc          |   16 +-
 .../modules/ROOT/pages/splunk-component.adoc       |   24 +-
 .../modules/ROOT/pages/spring-batch-component.adoc |   26 +-
 .../components/modules/ROOT/pages/spring-boot.adoc |   38 +-
 .../modules/ROOT/pages/spring-cloud-consul.adoc    |    2 +-
 .../modules/ROOT/pages/spring-cloud-netflix.adoc   |    4 +-
 .../modules/ROOT/pages/spring-cloud-zookeeper.adoc |    2 +-
 .../modules/ROOT/pages/spring-cloud.adoc           |    4 +-
 .../modules/ROOT/pages/spring-event-component.adoc |   14 +-
 .../ROOT/pages/spring-integration-component.adoc   |   22 +-
 .../modules/ROOT/pages/spring-javaconfig.adoc      |    8 +-
 .../modules/ROOT/pages/spring-ldap-component.adoc  |   26 +-
 .../modules/ROOT/pages/spring-redis-component.adoc |   20 +-
 .../modules/ROOT/pages/spring-security.adoc        |   14 +-
 .../modules/ROOT/pages/spring-ws-component.adoc    |   40 +-
 docs/components/modules/ROOT/pages/spring.adoc     |   30 +-
 .../modules/ROOT/pages/sql-component.adoc          |   54 +-
 .../modules/ROOT/pages/sql-stored-component.adoc   |   24 +-
 .../modules/ROOT/pages/ssh-component.adoc          |   20 +-
 .../modules/ROOT/pages/stax-component.adoc         |   20 +-
 .../modules/ROOT/pages/stomp-component.adoc        |   18 +-
 .../modules/ROOT/pages/stream-component.adoc       |   16 +-
 .../ROOT/pages/string-template-component.adoc      |   24 +-
 .../modules/ROOT/pages/stub-component.adoc         |   14 +-
 .../modules/ROOT/pages/swagger-java.adoc           |   14 +-
 .../modules/ROOT/pages/syslog-dataformat.adoc      |   16 +-
 .../modules/ROOT/pages/tarfile-dataformat.adoc     |   14 +-
 .../modules/ROOT/pages/telegram-component.adoc     |   28 +-
 .../modules/ROOT/pages/test-blueprint.adoc         |    8 +-
 docs/components/modules/ROOT/pages/test-cdi.adoc   |   26 +-
 docs/components/modules/ROOT/pages/test-karaf.adoc |    2 +-
 .../components/modules/ROOT/pages/test-spring.adoc |   22 +-
 docs/components/modules/ROOT/pages/test.adoc       |    4 +-
 .../modules/ROOT/pages/testcontainers-spring.adoc  |    2 +-
 .../modules/ROOT/pages/testcontainers.adoc         |    2 +-
 .../modules/ROOT/pages/thrift-component.adoc       |   22 +-
 .../modules/ROOT/pages/thrift-dataformat.adoc      |   20 +-
 .../modules/ROOT/pages/tidyMarkup-dataformat.adoc  |   12 +-
 .../modules/ROOT/pages/tika-component.adoc         |   14 +-
 .../modules/ROOT/pages/timer-component.adoc        |   22 +-
 .../modules/ROOT/pages/twilio-component.adoc       |   20 +-
 .../pages/twitter-directmessage-component.adoc     |   12 +-
 .../ROOT/pages/twitter-search-component.adoc       |   12 +-
 .../ROOT/pages/twitter-streaming-component.adoc    |   12 +-
 .../ROOT/pages/twitter-timeline-component.adoc     |   12 +-
 docs/components/modules/ROOT/pages/twitter.adoc    |   24 +-
 .../modules/ROOT/pages/undertow-component.adoc     |   24 +-
 .../ROOT/pages/univocity-csv-dataformat.adoc       |   22 +-
 .../ROOT/pages/univocity-fixed-dataformat.adoc     |   22 +-
 .../ROOT/pages/univocity-tsv-dataformat.adoc       |   22 +-
 .../modules/ROOT/pages/validator-component.adoc    |   16 +-
 .../modules/ROOT/pages/velocity-component.adoc     |   26 +-
 .../modules/ROOT/pages/vertx-component.adoc        |   16 +-
 .../modules/ROOT/pages/vm-component.adoc           |   16 +-
 .../modules/ROOT/pages/weather-component.adoc      |   22 +-
 .../modules/ROOT/pages/web3j-component.adoc        |   16 +-
 .../modules/ROOT/pages/webhook-component.adoc      |   14 +-
 .../modules/ROOT/pages/websocket-component.adoc    |   24 +-
 .../ROOT/pages/websocket-jsr356-component.adoc     |   12 +-
 .../modules/ROOT/pages/wordpress-component.adoc    |   18 +-
 .../modules/ROOT/pages/xchange-component.adoc      |   18 +-
 .../modules/ROOT/pages/xmlsecurity-component.adoc  |   30 +-
 .../modules/ROOT/pages/xmpp-component.adoc         |   18 +-
 .../modules/ROOT/pages/xpath-language.adoc         |   40 +-
 .../modules/ROOT/pages/xquery-component.adoc       |   30 +-
 .../modules/ROOT/pages/xquery-language.adoc        |   26 +-
 .../modules/ROOT/pages/xslt-component.adoc         |   32 +-
 .../modules/ROOT/pages/xstream-dataformat.adoc     |   20 +-
 .../ROOT/pages/yaml-snakeyaml-dataformat.adoc      |   12 +-
 .../modules/ROOT/pages/yammer-component.adoc       |   24 +-
 .../modules/ROOT/pages/zendesk-component.adoc      |   20 +-
 .../modules/ROOT/pages/zipdeflater-dataformat.adoc |    8 +-
 .../modules/ROOT/pages/zipfile-dataformat.adoc     |   14 +-
 docs/components/modules/ROOT/pages/zipkin.adoc     |   18 +-
 .../modules/ROOT/pages/zookeeper-component.adoc    |   20 +-
 .../ROOT/pages/zookeeper-master-component.adoc     |   20 +-
 docs/gulpfile.js                                   |    4 +-
 .../spring/javaconfig/patterns/FilterTest.java     |    1 +
 .../test/spring/CamelSpringRunnerPlainTest.java    |   29 +-
 .../org/apache/camel/processor/FilterTest.java     |    1 +
 .../org/apache/camel/processor/TransformTest.java  |    1 +
 .../camel/processor/TransformViaDSLTest.java       |    1 +
 .../management/ManagedCustomProcessorTest.java     |    1 +
 .../modules/ROOT/pages/aggregate-eip.adoc          |   34 +-
 .../modules/ROOT/pages/architecture.adoc           |    4 +-
 docs/user-manual/modules/ROOT/pages/async.adoc     |   64 +-
 .../ROOT/pages/asynchronous-routing-engine.adoc    |    6 +-
 .../modules/ROOT/pages/backlog-tracer.adoc         |   12 +-
 .../modules/ROOT/pages/backlogdebugger.adoc        |   10 +-
 .../modules/ROOT/pages/bam-example.adoc            |    8 +-
 docs/user-manual/modules/ROOT/pages/bam.adoc       |   10 +-
 .../modules/ROOT/pages/batch-config-eip.adoc       |    2 +-
 .../modules/ROOT/pages/batch-consumer.adoc         |    8 +-
 docs/user-manual/modules/ROOT/pages/bean-eip.adoc  |   14 +-
 .../modules/ROOT/pages/bean-integration.adoc       |    8 +-
 docs/user-manual/modules/ROOT/pages/binding.adoc   |   10 +-
 .../modules/ROOT/pages/book-getting-started.adoc   |   36 +-
 docs/user-manual/modules/ROOT/pages/books.adoc     |   20 +-
 .../modules/ROOT/pages/browsable-endpoint.adoc     |    2 +-
 docs/user-manual/modules/ROOT/pages/building.adoc  |   28 +-
 .../user-manual/modules/ROOT/pages/camel-boot.adoc |    8 +-
 .../ROOT/pages/camel-configuration-utilities.adoc  |   32 +-
 .../user-manual/modules/ROOT/pages/camel-core.adoc |    2 +
 .../modules/ROOT/pages/camel-jar-dependencies.adoc |   14 +-
 .../modules/ROOT/pages/camelcontext.adoc           |    4 +-
 docs/user-manual/modules/ROOT/pages/cep.adoc       |    4 +-
 .../user-manual/modules/ROOT/pages/choice-eip.adoc |    6 +-
 .../modules/ROOT/pages/circuitBreaker-eip.adoc     |    2 +-
 .../modules/ROOT/pages/claimCheck-eip.adoc         |   16 +-
 .../user-manual/modules/ROOT/pages/clustering.adoc |    6 +-
 .../ROOT/pages/commercial-camel-offerings.adoc     |   26 +-
 docs/user-manual/modules/ROOT/pages/component.adoc |    6 +-
 .../modules/ROOT/pages/componentconfiguration.adoc |    2 +-
 .../modules/ROOT/pages/configuring-camel.adoc      |    8 +-
 ...ing-route-startup-ordering-and-autostartup.adoc |   26 +-
 .../modules/ROOT/pages/constant-language.adoc      |   10 +-
 .../ROOT/pages/content-based-router-eip.adoc       |    8 +-
 .../modules/ROOT/pages/content-enricher.adoc       |    2 +-
 .../modules/ROOT/pages/content-filter-eip.adoc     |    8 +-
 .../modules/ROOT/pages/contributing.adoc           |    2 +-
 .../modules/ROOT/pages/convertBodyTo-eip.adoc      |    2 +-
 .../modules/ROOT/pages/correlation-identifier.adoc |    4 +-
 .../modules/ROOT/pages/customLoadBalancer-eip.adoc |    2 +-
 .../modules/ROOT/pages/data-format.adoc            |   11 +-
 .../modules/ROOT/pages/dead-letter-channel.adoc    |   53 +-
 docs/user-manual/modules/ROOT/pages/debugger.adoc  |   12 +-
 .../modules/ROOT/pages/defaulterrorhandler.adoc    |    6 +-
 docs/user-manual/modules/ROOT/pages/delay-eip.adoc |   20 +-
 .../modules/ROOT/pages/delay-interceptor.adoc      |   10 +-
 .../modules/ROOT/pages/dependency-injection.adoc   |    2 +-
 .../modules/ROOT/pages/dozer-type-conversion.adoc  |    6 +-
 docs/user-manual/modules/ROOT/pages/dsl.adoc       |    4 +-
 .../modules/ROOT/pages/dynamic-router.adoc         |   12 +-
 .../modules/ROOT/pages/dynamicRouter-eip.adoc      |   12 +-
 .../modules/ROOT/pages/endpoint-completer.adoc     |    2 +-
 docs/user-manual/modules/ROOT/pages/endpoint.adoc  |    4 +-
 .../user-manual/modules/ROOT/pages/enrich-eip.adoc |   18 +-
 .../pages/enterprise-integration-patterns.adoc     |   16 +-
 .../modules/ROOT/pages/error-handler.adoc          |   28 +-
 .../ROOT/pages/error-handling-in-camel.adoc        |   20 +-
 .../modules/ROOT/pages/event-message.adoc          |    6 +-
 .../ROOT/pages/eventDrivenConsumer-eip.adoc        |    6 +-
 docs/user-manual/modules/ROOT/pages/examples.adoc  |    8 +-
 .../modules/ROOT/pages/exception-clause.adoc       |  109 ++-
 .../modules/ROOT/pages/exchange-pattern.adoc       |    2 +-
 docs/user-manual/modules/ROOT/pages/exchange.adoc  |    4 +-
 .../ROOT/pages/exchangeProperty-language.adoc      |    8 +-
 .../user-manual/modules/ROOT/pages/expression.adoc |   14 +-
 .../modules/ROOT/pages/failover-eip.adoc           |    6 +-
 docs/user-manual/modules/ROOT/pages/faq.adoc       |   18 +-
 .../pages/faq/can-i-get-commercial-support.adoc    |    2 +-
 .../ROOT/pages/faq/can-i-use-camel-on-java-14.adoc |    2 +-
 ...loader-issue-of-servicemix-camel-component.adoc |    2 +-
 .../pages/faq/does-camel-work-on-ibms-jdk.adoc     |    8 +-
 .../exception-beandefinitionstoreexception.adoc    |    2 +-
 ...ption-javaxnamingnoinitialcontextexception.adoc |    2 +-
 ...tion-orgapachecamelnosuchendpointexception.adoc |    4 +-
 .../faq/exception-orgxmlsaxsaxparseexception.adoc  |    2 +-
 ...an-i-create-a-custom-component-or-endpoint.adoc |    4 +-
 ...on-ip-address-from-the-camel-cxf-consumer-.adoc |    2 +-
 .../pages/faq/how-can-i-get-the-source-code.adoc   |   12 +-
 .../faq/how-can-i-stop-a-route-from-a-route.adoc   |   10 +-
 ...ults-with-stacktraces-when-using-camel-cxf.adoc |    2 +-
 .../pages/faq/how-do-i-become-a-committer.adoc     |   12 +-
 .../pages/faq/how-do-i-change-the-logging.adoc     |    2 +-
 .../ROOT/pages/faq/how-do-i-compile-the-code.adoc  |    2 +-
 .../pages/faq/how-do-i-configure-endpoints.adoc    |   24 +-
 ...-endpoints-without-the-value-being-encoded.adoc |    4 +-
 ...size-for-producercache-or-producertemplate.adoc |    4 +-
 ...ximum-endpoint-cache-size-for-camelcontext.adoc |    6 +-
 .../ROOT/pages/faq/how-do-i-debug-my-route.adoc    |    2 +-
 .../ROOT/pages/faq/how-do-i-disable-jmx.adoc       |    2 +-
 .../ROOT/pages/faq/how-do-i-edit-the-website.adoc  |    6 +-
 .../pages/faq/how-do-i-enable-debug-logging.adoc   |    2 +-
 ...reams-when-debug-logging-messages-in-camel.adoc |    6 +-
 ...en-consuming-for-example-from-a-ftp-server.adoc |    4 +-
 ...how-do-i-import-rests-from-other-xml-files.adoc |    2 +-
 ...ow-do-i-import-routes-from-other-xml-files.adoc |    4 +-
 .../faq/how-do-i-invoke-camel-routes-from-jbi.adoc |    2 +-
 .../faq/how-do-i-let-jetty-match-wildcards.adoc    |    2 +-
 ...ow-do-i-make-my-jms-endpoint-transactional.adoc |    8 +-
 .../ROOT/pages/faq/how-do-i-name-my-routes.adoc    |    2 +-
 .../pages/faq/how-do-i-restart-camelcontext.adoc   |    2 +-
 ...wn-exception-during-processing-an-exchange.adoc |    2 +-
 .../how-do-i-retry-failed-messages-forever.adoc    |    2 +-
 ...om-a-certain-point-back-or-an-entire-route.adoc |    2 +-
 ...-contexttestsupport-class-in-my-unit-tests.adoc |    2 +-
 .../how-do-i-run-activemq-and-camel-in-jboss.adoc  |    4 +-
 .../how-do-i-run-camel-using-java-webstart.adoc    |    4 +-
 ...chars-when-debug-logging-messages-in-camel.adoc |    6 +-
 ...do-i-set-the-mep-when-interacting-with-jbi.adoc |    6 +-
 ...ify-time-period-in-a-human-friendly-syntax.adoc |    2 +-
 ...h-method-to-use-when-using-beans-in-routes.adoc |    2 +-
 .../pages/faq/how-do-i-use-a-big-uber-jar.adoc     |    2 +-
 .../faq/how-do-i-use-camel-inside-servicemix.adoc  |    2 +-
 .../pages/faq/how-do-i-use-java-14-logging.adoc    |    2 +-
 .../modules/ROOT/pages/faq/how-do-i-use-log4j.adoc |    2 +-
 ...spring-property-placeholder-with-camel-xml.adoc |    4 +-
 .../how-do-i-use-uris-with-parameters-in-xml.adoc  |    2 +-
 ...om-processor-which-sends-multiple-messages.adoc |    2 +-
 ...direct-event-seda-and-vm-endpoints-compare.adoc |    2 +-
 ...-do-the-timer-and-quartz-endpoints-compare.adoc |    2 +-
 .../pages/faq/how-does-camel-compare-to-mule.adoc  |    2 +-
 .../how-does-camel-compare-to-servicemix-eip.adoc  |    6 +-
 .../faq/how-does-camel-compare-to-servicemix.adoc  |    4 +-
 .../faq/how-does-camel-compare-to-synapse.adoc     |    2 +-
 ...how-does-camel-look-up-beans-and-endpoints.adoc |    2 +-
 .../faq/how-does-camel-work-with-activemq.adoc     |    2 +-
 .../faq/how-does-camel-work-with-servicemix.adoc   |    4 +-
 .../ROOT/pages/faq/how-does-camel-work.adoc        |    2 +-
 .../faq/how-does-the-camel-api-compare-to.adoc     |    6 +-
 .../ROOT/pages/faq/how-does-the-website-work.adoc  |    2 +-
 ...hould-i-invoke-my-pojos-or-spring-services.adoc |    4 +-
 ...kage-applications-using-camel-and-activemq.adoc |    4 +-
 ...the-camel-cxf-endpoint-from-osgi-platform-.adoc |    2 +-
 ...-avoid-sending-some-or-all-message-headers.adoc |    8 +-
 ...e-a-static-camel-converter-method-in-scala.adoc |    2 +-
 ...http-protocol-headers-in-the-camel-message.adoc |    2 +-
 ...end-the-same-message-to-multiple-endpoints.adoc |    2 +-
 ...-without-touching-the-spring-configuration.adoc |    2 +-
 .../pages/faq/how-to-use-a-dynamic-uri-in-to.adoc  |    2 +-
 ...-extra-camel-componets-in-servicemix-camel.adoc |    2 +
 ...-1x-context-xml-from-apache-camel-web-site.adoc |    2 +-
 ...f-i-use-servicemix-when-should-i-use-camel.adoc |    4 +-
 .../modules/ROOT/pages/faq/is-camel-an-esb.adoc    |    2 +-
 .../ROOT/pages/faq/is-camel-ioc-friendly.adoc      |    8 +-
 .../modules/ROOT/pages/faq/is-there-an-ide.adoc    |    2 +-
 ...when-adding-and-removing-routes-at-runtime.adoc |    2 +-
 .../ROOT/pages/faq/running-camel-standalone.adoc   |    2 +-
 ...-activemq-broker-or-in-another-application.adoc |    8 +-
 .../ROOT/pages/faq/using-camel-core-testsjar.adoc  |    2 +-
 .../using-getin-or-getout-methods-on-exchange.adoc |    8 +-
 .../ROOT/pages/faq/what-are-the-dependencies.adoc  |   18 +-
 .../modules/ROOT/pages/faq/what-is-a-router.adoc   |    2 +-
 .../modules/ROOT/pages/faq/what-is-camel.adoc      |    4 +-
 .../ROOT/pages/faq/what-is-the-license.adoc        |    2 +-
 .../ROOT/pages/faq/what-jars-do-i-need.adoc        |    6 +-
 .../pages/faq/what-platforms-are-supported.adoc    |    2 +-
 ...se-when-or-otherwise-in-a-java-camel-route.adoc |    4 +-
 .../faq/why-cant-i-use-sign-in-my-password.adoc    |    4 +-
 ...o-many-noclassdeffoundexception-on-startup.adoc |    2 +-
 ...my-message-lose-its-headers-during-routing.adoc |    2 +-
 ...use-too-many-threads-with-producertemplate.adoc |    2 +-
 ...-does-ftp-component-not-download-any-files.adoc |    2 +-
 .../why-does-maven-not-download-dependencies.adoc  |    2 +-
 ...-file-consumer-use-the-camel-error-handler.adoc |    4 +-
 ...jms-route-only-consume-one-message-at-once.adoc |    4 +-
 ...ge-with-error-handler-not-work-as-expected.adoc |    2 +-
 .../pages/faq/why-is-my-message-body-empty.adoc    |    2 +-
 ...is-my-processor-not-showing-up-in-jconsole.adoc |    4 +-
 ...-the-exception-null-when-i-use-onexception.adoc |    2 +-
 .../modules/ROOT/pages/faq/why-the-name-camel.adoc |    2 +-
 .../pages/faq/why-use-multiple-camelcontext.adoc   |    2 +-
 .../modules/ROOT/pages/file-language.adoc          |   18 +-
 .../user-manual/modules/ROOT/pages/filter-eip.adoc |   10 +-
 .../modules/ROOT/pages/fluent-builders.adoc        |    2 +-
 docs/user-manual/modules/ROOT/pages/from-eip.adoc  |    6 +-
 .../modules/ROOT/pages/getting-started.adoc        |    8 +-
 .../modules/ROOT/pages/graceful-shutdown.adoc      |   28 +-
 .../user-manual/modules/ROOT/pages/groovy-dsl.adoc |   16 +-
 .../modules/ROOT/pages/guaranteed-delivery.adoc    |    4 +-
 docs/user-manual/modules/ROOT/pages/guice.adoc     |   10 +-
 .../modules/ROOT/pages/header-language.adoc        |    8 +-
 .../modules/ROOT/pages/health-check.adoc           |    6 +-
 .../modules/ROOT/pages/hiding-middleware.adoc      |    2 +
 .../modules/ROOT/pages/http-session-handling.adoc  |   18 +-
 .../modules/ROOT/pages/http-session.adoc           |   16 +-
 .../modules/ROOT/pages/hystrix-eip.adoc            |   10 +-
 .../ROOT/pages/hystrixConfiguration-eip.adoc       |    2 +-
 .../modules/ROOT/pages/idempotentConsumer-eip.adoc |    4 +-
 .../user-manual/modules/ROOT/pages/inOnly-eip.adoc |    4 +-
 docs/user-manual/modules/ROOT/pages/inOut-eip.adoc |    4 +-
 docs/user-manual/modules/ROOT/pages/index.adoc     |   10 +-
 docs/user-manual/modules/ROOT/pages/injector.adoc  |    2 +-
 docs/user-manual/modules/ROOT/pages/intercept.adoc |   92 +-
 .../inversion-of-control-with-smart-defaults.adoc  |    2 +-
 docs/user-manual/modules/ROOT/pages/irc-room.adoc  |    6 +-
 docs/user-manual/modules/ROOT/pages/java-dsl.adoc  |   14 +-
 docs/user-manual/modules/ROOT/pages/jmx.adoc       |   64 +-
 docs/user-manual/modules/ROOT/pages/jndi.adoc      |    2 +-
 docs/user-manual/modules/ROOT/pages/json.adoc      |   44 +-
 docs/user-manual/modules/ROOT/pages/karaf.adoc     |   54 +-
 docs/user-manual/modules/ROOT/pages/languages.adoc |    6 +-
 docs/user-manual/modules/ROOT/pages/lifecycle.adoc |   10 +-
 .../modules/ROOT/pages/loadBalance-eip.adoc        |   14 +-
 docs/user-manual/modules/ROOT/pages/log-eip.adoc   |   18 +-
 docs/user-manual/modules/ROOT/pages/loop-eip.adoc  |   16 +-
 .../modules/ROOT/pages/mailing-lists.adoc          |    4 +-
 .../modules/ROOT/pages/marshal-eip.adoc            |    6 +-
 .../modules/ROOT/pages/message-bus.adoc            |    4 +-
 .../modules/ROOT/pages/message-channel.adoc        |    6 +-
 .../modules/ROOT/pages/message-endpoint.adoc       |    6 +-
 .../modules/ROOT/pages/message-router.adoc         |    6 +-
 .../modules/ROOT/pages/message-translator.adoc     |    4 +-
 docs/user-manual/modules/ROOT/pages/message.adoc   |    2 +-
 .../modules/ROOT/pages/multicast-eip.adoc          |    8 +-
 .../modules/ROOT/pages/onFallback-eip.adoc         |    2 +-
 .../modules/ROOT/pages/oncompletion.adoc           |   18 +-
 .../modules/ROOT/pages/otherwise-eip.adoc          |    6 +-
 .../modules/ROOT/pages/pipeline-eip.adoc           |    6 +-
 .../modules/ROOT/pages/point-to-point-channel.adoc |    4 +-
 .../modules/ROOT/pages/pojo-consuming.adoc         |    3 +-
 .../modules/ROOT/pages/pojo-producing.adoc         |    6 +-
 .../modules/ROOT/pages/pollEnrich-eip.adoc         |   18 +-
 docs/user-manual/modules/ROOT/pages/predicate.adoc |   12 +-
 .../modules/ROOT/pages/process-eip.adoc            |   16 +-
 docs/user-manual/modules/ROOT/pages/processor.adoc |   12 +-
 .../modules/ROOT/pages/producertemplate.adoc       |    6 +-
 .../ROOT/pages/publish-subscribe-channel.adoc      |    4 +-
 .../user-manual/modules/ROOT/pages/random-eip.adoc |    2 +-
 .../modules/ROOT/pages/recipientList-eip.adoc      |   40 +-
 .../modules/ROOT/pages/ref-language.adoc           |    8 +-
 docs/user-manual/modules/ROOT/pages/registry.adoc  |    2 +-
 .../modules/ROOT/pages/release-guide.adoc          |    8 +-
 .../modules/ROOT/pages/removeHeader-eip.adoc       |    6 +-
 .../modules/ROOT/pages/removeHeaders-eip.adoc      |    4 +-
 .../modules/ROOT/pages/removeProperties-eip.adoc   |    6 +-
 .../modules/ROOT/pages/removeProperty-eip.adoc     |    6 +-
 .../modules/ROOT/pages/requestReply-eip.adoc       |    4 +-
 .../modules/ROOT/pages/resequence-eip.adoc         |   18 +-
 docs/user-manual/modules/ROOT/pages/rest-dsl.adoc  |   46 +-
 .../modules/ROOT/pages/return-address.adoc         |    2 +-
 .../modules/ROOT/pages/rollback-eip.adoc           |   18 +-
 .../modules/ROOT/pages/roundRobin-eip.adoc         |    6 +-
 .../modules/ROOT/pages/route-builder.adoc          |    4 +-
 .../modules/ROOT/pages/route-policy.adoc           |   20 +-
 docs/user-manual/modules/ROOT/pages/routes.adoc    |   10 +-
 .../modules/ROOT/pages/routingSlip-eip.adoc        |   16 +-
 docs/user-manual/modules/ROOT/pages/saga-eip.adoc  |   26 +-
 .../user-manual/modules/ROOT/pages/sample-eip.adoc |    6 +-
 docs/user-manual/modules/ROOT/pages/scala-dsl.adoc |    8 +-
 .../user-manual/modules/ROOT/pages/script-eip.adoc |    8 +-
 .../modules/ROOT/pages/scripting-languages.adoc    |   16 +-
 docs/user-manual/modules/ROOT/pages/security.adoc  |   10 +-
 .../modules/ROOT/pages/service-registry.adoc       |    6 +-
 .../modules/ROOT/pages/serviceCall-eip.adoc        |   30 +-
 .../modules/ROOT/pages/servicepool.adoc            |   10 +-
 .../modules/ROOT/pages/servlet-tomcat-example.adoc |   12 +-
 .../modules/ROOT/pages/setBody-eip.adoc            |    6 +-
 .../modules/ROOT/pages/setHeader-eip.adoc          |    6 +-
 .../modules/ROOT/pages/setOutHeader-eip.adoc       |    6 +-
 .../modules/ROOT/pages/setProperty-eip.adoc        |    6 +-
 .../modules/ROOT/pages/simple-language.adoc        |   44 +-
 docs/user-manual/modules/ROOT/pages/sort-eip.adoc  |    6 +-
 docs/user-manual/modules/ROOT/pages/split-eip.adoc |   50 +-
 .../modules/ROOT/pages/spring-example.adoc         |    2 +-
 .../modules/ROOT/pages/spring-remoting.adoc        |    2 +-
 .../modules/ROOT/pages/spring-testing.adoc         |   24 +-
 .../modules/ROOT/pages/spring-xml-extensions.adoc  |    2 +-
 docs/user-manual/modules/ROOT/pages/spring.adoc    |   28 +-
 docs/user-manual/modules/ROOT/pages/step-eip.adoc  |    8 +-
 .../user-manual/modules/ROOT/pages/sticky-eip.adoc |    6 +-
 docs/user-manual/modules/ROOT/pages/stop-eip.adoc  |    2 +-
 .../modules/ROOT/pages/stream-caching.adoc         |   28 +-
 .../modules/ROOT/pages/stream-config-eip.adoc      |    2 +-
 docs/user-manual/modules/ROOT/pages/support.adoc   |   12 +-
 docs/user-manual/modules/ROOT/pages/team.adoc      |    4 +-
 docs/user-manual/modules/ROOT/pages/testing.adoc   |   22 +-
 .../modules/ROOT/pages/threading-model.adoc        |   22 +-
 .../modules/ROOT/pages/threads-eip.adoc            |    6 +-
 .../modules/ROOT/pages/throttle-eip.adoc           |   10 +-
 docs/user-manual/modules/ROOT/pages/to-eip.adoc    |    8 +-
 docs/user-manual/modules/ROOT/pages/toD-eip.adoc   |   13 +-
 .../modules/ROOT/pages/tokenize-language.adoc      |    4 +-
 docs/user-manual/modules/ROOT/pages/topic-eip.adoc |    6 +-
 docs/user-manual/modules/ROOT/pages/tracer.adoc    |  211 +---
 .../modules/ROOT/pages/transactional-client.adoc   |   20 +-
 .../ROOT/pages/transactionerrorhandler.adoc        |   12 +-
 .../modules/ROOT/pages/transform-eip.adoc          |    4 +-
 .../modules/ROOT/pages/transformer.adoc            |   16 +-
 docs/user-manual/modules/ROOT/pages/transport.adoc |    6 +-
 .../modules/ROOT/pages/try-catch-finally.adoc      |   14 +-
 .../modules/ROOT/pages/type-converter.adoc         |   22 +-
 .../modules/ROOT/pages/unmarshal-eip.adoc          |    6 +-
 docs/user-manual/modules/ROOT/pages/uris.adoc      |    2 +-
 .../modules/ROOT/pages/user-stories.adoc           |    6 +-
 .../pages/using-osgi-blueprint-with-camel.adoc     |    6 +-
 .../ROOT/pages/using-propertyplaceholder.adoc      |   64 +-
 .../modules/ROOT/pages/uuidgenerator.adoc          |   12 +-
 .../modules/ROOT/pages/validate-eip.adoc           |    6 +-
 docs/user-manual/modules/ROOT/pages/validator.adoc |   16 +-
 .../modules/ROOT/pages/weighted-eip.adoc           |    6 +-
 docs/user-manual/modules/ROOT/pages/when-eip.adoc  |    6 +-
 .../modules/ROOT/pages/wireTap-eip.adoc            |   22 +-
 .../modules/ROOT/pages/writing-components.adoc     |   14 +-
 .../modules/ROOT/pages/xml-configuration.adoc      |    4 +-
 .../modules/ROOT/pages/xml-reference.adoc          |   16 +-
 examples/README.adoc                               |    6 +-
 .../camel/example/NumberAggregationStrategy.java   |    1 +
 .../camel/example/cafe/CafeRouteBuilder.java       |    1 +
 .../org/apache/camel/example/cafe/OrderItem.java   |    1 +
 .../cafe/stuff/CafeAggregationStrategy.java        |    1 +
 .../camel/example/cafe/CafeRouteBuilderTest.java   |    1 +
 .../camel/example/cafe/test/TestDrinkRouter.java   |    1 +
 .../apache/camel/example/cafe/test/TestWaiter.java |    1 +
 .../camel/example/cafe/CafeRouteBuilder.java       |    1 +
 .../org/apache/camel/example/cafe/Customer.java    |    3 +
 .../org/apache/camel/example/cafe/OrderItem.java   |    1 +
 .../cafe/stuff/CafeAggregationStrategy.java        |    1 +
 .../camel/example/cafe/CafeRouteBuilderTest.java   |    1 +
 .../camel/example/cafe/CafeRouteSpringTest.java    |    3 +
 .../camel/example/cafe/test/TestDrinkRouter.java   |    1 +
 .../apache/camel/example/cafe/test/TestWaiter.java |    1 +
 .../camel/example/cdi/aws/s3/Application.java      |    6 +-
 .../camel/example/cdi/cassandraql/Application.java |    4 +-
 .../camel/example/cdi/kubernetes/Application.java  |    3 +-
 .../camel/example/cdi/metrics/Application.java     |    5 +-
 .../camel/example/cdi/properties/Application.java  |    3 +-
 .../example/cdi/rest/servlet/Application.java      |    4 +-
 .../cdi/rest/servlet/CdiRestServletTest.java       |    3 +-
 .../apache/camel/example/cdi/test/Application.java |    6 +-
 .../camel/example/cdi/test/CustomContextTest.java  |    4 +-
 .../reportincident/ReportIncidentRoutes.java       |    1 +
 examples/camel-example-cxf-proxy/pom.xml           |    2 +-
 .../camel/example/cxf/ws/HelloWorldImpl.java       |    1 +
 .../camel/example/cxf/ws/UserPasswordCallback.java |    1 +
 .../camel/example/cxf/httptojms/JmsBroker.java     |    1 +
 .../example/cxf/jaxrs/CamelRouterBuilder.java      |    2 +
 .../camel/example/cxf/jaxrs/JAXRSClient.java       |    1 +
 .../camel/example/cxf/jaxrs/resources/Book.java    |    1 +
 .../example/cxf/jaxrs/resources/BookStoreImpl.java |    4 +-
 .../example/cxf/provider/GreeterProvider.java      |    1 +
 .../example/cxf/jaxrs/JAXRSClientServerTest.java   |    1 +
 .../readme.adoc                                    |   14 +-
 .../camel-example-fhir-spring-boot/readme.adoc     |   14 +-
 .../org/apache/camel/example/fhir/Application.java |    4 +-
 examples/camel-example-google-pubsub/README.adoc   |   10 +-
 examples/camel-example-grpc-kubernetes/README.adoc |   10 +-
 examples/camel-example-hystrix/client/pom.xml      |    2 +-
 examples/camel-example-hystrix/service1/pom.xml    |    2 +-
 examples/camel-example-java8/readme.adoc           |    4 +-
 .../apache/camel/example/jdbc/RecordProcessor.java |    1 +
 examples/camel-example-jira/README.adoc            |    6 +-
 .../apache/camel/example/jmx/MyRouteBuilder.java   |    1 +
 .../org/apache/camel/example/jmx/SimpleBean.java   |    1 +
 .../org/apache/camel/example/model/Report.java     |    1 +
 .../camel/loanbroker/CreditScoreProcessor.java     |    1 +
 .../org/apache/camel/loanbroker/bank/Bank.java     |    2 +
 .../apache/camel/loanbroker/bank/BankQuote.java    |    1 +
 .../camel/loanbroker/credit/CreditAgency.java      |    2 +
 .../camel/loanbroker/CreditAgencyProcessor.java    |    1 +
 .../apache/camel/loanbroker/LoanBrokerRoute.java   |    1 +
 .../apache/camel/loanbroker/ReplyProcessor.java    |    1 +
 .../camel/loanbroker/bank/BankProcessor.java       |    1 +
 examples/camel-example-main-artemis/readme.adoc    |    6 +-
 .../src/main/resources/application.properties      |    3 +
 examples/camel-example-main-tiny/readme.adoc       |    6 +-
 .../src/main/resources/application.properties      |    3 +
 examples/camel-example-main/readme.adoc            |    8 +-
 .../src/main/resources/application.properties      |    7 +
 .../example/management/ManagementExampleTest.java  |    1 +
 .../readme.adoc                                    |    6 +-
 .../camel/example/netty/cdi/NettyHttpRoute.java    |    4 +-
 examples/camel-example-opentracing/client/pom.xml  |    2 +-
 .../main/java/sample/camel/ClientApplication.java  |    4 +-
 .../src/main/java/sample/camel/ClientRoute.java    |    3 +
 .../camel-example-opentracing/service1/pom.xml     |    2 +-
 .../camel-example-opentracing/service2/pom.xml     |    2 +-
 .../camel/example/pojo/CamelContextTest.java       |    1 +
 .../readme.adoc                                    |    6 +-
 .../camel-example-reactive-streams/readme.adoc     |    4 +-
 examples/camel-example-rest-producer/pom.xml       |    4 +-
 examples/camel-example-rest-producer/readme.adoc   |   10 +-
 .../camel-example-spring-boot-activemq/readme.adoc |    8 +-
 .../camel-example-spring-boot-amqp/readme.adoc     |    8 +-
 .../readme.adoc                                    |    4 +-
 .../camel-example-spring-boot-geocoder/README.adoc |    8 +-
 .../camel-example-spring-boot-grpc/README.adoc     |    8 +-
 .../readme.adoc                                    |    8 +-
 .../README.adoc                                    |    8 +-
 .../camel-example-spring-boot-master/readme.adoc   |    4 +-
 .../camel-example-spring-boot-pojo/README.adoc     |    8 +-
 .../README.adoc                                    |   10 +-
 .../README.adoc                                    |   12 +-
 .../consumer/pom.xml                               |    2 +-
 .../apache/camel/example/ServiceApplication.java   |    2 +
 .../readme.adoc                                    |    4 +-
 examples/camel-example-spring-boot-xml/readme.adoc |   10 +-
 examples/camel-example-spring-boot/readme.adoc     |   14 +-
 .../README.adoc                                    |   12 +-
 .../apache/camel/example/ServiceApplication.java   |    2 +
 .../README.adoc                                    |   12 +-
 .../apache/camel/example/ServiceApplication.java   |    1 +
 .../org/apache/camel/example/server/Treble.java    |    1 +
 .../apache/camel/example/pulsar/server/Treble.java |    1 +
 .../camel/example/server/IncrementRoute.java       |    1 +
 .../camel/example/spring/MyRouteBuilder.java       |    1 +
 .../apache/camel/example/cdi/UserRouteBuilder.java |    5 +-
 examples/camel-example-telegram/README.adoc        |    6 +-
 .../example/telegram/usage/GetUpdatesUsage.java    |    1 +
 .../example/telegram/usage/LiveLocationUsage.java  |    1 +
 .../example/telegram/usage/SendMessageUsage.java   |    1 +
 .../example/telegram/usage/SendVenueUsage.java     |    1 +
 .../example/transformer/demo/OrderProcessor.java   |    1 +
 .../readme.adoc                                    |    8 +-
 examples/camel-example-webhook/readme.adoc         |    8 +-
 examples/camel-example-zipkin/README.md            |    4 +-
 examples/camel-example-zipkin/client/pom.xml       |    2 +-
 .../main/java/sample/camel/ClientApplication.java  |    4 +-
 .../src/main/java/sample/camel/ClientRoute.java    |    3 +
 examples/camel-example-zipkin/service1/pom.xml     |    2 +-
 parent/pom.xml                                     |   76 +-
 .../commands/AbstractLocalCamelController.java     |   20 +
 .../camel/commands/AbstractRouteCommand.java       |    1 +
 .../camel/karaf/commands/ContextInflight.java      |    1 +
 .../apache/camel/karaf/commands/EndpointList.java  |    1 +
 .../apache/camel/karaf/commands/EndpointStats.java |    1 +
 .../apache/camel/karaf/commands/RestApiDoc.java    |    1 +
 .../camel/karaf/commands/RestRegistryList.java     |    1 +
 .../org/apache/camel/karaf/commands/RestShow.java  |    1 +
 .../org/apache/camel/karaf/commands/RouteInfo.java |    1 +
 .../org/apache/camel/karaf/commands/RouteList.java |    1 +
 .../org/apache/camel/karaf/commands/RouteShow.java |    1 +
 .../commands/completers/CamelContextCompleter.java |    1 +
 .../karaf/commands/completers/RouteCompleter.java  |    1 +
 .../karaf/features/src/main/resources/features.xml |   20 +-
 .../spring-boot/components-starter/README.adoc     |    1 -
 .../components-starter/camel-boon-starter/pom.xml  |   53 -
 .../BoonDataFormatAutoConfiguration.java           |  128 ---
 .../springboot/BoonDataFormatConfiguration.java    |   79 --
 .../src/main/resources/META-INF/LICENSE.txt        |  203 ----
 .../src/main/resources/META-INF/NOTICE.txt         |   11 -
 .../additional-spring-configuration-metadata.json  |   10 -
 .../src/main/resources/META-INF/spring.factories   |   18 -
 .../src/main/resources/META-INF/spring.provides    |   17 -
 .../springboot/EhcacheComponentConfiguration.java  |   13 +-
 .../customizer/CacheConfigurationCustomizer.java   |    2 +-
 .../FhirJsonDataFormatConfiguration.java           |   18 +-
 .../springboot/FhirXmlDataFormatConfiguration.java |   18 +-
 .../components-starter/camel-hdfs-starter/pom.xml  |   61 ++
 .../springboot/HdfsComponentAutoConfiguration.java |  128 +++
 .../springboot/HdfsComponentConfiguration.java     |   80 ++
 .../src/main/resources/META-INF/LICENSE.txt        |    0
 .../src/main/resources/META-INF/NOTICE.txt         |    0
 .../src/main/resources/META-INF/spring.factories   |   19 +
 .../src/main/resources/META-INF/spring.provides    |   17 +
 .../components-starter/camel-hdfs2-starter/pom.xml |   61 --
 .../springboot/HdfsComponentAutoConfiguration.java |  128 ---
 .../springboot/HdfsComponentConfiguration.java     |   80 --
 .../src/main/resources/META-INF/LICENSE.txt        |  203 ----
 .../src/main/resources/META-INF/NOTICE.txt         |   11 -
 .../additional-spring-configuration-metadata.json  |   10 -
 .../src/main/resources/META-INF/spring.factories   |   18 -
 .../src/main/resources/META-INF/spring.provides    |   17 -
 .../components-starter/camel-http-starter/pom.xml  |   61 ++
 .../springboot/HttpComponentAutoConfiguration.java |  128 +++
 .../springboot/HttpComponentConfiguration.java     |  309 ++++++
 .../src/main/resources/META-INF/LICENSE.txt        |    0
 .../src/main/resources/META-INF/NOTICE.txt         |    0
 .../src/main/resources/META-INF/spring.factories   |   19 +
 .../src/main/resources/META-INF/spring.provides    |   17 +
 .../components-starter/camel-http4-starter/pom.xml |   61 --
 .../springboot/HttpComponentAutoConfiguration.java |  128 ---
 .../springboot/HttpComponentConfiguration.java     |  309 ------
 .../src/main/resources/META-INF/LICENSE.txt        |  203 ----
 .../src/main/resources/META-INF/NOTICE.txt         |   11 -
 .../additional-spring-configuration-metadata.json  |   10 -
 .../src/main/resources/META-INF/spring.factories   |   18 -
 .../src/main/resources/META-INF/spring.provides    |   17 -
 .../JettyHttpComponentConfiguration9.java          |   41 +-
 .../MiloServerComponentConfiguration.java          |   11 +-
 .../camel-mongodb-starter/pom.xml                  |   53 +
 .../MongoDbComponentAutoConfiguration.java         |  128 +++
 .../springboot/MongoDbComponentConfiguration.java  |   81 ++
 .../src/main/resources/META-INF/LICENSE.txt        |    0
 .../src/main/resources/META-INF/NOTICE.txt         |    0
 .../src/main/resources/META-INF/spring.factories   |   19 +
 .../src/main/resources/META-INF/spring.provides    |   17 +
 .../camel-mongodb3-starter/pom.xml                 |   53 -
 .../MongoDbComponentAutoConfiguration.java         |  128 ---
 .../springboot/MongoDbComponentConfiguration.java  |   81 --
 .../src/main/resources/META-INF/LICENSE.txt        |  203 ----
 .../src/main/resources/META-INF/NOTICE.txt         |   11 -
 .../additional-spring-configuration-metadata.json  |   10 -
 .../src/main/resources/META-INF/spring.factories   |   18 -
 .../src/main/resources/META-INF/spring.provides    |   17 -
 .../camel-netty4-http-starter/pom.xml              |    2 +-
 .../QuickfixjComponentConfiguration.java           |   12 +-
 .../springboot/RabbitMQComponentConfiguration.java |   19 +-
 .../camel-ribbon-starter/pom.xml                   |    2 +-
 .../camel-rxjava-starter/pom.xml                   |   53 +
 .../src/main/resources/META-INF/LICENSE.txt        |    0
 .../src/main/resources/META-INF/NOTICE.txt         |    0
 .../src/main/resources/META-INF/spring.provides    |   17 +
 .../camel-rxjava2-starter/pom.xml                  |   53 -
 .../src/main/resources/META-INF/spring.provides    |   17 -
 .../SalesforceComponentConfiguration.java          |   39 +-
 .../springboot/SalesforceComponentTest.java        |   52 +
 .../springboot/XQueryComponentConfiguration.java   |   11 +-
 .../WebsocketComponentConfiguration.java           |   11 +-
 .../springboot/XsltComponentConfiguration.java     |   10 +-
 .../springboot/XStreamDataFormatConfiguration.java |   28 +-
 platforms/spring-boot/components-starter/pom.xml   |    9 +-
 .../camel-spring-boot-dependencies/pom.xml         |   75 +-
 tests/camel-blueprint-cxf-test/pom.xml             |    2 +-
 .../test/cxf/blueprint/CxfConsumerSoap12Test.java  |    1 +
 .../test/cxf/blueprint/CxfConsumerWSRMTest.java    |    1 +
 .../camel/test/cxf/blueprint/MyProcessor.java      |    1 +
 .../java/org/apache/camel/itest/cdi/Constants.java |   30 -
 .../java/org/apache/camel/itest/cdi/MyRoutes.java  |   53 +
 .../org/apache/camel/itest/cdi/RoutesContextA.java |   61 --
 .../org/apache/camel/itest/cdi/RoutesContextB.java |   61 --
 .../org/apache/camel/itest/cdi/RoutesContextC.java |   60 --
 .../org/apache/camel/itest/cdi/RoutesContextD.java |   60 --
 .../org/apache/camel/itest/cdi/CamelCdiTest.java   |  104 +-
 .../apache/camel/itest/karaf/CamelBoonTest.java    |   33 -
 .../apache/camel/itest/karaf/CamelHdfs2Test.java   |   33 -
 .../apache/camel/itest/karaf/CamelHdfsTest.java    |   33 +
 .../apache/camel/itest/karaf/CamelHttp4Test.java   |   33 -
 .../apache/camel/itest/karaf/CamelHttpTest.java    |   33 +
 .../camel/itest/karaf/CamelMongodb3Test.java       |   34 -
 .../apache/camel/itest/karaf/CamelMongodbTest.java |   34 +
 .../camel/itest/springboot/CamelBoonTest.java      |   48 -
 .../camel/itest/springboot/CamelHdfs2Test.java     |   48 -
 .../camel/itest/springboot/CamelHdfsTest.java      |   48 +
 .../camel/itest/springboot/CamelHttp4Test.java     |   48 -
 .../camel/itest/springboot/CamelHttpTest.java      |   48 +
 .../camel/itest/springboot/CamelMongodb3Test.java  |   50 -
 .../camel/itest/springboot/CamelMongodbTest.java   |   50 +
 tests/camel-itest/pom.xml                          |    2 +-
 .../apache/camel/itest/async/HttpAsyncDslTest.java |   12 +-
 .../apache/camel/itest/async/MyAsyncEndpoint.java  |    3 +
 .../apache/camel/itest/async/MyAsyncProducer.java  |    2 +
 .../customerrelations/CustomerServicesTest.java    |    1 +
 ...ipientListInterceptSendToEndpointIssueTest.java |    2 +
 .../itest/ftp/FtpInitialConnectTimeoutTest.java    |    7 +-
 .../org/apache/camel/itest/ftp/FtpXQueryTest.java  |    2 +
 .../camel/itest/greeter/FilePrepareRequest.java    |    1 +
 .../camel/itest/greeter/JmsPrepareRequest.java     |    1 +
 .../camel/itest/greeter/JmsPrepareResponse.java    |    1 +
 .../apache/camel/itest/greeter/PrepareRequest.java |    1 +
 .../camel/itest/greeter/PrepareResponse.java       |    1 +
 .../apache/camel/itest/http/Http4RouteTest.java    |    6 +-
 .../itest/idempotent/JdbcIdempotentRepository.java |    7 +
 .../org/apache/camel/itest/issues/BaseClass.java   |    1 +
 .../itest/issues/BeanCallDerivedClassTest.java     |    1 +
 .../camel/itest/issues/DummyInterceptor.java       |    1 +
 .../itest/issues/IsUseAdviceWithJUnit4Test.java    |    2 +-
 .../camel/itest/issues/JettyHttpFileCacheTest.java |    1 +
 .../jetty/JettyBridgeHostHeaderIssueTest.java      |   12 +-
 .../camel/itest/jetty/JettyRestRedirectTest.java   |    4 +-
 .../jetty/JettySimulateFailoverRoundRobinTest.java |    1 +
 .../itest/jetty/SetExchangePatternProcessor.java   |    1 +
 .../camel/itest/jetty/SetResponseProcessor.java    |    1 +
 .../JMSTransactionIsTransactedRedeliveredTest.java |    3 +
 .../apache/camel/itest/jms/JmsResequencerTest.java |    1 +
 .../quartz/FtpCronScheduledRoutePolicyTest.java    |    2 +
 .../camel/itest/security/CXFMessageProcessor.java  |    1 +
 .../itest/security/KeystorePasswordCallback.java   |    1 +
 .../itest/security/MyAuthenticationAdapter.java    |    1 +
 .../apache/camel/itest/security/MyProcessor.java   |    1 +
 .../org/apache/camel/itest/tx/JmsToHttpRoute.java  |    1 +
 ...ndNoTransactionErrorHandlerConfiguredRoute.java |    1 +
 .../itest/tx/JmsToHttpWithOnExceptionRoute.java    |    1 +
 .../camel/itest/tx/JmsToHttpWithRollbackRoute.java |    1 +
 .../camel/tests/partialclasspath/RouteTest.java    |    1 +
 tests/camel-performance/pom.xml                    |    2 +-
 .../camel/tests/typeconverterscan/RouteTest.java   |    1 +
 .../tools/apt/EndpointAnnotationProcessor.java     |    1 +
 .../maven/bom/generator/BomGeneratorMojo.java      |    8 -
 .../camel/maven/ApiComponentGeneratorMojoTest.java |    1 +
 .../maven/FileApiMethodGeneratorMojoTest.java      |    1 +
 .../java/org/apache/camel/maven/EmbeddedMojo.java  |    1 +
 .../main/java/org/apache/camel/maven/RunMojo.java  |    3 +
 .../apache/camel/maven/packaging/MvelHelper.java   |    5 +-
 .../packaging/PackageArchetypeCatalogMojo.java     |    1 +
 .../maven/packaging/PackageComponentMojo.java      |    1 +
 .../maven/packaging/PackageDataFormatMojo.java     |    1 +
 .../camel/maven/packaging/PackageJaxbMojo.java     |    1 +
 .../camel/maven/packaging/PackageLanguageMojo.java |    1 +
 .../camel/maven/packaging/PackageLegalMojo.java    |    1 +
 .../camel/maven/packaging/PackageModelMojo.java    |    1 +
 .../camel/maven/packaging/PackageOtherMojo.java    |    1 +
 .../maven/packaging/PrepareCatalogKarafMojo.java   |    1 +
 .../camel/maven/packaging/PrepareCatalogMojo.java  |    1 +
 .../packaging/PrepareCatalogSpringBootMojo.java    |    1 +
 .../maven/packaging/PrepareComponentMojo.java      |    1 +
 .../camel/maven/packaging/PrepareExampleMojo.java  |    1 +
 .../maven/packaging/PrepareParentPomMojo.java      |    1 +
 .../camel/maven/packaging/PrepareReadmeMojo.java   |    1 +
 .../maven/packaging/PrepareReleasePomMojo.java     |    1 +
 .../maven/packaging/PrepareUserGuideMojo.java      |    1 +
 .../packaging/SpringBootAutoConfigurationMojo.java |   15 +-
 .../maven/packaging/SpringBootStarterMojo.java     |    2 +-
 .../camel/maven/packaging/UpdateReadmeMojo.java    |    6 +-
 .../maven/packaging/ValidateComponentMojo.java     |    1 +
 .../generics/OwbGenericArrayTypeImpl.java          |    1 +
 .../generics/OwbParametrizedTypeImpl.java          |    1 +
 .../packaging/generics/OwbWildcardTypeImpl.java    |    1 +
 .../camel/maven/packaging/srcgen/GenericType.java  |    1 +
 .../camel/maven/packaging/srcgen/JavaClass.java    |    1 +
 .../src/main/resources/endpoint-options.mvel       |    4 +-
 .../spring-boot-auto-configure-options.mvel        |    4 +-
 .../camel/maven/packaging/MvelHelperTest.java      |   15 +-
 5860 files changed, 50118 insertions(+), 47697 deletions(-)
 create mode 100644 archetypes/camel-archetype-component/src/main/resources/archetype-resources/src/main/java/EventBusHelper.java
 delete mode 100644 components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/decorators/http/Http4SegmentDecorator.java
 delete mode 100644 components/camel-boon/pom.xml
 delete mode 100644 components/camel-boon/src/main/docs/boon-dataformat.adoc
 delete mode 100644 components/camel-boon/src/main/java/org/apache/camel/component/boon/BoonDataFormat.java
 delete mode 100644 components/camel-boon/src/test/java/org/apache/camel/component/boon/BoonConcurrentTest.java
 delete mode 100644 components/camel-boon/src/test/java/org/apache/camel/component/boon/BoonDataFormatTest.java
 delete mode 100644 components/camel-boon/src/test/java/org/apache/camel/component/boon/TestPojo.java
 delete mode 100644 components/camel-boon/src/test/resources/log4j2.properties
 delete mode 100644 components/camel-cdi/src/main/java/org/apache/camel/cdi/ContextName.java
 delete mode 100644 components/camel-cdi/src/main/java/org/apache/camel/cdi/ContextNames.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/EndpointInjectWrongContextRoute.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/FirstCamelContextProduceTemplateBean.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/FirstCamelContextPropertyInjectBean.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/SecondCamelContextEndpointInjectRoute.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/SecondCamelContextProduceTemplateBean.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/SecondCamelContextPropertyInjectBean.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterMultipleContextsTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiCamelContextProducerTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiCamelContextReusedRouteCdi20Test.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiCamelContextTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextConsumerTemplateTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextEndpointInjectTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextEventEndpointTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextEventNotifierTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextProduceTemplateTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextProducerTemplateTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextPropertyInjectTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/QualifiedMultiCamelContextTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RouteBuilderWithContextNameTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RouteBuildersWithContextNamesTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RouteBuildersWithSameContextNameTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnsatisfiedContextForEndpointInjectTest.java
 delete mode 100644 components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlMultiContextsTest.java
 create mode 100644 components/camel-cmis/src/main/java/org/apache/camel/component/cmis/CamelCMISActions.java
 create mode 100644 components/camel-cmis/src/main/java/org/apache/camel/component/cmis/exception/CamelCmisException.java
 create mode 100644 components/camel-cmis/src/main/java/org/apache/camel/component/cmis/exception/CamelCmisObjectNotFoundException.java
 create mode 100644 components/camel-cmis/src/main/java/org/apache/camel/component/cmis/exception/CamelCmisUnauthorizedException.java
 delete mode 100644 components/camel-ejb/pom.xml
 delete mode 100644 components/camel-ejb/src/main/docs/ejb-component.adoc
 delete mode 100644 components/camel-ejb/src/main/java/org/apache/camel/component/ejb/EjbComponent.java
 delete mode 100644 components/camel-ejb/src/main/java/org/apache/camel/component/ejb/EjbEndpoint.java
 delete mode 100644 components/camel-ejb/src/main/java/org/apache/camel/component/ejb/EjbRegistryBean.java
 delete mode 100644 components/camel-ejb/src/test/java/org/apache/camel/component/ejb/GreaterCamelBeanTest.java
 delete mode 100644 components/camel-ejb/src/test/java/org/apache/camel/component/ejb/GreaterCamelEjbPropertiesTest.java
 delete mode 100644 components/camel-ejb/src/test/java/org/apache/camel/component/ejb/GreaterCamelEjbTest.java
 delete mode 100644 components/camel-ejb/src/test/java/org/apache/camel/component/ejb/GreaterImpl.java
 delete mode 100644 components/camel-ejb/src/test/java/org/apache/camel/component/ejb/GreaterLocal.java
 delete mode 100644 components/camel-ejb/src/test/java/org/apache/camel/component/ejb/GreaterTest.java
 delete mode 100644 components/camel-ejb/src/test/java/org/apache/camel/component/ejb/SpringGreaterCamelEjbTest.java
 delete mode 100644 components/camel-ejb/src/test/resources/META-INF/ejb-jar.xml
 delete mode 100644 components/camel-ejb/src/test/resources/log4j2.properties
 delete mode 100644 components/camel-ejb/src/test/resources/org/apache/camel/component/ejb/SpringGreaterCamelEjbTest.xml
 create mode 100644 components/camel-hdfs/pom.xml
 create mode 100644 components/camel-hdfs/src/main/docs/hdfs-component.adoc
 create mode 100644 components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs2/HdfsComponent.java
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/HdfsCompressionCodec.java (100%)
 create mode 100644 components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs2/HdfsConfiguration.java
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/HdfsConstants.java (100%)
 create mode 100644 components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs2/HdfsConsumer.java
 create mode 100644 components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs2/HdfsEndpoint.java
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/HdfsFileSystemType.java (100%)
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/HdfsFileType.java (100%)
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/HdfsHeader.java (100%)
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/HdfsInfo.java (100%)
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/HdfsInfoFactory.java (100%)
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/HdfsInputStream.java (100%)
 create mode 100644 components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs2/HdfsOsgiHelper.java
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/HdfsOutputStream.java (100%)
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/HdfsProducer.java (100%)
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/HdfsWritableFactories.java (100%)
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/Holder.java (100%)
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/WritableType.java (100%)
 rename components/{camel-hdfs2 => camel-hdfs}/src/main/java/org/apache/camel/component/hdfs2/osgi/HdfsActivator.java (100%)
 create mode 100644 components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs2/FromFileToHdfsTest.java
 create mode 100644 components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs2/HdfsConsumerTest.java
 create mode 100644 components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs2/HdfsProducerConsumerTest.java
 create mode 100644 components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs2/HdfsProducerSplitTest.java
 create mode 100644 components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs2/HdfsProducerTest.java
 rename components/{camel-hdfs2 => camel-hdfs}/src/test/java/org/apache/camel/component/hdfs2/HdfsTestSupport.java (100%)
 create mode 100644 components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs2/integration/HdfsAppendTest.java
 create mode 100644 components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs2/integration/HdfsProducerConsumerIntegrationTest.java
 rename components/{camel-hdfs2 => camel-hdfs}/src/test/resources/hdfs-default.xml (100%)
 rename components/{camel-hdfs2 => camel-hdfs}/src/test/resources/hdfs-test.xml (100%)
 create mode 100644 components/camel-hdfs/src/test/resources/log4j2.properties
 delete mode 100644 components/camel-hdfs2/pom.xml
 delete mode 100644 components/camel-hdfs2/src/main/docs/hdfs2-component.adoc
 delete mode 100644 components/camel-hdfs2/src/main/java/org/apache/camel/component/hdfs2/HdfsComponent.java
 delete mode 100644 components/camel-hdfs2/src/main/java/org/apache/camel/component/hdfs2/HdfsConfiguration.java
 delete mode 100644 components/camel-hdfs2/src/main/java/org/apache/camel/component/hdfs2/HdfsConsumer.java
 delete mode 100644 components/camel-hdfs2/src/main/java/org/apache/camel/component/hdfs2/HdfsEndpoint.java
 delete mode 100644 components/camel-hdfs2/src/main/java/org/apache/camel/component/hdfs2/HdfsOsgiHelper.java
 delete mode 100644 components/camel-hdfs2/src/test/java/org/apache/camel/component/hdfs2/FromFileToHdfsTest.java
 delete mode 100644 components/camel-hdfs2/src/test/java/org/apache/camel/component/hdfs2/HdfsConsumerTest.java
 delete mode 100644 components/camel-hdfs2/src/test/java/org/apache/camel/component/hdfs2/HdfsProducerConsumerTest.java
 delete mode 100644 components/camel-hdfs2/src/test/java/org/apache/camel/component/hdfs2/HdfsProducerSplitTest.java
 delete mode 100644 components/camel-hdfs2/src/test/java/org/apache/camel/component/hdfs2/HdfsProducerTest.java
 delete mode 100644 components/camel-hdfs2/src/test/java/org/apache/camel/component/hdfs2/integration/HdfsAppendTest.java
 delete mode 100644 components/camel-hdfs2/src/test/java/org/apache/camel/component/hdfs2/integration/HdfsProducerConsumerIntegrationTest.java
 delete mode 100644 components/camel-hdfs2/src/test/resources/log4j2.properties
 create mode 100644 components/camel-http/pom.xml
 create mode 100644 components/camel-http/src/main/docs/http-component.adoc
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/BasicAuthenticationHttpClientConfigurer.java
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/CompositeHttpConfigurer.java
 rename components/{camel-http4 => camel-http}/src/main/java/org/apache/camel/component/http4/HttpClientConfigurer.java (100%)
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/HttpComponent.java
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/HttpComponentVerifierExtension.java
 rename components/{camel-http4 => camel-http}/src/main/java/org/apache/camel/component/http4/HttpConstants.java (100%)
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/HttpDeleteWithBodyMethod.java
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java
 rename components/{camel-http4 => camel-http}/src/main/java/org/apache/camel/component/http4/HttpEntityConverter.java (100%)
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/HttpMethods.java
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/HttpMethodsConverter.java
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/HttpPollingConsumer.java
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/HttpProducer.java
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/HttpSendDynamicAware.java
 rename components/{camel-http4 => camel-http}/src/main/java/org/apache/camel/component/http4/HttpUtil.java (100%)
 rename components/{camel-http4 => camel-http}/src/main/java/org/apache/camel/component/http4/NoopCookieStore.java (100%)
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/PreemptiveAuthInterceptor.java
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/ProxyHttpClientConfigurer.java
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/cloud/Http4ServiceExpression.java
 create mode 100644 components/camel-http/src/main/java/org/apache/camel/component/http4/cloud/Http4ServiceExpressionFactory.java
 rename components/{camel-http4 => camel-http}/src/main/java/org/apache/camel/component/http4/helper/HttpMethodHelper.java (100%)
 rename components/{camel-http4 => camel-http}/src/main/java/org/apache/camel/component/http4/package.html (100%)
 rename components/{camel-http4 => camel-http}/src/test/data/logo.jpeg (100%)
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/AdviceAndInterceptHttp4IssueTest.java
 rename components/{camel-http4 => camel-http}/src/test/java/org/apache/camel/component/http4/BaseHttpTest.java (100%)
 rename components/{camel-http4 => camel-http}/src/test/java/org/apache/camel/component/http4/BaseHttpsTest.java (100%)
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/CamelComponentVerifierExtensionTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/CamelComponentVerifierTest.java
 rename components/{camel-http4 => camel-http}/src/test/java/org/apache/camel/component/http4/GoogleUrlRewrite.java (100%)
 rename components/{camel-http4 => camel-http}/src/test/java/org/apache/camel/component/http4/HeaderFilteringTest.java (100%)
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpAuthenticationTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpBodyTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpBodyWithOtherProtocalNameTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpBridgeEndpointTest.java
 rename components/{camel-http4 => camel-http}/src/test/java/org/apache/camel/component/http4/HttpCamelHeadersNotCopiedTest.java (100%)
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpCamelHeadersTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpCharsetTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpClientConfigurerTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpCompressionTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpConcurrentTest.java
 rename components/{camel-http4 => camel-http}/src/test/java/org/apache/camel/component/http4/HttpCustomComponentNameTest.java (100%)
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpDefaultPortNumberTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpDisableStreamCacheTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpEndpointOptionsNotChangeComponentTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpEndpointURLTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpInvalidConfigurationTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpInvalidHttpClientConfigurationTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpMethodsTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpNoCamelHeaderTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpNoConnectionRedeliveryTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpNoConnectionTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpPathTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpPollingConsumerTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpProducerConnectionCloseTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpProducerContentLengthTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpProducerContentTypeTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpProducerContentTypeWithSemiColomnTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpProducerExplicitConnectionCloseTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpProducerSelectMethodTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpProducerSessionTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpProducerTwoHeadersWithSameKeyTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpProducerTwoParametersWithSameKeyTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpProducerWithSystemPropertiesTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpProxyServerTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpQueryTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpRedirectTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpReferenceParameterTest.java
 rename components/{camel-http4 => camel-http}/src/test/java/org/apache/camel/component/http4/HttpSNIHostNameTest.java (100%)
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpSOTimeoutTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpSendDynamicAwareTest.java
 rename components/{camel-http4 => camel-http}/src/test/java/org/apache/camel/component/http4/HttpServerTestSupport.java (100%)
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpThrowExceptionOnFailureTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpWithHttpUriHeaderTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpsAuthenticationTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpsGetTest.java
 rename components/{camel-http4 => camel-http}/src/test/java/org/apache/camel/component/http4/HttpsServerTestSupport.java (100%)
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpsSslContextParametersGetTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpsTwoComponentsSslContextParametersGetTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/HttpsTwoDifferentSslContextParametersGetTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/ManagedHttpProducerPoolStatsTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/UrlRewriteTest.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/handler/AuthenticationValidationHandler.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/handler/BasicRawQueryValidationHandler.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/handler/BasicValidationHandler.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/handler/DelayValidationHandler.java
 rename components/{camel-http4 => camel-http}/src/test/java/org/apache/camel/component/http4/handler/DrinkValidationHandler.java (100%)
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/handler/HeaderValidationHandler.java
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/handler/ProxyAuthenticationValidationHandler.java
 rename components/{camel-http4 => camel-http}/src/test/java/org/apache/camel/component/http4/handler/SessionReflectionHandler.java (100%)
 rename components/{camel-http4 => camel-http}/src/test/java/org/apache/camel/component/http4/helper/HttpHelperTest.java (100%)
 create mode 100644 components/camel-http/src/test/java/org/apache/camel/component/http4/rest/RestCamelComponentVerifierTest.java
 rename components/{camel-http4 => camel-http}/src/test/resources/localhost.ks (100%)
 rename components/{camel-http4 => camel-http}/src/test/resources/log4j2.properties (100%)
 rename components/{camel-http4 => camel-http}/src/test/resources/org/apache/camel/component/http4/CamelHttp4Context.xml (100%)
 delete mode 100644 components/camel-http4/pom.xml
 delete mode 100644 components/camel-http4/src/main/docs/http4-component.adoc
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/BasicAuthenticationHttpClientConfigurer.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/CompositeHttpConfigurer.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponentVerifierExtension.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpDeleteWithBodyMethod.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpMethods.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpMethodsConverter.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpPollingConsumer.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpSendDynamicAware.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/PreemptiveAuthInterceptor.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/ProxyHttpClientConfigurer.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/cloud/Http4ServiceExpression.java
 delete mode 100644 components/camel-http4/src/main/java/org/apache/camel/component/http4/cloud/Http4ServiceExpressionFactory.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/AdviceAndInterceptHttp4IssueTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/CamelComponentVerifierExtensionTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/CamelComponentVerifierTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpAuthenticationTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpBodyTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpBodyWithOtherProtocalNameTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpBridgeEndpointTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCamelHeadersTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCharsetTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpClientConfigurerTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCompressionTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpConcurrentTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpDefaultPortNumberTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpDisableStreamCacheTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpEndpointOptionsNotChangeComponentTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpEndpointURLTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpInvalidConfigurationTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpInvalidHttpClientConfigurationTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpMethodsTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpNoCamelHeaderTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpNoConnectionRedeliveryTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpNoConnectionTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpPathTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpPollingConsumerTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerConnectionCloseTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerContentLengthTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerContentTypeTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerContentTypeWithSemiColomnTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerExplicitConnectionCloseTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerSelectMethodTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerSessionTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerTwoHeadersWithSameKeyTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerTwoParametersWithSameKeyTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerWithSystemPropertiesTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProxyServerTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpQueryTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpRedirectTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpReferenceParameterTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpSOTimeoutTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpSendDynamicAwareTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpThrowExceptionOnFailureTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpWithHttpUriHeaderTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsAuthenticationTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsGetTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsSslContextParametersGetTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsTwoComponentsSslContextParametersGetTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsTwoDifferentSslContextParametersGetTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/ManagedHttpProducerPoolStatsTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/UrlRewriteTest.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/handler/AuthenticationValidationHandler.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/handler/BasicRawQueryValidationHandler.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/handler/BasicValidationHandler.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/handler/DelayValidationHandler.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/handler/HeaderValidationHandler.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/handler/ProxyAuthenticationValidationHandler.java
 delete mode 100644 components/camel-http4/src/test/java/org/apache/camel/component/http4/rest/RestCamelComponentVerifierTest.java
 create mode 100644 components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsReplyToComponentEndlessLoopTest.java
 create mode 100644 components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionClauseTask.java
 create mode 100644 components/camel-mock/src/main/java/org/apache/camel/component/mock/AssertionTask.java
 create mode 100644 components/camel-mongodb/pom.xml
 create mode 100644 components/camel-mongodb/src/main/docs/mongodb-component.adoc
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/CamelMongoDbException.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/MongoAbstractConsumerThread.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/MongoDbChangeStreamsConsumer.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/MongoDbChangeStreamsThread.java (100%)
 create mode 100644 components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb3/MongoDbComponent.java
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/MongoDbConstants.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/MongoDbConsumerType.java (100%)
 create mode 100644 components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb3/MongoDbEndpoint.java
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/MongoDbOperation.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/MongoDbOutputType.java (100%)
 create mode 100644 components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb3/MongoDbProducer.java
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/MongoDbTailTrackingConfig.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/MongoDbTailTrackingManager.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/MongoDbTailableCursorConsumer.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/MongoDbTailingThread.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbBasicConverters.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbFallbackConverter.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/main/java/org/apache/camel/component/mongodb3/processor/idempotent/MongoDbIdempotentRepository.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/test/java/org/apache/camel/component/mongodb3/AbstractMongoDbTest.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/test/java/org/apache/camel/component/mongodb3/EmbedMongoConfiguration.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/test/java/org/apache/camel/component/mongodb3/MongoBasicOperationsConfiguration.java (100%)
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbAggregateOperationTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbBigDecimalConverterTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbBulkWriteOperationTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbChangeStreamsConsumerTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbConnectionBeansTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbConversionsTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbDynamicityTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbExceptionHandlingTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbFindOperationTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbHeaderHandlingTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbIndexTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbOperationsTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbOutputTypeTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbReadPreferenceOptionTest.java
 rename components/{camel-mongodb3 => camel-mongodb}/src/test/java/org/apache/camel/component/mongodb3/MongoDbSpringDslOperationsTest.java (100%)
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbStopEndpointTest.java
 create mode 100644 components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb3/MongoDbTailableCursorConsumerTest.java
 rename components/{camel-mongodb3 => camel-mongodb}/src/test/java/org/apache/camel/component/mongodb3/processor/idempotent/MongoDbIdempotentRepositoryTest.java (100%)
 rename components/{camel-mongodb3 => camel-mongodb}/src/test/resources/log4j2.properties (100%)
 copy components/{camel-mongodb-gridfs => camel-mongodb}/src/test/resources/mongodb.test.properties (100%)
 create mode 100644 components/camel-mongodb/src/test/resources/org/apache/camel/component/mongodb3/mongoBasicOperationsTest.xml
 delete mode 100644 components/camel-mongodb3/pom.xml
 delete mode 100644 components/camel-mongodb3/src/main/docs/mongodb3-component.adoc
 delete mode 100644 components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/MongoDbComponent.java
 delete mode 100644 components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/MongoDbEndpoint.java
 delete mode 100644 components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/MongoDbProducer.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbAggregateOperationTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbBigDecimalConverterTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbBulkWriteOperationTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbChangeStreamsConsumerTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbConnectionBeansTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbConversionsTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbDynamicityTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbExceptionHandlingTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbFindOperationTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbHeaderHandlingTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbIndexTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbOperationsTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbOutputTypeTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbReadPreferenceOptionTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbStopEndpointTest.java
 delete mode 100644 components/camel-mongodb3/src/test/java/org/apache/camel/component/mongodb3/MongoDbTailableCursorConsumerTest.java
 delete mode 100644 components/camel-mongodb3/src/test/resources/mongodb.test.properties
 delete mode 100644 components/camel-mongodb3/src/test/resources/org/apache/camel/component/mongodb3/mongoBasicOperationsTest.xml
 delete mode 100644 components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/Http4SpanDecorator.java
 create mode 100644 components/camel-rxjava/pom.xml
 create mode 100644 components/camel-rxjava/src/main/docs/rxjava.adoc
 rename components/{camel-rxjava2 => camel-rxjava}/src/main/java/org/apache/camel/component/rxjava2/engine/RxJavaCamelProcessor.java (100%)
 create mode 100644 components/camel-rxjava/src/main/java/org/apache/camel/component/rxjava2/engine/RxJavaStreamsConstants.java
 create mode 100644 components/camel-rxjava/src/main/java/org/apache/camel/component/rxjava2/engine/RxJavaStreamsService.java
 rename components/{camel-rxjava2 => camel-rxjava}/src/main/java/org/apache/camel/component/rxjava2/engine/RxJavaStreamsServiceFactory.java (100%)
 rename components/{camel-rxjava2/src/main/resources/META-INF/services/org/apache/camel/reactive-streams/rxjava2 => camel-rxjava/src/main/resources/META-INF/services/org/apache/camel/reactive-streams/rxjava} (100%)
 rename components/{camel-rxjava2 => camel-rxjava}/src/test/java/org/apache/camel/component/rxjava2/engine/RxJavaStreamsServiceBackpressureTest.java (100%)
 rename components/{camel-rxjava2 => camel-rxjava}/src/test/java/org/apache/camel/component/rxjava2/engine/RxJavaStreamsServiceEventTypeTest.java (100%)
 rename components/{camel-rxjava2 => camel-rxjava}/src/test/java/org/apache/camel/component/rxjava2/engine/RxJavaStreamsServiceSubscriberTest.java (100%)
 create mode 100644 components/camel-rxjava/src/test/java/org/apache/camel/component/rxjava2/engine/RxJavaStreamsServiceTest.java
 rename components/{camel-rxjava2 => camel-rxjava}/src/test/java/org/apache/camel/component/rxjava2/engine/RxJavaStreamsServiceTestSupport.java (100%)
 rename components/{camel-rxjava2 => camel-rxjava}/src/test/java/org/apache/camel/component/rxjava2/engine/suport/TestSubscriber.java (100%)
 create mode 100644 components/camel-rxjava/src/test/resources/log4j2.properties
 delete mode 100644 components/camel-rxjava2/pom.xml
 delete mode 100644 components/camel-rxjava2/src/main/docs/rxjava2.adoc
 delete mode 100644 components/camel-rxjava2/src/main/java/org/apache/camel/component/rxjava2/engine/RxJavaStreamsConstants.java
 delete mode 100644 components/camel-rxjava2/src/main/java/org/apache/camel/component/rxjava2/engine/RxJavaStreamsService.java
 delete mode 100644 components/camel-rxjava2/src/test/java/org/apache/camel/component/rxjava2/engine/RxJavaStreamsServiceTest.java
 delete mode 100644 components/camel-rxjava2/src/test/resources/log4j2.properties
 delete mode 100644 components/camel-spring/src/test/java/org/apache/camel/spring/example/MyCamel1Consumer.java
 delete mode 100644 components/camel-spring/src/test/java/org/apache/camel/spring/example/MyCamel2Consumer.java
 delete mode 100644 components/camel-spring/src/test/java/org/apache/camel/spring/example/MyCamel2RecipientList.java
 delete mode 100644 components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoDualCamelContextConsumerTest.java
 delete mode 100644 components/camel-spring/src/test/resources/org/apache/camel/spring/example/pojoDualCamelContextConsumer.xml
 delete mode 100644 components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerMockEndpointsAndSkipTest.java
 delete mode 100644 components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerMockEndpointsTest.java
 create mode 100644 components/camel-test/src/test/java/org/apache/camel/test/patterns/GetMockEndpointTest.java
 delete mode 100644 core/camel-api/src/main/java/org/apache/camel/InvokeOnHeader.java
 delete mode 100644 core/camel-api/src/main/java/org/apache/camel/InvokeOnHeaders.java
 create mode 100644 core/camel-api/src/main/java/org/apache/camel/NamedRoute.java
 delete mode 100644 core/camel-api/src/main/java/org/apache/camel/OutHeaders.java
 create mode 100644 core/camel-api/src/main/java/org/apache/camel/spi/InvokeOnHeader.java
 create mode 100644 core/camel-api/src/main/java/org/apache/camel/spi/InvokeOnHeaders.java
 delete mode 100644 core/camel-api/src/main/java/org/apache/camel/spi/SubUnitOfWork.java
 delete mode 100644 core/camel-api/src/main/java/org/apache/camel/spi/SubUnitOfWorkCallback.java
 create mode 100644 core/camel-api/src/main/java/org/apache/camel/spi/Tracer.java
 delete mode 100644 core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultSubUnitOfWork.java
 create mode 100644 core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultTracer.java
 create mode 100644 core/camel-core/src/main/java/org/apache/camel/model/AdviceWithDefinition.java
 delete mode 100644 core/camel-core/src/main/java/org/apache/camel/model/dataformat/BoonDataFormat.java
 delete mode 100644 core/camel-core/src/main/java/org/apache/camel/reifier/dataformat/BoonDataFormatReifier.java
 create mode 100644 core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithErrorHandlerRemoveTest.java
 create mode 100644 core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithInterceptFromRemoveTest.java
 create mode 100644 core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithInterceptRemoveTest.java
 create mode 100644 core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithInterceptSendToEndpointRemoveTest.java
 create mode 100644 core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithOnCompletionRemoveTest.java
 create mode 100644 core/camel-core/src/test/java/org/apache/camel/issues/MulticastMixOriginalMessageBodyAndEnrichedHeadersClaimCheckTest.java
 create mode 100644 core/camel-core/src/test/java/org/apache/camel/issues/MulticastMixOriginalMessageBodyAndEnrichedHeadersTest.java
 create mode 100644 core/camel-core/src/test/java/org/apache/camel/issues/MulticastMixOriginalMessageBodyAndEnrichedHeadersUseOriginalBodyTest.java
 create mode 100644 core/camel-core/src/test/java/org/apache/camel/language/TokenXMLPairNamespaceSplitChildNamespaceTest.java
 create mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/aggregator/AggregateDiscardOnFailureTest.java
 delete mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/intercept/DualInterceptSimpleRouteTest.java
 create mode 100644 core/camel-core/src/test/java/org/apache/camel/processor/intercept/InterceptSendToEndpointAfterTest.java
 delete mode 100644 core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/EjbEndpointBuilderFactory.java
 create mode 100644 core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedTracerMBean.java
 create mode 100644 core/camel-management-impl/src/main/java/org/apache/camel/management/mbean/ManagedTracer.java
 create mode 100644 core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedStartupFailedTest.java
 create mode 100644 core/camel-management-impl/src/test/java/org/apache/camel/management/ManagedTracerTest.java
 delete mode 100644 core/camel-support/src/main/java/org/apache/camel/converter/stream/OutputStreamBuilder.java
 create mode 100644 core/camel-support/src/main/java/org/apache/camel/support/builder/OutputStreamBuilder.java
 delete mode 100644 docs/components/modules/ROOT/pages/boon-dataformat.adoc
 delete mode 100644 docs/components/modules/ROOT/pages/ejb-component.adoc
 create mode 100644 docs/components/modules/ROOT/pages/hdfs-component.adoc
 delete mode 100644 docs/components/modules/ROOT/pages/hdfs2-component.adoc
 create mode 100644 docs/components/modules/ROOT/pages/http-component.adoc
 delete mode 100644 docs/components/modules/ROOT/pages/http4-component.adoc
 create mode 100644 docs/components/modules/ROOT/pages/mongodb-component.adoc
 delete mode 100644 docs/components/modules/ROOT/pages/mongodb3-component.adoc
 create mode 100644 docs/components/modules/ROOT/pages/rxjava.adoc
 delete mode 100644 docs/components/modules/ROOT/pages/rxjava2.adoc
 delete mode 100644 platforms/spring-boot/components-starter/camel-boon-starter/pom.xml
 delete mode 100644 platforms/spring-boot/components-starter/camel-boon-starter/src/main/java/org/apache/camel/component/boon/springboot/BoonDataFormatAutoConfiguration.java
 delete mode 100644 platforms/spring-boot/components-starter/camel-boon-starter/src/main/java/org/apache/camel/component/boon/springboot/BoonDataFormatConfiguration.java
 delete mode 100644 platforms/spring-boot/components-starter/camel-boon-starter/src/main/resources/META-INF/LICENSE.txt
 delete mode 100644 platforms/spring-boot/components-starter/camel-boon-starter/src/main/resources/META-INF/NOTICE.txt
 delete mode 100644 platforms/spring-boot/components-starter/camel-boon-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
 delete mode 100644 platforms/spring-boot/components-starter/camel-boon-starter/src/main/resources/META-INF/spring.factories
 delete mode 100644 platforms/spring-boot/components-starter/camel-boon-starter/src/main/resources/META-INF/spring.provides
 create mode 100644 platforms/spring-boot/components-starter/camel-hdfs-starter/pom.xml
 create mode 100644 platforms/spring-boot/components-starter/camel-hdfs-starter/src/main/java/org/apache/camel/component/hdfs2/springboot/HdfsComponentAutoConfiguration.java
 create mode 100644 platforms/spring-boot/components-starter/camel-hdfs-starter/src/main/java/org/apache/camel/component/hdfs2/springboot/HdfsComponentConfiguration.java
 rename platforms/spring-boot/components-starter/{camel-rxjava2-starter => camel-hdfs-starter}/src/main/resources/META-INF/LICENSE.txt (100%)
 rename platforms/spring-boot/components-starter/{camel-rxjava2-starter => camel-hdfs-starter}/src/main/resources/META-INF/NOTICE.txt (100%)
 create mode 100644 platforms/spring-boot/components-starter/camel-hdfs-starter/src/main/resources/META-INF/spring.factories
 create mode 100644 platforms/spring-boot/components-starter/camel-hdfs-starter/src/main/resources/META-INF/spring.provides
 delete mode 100644 platforms/spring-boot/components-starter/camel-hdfs2-starter/pom.xml
 delete mode 100644 platforms/spring-boot/components-starter/camel-hdfs2-starter/src/main/java/org/apache/camel/component/hdfs2/springboot/HdfsComponentAutoConfiguration.java
 delete mode 100644 platforms/spring-boot/components-starter/camel-hdfs2-starter/src/main/java/org/apache/camel/component/hdfs2/springboot/HdfsComponentConfiguration.java
 delete mode 100644 platforms/spring-boot/components-starter/camel-hdfs2-starter/src/main/resources/META-INF/LICENSE.txt
 delete mode 100644 platforms/spring-boot/components-starter/camel-hdfs2-starter/src/main/resources/META-INF/NOTICE.txt
 delete mode 100644 platforms/spring-boot/components-starter/camel-hdfs2-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
 delete mode 100644 platforms/spring-boot/components-starter/camel-hdfs2-starter/src/main/resources/META-INF/spring.factories
 delete mode 100644 platforms/spring-boot/components-starter/camel-hdfs2-starter/src/main/resources/META-INF/spring.provides
 create mode 100644 platforms/spring-boot/components-starter/camel-http-starter/pom.xml
 create mode 100644 platforms/spring-boot/components-starter/camel-http-starter/src/main/java/org/apache/camel/component/http4/springboot/HttpComponentAutoConfiguration.java
 create mode 100644 platforms/spring-boot/components-starter/camel-http-starter/src/main/java/org/apache/camel/component/http4/springboot/HttpComponentConfiguration.java
 copy {tooling/maven/camel-package-maven-plugin => platforms/spring-boot/components-starter/camel-http-starter}/src/main/resources/META-INF/LICENSE.txt (100%)
 copy {tooling/maven/camel-package-maven-plugin => platforms/spring-boot/components-starter/camel-http-starter}/src/main/resources/META-INF/NOTICE.txt (100%)
 create mode 100644 platforms/spring-boot/components-starter/camel-http-starter/src/main/resources/META-INF/spring.factories
 create mode 100644 platforms/spring-boot/components-starter/camel-http-starter/src/main/resources/META-INF/spring.provides
 delete mode 100644 platforms/spring-boot/components-starter/camel-http4-starter/pom.xml
 delete mode 100644 platforms/spring-boot/components-starter/camel-http4-starter/src/main/java/org/apache/camel/component/http4/springboot/HttpComponentAutoConfiguration.java
 delete mode 100644 platforms/spring-boot/components-starter/camel-http4-starter/src/main/java/org/apache/camel/component/http4/springboot/HttpComponentConfiguration.java
 delete mode 100644 platforms/spring-boot/components-starter/camel-http4-starter/src/main/resources/META-INF/LICENSE.txt
 delete mode 100644 platforms/spring-boot/components-starter/camel-http4-starter/src/main/resources/META-INF/NOTICE.txt
 delete mode 100644 platforms/spring-boot/components-starter/camel-http4-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
 delete mode 100644 platforms/spring-boot/components-starter/camel-http4-starter/src/main/resources/META-INF/spring.factories
 delete mode 100644 platforms/spring-boot/components-starter/camel-http4-starter/src/main/resources/META-INF/spring.provides
 create mode 100644 platforms/spring-boot/components-starter/camel-mongodb-starter/pom.xml
 create mode 100644 platforms/spring-boot/components-starter/camel-mongodb-starter/src/main/java/org/apache/camel/component/mongodb3/springboot/MongoDbComponentAutoConfiguration.java
 create mode 100644 platforms/spring-boot/components-starter/camel-mongodb-starter/src/main/java/org/apache/camel/component/mongodb3/springboot/MongoDbComponentConfiguration.java
 copy {tooling/maven/camel-package-maven-plugin => platforms/spring-boot/components-starter/camel-mongodb-starter}/src/main/resources/META-INF/LICENSE.txt (100%)
 copy {tooling/maven/camel-package-maven-plugin => platforms/spring-boot/components-starter/camel-mongodb-starter}/src/main/resources/META-INF/NOTICE.txt (100%)
 create mode 100644 platforms/spring-boot/components-starter/camel-mongodb-starter/src/main/resources/META-INF/spring.factories
 create mode 100644 platforms/spring-boot/components-starter/camel-mongodb-starter/src/main/resources/META-INF/spring.provides
 delete mode 100644 platforms/spring-boot/components-starter/camel-mongodb3-starter/pom.xml
 delete mode 100644 platforms/spring-boot/components-starter/camel-mongodb3-starter/src/main/java/org/apache/camel/component/mongodb3/springboot/MongoDbComponentAutoConfiguration.java
 delete mode 100644 platforms/spring-boot/components-starter/camel-mongodb3-starter/src/main/java/org/apache/camel/component/mongodb3/springboot/MongoDbComponentConfiguration.java
 delete mode 100644 platforms/spring-boot/components-starter/camel-mongodb3-starter/src/main/resources/META-INF/LICENSE.txt
 delete mode 100644 platforms/spring-boot/components-starter/camel-mongodb3-starter/src/main/resources/META-INF/NOTICE.txt
 delete mode 100644 platforms/spring-boot/components-starter/camel-mongodb3-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
 delete mode 100644 platforms/spring-boot/components-starter/camel-mongodb3-starter/src/main/resources/META-INF/spring.factories
 delete mode 100644 platforms/spring-boot/components-starter/camel-mongodb3-starter/src/main/resources/META-INF/spring.provides
 create mode 100644 platforms/spring-boot/components-starter/camel-rxjava-starter/pom.xml
 copy {tooling/maven/camel-package-maven-plugin => platforms/spring-boot/components-starter/camel-rxjava-starter}/src/main/resources/META-INF/LICENSE.txt (100%)
 copy {tooling/maven/camel-package-maven-plugin => platforms/spring-boot/components-starter/camel-rxjava-starter}/src/main/resources/META-INF/NOTICE.txt (100%)
 create mode 100644 platforms/spring-boot/components-starter/camel-rxjava-starter/src/main/resources/META-INF/spring.provides
 delete mode 100644 platforms/spring-boot/components-starter/camel-rxjava2-starter/pom.xml
 delete mode 100644 platforms/spring-boot/components-starter/camel-rxjava2-starter/src/main/resources/META-INF/spring.provides
 create mode 100644 platforms/spring-boot/components-starter/camel-salesforce-starter/src/test/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentTest.java
 delete mode 100644 tests/camel-itest-cdi/src/main/java/org/apache/camel/itest/cdi/Constants.java
 create mode 100644 tests/camel-itest-cdi/src/main/java/org/apache/camel/itest/cdi/MyRoutes.java
 delete mode 100644 tests/camel-itest-cdi/src/main/java/org/apache/camel/itest/cdi/RoutesContextA.java
 delete mode 100644 tests/camel-itest-cdi/src/main/java/org/apache/camel/itest/cdi/RoutesContextB.java
 delete mode 100644 tests/camel-itest-cdi/src/main/java/org/apache/camel/itest/cdi/RoutesContextC.java
 delete mode 100644 tests/camel-itest-cdi/src/main/java/org/apache/camel/itest/cdi/RoutesContextD.java
 delete mode 100644 tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelBoonTest.java
 delete mode 100644 tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelHdfs2Test.java
 create mode 100644 tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelHdfsTest.java
 delete mode 100644 tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelHttp4Test.java
 create mode 100644 tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelHttpTest.java
 delete mode 100644 tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelMongodb3Test.java
 create mode 100644 tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelMongodbTest.java
 delete mode 100644 tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelBoonTest.java
 delete mode 100644 tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelHdfs2Test.java
 create mode 100644 tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelHdfsTest.java
 delete mode 100644 tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelHttp4Test.java
 create mode 100644 tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelHttpTest.java
 delete mode 100644 tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelMongodb3Test.java
 create mode 100644 tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelMongodbTest.java


[camel] 04/09: CAMEL-13342: Implemented a first version of a proof-of-concept for camel-cdi-test in junit 5

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aldettinger pushed a commit to branch CAMEL-13342-JUNIT5-EXPLORATORY
in repository https://gitbox.apache.org/repos/asf/camel.git

commit cdefa5ca0c3dc1bc040dd89ab23a70da5189ace4
Author: aldettinger <al...@gmail.com>
AuthorDate: Wed Jun 26 19:10:13 2019 +0200

    CAMEL-13342: Implemented a first version of a proof-of-concept for camel-cdi-test in junit 5
---
 components/camel-test-cdi/pom.xml                  | 15 +++++
 .../apache/camel/test/cdi/junit5/AnyLiteral.java   | 30 +++++++++
 .../test/cdi/junit5/CamelCdiJUnit5Extension.java   | 71 ++++++++++++++++++++
 .../cdi/junit5/CamelCdiJUnit5ExtensionStore.java   | 52 +++++++++++++++
 .../apache/camel/test/cdi/junit5/CamelCdiTest.java | 31 +++++++++
 .../apache/camel/test/cdi/junit5/FilterTest.java   | 75 ++++++++++++++++++++++
 6 files changed, 274 insertions(+)

diff --git a/components/camel-test-cdi/pom.xml b/components/camel-test-cdi/pom.xml
index 7cc65da..bb4db09 100644
--- a/components/camel-test-cdi/pom.xml
+++ b/components/camel-test-cdi/pom.xml
@@ -57,6 +57,21 @@
             <artifactId>weld-se-core</artifactId>
             <version>${weld3-version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <version>5.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <version>5.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.vintage</groupId>
+            <artifactId>junit-vintage-engine</artifactId>
+            <version>5.4.2</version>
+        </dependency>
 
         <!-- test dependencies -->
         <dependency>
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/junit5/AnyLiteral.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/junit5/AnyLiteral.java
new file mode 100644
index 0000000..b71ecd3
--- /dev/null
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/junit5/AnyLiteral.java
@@ -0,0 +1,30 @@
+/*
+ * 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.test.cdi.junit5;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.util.AnnotationLiteral;
+
+final class AnyLiteral extends AnnotationLiteral<Any> implements Any {
+
+    static final Any INSTANCE = new AnyLiteral();
+
+    private static final long serialVersionUID = 1L;
+
+    private AnyLiteral() {
+    }
+}
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/junit5/CamelCdiJUnit5Extension.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/junit5/CamelCdiJUnit5Extension.java
new file mode 100644
index 0000000..0da533c
--- /dev/null
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/junit5/CamelCdiJUnit5Extension.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.test.cdi.junit5;
+
+import java.util.Set;
+
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.jboss.weld.config.ConfigurationKey;
+import org.jboss.weld.environment.se.Weld;
+import org.jboss.weld.environment.se.WeldContainer;
+import org.junit.jupiter.api.extension.AfterEachCallback;
+import org.junit.jupiter.api.extension.BeforeAllCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.TestInstanceFactory;
+import org.junit.jupiter.api.extension.TestInstanceFactoryContext;
+import org.junit.jupiter.api.extension.TestInstantiationException;
+
+import static org.apache.camel.test.cdi.junit5.CamelCdiJUnit5ExtensionStore.getWeldBuilderFromStore;
+import static org.apache.camel.test.cdi.junit5.CamelCdiJUnit5ExtensionStore.getWeldContainerFromStore;
+import static org.apache.camel.test.cdi.junit5.CamelCdiJUnit5ExtensionStore.putWeldBuilderInStore;
+import static org.apache.camel.test.cdi.junit5.CamelCdiJUnit5ExtensionStore.putWeldContainerInStore;
+
+public class CamelCdiJUnit5Extension implements BeforeAllCallback, AfterEachCallback, TestInstanceFactory {
+
+    @Override
+    public void beforeAll(ExtensionContext eCtx) throws Exception {
+        Class<?> testClass = eCtx.getRequiredTestClass();
+        Weld weld = new Weld()
+            // TODO: check parallel execution
+            .containerId("camel-context-cdi").property(ConfigurationKey.RELAXED_CONSTRUCTION.get(), true).property(Weld.SHUTDOWN_HOOK_SYSTEM_PROPERTY, false).enableDiscovery()
+            .beanClasses(testClass.getDeclaredClasses()).addBeanClass(testClass).addExtension(new CdiCamelExtension());
+
+        putWeldBuilderInStore(eCtx, weld);
+    }
+
+    @Override
+    public void afterEach(ExtensionContext eCtx) throws Exception {
+        WeldContainer container = getWeldContainerFromStore(eCtx, eCtx.getRequiredTestInstance());
+        container.shutdown();
+    }
+
+    @Override
+    public Object createTestInstance(TestInstanceFactoryContext factoryContext, ExtensionContext eCtx) throws TestInstantiationException {
+        WeldContainer container = getWeldBuilderFromStore(eCtx).initialize();
+        BeanManager manager = container.getBeanManager();
+        Set<Bean<?>> beans = manager.getBeans(eCtx.getRequiredTestClass(), AnyLiteral.INSTANCE);
+        Bean<?> bean = beans.iterator().next();
+        Object testInstance = manager.getReference(bean, bean.getBeanClass(), manager.createCreationalContext(bean));
+
+        putWeldContainerInStore(eCtx, testInstance, container);
+
+        return testInstance;
+    }
+}
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/junit5/CamelCdiJUnit5ExtensionStore.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/junit5/CamelCdiJUnit5ExtensionStore.java
new file mode 100644
index 0000000..9f0c8ad
--- /dev/null
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/junit5/CamelCdiJUnit5ExtensionStore.java
@@ -0,0 +1,52 @@
+/*
+ * 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.test.cdi.junit5;
+
+import org.jboss.weld.environment.se.Weld;
+import org.jboss.weld.environment.se.WeldContainer;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.ExtensionContext.Namespace;
+
+public final class CamelCdiJUnit5ExtensionStore {
+
+    private static final String TEST_CLASS_WELD_BUILDER_STORE_KEY = "TEST_CLASS_WELD_BUILDER_STORE_KEY";
+    private static final String TEST_INSTANCE_WELD_CONTAINER_STORE_KEY = "TEST_INSTANCE_WELD_CONTAINER_STORE_KEY";
+
+    private CamelCdiJUnit5ExtensionStore() {
+    }
+
+    static void putWeldBuilderInStore(ExtensionContext eCtx, Weld weld) {
+        Namespace ns = Namespace.create(CamelCdiJUnit5ExtensionStore.class, eCtx.getRequiredTestClass());
+        eCtx.getStore(ns).put(TEST_CLASS_WELD_BUILDER_STORE_KEY, weld);
+    }
+
+    static Weld getWeldBuilderFromStore(ExtensionContext eCtx) {
+        Namespace ns = Namespace.create(CamelCdiJUnit5ExtensionStore.class, eCtx.getRequiredTestClass());
+        return eCtx.getStore(ns).get(TEST_CLASS_WELD_BUILDER_STORE_KEY, Weld.class);
+    }
+
+    static void putWeldContainerInStore(ExtensionContext eCtx, Object testInstance, WeldContainer container) {
+        Namespace ns = Namespace.create(CamelCdiJUnit5ExtensionStore.class, testInstance);
+        eCtx.getStore(ns).put(TEST_INSTANCE_WELD_CONTAINER_STORE_KEY, container);
+    }
+
+    static WeldContainer getWeldContainerFromStore(ExtensionContext eCtx, Object testInstance) {
+        Namespace ns = Namespace.create(CamelCdiJUnit5ExtensionStore.class, testInstance);
+        return eCtx.getStore(ns).get(TEST_INSTANCE_WELD_CONTAINER_STORE_KEY, WeldContainer.class);
+    }
+
+}
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/junit5/CamelCdiTest.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/junit5/CamelCdiTest.java
new file mode 100644
index 0000000..b1f3fee
--- /dev/null
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/junit5/CamelCdiTest.java
@@ -0,0 +1,31 @@
+/*
+ * 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.test.cdi.junit5;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.junit.jupiter.api.extension.ExtendWith;
+
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@ExtendWith(CamelCdiJUnit5Extension.class)
+public @interface CamelCdiTest {
+
+}
diff --git a/components/camel-test-cdi/src/test/java/org/apache/camel/test/cdi/junit5/FilterTest.java b/components/camel-test-cdi/src/test/java/org/apache/camel/test/cdi/junit5/FilterTest.java
new file mode 100644
index 0000000..e7fe510
--- /dev/null
+++ b/components/camel-test-cdi/src/test/java/org/apache/camel/test/cdi/junit5/FilterTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.test.cdi.junit5;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+
+@CamelCdiTest
+public class FilterTest {
+
+    @EndpointInject("mock:result")
+    protected MockEndpoint resultEndpoint;
+
+    @Produce("direct:start")
+    protected ProducerTemplate template;
+
+    @BeforeEach
+    public void before() {
+        resultEndpoint.reset();
+    }
+
+    @Test
+    public void testSendMatchingMessage() throws Exception {
+        String expectedBody = "<matched/>";
+
+        resultEndpoint.expectedBodiesReceived(expectedBody);
+
+        template.sendBodyAndHeader(expectedBody, "foo", "bar");
+
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testSendNotMatchingMessage() throws Exception {
+        resultEndpoint.expectedMessageCount(0);
+
+        template.sendBodyAndHeader("<notMatched/>", "foo", "notMatchedHeaderValue");
+
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testInfoParamShouldBeResolved(TestInfo testInfo) throws Exception {
+        Assertions.assertNotNull(testInfo);
+    }
+
+    static class ContextConfig extends RouteBuilder {
+
+        @Override
+        public void configure() {
+            from("direct:start").filter(header("foo").isEqualTo("bar")).to("mock:result");
+        }
+    }
+}


[camel] 02/09: CAMEL-13342: Setup SimpleMockTest with junit extension and parameter resolver

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aldettinger pushed a commit to branch CAMEL-13342-JUNIT5-EXPLORATORY
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 637c0d60717708d492f93e2eb4f93113490d88b8
Author: aldettinger <al...@gmail.com>
AuthorDate: Wed Jun 5 16:50:19 2019 +0200

    CAMEL-13342: Setup SimpleMockTest with junit extension and parameter resolver
---
 components/camel-test/pom.xml                      | 12 +++-
 .../org/apache/camel/test/junit5/CamelTest.java    |  4 ++
 .../camel/test/junit5/CamelTestExtension.java      | 82 ++++++++++++++++++++++
 .../test/junit5/CamelTestParameterResolver.java    | 39 ++++++++++
 .../apache/camel/test/junit5/SimpleMockTest.java   | 53 ++++++++++++++
 5 files changed, 189 insertions(+), 1 deletion(-)

diff --git a/components/camel-test/pom.xml b/components/camel-test/pom.xml
index c3485f4..ebe758a 100644
--- a/components/camel-test/pom.xml
+++ b/components/camel-test/pom.xml
@@ -57,7 +57,17 @@
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter-api</artifactId>
-            <version>5.5.0-M1</version>
+            <version>5.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <version>5.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.vintage</groupId>
+            <artifactId>junit-vintage-engine</artifactId>
+            <version>5.4.2</version>
         </dependency>
 
         <dependency>
diff --git a/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTest.java b/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTest.java
index 05ed250..2732d2a 100644
--- a/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTest.java
+++ b/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTest.java
@@ -21,8 +21,12 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import org.junit.jupiter.api.extension.ExtendWith;
+
 @Target({ElementType.TYPE})
 @Retention(RetentionPolicy.RUNTIME)
+@ExtendWith(CamelTestExtension.class)
+@ExtendWith(CamelTestParameterResolver.class)
 public @interface CamelTest {
 
 }
diff --git a/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestExtension.java b/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestExtension.java
new file mode 100644
index 0000000..3e26d80
--- /dev/null
+++ b/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestExtension.java
@@ -0,0 +1,82 @@
+/*
+ * 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.test.junit5;
+
+import java.lang.reflect.Method;
+import java.util.Optional;
+
+import org.apache.camel.ConsumerTemplate;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.engine.DefaultCamelBeanPostProcessor;
+import org.apache.camel.model.ModelCamelContext;
+import org.junit.jupiter.api.extension.AfterEachCallback;
+import org.junit.jupiter.api.extension.BeforeEachCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.ExtensionContext.Namespace;
+import org.junit.platform.commons.util.ReflectionUtils;
+
+public class CamelTestExtension implements BeforeEachCallback, AfterEachCallback {
+
+    private ModelCamelContext context;
+    private ProducerTemplate producerTemplate;
+    private ConsumerTemplate consumerTemplate;
+
+    @Override
+    public void afterEach(ExtensionContext eCtx) throws Exception {
+        if (producerTemplate != null) {
+            producerTemplate.stop();
+        }
+        if (consumerTemplate != null) {
+            consumerTemplate.stop();
+        }
+        if (context != null) {
+            context.stop();
+        }
+    }
+
+    @Override
+    public void beforeEach(ExtensionContext eCtx) throws Exception {
+        context = new DefaultCamelContext();
+
+        Optional<Method> method = ReflectionUtils.findMethod(eCtx.getTestClass().get(), "createRouteBuilder");
+
+        Object ret = ReflectionUtils.invokeMethod(method.get(), eCtx.getTestInstance().get());
+        if (ret instanceof RoutesBuilder) {
+            ((RoutesBuilder)ret).addRoutesToCamelContext(context);
+        }
+        producerTemplate = context.createProducerTemplate();
+        consumerTemplate = context.createConsumerTemplate();
+
+        DefaultCamelBeanPostProcessor processor = new DefaultCamelBeanPostProcessor(context);
+        processor.postProcessBeforeInitialization(this, getClass().getName());
+        processor.postProcessAfterInitialization(this, getClass().getName());
+
+        context.start();
+        producerTemplate.start();
+        consumerTemplate.start();
+
+        // @TODO: Do we really use a namespace with key
+        // CamelTestParameterResolver.class
+        // We may reuse those values in test also
+        eCtx.getStore(Namespace.create(CamelTestParameterResolver.class)).put(ModelCamelContext.class, context);
+        eCtx.getStore(Namespace.create(CamelTestParameterResolver.class)).put(ProducerTemplate.class, producerTemplate);
+        eCtx.getStore(Namespace.create(CamelTestParameterResolver.class)).put(ConsumerTemplate.class, consumerTemplate);
+    }
+
+}
diff --git a/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestParameterResolver.java b/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestParameterResolver.java
new file mode 100644
index 0000000..ce58940
--- /dev/null
+++ b/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestParameterResolver.java
@@ -0,0 +1,39 @@
+package org.apache.camel.test.junit5;
+
+import org.apache.camel.ConsumerTemplate;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.model.ModelCamelContext;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.ExtensionContext.Namespace;
+import org.junit.jupiter.api.extension.ParameterContext;
+import org.junit.jupiter.api.extension.ParameterResolutionException;
+import org.junit.jupiter.api.extension.ParameterResolver;
+
+// @TODO: Is it really the same treatment for all types ?
+// @TODO: Can't we get more than one object of type ProducerTemplate ? like threadTemplate ?
+public class CamelTestParameterResolver implements ParameterResolver {
+
+    @Override
+    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
+        // @TODO: clearer is better
+        Class<?> paramClass = parameterContext.getParameter().getType();
+        return paramClass == ProducerTemplate.class || paramClass == ConsumerTemplate.class || paramClass == ModelCamelContext.class;
+    }
+
+    @Override
+    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
+        final Class<?> paramClass = parameterContext.getParameter().getType();
+        if (paramClass == ProducerTemplate.class) {
+            // @TODO: Is it safe to use class as store keys
+            return extensionContext.getStore(Namespace.create(CamelTestParameterResolver.class)).get(ProducerTemplate.class);
+        } else if (paramClass == ConsumerTemplate.class) {
+            // @TODO: Is it safe to use class as store keys
+            return extensionContext.getStore(Namespace.create(CamelTestParameterResolver.class)).get(ConsumerTemplate.class);
+        } else if (paramClass == ModelCamelContext.class) {
+            // @TODO: Is it safe to use class as store keys
+            return extensionContext.getStore(Namespace.create(CamelTestParameterResolver.class)).get(ModelCamelContext.class);
+        }
+        final String msgFormat = "Test %s can't receive a parameter of type %s. Expecting Context, ProduderTempate or ConsumerTemplate}";
+        throw new ParameterResolutionException(String.format(msgFormat, extensionContext.getDisplayName(), paramClass.getName()));
+    }
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
new file mode 100644
index 0000000..33987ac
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
@@ -0,0 +1,53 @@
+/*
+ * 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.test.junit5;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.model.ModelCamelContext;
+import org.junit.jupiter.api.Test;
+
+@CamelTest
+public class SimpleMockTest {
+
+    @Test
+    public void testMock(ProducerTemplate template, ModelCamelContext ctx) throws Exception {
+        MockEndpoint mockResult = ctx.getEndpoint("mock:result", MockEndpoint.class);
+        mockResult.expectedBodiesReceived("Hello World");
+        template.sendBody("direct:start", "Hello World");
+        MockEndpoint.assertIsSatisfied(ctx);
+    }
+
+    /* Same test is shorter with junit4
+    @Test
+    public void testMock() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+        template.sendBody("direct:start", "Hello World");
+        assertMockEndpointsSatisfied();
+    }*/
+
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to("mock:result");
+            }
+        };
+    }
+}


[camel] 07/09: CAMEL-13342: Moved further the proof-of-concept for camel-test-spring/CamelSpringTestSupport

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aldettinger pushed a commit to branch CAMEL-13342-JUNIT5-EXPLORATORY
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 15933f8438612eeefd3d276664c26f19e3658cd7
Author: aldettinger <al...@gmail.com>
AuthorDate: Tue Jul 16 18:04:00 2019 +0200

    CAMEL-13342: Moved further the proof-of-concept for camel-test-spring/CamelSpringTestSupport
---
 components/camel-csv/pom.xml                       |  12 +-
 .../csv/CsvDataFormatCustomFactoryTest.java        |  12 +-
 .../CsvDataFormatCustomRecordConverterTest.java    |   7 +-
 .../csv/CsvDataFormatResourceFactoryTest.java      |  12 +-
 .../camel/dataformat/csv/CsvDataFormatTest.java    |  16 +--
 ...svMarshalAutogenColumnsSpringQuoteModeTest.java |   6 +-
 .../csv/CsvMarshalAutogenColumnsSpringTest.java    |   6 +-
 .../dataformat/csv/CsvMarshalCharsetTest.java      |   5 +-
 .../camel/dataformat/csv/CsvMarshalHeaderTest.java |  16 +--
 ...MarshalHeaderWithCustomMarshallFactoryTest.java |  16 +--
 .../csv/CsvMarshalPipeDelimiterSpringTest.java     |   6 +-
 .../csv/CsvMarshalPipeDelimiterTest.java           |   6 +-
 .../camel/dataformat/csv/CsvMarshalTest.java       |   6 +-
 .../dataformat/csv/CsvRecordConvertersTest.java    |  10 +-
 .../camel/dataformat/csv/CsvRouteCharsetTest.java  |   6 +-
 .../apache/camel/dataformat/csv/CsvRouteTest.java  |  29 +++--
 .../csv/CsvUnmarshalMapLineSpringTest.java         |   6 +-
 .../csv/CsvUnmarshalPipeDelimiterSpringTest.java   |   6 +-
 .../csv/CsvUnmarshalPipeDelimiterTest.java         |   6 +-
 .../csv/CsvUnmarshalSkipFirstLineSpringTest.java   |   6 +-
 .../csv/CsvUnmarshalStreamSpringTest.java          |   6 +-
 .../dataformat/csv/CsvUnmarshalStreamTest.java     |   6 +-
 .../csv/CsvUnmarshalTabDelimiterSpringTest.java    |   6 +-
 .../csv/CsvUnmarshalTabDelimiterTest.java          |   6 +-
 .../camel/dataformat/csv/CsvUnmarshalTest.java     |   5 +-
 ...CsvUnmarshalTwoCsvDataFormatConcurrentTest.java |   6 +-
 .../spring/CamelSpringBootJUnit4ClassRunner.java   |  33 -----
 .../CamelSpringDelegatingTestContextLoader.java    | 138 ---------------------
 .../spring/CamelSpringTestContextLoader.java       |   1 -
 .../test/junit5/spring/CamelSpringTestSupport.java |   1 -
 .../junit5/spring/RouteCoverageEventNotifier.java  |   1 -
 ...nterceptSendToEndpointWithLoadbalancerTest.java |   4 +-
 .../test/issues/AdviceWithOnCompletionTest.java    |   4 +-
 .../AdviceWithOnExceptionMultipleIssueTest.java    |   4 +-
 .../test/issues/MockEndpointsAndSkipTest.java      |   4 +-
 35 files changed, 146 insertions(+), 274 deletions(-)

diff --git a/components/camel-csv/pom.xml b/components/camel-csv/pom.xml
index 05f2a94..ffd4ece 100644
--- a/components/camel-csv/pom.xml
+++ b/components/camel-csv/pom.xml
@@ -55,6 +55,13 @@
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-test-spring</artifactId>
+            <exclusions>
+                <!-- proof that junit is no more needed once tests have been migrated -->
+                <exclusion>
+                    <groupId>junit</groupId>
+                    <artifactId>junit</artifactId>
+                </exclusion>
+            </exclusions>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -73,8 +80,9 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest-core</artifactId>
+            <version>2.1</version>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatCustomFactoryTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatCustomFactoryTest.java
index 89c29eb..733deea 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatCustomFactoryTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatCustomFactoryTest.java
@@ -20,9 +20,9 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Assert;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class CsvDataFormatCustomFactoryTest extends CamelSpringTestSupport {
@@ -38,9 +38,9 @@ public class CsvDataFormatCustomFactoryTest extends CamelSpringTestSupport {
         String body = mock.getReceivedExchanges().get(0).getIn().getBody(String.class);
         String[] lines = body.split("\r\n");
 
-        Assert.assertEquals(2, lines.length);
-        Assert.assertEquals("A1:B1:C1", lines[0].trim());
-        Assert.assertEquals("A2:B2:C2", lines[1].trim());
+        Assertions.assertEquals(2, lines.length);
+        Assertions.assertEquals("A1:B1:C1", lines[0].trim());
+        Assertions.assertEquals("A2:B2:C2", lines[1].trim());
     }
 
     private List<List<String>> getData() {
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatCustomRecordConverterTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatCustomRecordConverterTest.java
index 5c80dde..3874828 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatCustomRecordConverterTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatCustomRecordConverterTest.java
@@ -22,11 +22,14 @@ import java.util.stream.Stream;
 
 import org.apache.camel.Message;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
 import org.apache.camel.util.CastUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
 /**
  * Test cases for {@link CsvRecordConverter}.
  */
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatResourceFactoryTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatResourceFactoryTest.java
index c0cce86..0eea8f3 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatResourceFactoryTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatResourceFactoryTest.java
@@ -20,9 +20,9 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Assert;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class CsvDataFormatResourceFactoryTest extends CamelSpringTestSupport {
@@ -38,9 +38,9 @@ public class CsvDataFormatResourceFactoryTest extends CamelSpringTestSupport {
         String body = mock.getReceivedExchanges().get(0).getIn().getBody(String.class);
         String[] lines = body.split("\r\n");
 
-        Assert.assertEquals(2, lines.length);
-        Assert.assertEquals("A1,B1,C1", lines[0].trim());
-        Assert.assertEquals("A2,B2,C2", lines[1].trim());
+        Assertions.assertEquals(2, lines.length);
+        Assertions.assertEquals("A1,B1,C1", lines[0].trim());
+        Assertions.assertEquals("A2,B2,C2", lines[1].trim());
     }
 
     private List<List<String>> getData() {
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatTest.java
index 3312a72..bf42048 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvDataFormatTest.java
@@ -19,14 +19,14 @@ package org.apache.camel.dataformat.csv;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVRecord;
 import org.apache.commons.csv.QuoteMode;
-import org.junit.Test;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * This class tests the creation of the proper {@link org.apache.commons.csv.CSVFormat} based on the properties of
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringQuoteModeTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringQuoteModeTest.java
index 0207696..07d6486 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringQuoteModeTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringQuoteModeTest.java
@@ -23,10 +23,12 @@ import java.util.Map;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 /**
  * Spring based integration test for the <code>CsvDataFormat</code> demonstrating the usage of
  * the <tt>autogenColumns</tt>, <tt>configRef</tt> and <tt>strategyRef</tt> options.
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java
index e7f870a..de0000e 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalAutogenColumnsSpringTest.java
@@ -23,10 +23,12 @@ import java.util.Map;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 /**
  * Spring based integration test for the <code>CsvDataFormat</code> demonstrating the usage of
  * the <tt>autogenColumns</tt>, <tt>configRef</tt> and <tt>strategyRef</tt> options.
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalCharsetTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalCharsetTest.java
index f305173..2317398 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalCharsetTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalCharsetTest.java
@@ -22,9 +22,10 @@ import java.util.List;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
 
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.StringStartsWith.startsWith;
 
 public class CsvMarshalCharsetTest extends CamelTestSupport {
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalHeaderTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalHeaderTest.java
index a5a4e92..04d60c2 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalHeaderTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalHeaderTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.dataformat.csv;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.Collections;
@@ -32,18 +33,19 @@ import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * <b>Camel</b> based test cases for {@link org.apache.camel.dataformat.csv.CsvDataFormat}.
  */
 public class CsvMarshalHeaderTest extends CamelTestSupport {
 
-    @Rule
-    public TemporaryFolder folder = new TemporaryFolder();
+    @TempDir
+    public Path folder;
 
     @Produce("direct:start")
     private ProducerTemplate producerTemplate;
@@ -52,7 +54,7 @@ public class CsvMarshalHeaderTest extends CamelTestSupport {
 
     @Override
     protected void doPreSetup() throws Exception {
-        outputFile = new File(folder.newFolder(), "output.csv");
+        outputFile = new File(folder.toFile(), "output.csv");
     }
 
     @Test
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalHeaderWithCustomMarshallFactoryTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalHeaderWithCustomMarshallFactoryTest.java
index dc30032..66963c2 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalHeaderWithCustomMarshallFactoryTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalHeaderWithCustomMarshallFactoryTest.java
@@ -20,6 +20,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -36,20 +37,21 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.support.ObjectHelper;
-import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.camel.test.junit5.CamelTestSupport;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * <b>Camel</b> based test cases for {@link CsvDataFormat}.
  */
 public class CsvMarshalHeaderWithCustomMarshallFactoryTest extends CamelTestSupport {
 
-    @Rule
-    public TemporaryFolder folder = new TemporaryFolder();
+    @TempDir
+    public Path folder;
 
     @Produce("direct:start")
     private ProducerTemplate producerTemplate;
@@ -58,7 +60,7 @@ public class CsvMarshalHeaderWithCustomMarshallFactoryTest extends CamelTestSupp
 
     @Override
     protected void doPreSetup() throws Exception {
-        outputFile = new File(folder.newFolder(), "output.csv");
+        outputFile = new File(folder.toFile(), "output.csv");
     }
 
     @Test
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalPipeDelimiterSpringTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalPipeDelimiterSpringTest.java
index 70204d8..449dd13 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalPipeDelimiterSpringTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalPipeDelimiterSpringTest.java
@@ -23,10 +23,12 @@ import java.util.Map;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 /**
  * Spring based integration test for the <code>CsvDataFormat</code>
  */
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalPipeDelimiterTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalPipeDelimiterTest.java
index 31f6015..5e75410 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalPipeDelimiterTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalPipeDelimiterTest.java
@@ -24,8 +24,10 @@ import java.util.Map;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class CsvMarshalPipeDelimiterTest extends CamelTestSupport {
 
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalTest.java
index 613bc49..f474d13 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvMarshalTest.java
@@ -23,8 +23,10 @@ import java.util.Map;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 
 /**
  * This class tests standard marshalling
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvRecordConvertersTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvRecordConvertersTest.java
index 8b1d052..e7d385e 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvRecordConvertersTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvRecordConvertersTest.java
@@ -23,11 +23,11 @@ import java.util.Map;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVParser;
 import org.apache.commons.csv.CSVRecord;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * This class tests the common {@link CsvRecordConverter} implementations of
@@ -36,7 +36,7 @@ import static org.junit.Assert.assertNotNull;
 public class CsvRecordConvertersTest {
     private CSVRecord record;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
         CSVFormat format = CSVFormat.DEFAULT.withHeader("A", "B", "C");
         CSVParser parser = new CSVParser(new StringReader("1,2,3"), format);
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvRouteCharsetTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvRouteCharsetTest.java
index 488e0b0..99fcfee 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvRouteCharsetTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvRouteCharsetTest.java
@@ -21,8 +21,10 @@ import java.util.List;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class CsvRouteCharsetTest extends CamelTestSupport {
 
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvRouteTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvRouteTest.java
index 84f7316..29d277f 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvRouteTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvRouteTest.java
@@ -25,11 +25,15 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 public class CsvRouteTest extends CamelTestSupport {
     private static final Logger LOG = LoggerFactory.getLogger(CsvRouteTest.class);
 
@@ -52,12 +56,12 @@ public class CsvRouteTest extends CamelTestSupport {
             String text = in.getBody(String.class);
 
             log.debug("Received " + text);
-            assertNotNull("Should be able to convert received body to a string", text);
+            assertNotNull(text, "Should be able to convert received body to a string");
 
             // order is not guaranteed with a Map (which was passed in before)
             // so we need to check for both combinations
-            assertTrue("Text body has wrong value.", "abc,123".equals(text.trim())
-                    || "123,abc".equals(text.trim()));
+            assertTrue("abc,123".equals(text.trim())
+                    || "123,abc".equals(text.trim()), "Text body has wrong value.");
         }
     }
 
@@ -84,8 +88,7 @@ public class CsvRouteTest extends CamelTestSupport {
         String text1 = in1.getBody(String.class);
 
         log.debug("Received " + text1);
-        assertTrue("First CSV body has wrong value",
-                Pattern.matches("(abc,123)|(123,abc)", text1.trim()));
+        assertTrue(Pattern.matches("(abc,123)|(123,abc)", text1.trim()), "First CSV body has wrong value");
 
         Message in2 = list.get(1).getIn();
         String text2 = in2.getBody(String.class);
@@ -94,11 +97,9 @@ public class CsvRouteTest extends CamelTestSupport {
 
         // fields should keep the same order from one call to the other
         if (text1.trim().equals("abc,123")) {
-            assertEquals("Second CSV body has wrong value",
-                    "def,456,789", text2.trim());
+            assertEquals("def,456,789", text2.trim(), "Second CSV body has wrong value");
         } else {
-            assertEquals("Second CSV body has wrong value",
-                    "456,def,789", text2.trim());
+            assertEquals("456,def,789", text2.trim(), "Second CSV body has wrong value");
         }
     }
 
@@ -125,15 +126,13 @@ public class CsvRouteTest extends CamelTestSupport {
         String text1 = in1.getBody(String.class);
 
         log.debug("Received " + text1);
-        assertEquals("First CSV body has wrong value",
-                "abc;;123", text1.trim());
+        assertEquals("abc;;123", text1.trim(), "First CSV body has wrong value");
 
         Message in2 = list.get(1).getIn();
         String text2 = in2.getBody(String.class);
 
         log.debug("Received " + text2);
-        assertEquals("Second CSV body has wrong value",
-                "def;789;456", text2.trim());
+        assertEquals("def;789;456", text2.trim(), "Second CSV body has wrong value");
 
     }
 
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalMapLineSpringTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalMapLineSpringTest.java
index c917e9a..19e3f70 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalMapLineSpringTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalMapLineSpringTest.java
@@ -21,10 +21,12 @@ import java.util.Map;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 /**
  * Spring based test for the <code>CsvDataFormat</code> demonstrating the usage of
  * the <tt>useMaps</tt> option.
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalPipeDelimiterSpringTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalPipeDelimiterSpringTest.java
index 1e3fe43..519e6a5 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalPipeDelimiterSpringTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalPipeDelimiterSpringTest.java
@@ -20,10 +20,12 @@ import java.util.List;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 /**
  * Spring based integration test for the <code>CsvDataFormat</code>
  */
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalPipeDelimiterTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalPipeDelimiterTest.java
index 9d32149..33a4653 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalPipeDelimiterTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalPipeDelimiterTest.java
@@ -21,8 +21,10 @@ import java.util.List;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Spring based integration test for the <code>CsvDataFormat</code>
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalSkipFirstLineSpringTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalSkipFirstLineSpringTest.java
index 6cb9a32..bbbb8c7 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalSkipFirstLineSpringTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalSkipFirstLineSpringTest.java
@@ -20,10 +20,12 @@ import java.util.List;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 /**
  * Spring based test for the <code>CsvDataFormat</code> demonstrating the usage of
  * the <tt>skipFirstLine</tt> option.
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalStreamSpringTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalStreamSpringTest.java
index 05ee4e3..29fdd43 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalStreamSpringTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalStreamSpringTest.java
@@ -21,11 +21,13 @@ import java.util.List;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 public class CsvUnmarshalStreamSpringTest extends CamelSpringTestSupport {
 
     private static final String CSV_SAMPLE = "A,B,C\r1,2,3\rone,two,three";
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalStreamTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalStreamTest.java
index a18c806..f78ff20 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalStreamTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalStreamTest.java
@@ -25,8 +25,10 @@ import java.util.List;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Spring based integration test for the <code>CsvDataFormat</code>
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTabDelimiterSpringTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTabDelimiterSpringTest.java
index 61de960..1e971fc 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTabDelimiterSpringTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTabDelimiterSpringTest.java
@@ -20,10 +20,12 @@ import java.util.List;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 public class CsvUnmarshalTabDelimiterSpringTest extends CamelSpringTestSupport {
     @EndpointInject("mock:result")
     private MockEndpoint result;
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTabDelimiterTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTabDelimiterTest.java
index 3f848f6..4ff804f 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTabDelimiterTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTabDelimiterTest.java
@@ -21,8 +21,10 @@ import java.util.List;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class CsvUnmarshalTabDelimiterTest extends CamelTestSupport {
 
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTest.java
index 63616cb..d099c64 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTest.java
@@ -26,10 +26,11 @@ import java.util.Map;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
 
 import static org.apache.camel.dataformat.csv.TestUtils.asMap;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * This class tests standard unmarshalling
diff --git a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTwoCsvDataFormatConcurrentTest.java b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTwoCsvDataFormatConcurrentTest.java
index 044cd41..6f45b74 100644
--- a/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTwoCsvDataFormatConcurrentTest.java
+++ b/components/camel-csv/src/test/java/org/apache/camel/dataformat/csv/CsvUnmarshalTwoCsvDataFormatConcurrentTest.java
@@ -21,8 +21,10 @@ import java.util.List;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class CsvUnmarshalTwoCsvDataFormatConcurrentTest extends CamelTestSupport {
 
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootJUnit4ClassRunner.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootJUnit4ClassRunner.java
deleted file mode 100644
index d96c903..0000000
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootJUnit4ClassRunner.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.test.junit5.spring;
-
-import org.junit.runners.model.InitializationError;
-
-/**
- * The class {@link CamelSpringBootJUnit4ClassRunner} has been renamed to {@link CamelSpringBootRunner}
- * which is a shorter and easier to remember name.
- *
- * @deprecated use {@link CamelSpringBootRunner}
- */
-@Deprecated
-public class CamelSpringBootJUnit4ClassRunner extends CamelSpringBootRunner {
-
-    public CamelSpringBootJUnit4ClassRunner(Class<?> clazz) throws InitializationError {
-        super(clazz);
-    }
-}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringDelegatingTestContextLoader.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringDelegatingTestContextLoader.java
deleted file mode 100644
index ce486e5..0000000
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringDelegatingTestContextLoader.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.test.junit5.spring;
-
-import java.lang.reflect.Method;
-
-import org.apache.camel.api.management.JmxSystemPropertyKeys;
-import org.apache.camel.spring.SpringCamelContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.support.BeanDefinitionRegistry;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.AnnotationConfigUtils;
-import org.springframework.test.context.MergedContextConfiguration;
-import org.springframework.test.context.support.DelegatingSmartContextLoader;
-
-/**
- * CamelSpringDelegatingTestContextLoader which fixes issues in Camel's JavaConfigContextLoader. (adds support for Camel's test annotations)
- * <br>
- * <em>This loader can handle either classes or locations for configuring the context.</em>
- * <br>
- * NOTE: This TestContextLoader doesn't support the annotation of ExcludeRoutes now.
- *
- * @deprecated use {@link CamelSpringRunner} or {@link CamelSpringBootRunner} instead.
- */
-@Deprecated
-public class CamelSpringDelegatingTestContextLoader extends DelegatingSmartContextLoader {
-
-    protected final Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Override
-    public ApplicationContext loadContext(MergedContextConfiguration mergedConfig) throws Exception {
-        
-        Class<?> testClass = getTestClass();
-        
-        if (logger.isDebugEnabled()) {
-            logger.debug("Loading ApplicationContext for merged context configuration [{}].", mergedConfig);
-        }
-        
-        // Pre CamelContext(s) instantiation setup
-        CamelAnnotationsHandler.handleDisableJmx(null, testClass);
-
-        try {
-            SpringCamelContext.setNoStart(true);
-            System.setProperty("skipStartingCamelContext", "true");
-            ConfigurableApplicationContext context = (ConfigurableApplicationContext) super.loadContext(mergedConfig);
-            SpringCamelContext.setNoStart(false);
-            System.clearProperty("skipStartingCamelContext");
-            return loadContext(context, testClass);
-        } finally {
-            cleanup(testClass);
-        }
-    }
-
-    /**
-     * Performs the bulk of the Spring application context loading/customization.
-     *
-     * @param context the partially configured context.  The context should have the bean definitions loaded, but nothing else.
-     * @param testClass the test class being executed
-     * @return the initialized (refreshed) Spring application context
-     *
-     * @throws Exception if there is an error during initialization/customization
-     */
-    public ApplicationContext loadContext(ConfigurableApplicationContext context, Class<?> testClass)
-        throws Exception {
-            
-        AnnotationConfigUtils.registerAnnotationConfigProcessors((BeanDefinitionRegistry) context);
-
-        // Post CamelContext(s) instantiation but pre CamelContext(s) start setup
-        CamelAnnotationsHandler.handleRouteCoverage(context, testClass, s -> getTestMethod().getName());
-        CamelAnnotationsHandler.handleProvidesBreakpoint(context, testClass);
-        CamelAnnotationsHandler.handleShutdownTimeout(context, testClass);
-        CamelAnnotationsHandler.handleMockEndpoints(context, testClass);
-        CamelAnnotationsHandler.handleMockEndpointsAndSkip(context, testClass);
-        CamelAnnotationsHandler.handleUseOverridePropertiesWithPropertiesComponent(context, testClass);
-        
-        // CamelContext(s) startup
-        CamelAnnotationsHandler.handleCamelContextStartup(context, testClass);
-        
-        return context;
-    }
-    
-    /**
-     * Cleanup/restore global state to defaults / pre-test values after the test setup
-     * is complete. 
-     * 
-     * @param testClass the test class being executed
-     */
-    protected void cleanup(Class<?> testClass) {
-        SpringCamelContext.setNoStart(false);
-        
-        if (testClass.isAnnotationPresent(DisableJmx.class)) {
-            if (CamelSpringTestHelper.getOriginalJmxDisabled() == null) {
-                System.clearProperty(JmxSystemPropertyKeys.DISABLED);
-            } else {
-                System.setProperty(JmxSystemPropertyKeys.DISABLED,
-                    CamelSpringTestHelper.getOriginalJmxDisabled());
-            }
-        }
-    }
-
-    /**
-     * Returns the class under test in order to enable inspection of annotations while the
-     * Spring context is being created.
-     * 
-     * @return the test class that is being executed
-     * @see CamelSpringTestHelper
-     */
-    protected Class<?> getTestClass() {
-        return CamelSpringTestHelper.getTestClass();
-    }
-
-    /**
-     * Returns the test method under test.
-     *
-     * @return the method that is being executed
-     * @see CamelSpringTestHelper
-     */
-    protected Method getTestMethod() {
-        return CamelSpringTestHelper.getTestMethod();
-    }
-
-}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoader.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoader.java
index 99e52e0..43829e1 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoader.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoader.java
@@ -25,7 +25,6 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.api.management.JmxSystemPropertyKeys;
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestSupport.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestSupport.java
index 839f675..0f89812 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestSupport.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestSupport.java
@@ -21,7 +21,6 @@ import java.util.HashSet;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spring.SpringCamelContext;
 import org.apache.camel.test.ExcludingPackageScanClassResolver;
 import org.apache.camel.test.junit5.CamelTestSupport;
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/RouteCoverageEventNotifier.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/RouteCoverageEventNotifier.java
index 7d7df3d..47c137c 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/RouteCoverageEventNotifier.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/RouteCoverageEventNotifier.java
@@ -20,7 +20,6 @@ import java.util.function.Function;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.spi.CamelEvent;
-import org.apache.camel.spi.CamelEvent.CamelContextEvent;
 import org.apache.camel.spi.CamelEvent.CamelContextStoppingEvent;
 import org.apache.camel.support.EventNotifierSupport;
 
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/AdviceWithInterceptSendToEndpointWithLoadbalancerTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/AdviceWithInterceptSendToEndpointWithLoadbalancerTest.java
index 1456d1d..928849f 100644
--- a/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/AdviceWithInterceptSendToEndpointWithLoadbalancerTest.java
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/AdviceWithInterceptSendToEndpointWithLoadbalancerTest.java
@@ -19,8 +19,8 @@ package org.apache.camel.test.issues;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.reifier.RouteReifier;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/AdviceWithOnCompletionTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/AdviceWithOnCompletionTest.java
index eeae215..3d9e94b 100644
--- a/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/AdviceWithOnCompletionTest.java
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/AdviceWithOnCompletionTest.java
@@ -19,8 +19,8 @@ package org.apache.camel.test.issues;
 import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.reifier.RouteReifier;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/AdviceWithOnExceptionMultipleIssueTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/AdviceWithOnExceptionMultipleIssueTest.java
index a9c7007..9c56e77 100644
--- a/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/AdviceWithOnExceptionMultipleIssueTest.java
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/AdviceWithOnExceptionMultipleIssueTest.java
@@ -20,8 +20,8 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.reifier.RouteReifier;
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/MockEndpointsAndSkipTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/MockEndpointsAndSkipTest.java
index b2dcbff..132b100 100644
--- a/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/MockEndpointsAndSkipTest.java
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/issues/MockEndpointsAndSkipTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.camel.test.issues;
 
-import org.apache.camel.test.spring.CamelSpringTestSupport;
-import org.junit.Test;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 


[camel] 03/09: CAMEL-13342: Added a JUnit 5 version of JUnit 4 test patterns

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aldettinger pushed a commit to branch CAMEL-13342-JUNIT5-EXPLORATORY
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 4ca3f50b3ab671279208c4fc3c1279a8d4ef9833
Author: aldettinger <al...@gmail.com>
AuthorDate: Thu Jun 6 15:27:20 2019 +0200

    CAMEL-13342: Added a JUnit 5 version of JUnit 4 test patterns
---
 .../test/junit5/CamelTestParameterResolver.java    |   16 +
 .../apache/camel/test/junit5/CamelTestSupport.java | 1214 ++++++++++++++++++++
 .../org/apache/camel/test/junit5/TestSupport.java  |  553 +++++++++
 .../junit5/patterns/AdviceWithNotStartedTest.java  |   74 ++
 .../test/junit5/patterns/AsyncSendMockTest.java    |   47 +
 .../test/junit5/patterns/DebugJUnit5Test.java      |   86 ++
 .../patterns/DebugNoLazyTypeConverterTest.java     |   91 ++
 .../camel/test/junit5/patterns/DebugTest.java      |   86 ++
 .../FilterCreateCamelContextPerClassTest.java      |   65 ++
 .../junit5/patterns/FilterFluentTemplateTest.java  |   75 ++
 .../test/junit5/patterns/FilterJUnit5Test.java     |   69 ++
 .../camel/test/junit5/patterns/FilterTest.java     |   75 ++
 .../patterns/IsMockEndpointsAndSkipJUnit5Test.java |   65 ++
 .../junit5/patterns/IsMockEndpointsFileTest.java   |   68 ++
 .../junit5/patterns/IsMockEndpointsJUnit5Test.java |   72 ++
 .../test/junit5/patterns/IsMockEndpointsTest.java  |   65 ++
 .../patterns/MockEndpointFailNoHeaderTest.java     |   63 +
 .../camel/test/junit5/patterns/MyProduceBean.java  |   32 +
 .../camel/test/junit5/patterns/MySender.java       |   25 +
 .../ProduceBeanTest.java}                          |   34 +-
 .../RouteBuilderConfigureExceptionTest.java        |   54 +
 .../RouteProcessorDumpRouteCoverageTest.java}      |   44 +-
 .../SimpleMockEndpointsTest.java}                  |   35 +-
 .../test/junit5/{ => patterns}/SimpleMockTest.java |   27 +-
 .../SimpleMockUsingExtensionTest.java}             |   13 +-
 .../SimpleNotifyBuilderTest.java}                  |   46 +-
 .../SimpleWeaveAddMockLastTest.java}               |   44 +-
 ...rridePropertiesWithPropertiesComponentTest.java |   78 ++
 28 files changed, 3094 insertions(+), 122 deletions(-)

diff --git a/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestParameterResolver.java b/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestParameterResolver.java
index ce58940..21a8d7b 100644
--- a/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestParameterResolver.java
+++ b/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestParameterResolver.java
@@ -1,3 +1,19 @@
+/*
+ * 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.test.junit5;
 
 import org.apache.camel.ConsumerTemplate;
diff --git a/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java b/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java
new file mode 100644
index 0000000..0ff4509
--- /dev/null
+++ b/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java
@@ -0,0 +1,1214 @@
+/*
+ * 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.test.junit5;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+import javax.management.AttributeNotFoundException;
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanException;
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.management.ReflectionException;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ConsumerTemplate;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Expression;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.FluentProducerTemplate;
+import org.apache.camel.Message;
+import org.apache.camel.NamedNode;
+import org.apache.camel.NoSuchEndpointException;
+import org.apache.camel.Predicate;
+import org.apache.camel.Processor;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.Route;
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.Service;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.api.management.JmxSystemPropertyKeys;
+import org.apache.camel.api.management.ManagedCamelContext;
+import org.apache.camel.api.management.mbean.ManagedCamelContextMBean;
+import org.apache.camel.api.management.mbean.ManagedProcessorMBean;
+import org.apache.camel.api.management.mbean.ManagedRouteMBean;
+import org.apache.camel.builder.AdviceWithRouteBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.impl.engine.DefaultCamelBeanPostProcessor;
+import org.apache.camel.impl.engine.InterceptSendToMockEndpointStrategy;
+import org.apache.camel.model.Model;
+import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.processor.interceptor.BreakpointSupport;
+import org.apache.camel.processor.interceptor.DefaultDebugger;
+import org.apache.camel.reifier.RouteReifier;
+import org.apache.camel.spi.Language;
+import org.apache.camel.spi.Registry;
+import org.apache.camel.support.EndpointHelper;
+import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.StopWatch;
+import org.apache.camel.util.StringHelper;
+import org.apache.camel.util.TimeUtils;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
+import org.junit.jupiter.api.extension.BeforeEachCallback;
+import org.junit.jupiter.api.extension.BeforeTestExecutionCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.RegisterExtension;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+/**
+ * A useful base class which creates a {@link org.apache.camel.CamelContext}
+ * with some routes along with a {@link org.apache.camel.ProducerTemplate} for
+ * use in the test case Do <tt>not</tt> use this class for Spring Boot testing,
+ * instead use <code>@RunWith(CamelSpringBootRunner.class)</code>.
+ */
+public class CamelTestSupport extends TestSupport implements BeforeEachCallback, BeforeTestExecutionCallback, AfterTestExecutionCallback {
+
+    /**
+     * JVM system property which can be set to true to turn on dumping route
+     * coverage statistics.
+     */
+    public static final String ROUTE_COVERAGE_ENABLED = "CamelTestRouteCoverage";
+
+    private static final Logger LOG = LoggerFactory.getLogger(CamelTestSupport.class);
+    private static ThreadLocal<ModelCamelContext> threadCamelContext = new ThreadLocal<>();
+    private static ThreadLocal<ProducerTemplate> threadTemplate = new ThreadLocal<>();
+    private static ThreadLocal<FluentProducerTemplate> threadFluentTemplate = new ThreadLocal<>();
+    private static ThreadLocal<ConsumerTemplate> threadConsumer = new ThreadLocal<>();
+    private static ThreadLocal<Service> threadService = new ThreadLocal<>();
+    protected volatile ModelCamelContext context;
+    protected volatile ProducerTemplate template;
+    protected volatile FluentProducerTemplate fluentTemplate;
+    protected volatile ConsumerTemplate consumer;
+    protected volatile Service camelContextService;
+    protected boolean dumpRouteStats;
+    @RegisterExtension
+    protected CamelTestSupport camelTestSupportExtension = this;
+    private boolean useRouteBuilder = true;
+    private final DebugBreakpoint breakpoint = new DebugBreakpoint();
+    private final StopWatch watch = new StopWatch();
+    private final Map<String, String> fromEndpoints = new HashMap<>();
+    private final AtomicInteger tests = new AtomicInteger(0);
+    private String currentTestName;
+
+    @Override
+    public void afterTestExecution(ExtensionContext context) throws Exception {
+        watch.taken();
+    }
+
+    @Override
+    public void beforeTestExecution(ExtensionContext context) throws Exception {
+        watch.restart();
+    }
+
+    public long timeTaken() {
+        return watch.taken();
+    }
+
+    @Override
+    public void beforeEach(ExtensionContext context) throws Exception {
+        currentTestName = context.getDisplayName();
+    }
+
+    /**
+     * Use the RouteBuilder or not
+     * 
+     * @return <tt>true</tt> then {@link CamelContext} will be auto started,
+     *         <tt>false</tt> then {@link CamelContext} will <b>not</b> be auto
+     *         started (you will have to start it manually)
+     */
+    public boolean isUseRouteBuilder() {
+        return useRouteBuilder;
+    }
+
+    public void setUseRouteBuilder(boolean useRouteBuilder) {
+        this.useRouteBuilder = useRouteBuilder;
+    }
+
+    /**
+     * Whether to dump route coverage stats at the end of the test.
+     * <p/>
+     * This allows tooling or manual inspection of the stats, so you can
+     * generate a route trace diagram of which EIPs have been in use and which
+     * have not. Similar concepts as a code coverage report.
+     * <p/>
+     * You can also turn on route coverage globally via setting JVM system
+     * property <tt>CamelTestRouteCoverage=true</tt>.
+     *
+     * @return <tt>true</tt> to write route coverage status in an xml file in
+     *         the <tt>target/camel-route-coverage</tt> directory after the test
+     *         has finished.
+     */
+    public boolean isDumpRouteCoverage() {
+        return false;
+    }
+
+    /**
+     * Override when using
+     * <a href="http://camel.apache.org/advicewith.html">advice with</a> and
+     * return <tt>true</tt>. This helps knowing advice with is to be used, and
+     * {@link CamelContext} will not be started before the advice with takes
+     * place. This helps by ensuring the advice with has been property setup
+     * before the {@link CamelContext} is started
+     * <p/>
+     * <b>Important:</b> Its important to start {@link CamelContext} manually
+     * from the unit test after you are done doing all the advice with.
+     *
+     * @return <tt>true</tt> if you use advice with in your unit tests.
+     */
+    public boolean isUseAdviceWith() {
+        return false;
+    }
+
+    /**
+     * Override to control whether {@link CamelContext} should be setup per test
+     * or per class.
+     * <p/>
+     * By default it will be setup/teardown per test (per test method). If you
+     * want to re-use {@link CamelContext} between test methods you can override
+     * this method and return <tt>true</tt>
+     * <p/>
+     * <b>Important:</b> Use this with care as the {@link CamelContext} will
+     * carry over state from previous tests, such as endpoints, components etc.
+     * So you cannot use this in all your tests.
+     * <p/>
+     * Setting up {@link CamelContext} uses the {@link #doPreSetup()},
+     * {@link #doSetUp()}, and {@link #doPostSetup()} methods in that given
+     * order.
+     *
+     * @return <tt>true</tt> per class, <tt>false</tt> per test.
+     */
+    public boolean isCreateCamelContextPerClass() {
+        return false;
+    }
+
+    /**
+     * Override to enable auto mocking endpoints based on the pattern.
+     * <p/>
+     * Return <tt>*</tt> to mock all endpoints.
+     *
+     * @see EndpointHelper#matchEndpoint(CamelContext, String, String)
+     */
+    public String isMockEndpoints() {
+        return null;
+    }
+
+    /**
+     * Override to enable auto mocking endpoints based on the pattern, and
+     * <b>skip</b> sending to original endpoint.
+     * <p/>
+     * Return <tt>*</tt> to mock all endpoints.
+     *
+     * @see EndpointHelper#matchEndpoint(CamelContext, String, String)
+     */
+    public String isMockEndpointsAndSkip() {
+        return null;
+    }
+
+    public void replaceRouteFromWith(String routeId, String fromEndpoint) {
+        fromEndpoints.put(routeId, fromEndpoint);
+    }
+
+    /**
+     * Used for filtering routes routes matching the given pattern, which
+     * follows the following rules: - Match by route id - Match by route input
+     * endpoint uri The matching is using exact match, by wildcard and regular
+     * expression. For example to only include routes which starts with foo in
+     * their route id's, use: include=foo&#42; And to exclude routes which
+     * starts from JMS endpoints, use: exclude=jms:&#42; Multiple patterns can
+     * be separated by comma, for example to exclude both foo and bar routes,
+     * use: exclude=foo&#42;,bar&#42; Exclude takes precedence over include.
+     */
+    public String getRouteFilterIncludePattern() {
+        return null;
+    }
+
+    /**
+     * Used for filtering routes routes matching the given pattern, which
+     * follows the following rules: - Match by route id - Match by route input
+     * endpoint uri The matching is using exact match, by wildcard and regular
+     * expression. For example to only include routes which starts with foo in
+     * their route id's, use: include=foo&#42; And to exclude routes which
+     * starts from JMS endpoints, use: exclude=jms:&#42; Multiple patterns can
+     * be separated by comma, for example to exclude both foo and bar routes,
+     * use: exclude=foo&#42;,bar&#42; Exclude takes precedence over include.
+     */
+    public String getRouteFilterExcludePattern() {
+        return null;
+    }
+
+    /**
+     * Override to enable debugger
+     * <p/>
+     * Is default <tt>false</tt>
+     */
+    public boolean isUseDebugger() {
+        return false;
+    }
+
+    public Service getCamelContextService() {
+        return camelContextService;
+    }
+
+    public Service camelContextService() {
+        return camelContextService;
+    }
+
+    public CamelContext context() {
+        return context;
+    }
+
+    public ProducerTemplate template() {
+        return template;
+    }
+
+    public FluentProducerTemplate fluentTemplate() {
+        return fluentTemplate;
+    }
+
+    public ConsumerTemplate consumer() {
+        return consumer;
+    }
+
+    /**
+     * Allows a service to be registered a separate lifecycle service to start
+     * and stop the context; such as for Spring when the ApplicationContext is
+     * started and stopped, rather than directly stopping the CamelContext
+     */
+    public void setCamelContextService(Service service) {
+        camelContextService = service;
+        threadService.set(camelContextService);
+    }
+
+    @BeforeEach
+    public void setUp() throws Exception {
+        log.info("********************************************************************************");
+        log.info("Testing: " + currentTestName + "(" + getClass().getName() + ")");
+        log.info("********************************************************************************");
+
+        if (isCreateCamelContextPerClass()) {
+            while (true) {
+                int v = tests.get();
+                if (tests.compareAndSet(v, v + 1)) {
+                    if (v == 0) {
+                        // test is per class, so only setup once (the first
+                        // time)
+                        doSpringBootCheck();
+                        setupResources();
+                        doPreSetup();
+                        doSetUp();
+                        doPostSetup();
+                    } else {
+                        // and in between tests we must do IoC and reset mocks
+                        postProcessTest();
+                        resetMocks();
+                    }
+
+                    break;
+                }
+            }
+        } else {
+            // test is per test so always setup
+            doSpringBootCheck();
+            setupResources();
+            doPreSetup();
+            doSetUp();
+            doPostSetup();
+        }
+
+        // only start timing after all the setup
+        watch.restart();
+    }
+
+    /**
+     * Strategy to perform any pre setup, before {@link CamelContext} is created
+     */
+    protected void doPreSetup() throws Exception {
+        // noop
+    }
+
+    /**
+     * Strategy to perform any post setup after {@link CamelContext} is created
+     */
+    protected void doPostSetup() throws Exception {
+        // noop
+    }
+
+    /**
+     * Detects if this is a Spring-Boot test and throws an exception, as these
+     * base classes is not intended for testing Camel on Spring Boot.
+     */
+    protected void doSpringBootCheck() {
+        boolean springBoot = hasClassAnnotation("org.springframework.boot.test.context.SpringBootTest");
+        if (springBoot) {
+            throw new RuntimeException("Spring Boot detected: The CamelTestSupport/CamelSpringTestSupport class is not intended for Camel testing with Spring Boot."
+                                       + " Prefer to not extend this class, but use @RunWith(CamelSpringBootRunner.class) instead.");
+        }
+    }
+
+    private void doSetUp() throws Exception {
+        log.debug("setUp test");
+        // jmx is enabled if we have configured to use it, or if dump route
+        // coverage is enabled (it requires JMX)
+        boolean jmx = useJmx() || isRouteCoverageEnabled();
+        if (jmx) {
+            enableJMX();
+        } else {
+            disableJMX();
+        }
+
+        context = (ModelCamelContext)createCamelContext();
+        threadCamelContext.set(context);
+
+        assertNotNull(context, "No context found!");
+
+        // add custom beans
+        bindToRegistry(context.getRegistry());
+
+        // reduce default shutdown timeout to avoid waiting for 300 seconds
+        context.getShutdownStrategy().setTimeout(getShutdownTimeout());
+
+        // set debugger if enabled
+        if (isUseDebugger()) {
+            if (context.getStatus().equals(ServiceStatus.Started)) {
+                log.info("Cannot setting the Debugger to the starting CamelContext, stop the CamelContext now.");
+                // we need to stop the context first to setup the debugger
+                context.stop();
+            }
+            context.setDebugger(new DefaultDebugger());
+            context.getDebugger().addBreakpoint(breakpoint);
+            // note: when stopping CamelContext it will automatic remove the
+            // breakpoint
+        }
+
+        template = context.createProducerTemplate();
+        template.start();
+        fluentTemplate = context.createFluentProducerTemplate();
+        fluentTemplate.start();
+        consumer = context.createConsumerTemplate();
+        consumer.start();
+
+        threadTemplate.set(template);
+        threadFluentTemplate.set(fluentTemplate);
+        threadConsumer.set(consumer);
+
+        // enable auto mocking if enabled
+        String pattern = isMockEndpoints();
+        if (pattern != null) {
+            context.adapt(ExtendedCamelContext.class).registerEndpointCallback(new InterceptSendToMockEndpointStrategy(pattern));
+        }
+        pattern = isMockEndpointsAndSkip();
+        if (pattern != null) {
+            context.adapt(ExtendedCamelContext.class).registerEndpointCallback(new InterceptSendToMockEndpointStrategy(pattern, true));
+        }
+
+        // configure properties component (mandatory for testing)
+        PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class);
+        Properties extra = useOverridePropertiesWithPropertiesComponent();
+        if (extra != null && !extra.isEmpty()) {
+            pc.setOverrideProperties(extra);
+        }
+        Boolean ignore = ignoreMissingLocationWithPropertiesComponent();
+        if (ignore != null) {
+            pc.setIgnoreMissingLocation(ignore);
+        }
+
+        String include = getRouteFilterIncludePattern();
+        String exclude = getRouteFilterExcludePattern();
+        if (include != null || exclude != null) {
+            log.info("Route filtering pattern: include={}, exclude={}", include, exclude);
+            context.getExtension(Model.class).setRouteFilterPattern(include, exclude);
+        }
+
+        // prepare for in-between tests
+        postProcessTest();
+
+        if (isUseRouteBuilder()) {
+            RoutesBuilder[] builders = createRouteBuilders();
+            for (RoutesBuilder builder : builders) {
+                log.debug("Using created route builder: " + builder);
+                context.addRoutes(builder);
+            }
+            replaceFromEndpoints();
+            boolean skip = "true".equalsIgnoreCase(System.getProperty("skipStartingCamelContext"));
+            if (skip) {
+                log.info("Skipping starting CamelContext as system property skipStartingCamelContext is set to be true.");
+            } else if (isUseAdviceWith()) {
+                log.info("Skipping starting CamelContext as isUseAdviceWith is set to true.");
+            } else {
+                startCamelContext();
+            }
+        } else {
+            replaceFromEndpoints();
+            log.debug("Using route builder from the created context: " + context);
+        }
+        log.debug("Routing Rules are: " + context.getRoutes());
+
+        assertValidContext(context);
+    }
+
+    private void replaceFromEndpoints() throws Exception {
+        for (final Map.Entry<String, String> entry : fromEndpoints.entrySet()) {
+            RouteReifier.adviceWith(context.getRouteDefinition(entry.getKey()), context, new AdviceWithRouteBuilder() {
+                @Override
+                public void configure() throws Exception {
+                    replaceFromWith(entry.getValue());
+                }
+            });
+        }
+    }
+
+    private boolean isRouteCoverageEnabled() {
+        return System.getProperty(ROUTE_COVERAGE_ENABLED, "false").equalsIgnoreCase("true") || isDumpRouteCoverage();
+    }
+
+    @AfterEach
+    public void tearDown() throws Exception {
+        long time = watch.taken();
+
+        log.info("********************************************************************************");
+        log.info("Testing done: " + currentTestName + "(" + getClass().getName() + ")");
+        log.info("Took: " + TimeUtils.printDuration(time) + " (" + time + " millis)");
+
+        // if we should dump route stats, then write that to a file
+        if (isRouteCoverageEnabled()) {
+            String className = this.getClass().getSimpleName();
+            String dir = "target/camel-route-coverage";
+            String name = className + "-" + StringHelper.before(currentTestName, "(") + ".xml";
+
+            ManagedCamelContext mc = context != null ? context.getExtension(ManagedCamelContext.class) : null;
+            ManagedCamelContextMBean managedCamelContext = mc != null ? mc.getManagedCamelContext() : null;
+            if (managedCamelContext == null) {
+                log.warn("Cannot dump route coverage to file as JMX is not enabled. "
+                         + "Add camel-management-impl JAR as dependency and/or override useJmx() method to enable JMX in the unit test classes.");
+            } else {
+                logCoverageSummary(managedCamelContext);
+
+                String xml = managedCamelContext.dumpRoutesCoverageAsXml();
+                String combined = "<camelRouteCoverage>\n" + gatherTestDetailsAsXml() + xml + "\n</camelRouteCoverage>";
+
+                File file = new File(dir);
+                // ensure dir exists
+                file.mkdirs();
+                file = new File(dir, name);
+
+                log.info("Dumping route coverage to file: {}", file);
+                InputStream is = new ByteArrayInputStream(combined.getBytes());
+                OutputStream os = new FileOutputStream(file, false);
+                IOHelper.copyAndCloseInput(is, os);
+                IOHelper.close(os);
+            }
+        }
+        log.info("********************************************************************************");
+
+        if (isCreateCamelContextPerClass()) {
+            while (true) {
+                int v = tests.get();
+                if (v <= 0) {
+                    LOG.warn("Test already teared down");
+                    break;
+                }
+
+                if (tests.compareAndSet(v, v - 1)) {
+                    if (v == 1) {
+                        LOG.debug("tearDown test");
+                        doStopTemplates(threadConsumer.get(), threadTemplate.get(), threadFluentTemplate.get());
+                        doStopCamelContext(threadCamelContext.get(), threadService.get());
+                        doPostTearDown();
+                        cleanupResources();
+                    }
+
+                    break;
+                }
+            }
+        } else {
+            LOG.debug("tearDown test");
+            doStopTemplates(consumer, template, fluentTemplate);
+            doStopCamelContext(context, camelContextService);
+            doPostTearDown();
+            cleanupResources();
+        }
+    }
+
+    /**
+     * Strategy to perform any post action, after {@link CamelContext} is
+     * stopped
+     */
+    protected void doPostTearDown() throws Exception {
+        // noop
+    }
+
+    /**
+     * Strategy to perform resources setup, before {@link CamelContext} is
+     * created
+     */
+    protected void setupResources() throws Exception {
+        // noop
+    }
+
+    /**
+     * Strategy to perform resources cleanup, after {@link CamelContext} is
+     * stopped
+     */
+    protected void cleanupResources() throws Exception {
+        // noop
+    }
+
+    /**
+     * Logs route coverage summary: - which routes are uncovered - what is the
+     * coverage of each processor in each route
+     */
+    private void logCoverageSummary(ManagedCamelContextMBean managedCamelContext) throws Exception {
+        StringBuilder builder = new StringBuilder("\nCoverage summary\n");
+
+        int routes = managedCamelContext.getTotalRoutes();
+
+        long contextExchangesTotal = managedCamelContext.getExchangesTotal();
+
+        List<String> uncoveredRoutes = new ArrayList<>();
+
+        StringBuilder routesSummary = new StringBuilder();
+        routesSummary.append("\tProcessor coverage\n");
+
+        MBeanServer server = context.getManagementStrategy().getManagementAgent().getMBeanServer();
+
+        Map<String, List<ManagedProcessorMBean>> processorsForRoute = findProcessorsForEachRoute(server);
+
+        // log processor coverage for each route
+        for (Route route : context.getRoutes()) {
+            ManagedRouteMBean managedRoute = context.getExtension(ManagedCamelContext.class).getManagedRoute(route.getId());
+            if (managedRoute.getExchangesTotal() == 0) {
+                uncoveredRoutes.add(route.getId());
+            }
+
+            long routeCoveragePercentage = Math.round((double)managedRoute.getExchangesTotal() / contextExchangesTotal * 100);
+            routesSummary.append("\t\tRoute ").append(route.getId()).append(" total: ").append(managedRoute.getExchangesTotal()).append(" (").append(routeCoveragePercentage)
+                .append("%)\n");
+
+            if (server != null) {
+                List<ManagedProcessorMBean> processors = processorsForRoute.get(route.getId());
+                if (processors != null) {
+                    for (ManagedProcessorMBean managedProcessor : processors) {
+                        String processorId = managedProcessor.getProcessorId();
+                        long processorExchangesTotal = managedProcessor.getExchangesTotal();
+                        long processorCoveragePercentage = Math.round((double)processorExchangesTotal / contextExchangesTotal * 100);
+                        routesSummary.append("\t\t\tProcessor ").append(processorId).append(" total: ").append(processorExchangesTotal).append(" (")
+                            .append(processorCoveragePercentage).append("%)\n");
+                    }
+                }
+            }
+        }
+
+        int used = routes - uncoveredRoutes.size();
+
+        long contextPercentage = Math.round((double)used / routes * 100);
+        builder.append("\tRoute coverage: ").append(used).append(" out of ").append(routes).append(" routes used (").append(contextPercentage).append("%)\n");
+        builder.append("\t\tCamelContext (").append(managedCamelContext.getCamelId()).append(") total: ").append(contextExchangesTotal).append("\n");
+
+        if (uncoveredRoutes.size() > 0) {
+            builder.append("\t\tUncovered routes: ").append(uncoveredRoutes.stream().collect(Collectors.joining(", "))).append("\n");
+        }
+
+        builder.append(routesSummary);
+        log.info(builder.toString());
+    }
+
+    /**
+     * Groups all processors from Camel context by route id
+     */
+    private Map<String, List<ManagedProcessorMBean>> findProcessorsForEachRoute(MBeanServer server)
+        throws MalformedObjectNameException, MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException {
+        String domain = context.getManagementStrategy().getManagementAgent().getMBeanServerDefaultDomain();
+
+        Map<String, List<ManagedProcessorMBean>> processorsForRoute = new HashMap<>();
+
+        ObjectName processorsObjectName = new ObjectName(domain + ":context=" + context.getManagementName() + ",type=processors,name=*");
+        Set<ObjectName> objectNames = server.queryNames(processorsObjectName, null);
+
+        for (ObjectName objectName : objectNames) {
+            String routeId = server.getAttribute(objectName, "RouteId").toString();
+            String name = objectName.getKeyProperty("name");
+            name = ObjectName.unquote(name);
+
+            ManagedProcessorMBean managedProcessor = context.getExtension(ManagedCamelContext.class).getManagedProcessor(name);
+
+            if (managedProcessor != null) {
+                if (processorsForRoute.get(routeId) == null) {
+                    List<ManagedProcessorMBean> processorsList = new ArrayList<>();
+                    processorsList.add(managedProcessor);
+
+                    processorsForRoute.put(routeId, processorsList);
+                } else {
+                    processorsForRoute.get(routeId).add(managedProcessor);
+                }
+            }
+        }
+
+        // sort processors by position in route definition
+        for (Map.Entry<String, List<ManagedProcessorMBean>> entry : processorsForRoute.entrySet()) {
+            Collections.sort(entry.getValue(), Comparator.comparing(ManagedProcessorMBean::getIndex));
+        }
+
+        return processorsForRoute;
+    }
+
+    /**
+     * Gathers test details as xml
+     */
+    private String gatherTestDetailsAsXml() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("<test>\n");
+        sb.append("  <class>").append(getClass().getName()).append("</class>\n");
+        sb.append("  <method>").append(currentTestName).append("</method>\n");
+        sb.append("  <time>").append(timeTaken()).append("</time>\n");
+        sb.append("</test>\n");
+        return sb.toString();
+    }
+
+    /**
+     * Returns the timeout to use when shutting down (unit in seconds).
+     * <p/>
+     * Will default use 10 seconds.
+     *
+     * @return the timeout to use
+     */
+    protected int getShutdownTimeout() {
+        return 10;
+    }
+
+    /**
+     * Whether or not JMX should be used during testing.
+     *
+     * @return <tt>false</tt> by default.
+     */
+    protected boolean useJmx() {
+        return false;
+    }
+
+    /**
+     * Whether or not type converters should be lazy loaded (notice core
+     * converters is always loaded)
+     *
+     * @return <tt>false</tt> by default.
+     */
+    @Deprecated
+    protected boolean isLazyLoadingTypeConverter() {
+        return false;
+    }
+
+    /**
+     * Override this method to include and override properties with the Camel
+     * {@link PropertiesComponent}.
+     *
+     * @return additional properties to add/override.
+     */
+    protected Properties useOverridePropertiesWithPropertiesComponent() {
+        return null;
+    }
+
+    /**
+     * Whether to ignore missing locations with the {@link PropertiesComponent}.
+     * For example when unit testing you may want to ignore locations that are
+     * not available in the environment you use for testing.
+     *
+     * @return <tt>true</tt> to ignore, <tt>false</tt> to not ignore, and
+     *         <tt>null</tt> to leave as configured on the
+     *         {@link PropertiesComponent}
+     */
+    protected Boolean ignoreMissingLocationWithPropertiesComponent() {
+        return null;
+    }
+
+    protected void postProcessTest() throws Exception {
+        context = threadCamelContext.get();
+        template = threadTemplate.get();
+        fluentTemplate = threadFluentTemplate.get();
+        consumer = threadConsumer.get();
+        camelContextService = threadService.get();
+        applyCamelPostProcessor();
+    }
+
+    /**
+     * Applies the {@link DefaultCamelBeanPostProcessor} to this instance.
+     * Derived classes using IoC / DI frameworks may wish to turn this into a
+     * NoOp such as for CDI we would just use CDI to inject this
+     */
+    protected void applyCamelPostProcessor() throws Exception {
+        // use the default bean post processor from camel-core if the test class
+        // is not dependency injected already by Spring
+        boolean spring = hasClassAnnotation("org.springframework.boot.test.context.SpringBootTest", "org.springframework.context.annotation.ComponentScan");
+        if (!spring) {
+            DefaultCamelBeanPostProcessor processor = new DefaultCamelBeanPostProcessor(context);
+            processor.postProcessBeforeInitialization(this, getClass().getName());
+            processor.postProcessAfterInitialization(this, getClass().getName());
+        }
+    }
+
+    /**
+     * Does this test class have any of the following annotations on the
+     * class-level.
+     */
+    protected boolean hasClassAnnotation(String... names) {
+        for (String name : names) {
+            for (Annotation ann : getClass().getAnnotations()) {
+                String annName = ann.annotationType().getName();
+                if (annName.equals(name)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    protected void stopCamelContext() throws Exception {
+        doStopCamelContext(context, camelContextService);
+    }
+
+    private static void doStopCamelContext(CamelContext context, Service camelContextService) throws Exception {
+        if (camelContextService != null) {
+            if (camelContextService == threadService.get()) {
+                threadService.remove();
+            }
+            camelContextService.stop();
+        } else {
+            if (context != null) {
+                if (context == threadCamelContext.get()) {
+                    threadCamelContext.remove();
+                }
+                context.stop();
+            }
+        }
+    }
+
+    private static void doStopTemplates(ConsumerTemplate consumer, ProducerTemplate template, FluentProducerTemplate fluentTemplate) throws Exception {
+        if (consumer != null) {
+            if (consumer == threadConsumer.get()) {
+                threadConsumer.remove();
+            }
+            consumer.stop();
+        }
+        if (template != null) {
+            if (template == threadTemplate.get()) {
+                threadTemplate.remove();
+            }
+            template.stop();
+        }
+        if (fluentTemplate != null) {
+            if (fluentTemplate == threadFluentTemplate.get()) {
+                threadFluentTemplate.remove();
+            }
+            fluentTemplate.stop();
+        }
+    }
+
+    protected void startCamelContext() throws Exception {
+        if (camelContextService != null) {
+            camelContextService.start();
+        } else {
+            if (context instanceof DefaultCamelContext) {
+                DefaultCamelContext defaultCamelContext = (DefaultCamelContext)context;
+                if (!defaultCamelContext.isStarted()) {
+                    defaultCamelContext.start();
+                }
+            } else {
+                context.start();
+            }
+        }
+    }
+
+    protected CamelContext createCamelContext() throws Exception {
+        // for backwards compatibility
+        Registry registry = createRegistry();
+        if (registry instanceof FakeJndiRegistry) {
+            boolean inUse = ((FakeJndiRegistry)registry).isInUse();
+            if (!inUse) {
+                registry = null;
+            }
+        }
+        if (registry != null) {
+            String msg = "createRegistry() from camel-test is deprecated. Use createCamelRegistry if you want to control which registry to use, however"
+                         + " if you need to bind beans to the registry then this is possible already with the bind method on registry,"
+                         + " and there is no need to override this method.";
+            LOG.warn(msg);
+        } else {
+            registry = createCamelRegistry();
+        }
+
+        CamelContext context;
+        if (registry != null) {
+            context = new DefaultCamelContext(registry);
+        } else {
+            context = new DefaultCamelContext();
+        }
+        return context;
+    }
+
+    /**
+     * Allows to bind custom beans to the Camel {@link Registry}.
+     */
+    protected void bindToRegistry(Registry registry) throws Exception {
+        // noop
+    }
+
+    /**
+     * Override to use a custom {@link Registry}. However if you need to bind
+     * beans to the registry then this is possible already with the bind method
+     * on registry," and there is no need to override this method.
+     */
+    protected Registry createCamelRegistry() throws Exception {
+        return null;
+    }
+
+    /**
+     * @deprecated use createCamelRegistry if you want to control which registry
+     *             to use, however if you need to bind beans to the registry
+     *             then this is possible already with the bind method on
+     *             registry, and there is no need to override this method.
+     */
+    @Deprecated
+    protected JndiRegistry createRegistry() throws Exception {
+        return new FakeJndiRegistry(createJndiContext());
+    }
+
+    /**
+     * @deprecated use createCamelRegistry if you want to control which registry
+     *             to use, however if you need to bind beans to the registry
+     *             then this is possible already with the bind method on
+     *             registry, and there is no need to use JndiRegistry and
+     *             override this method.
+     */
+    @Deprecated
+    protected Context createJndiContext() throws Exception {
+        LOG.warn("The method createJndiContext() in camel-test is deprecated. You can bind beans directly from Camel Registry instead");
+        Properties properties = new Properties();
+
+        // jndi.properties is optional
+        InputStream in = getClass().getClassLoader().getResourceAsStream("jndi.properties");
+        if (in != null) {
+            log.debug("Using jndi.properties from classpath root");
+            properties.load(in);
+        } else {
+            properties.put("java.naming.factory.initial", "org.apache.camel.support.jndi.CamelInitialContextFactory");
+        }
+        return new InitialContext(new Hashtable<>(properties));
+    }
+
+    private class FakeJndiRegistry extends JndiRegistry {
+
+        private boolean inUse;
+
+        public FakeJndiRegistry(Context context) {
+            super(context);
+        }
+
+        @Override
+        public void bind(String name, Object object) {
+            super.bind(name, object);
+            inUse = true;
+        }
+
+        public boolean isInUse() {
+            // only if the end user bind beans then its in use
+            return inUse;
+        }
+    }
+
+    /**
+     * Factory method which derived classes can use to create a
+     * {@link RouteBuilder} to define the routes for testing
+     */
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                // no routes added by default
+            }
+        };
+    }
+
+    /**
+     * Factory method which derived classes can use to create an array of
+     * {@link org.apache.camel.builder.RouteBuilder}s to define the routes for
+     * testing
+     *
+     * @see #createRouteBuilder()
+     */
+    protected RoutesBuilder[] createRouteBuilders() throws Exception {
+        return new RoutesBuilder[] {createRouteBuilder()};
+    }
+
+    /**
+     * Resolves a mandatory endpoint for the given URI or an exception is thrown
+     *
+     * @param uri the Camel <a href="">URI</a> to use to create or resolve an
+     *            endpoint
+     * @return the endpoint
+     */
+    protected Endpoint resolveMandatoryEndpoint(String uri) {
+        return resolveMandatoryEndpoint(context, uri);
+    }
+
+    /**
+     * Resolves a mandatory endpoint for the given URI and expected type or an
+     * exception is thrown
+     *
+     * @param uri the Camel <a href="">URI</a> to use to create or resolve an
+     *            endpoint
+     * @return the endpoint
+     */
+    protected <T extends Endpoint> T resolveMandatoryEndpoint(String uri, Class<T> endpointType) {
+        return resolveMandatoryEndpoint(context, uri, endpointType);
+    }
+
+    /**
+     * Resolves the mandatory Mock endpoint using a URI of the form
+     * <code>mock:someName</code>
+     *
+     * @param uri the URI which typically starts with "mock:" and has some name
+     * @return the mandatory mock endpoint or an exception is thrown if it could
+     *         not be resolved
+     */
+    protected MockEndpoint getMockEndpoint(String uri) {
+        return getMockEndpoint(uri, true);
+    }
+
+    /**
+     * Resolves the {@link MockEndpoint} using a URI of the form
+     * <code>mock:someName</code>, optionally creating it if it does not exist.
+     *
+     * @param uri the URI which typically starts with "mock:" and has some name
+     * @param create whether or not to allow the endpoint to be created if it
+     *            doesn't exist
+     * @return the mock endpoint or an {@link NoSuchEndpointException} is thrown
+     *         if it could not be resolved
+     * @throws NoSuchEndpointException is the mock endpoint does not exists
+     */
+    protected MockEndpoint getMockEndpoint(String uri, boolean create) throws NoSuchEndpointException {
+        if (create) {
+            return resolveMandatoryEndpoint(uri, MockEndpoint.class);
+        } else {
+            Endpoint endpoint = context.hasEndpoint(uri);
+            if (endpoint instanceof MockEndpoint) {
+                return (MockEndpoint)endpoint;
+            }
+            throw new NoSuchEndpointException(String.format("MockEndpoint %s does not exist.", uri));
+        }
+    }
+
+    /**
+     * Sends a message to the given endpoint URI with the body value
+     *
+     * @param endpointUri the URI of the endpoint to send to
+     * @param body the body for the message
+     */
+    protected void sendBody(String endpointUri, final Object body) {
+        template.send(endpointUri, new Processor() {
+            public void process(Exchange exchange) {
+                Message in = exchange.getIn();
+                in.setBody(body);
+            }
+        });
+    }
+
+    /**
+     * Sends a message to the given endpoint URI with the body value and
+     * specified headers
+     *
+     * @param endpointUri the URI of the endpoint to send to
+     * @param body the body for the message
+     * @param headers any headers to set on the message
+     */
+    protected void sendBody(String endpointUri, final Object body, final Map<String, Object> headers) {
+        template.send(endpointUri, new Processor() {
+            public void process(Exchange exchange) {
+                Message in = exchange.getIn();
+                in.setBody(body);
+                for (Map.Entry<String, Object> entry : headers.entrySet()) {
+                    in.setHeader(entry.getKey(), entry.getValue());
+                }
+            }
+        });
+    }
+
+    /**
+     * Sends messages to the given endpoint for each of the specified bodies
+     *
+     * @param endpointUri the endpoint URI to send to
+     * @param bodies the bodies to send, one per message
+     */
+    protected void sendBodies(String endpointUri, Object... bodies) {
+        for (Object body : bodies) {
+            sendBody(endpointUri, body);
+        }
+    }
+
+    /**
+     * Creates an exchange with the given body
+     */
+    protected Exchange createExchangeWithBody(Object body) {
+        return createExchangeWithBody(context, body);
+    }
+
+    /**
+     * Asserts that the given language name and expression evaluates to the
+     * given value on a specific exchange
+     */
+    protected void assertExpression(Exchange exchange, String languageName, String expressionText, Object expectedValue) {
+        Language language = assertResolveLanguage(languageName);
+
+        Expression expression = language.createExpression(expressionText);
+        assertNotNull(expression, "No Expression could be created for text: " + expressionText + " language: " + language);
+
+        assertExpression(expression, exchange, expectedValue);
+    }
+
+    /**
+     * Asserts that the given language name and predicate expression evaluates
+     * to the expected value on the message exchange
+     */
+    protected void assertPredicate(String languageName, String expressionText, Exchange exchange, boolean expected) {
+        Language language = assertResolveLanguage(languageName);
+
+        Predicate predicate = language.createPredicate(expressionText);
+        assertNotNull(predicate, "No Predicate could be created for text: " + expressionText + " language: " + language);
+
+        assertPredicate(predicate, exchange, expected);
+    }
+
+    /**
+     * Asserts that the language name can be resolved
+     */
+    protected Language assertResolveLanguage(String languageName) {
+        Language language = context.resolveLanguage(languageName);
+        assertNotNull(language, "No language found for name: " + languageName);
+        return language;
+    }
+
+    /**
+     * Asserts that all the expectations of the Mock endpoints are valid
+     */
+    protected void assertMockEndpointsSatisfied() throws InterruptedException {
+        MockEndpoint.assertIsSatisfied(context);
+    }
+
+    /**
+     * Asserts that all the expectations of the Mock endpoints are valid
+     */
+    protected void assertMockEndpointsSatisfied(long timeout, TimeUnit unit) throws InterruptedException {
+        MockEndpoint.assertIsSatisfied(context, timeout, unit);
+    }
+
+    /**
+     * Reset all Mock endpoints.
+     */
+    protected void resetMocks() {
+        MockEndpoint.resetMocks(context);
+    }
+
+    protected void assertValidContext(CamelContext context) {
+        assertNotNull(context, "No context found!");
+    }
+
+    protected <T extends Endpoint> T getMandatoryEndpoint(String uri, Class<T> type) {
+        T endpoint = context.getEndpoint(uri, type);
+        assertNotNull(endpoint, "No endpoint found for uri: " + uri);
+        return endpoint;
+    }
+
+    protected Endpoint getMandatoryEndpoint(String uri) {
+        Endpoint endpoint = context.getEndpoint(uri);
+        assertNotNull(endpoint, "No endpoint found for uri: " + uri);
+        return endpoint;
+    }
+
+    /**
+     * Disables the JMX agent. Must be called before the {@link #setUp()}
+     * method.
+     */
+    protected void disableJMX() {
+        System.setProperty(JmxSystemPropertyKeys.DISABLED, "true");
+    }
+
+    /**
+     * Enables the JMX agent. Must be called before the {@link #setUp()} method.
+     */
+    protected void enableJMX() {
+        System.setProperty(JmxSystemPropertyKeys.DISABLED, "false");
+    }
+
+    /**
+     * Single step debugs and Camel invokes this method before entering the
+     * given processor
+     */
+    protected void debugBefore(Exchange exchange, Processor processor, ProcessorDefinition<?> definition, String id, String label) {
+    }
+
+    /**
+     * Single step debugs and Camel invokes this method after processing the
+     * given processor
+     */
+    protected void debugAfter(Exchange exchange, Processor processor, ProcessorDefinition<?> definition, String id, String label, long timeTaken) {
+    }
+
+    /**
+     * To easily debug by overriding the <tt>debugBefore</tt> and
+     * <tt>debugAfter</tt> methods.
+     */
+    private class DebugBreakpoint extends BreakpointSupport {
+
+        @Override
+        public void beforeProcess(Exchange exchange, Processor processor, NamedNode definition) {
+            CamelTestSupport.this.debugBefore(exchange, processor, (ProcessorDefinition)definition, definition.getId(), definition.getLabel());
+        }
+
+        @Override
+        public void afterProcess(Exchange exchange, Processor processor, NamedNode definition, long timeTaken) {
+            CamelTestSupport.this.debugAfter(exchange, processor, (ProcessorDefinition)definition, definition.getId(), definition.getLabel(), timeTaken);
+        }
+    }
+
+}
diff --git a/components/camel-test/src/main/java/org/apache/camel/test/junit5/TestSupport.java b/components/camel-test/src/main/java/org/apache/camel/test/junit5/TestSupport.java
new file mode 100644
index 0000000..a24ca42
--- /dev/null
+++ b/components/camel-test/src/main/java/org/apache/camel/test/junit5/TestSupport.java
@@ -0,0 +1,553 @@
+/*
+ * 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.test.junit5;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Expression;
+import org.apache.camel.InvalidPayloadException;
+import org.apache.camel.Message;
+import org.apache.camel.Predicate;
+import org.apache.camel.Route;
+import org.apache.camel.builder.Builder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.builder.ValueBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.support.DefaultExchange;
+import org.apache.camel.support.PredicateAssertHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * A bunch of useful testing methods
+ */
+public abstract class TestSupport {
+
+    protected static final String LS = System.lineSeparator();
+    private static final Logger LOG = LoggerFactory.getLogger(TestSupport.class);
+    protected Logger log = LoggerFactory.getLogger(getClass());
+
+    // Builder methods for expressions used when testing
+    // -------------------------------------------------------------------------
+
+    /**
+     * Returns a value builder for the given header
+     */
+    public static ValueBuilder header(String name) {
+        return Builder.header(name);
+    }
+
+    /**
+     * Returns a value builder for the given property
+     * 
+     * @deprecated use {@link #exchangeProperty(String)}
+     */
+    @Deprecated
+    public static ValueBuilder property(String name) {
+        return Builder.exchangeProperty(name);
+    }
+
+    /**
+     * Returns a value builder for the given exchange property
+     */
+    public static ValueBuilder exchangeProperty(String name) {
+        return Builder.exchangeProperty(name);
+    }
+
+    /**
+     * Returns a predicate and value builder for the inbound body on an exchange
+     */
+    public static ValueBuilder body() {
+        return Builder.body();
+    }
+
+    /**
+     * Returns a predicate and value builder for the inbound message body as a
+     * specific type
+     */
+    public static <T> ValueBuilder bodyAs(Class<T> type) {
+        return Builder.bodyAs(type);
+    }
+
+    /**
+     * Returns a value builder for the given system property
+     */
+    public static ValueBuilder systemProperty(String name) {
+        return Builder.systemProperty(name);
+    }
+
+    /**
+     * Returns a value builder for the given system property
+     */
+    public static ValueBuilder systemProperty(String name, String defaultValue) {
+        return Builder.systemProperty(name, defaultValue);
+    }
+
+    // Assertions
+    // -----------------------------------------------------------------------
+
+    public static <T> T assertIsInstanceOf(Class<T> expectedType, Object value) {
+        assertNotNull(value, "Expected an instance of type: " + expectedType.getName() + " but was null");
+        assertTrue(expectedType.isInstance(value), "Object should be of type " + expectedType.getName() + " but was: " + value + " with the type: " + value.getClass().getName());
+        return expectedType.cast(value);
+    }
+
+    public static void assertEndpointUri(Endpoint endpoint, String uri) {
+        assertNotNull(endpoint, "Endpoint is null when expecting endpoint for: " + uri);
+        assertEquals(uri, endpoint.getEndpointUri(), "Endpoint uri for: " + endpoint);
+    }
+
+    /**
+     * Asserts the In message on the exchange contains the expected value
+     */
+    public static Object assertInMessageHeader(Exchange exchange, String name, Object expected) {
+        return assertMessageHeader(exchange.getIn(), name, expected);
+    }
+
+    /**
+     * Asserts the Out message on the exchange contains the expected value
+     */
+    public static Object assertOutMessageHeader(Exchange exchange, String name, Object expected) {
+        return assertMessageHeader(exchange.getOut(), name, expected);
+    }
+
+    /**
+     * Asserts that the given exchange has an OUT message of the given body
+     * value
+     *
+     * @param exchange the exchange which should have an OUT message
+     * @param expected the expected value of the OUT message
+     * @throws InvalidPayloadException is thrown if the payload is not the
+     *             expected class type
+     */
+    public static void assertInMessageBodyEquals(Exchange exchange, Object expected) throws InvalidPayloadException {
+        assertNotNull(exchange, "Should have a response exchange!");
+
+        Object actual;
+        if (expected == null) {
+            actual = exchange.getIn().getMandatoryBody();
+            assertEquals(expected, actual, "in body of: " + exchange);
+        } else {
+            actual = exchange.getIn().getMandatoryBody(expected.getClass());
+        }
+        assertEquals(expected, actual, "in body of: " + exchange);
+
+        LOG.debug("Received response: " + exchange + " with in: " + exchange.getIn());
+    }
+
+    /**
+     * Asserts that the given exchange has an OUT message of the given body
+     * value
+     *
+     * @param exchange the exchange which should have an OUT message
+     * @param expected the expected value of the OUT message
+     * @throws InvalidPayloadException is thrown if the payload is not the
+     *             expected class type
+     */
+    public static void assertOutMessageBodyEquals(Exchange exchange, Object expected) throws InvalidPayloadException {
+        assertNotNull(exchange, "Should have a response exchange!");
+
+        Object actual;
+        if (expected == null) {
+            actual = exchange.getOut().getMandatoryBody();
+            assertEquals(expected, actual, "output body of: " + exchange);
+        } else {
+            actual = exchange.getOut().getMandatoryBody(expected.getClass());
+        }
+        assertEquals(expected, actual, "output body of: " + exchange);
+
+        LOG.debug("Received response: " + exchange + " with out: " + exchange.getOut());
+    }
+
+    public static Object assertMessageHeader(Message message, String name, Object expected) {
+        Object value = message.getHeader(name);
+        assertEquals(expected, value, "Header: " + name + " on Message: " + message);
+        return value;
+    }
+
+    /**
+     * Asserts that the given expression when evaluated returns the given answer
+     */
+    public static Object assertExpression(Expression expression, Exchange exchange, Object expected) {
+        Object value;
+        if (expected != null) {
+            value = expression.evaluate(exchange, expected.getClass());
+        } else {
+            value = expression.evaluate(exchange, Object.class);
+        }
+
+        LOG.debug("Evaluated expression: " + expression + " on exchange: " + exchange + " result: " + value);
+
+        assertEquals(expected, value, "Expression: " + expression + " on Exchange: " + exchange);
+        return value;
+    }
+
+    /**
+     * Asserts that the predicate returns the expected value on the exchange
+     */
+    public static void assertPredicateMatches(Predicate predicate, Exchange exchange) {
+        assertPredicate(predicate, exchange, true);
+    }
+
+    /**
+     * Asserts that the predicate returns the expected value on the exchange
+     */
+    public static void assertPredicateDoesNotMatch(Predicate predicate, Exchange exchange) {
+        try {
+            PredicateAssertHelper.assertMatches(predicate, "Predicate should match: ", exchange);
+        } catch (AssertionError e) {
+            LOG.debug("Caught expected assertion error: " + e);
+        }
+        assertPredicate(predicate, exchange, false);
+    }
+
+    /**
+     * Asserts that the predicate returns the expected value on the exchange
+     */
+    public static boolean assertPredicate(final Predicate predicate, Exchange exchange, boolean expected) {
+        if (expected) {
+            PredicateAssertHelper.assertMatches(predicate, "Predicate failed: ", exchange);
+        }
+        boolean value = predicate.matches(exchange);
+
+        LOG.debug("Evaluated predicate: " + predicate + " on exchange: " + exchange + " result: " + value);
+
+        assertEquals(expected, value, "Predicate: " + predicate + " on Exchange: " + exchange);
+        return value;
+    }
+
+    /**
+     * Resolves an endpoint and asserts that it is found
+     */
+    public static Endpoint resolveMandatoryEndpoint(CamelContext context, String uri) {
+        Endpoint endpoint = context.getEndpoint(uri);
+
+        assertNotNull(endpoint, "No endpoint found for URI: " + uri);
+
+        return endpoint;
+    }
+
+    /**
+     * Resolves an endpoint and asserts that it is found
+     */
+    public static <T extends Endpoint> T resolveMandatoryEndpoint(CamelContext context, String uri, Class<T> endpointType) {
+        T endpoint = context.getEndpoint(uri, endpointType);
+
+        assertNotNull(endpoint, "No endpoint found for URI: " + uri);
+
+        return endpoint;
+    }
+
+    /**
+     * Creates an exchange with the given body
+     */
+    protected Exchange createExchangeWithBody(CamelContext camelContext, Object body) {
+        Exchange exchange = new DefaultExchange(camelContext);
+        Message message = exchange.getIn();
+        message.setHeader("testClass", getClass().getName());
+        message.setBody(body);
+        return exchange;
+    }
+
+    public static <T> T assertOneElement(List<T> list) {
+        assertEquals(1, list.size(), "Size of list should be 1: " + list);
+        return list.get(0);
+    }
+
+    /**
+     * Asserts that a list is of the given size
+     */
+    public static <T> List<T> assertListSize(List<T> list, int size) {
+        return assertListSize("List", list, size);
+    }
+
+    /**
+     * Asserts that a list is of the given size
+     */
+    public static <T> List<T> assertListSize(String message, List<T> list, int size) {
+        assertEquals(size, list.size(), message + " should be of size: " + size + " but is: " + list);
+        return list;
+    }
+
+    /**
+     * Asserts that a list is of the given size
+     */
+    public static <T> Collection<T> assertCollectionSize(Collection<T> list, int size) {
+        return assertCollectionSize("List", list, size);
+    }
+
+    /**
+     * Asserts that a list is of the given size
+     */
+    public static <T> Collection<T> assertCollectionSize(String message, Collection<T> list, int size) {
+        assertEquals(size, list.size(), message + " should be of size: " + size + " but is: " + list);
+        return list;
+    }
+
+    /**
+     * A helper method to create a list of Route objects for a given route
+     * builder
+     */
+    public static List<Route> getRouteList(RouteBuilder builder) throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        context.addRoutes(builder);
+        context.start();
+        List<Route> answer = context.getRoutes();
+        context.stop();
+        return answer;
+    }
+
+    /**
+     * Asserts that the text contains the given string
+     *
+     * @param text the text to compare
+     * @param containedText the text which must be contained inside the other
+     *            text parameter
+     */
+    public static void assertStringContains(String text, String containedText) {
+        assertNotNull("Text should not be null!", text);
+        assertTrue(text.contains(containedText), "Text: " + text + " does not contain: " + containedText);
+    }
+
+    /**
+     * Recursively delete a directory, useful to zapping test data
+     *
+     * @param file the directory to be deleted
+     * @return <tt>false</tt> if error deleting directory
+     */
+    public static boolean deleteDirectory(String file) {
+        return deleteDirectory(new File(file));
+    }
+
+    /**
+     * Recursively delete a directory, useful to zapping test data
+     *
+     * @param file the directory to be deleted
+     * @return <tt>false</tt> if error deleting directory
+     */
+    public static boolean deleteDirectory(File file) {
+        int tries = 0;
+        int maxTries = 5;
+        boolean exists = true;
+        while (exists && (tries < maxTries)) {
+            recursivelyDeleteDirectory(file);
+            tries++;
+            exists = file.exists();
+            if (exists) {
+                try {
+                    Thread.sleep(1000);
+                } catch (InterruptedException e) {
+                    // Ignore
+                }
+            }
+        }
+        return !exists;
+    }
+
+    private static void recursivelyDeleteDirectory(File file) {
+        if (!file.exists()) {
+            return;
+        }
+
+        if (file.isDirectory()) {
+            File[] files = file.listFiles();
+            for (File child : files) {
+                recursivelyDeleteDirectory(child);
+            }
+        }
+        boolean success = file.delete();
+        if (!success) {
+            LOG.warn("Deletion of file: " + file.getAbsolutePath() + " failed");
+        }
+    }
+
+    /**
+     * create the directory
+     *
+     * @param file the directory to be created
+     */
+    public static void createDirectory(String file) {
+        File dir = new File(file);
+        dir.mkdirs();
+    }
+
+    /**
+     * To be used for folder/directory comparison that works across different
+     * platforms such as Window, Mac and Linux.
+     */
+    public static void assertDirectoryEquals(String expected, String actual) {
+        assertDirectoryEquals(null, expected, actual);
+    }
+
+    /**
+     * To be used for folder/directory comparison that works across different
+     * platforms such as Window, Mac and Linux.
+     */
+    public static void assertDirectoryEquals(String message, String expected, String actual) {
+        // must use single / as path separators
+        String expectedPath = expected.replace('\\', '/');
+        String actualPath = actual.replace('\\', '/');
+
+        if (message != null) {
+            assertEquals(message, expectedPath, actualPath);
+        } else {
+            assertEquals(expectedPath, actualPath);
+        }
+    }
+
+    /**
+     * To be used to check is a directory is found in the file system
+     */
+    public static void assertDirectoryExists(String filename) {
+        File file = new File(filename);
+        assertTrue(file.exists(), "Directory " + filename + " should exist");
+        assertTrue(file.isDirectory(), "Directory " + filename + " should be a directory");
+    }
+
+    /**
+     * To be used to check is a file is found in the file system
+     */
+    public static void assertFileExists(String filename) {
+        File file = new File(filename);
+        assertTrue(file.exists(), "File " + filename + " should exist");
+        assertTrue(file.isFile(), "File " + filename + " should be a file");
+    }
+
+    /**
+     * To be used to check is a file is <b>not</b> found in the file system
+     */
+    public static void assertFileNotExists(String filename) {
+        File file = new File(filename);
+        assertFalse(file.exists(), "File " + filename + " should not exist");
+    }
+
+    /**
+     * Is this OS the given platform.
+     * <p/>
+     * Uses <tt>os.name</tt> from the system properties to determine the OS.
+     *
+     * @param platform such as Windows
+     * @return <tt>true</tt> if its that platform.
+     */
+    public static boolean isPlatform(String platform) {
+        String osName = System.getProperty("os.name").toLowerCase(Locale.US);
+        return osName.contains(platform.toLowerCase(Locale.US));
+    }
+
+    /**
+     * Is this Java by the given vendor.
+     * <p/>
+     * Uses <tt>java.vendor</tt> from the system properties to determine the
+     * vendor.
+     *
+     * @param vendor such as IBM
+     * @return <tt>true</tt> if its that vendor.
+     */
+    public static boolean isJavaVendor(String vendor) {
+        String javaVendor = System.getProperty("java.vendor").toLowerCase(Locale.US);
+        return javaVendor.contains(vendor.toLowerCase(Locale.US));
+    }
+
+    /**
+     * Is this Java 1.5
+     *
+     * @return <tt>true</tt> if its Java 1.5, <tt>false</tt> if its not (for
+     *         example Java 1.6 or better)
+     * @deprecated will be removed in the future as Camel requires JDK1.8+
+     */
+    @Deprecated
+    public static boolean isJava15() {
+        return getJavaMajorVersion() == 5;
+    }
+
+    /**
+     * Is this Java 1.6
+     *
+     * @return <tt>true</tt> if its Java 1.6, <tt>false</tt> if its not (for
+     *         example Java 1.7 or better)
+     * @deprecated will be removed in the future as Camel requires JDK1.8+
+     */
+    @Deprecated
+    public static boolean isJava16() {
+        return getJavaMajorVersion() == 6;
+
+    }
+
+    /**
+     * Is this Java 1.7
+     *
+     * @return <tt>true</tt> if its Java 1.7, <tt>false</tt> if its not (for
+     *         example Java 1.6 or older)
+     * @deprecated will be removed in the future as Camel requires JDK1.8+
+     */
+    @Deprecated
+    public static boolean isJava17() {
+        return getJavaMajorVersion() == 7;
+
+    }
+
+    /**
+     * Is this Java 1.8
+     *
+     * @return <tt>true</tt> if its Java 1.8, <tt>false</tt> if its not (for
+     *         example Java 1.7 or older)
+     */
+    public static boolean isJava18() {
+        return getJavaMajorVersion() == 8;
+
+    }
+
+    /**
+     * Is this Java 1.9
+     *
+     * @return <tt>true</tt> if its Java 1.9, <tt>false</tt> if its not (for
+     *         example Java 1.8 or older)
+     */
+    public static boolean isJava19() {
+        return getJavaMajorVersion() == 9;
+
+    }
+
+    /**
+     * Returns the current major Java version e.g 8.
+     * <p/>
+     * Uses <tt>java.specification.version</tt> from the system properties to
+     * determine the major version.
+     * 
+     * @return the current major Java version.
+     */
+    public static int getJavaMajorVersion() {
+        String javaSpecVersion = System.getProperty("java.specification.version");
+        if (javaSpecVersion.contains(".")) { // before jdk 9
+            return Integer.parseInt(javaSpecVersion.split("\\.")[1]);
+        } else {
+            return Integer.parseInt(javaSpecVersion);
+        }
+    }
+
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/AdviceWithNotStartedTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/AdviceWithNotStartedTest.java
new file mode 100644
index 0000000..55e0a54
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/AdviceWithNotStartedTest.java
@@ -0,0 +1,74 @@
+/*
+ * 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.test.junit5.patterns;
+
+import java.util.concurrent.RejectedExecutionException;
+
+import org.apache.camel.CamelExecutionException;
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.AdviceWithRouteBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.reifier.RouteReifier;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.fail;
+
+public class AdviceWithNotStartedTest extends CamelTestSupport {
+
+    @Override
+    public boolean isUseAdviceWith() {
+        return true;
+    }
+
+    @Test
+    public void testNotStarted() throws Exception {
+        RouteReifier.adviceWith(context.getRouteDefinition("foo"), context, new AdviceWithRouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                weaveAddLast().to("mock:result");
+            }
+        });
+
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+
+        try {
+            template.sendBody("direct:start", "Hello World");
+            fail("Should throw exception");
+        } catch (CamelExecutionException e) {
+            assertIsInstanceOf(RejectedExecutionException.class, e.getCause());
+        }
+
+        // start Camel
+        context.start();
+
+        template.sendBody("direct:start", "Bye World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").routeId("foo")
+                        .to("log:foo");
+            }
+        };
+    }
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/AsyncSendMockTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/AsyncSendMockTest.java
new file mode 100644
index 0000000..f1f8ca9
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/AsyncSendMockTest.java
@@ -0,0 +1,47 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.support.DefaultExchange;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class AsyncSendMockTest extends CamelTestSupport {
+    @Override
+    public String isMockEndpoints() {
+        return "seda*";
+    }
+
+    @Test
+    public void testmakeAsyncApiCall() {
+        try {
+            getMockEndpoint("mock:seda:start").expectedHeaderReceived("username", "admin123");
+            getMockEndpoint("mock:seda:start").expectedBodiesReceived("Hello");
+            DefaultExchange dfex = new DefaultExchange(context);
+            dfex.getIn().setHeader("username", "admin123");
+            dfex.getIn().setHeader("password", "admin");
+            dfex.getIn().setBody("Hello");
+            template.asyncSend("seda:start", dfex);
+            assertMockEndpointsSatisfied();
+        } catch (Exception e) {
+            e.printStackTrace();
+            assertTrue(false, "Failed to make async call to api");
+        }
+    }
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/DebugJUnit5Test.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/DebugJUnit5Test.java
new file mode 100644
index 0000000..0d6c600
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/DebugJUnit5Test.java
@@ -0,0 +1,86 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+public class DebugJUnit5Test extends CamelTestSupport {
+
+    // START SNIPPET: e1
+    @Override
+    public boolean isUseDebugger() {
+        // must enable debugger
+        return true;
+    }
+
+    @Override
+    protected void debugBefore(Exchange exchange, Processor processor,
+                               ProcessorDefinition<?> definition, String id, String shortName) {
+        // this method is invoked before we are about to enter the given processor
+        // from your Java editor you can just add a breakpoint in the code line below
+        log.info("Before " + definition + " with body " + exchange.getIn().getBody());
+    }
+    // END SNIPPET: e1
+
+    @Test
+    public void testDebugger() throws Exception {
+        // set mock expectations
+        getMockEndpoint("mock:a").expectedMessageCount(1);
+        getMockEndpoint("mock:b").expectedMessageCount(1);
+
+        // send a message
+        template.sendBody("direct:start", "World");
+
+        // assert mocks
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testTwo() throws Exception {
+        // set mock expectations
+        getMockEndpoint("mock:a").expectedMessageCount(2);
+        getMockEndpoint("mock:b").expectedMessageCount(2);
+
+        // send a message
+        template.sendBody("direct:start", "World");
+        template.sendBody("direct:start", "Camel");
+
+        // assert mocks
+        assertMockEndpointsSatisfied();
+    }
+
+    // START SNIPPET: e2
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                // this is the route we want to debug
+                from("direct:start")
+                    .to("mock:a")
+                    .transform(body().prepend("Hello "))
+                    .to("mock:b");
+            }
+        };
+    }
+    // END SNIPPET: e2
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/DebugNoLazyTypeConverterTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/DebugNoLazyTypeConverterTest.java
new file mode 100644
index 0000000..0aac087
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/DebugNoLazyTypeConverterTest.java
@@ -0,0 +1,91 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+public class DebugNoLazyTypeConverterTest extends CamelTestSupport {
+
+    @Override
+    protected boolean isLazyLoadingTypeConverter() {
+        return false;
+    }
+
+    // START SNIPPET: e1
+    @Override
+    public boolean isUseDebugger() {
+        // must enable debugger
+        return true;
+    }
+
+    @Override
+    protected void debugBefore(Exchange exchange, Processor processor,
+                               ProcessorDefinition<?> definition, String id, String shortName) {
+        // this method is invoked before we are about to enter the given processor
+        // from your Java editor you can just add a breakpoint in the code line below
+        log.info("Before " + definition + " with body " + exchange.getIn().getBody());
+    }
+    // END SNIPPET: e1
+
+    @Test
+    public void testDebugger() throws Exception {
+        // set mock expectations
+        getMockEndpoint("mock:a").expectedMessageCount(1);
+        getMockEndpoint("mock:b").expectedMessageCount(1);
+
+        // send a message
+        template.sendBody("direct:start", "World");
+
+        // assert mocks
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testTwo() throws Exception {
+        // set mock expectations
+        getMockEndpoint("mock:a").expectedMessageCount(2);
+        getMockEndpoint("mock:b").expectedMessageCount(2);
+
+        // send a message
+        template.sendBody("direct:start", "World");
+        template.sendBody("direct:start", "Camel");
+
+        // assert mocks
+        assertMockEndpointsSatisfied();
+    }
+
+    // START SNIPPET: e2
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                // this is the route we want to debug
+                from("direct:start")
+                    .to("mock:a")
+                    .transform(body().prepend("Hello "))
+                    .to("mock:b");
+            }
+        };
+    }
+    // END SNIPPET: e2
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/DebugTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/DebugTest.java
new file mode 100644
index 0000000..401bdac
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/DebugTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+public class DebugTest extends CamelTestSupport {
+
+    // START SNIPPET: e1
+    @Override
+    public boolean isUseDebugger() {
+        // must enable debugger
+        return true;
+    }
+
+    @Override
+    protected void debugBefore(Exchange exchange, Processor processor,
+                               ProcessorDefinition<?> definition, String id, String shortName) {
+        // this method is invoked before we are about to enter the given processor
+        // from your Java editor you can just add a breakpoint in the code line below
+        log.info("Before " + definition + " with body " + exchange.getIn().getBody());
+    }
+    // END SNIPPET: e1
+
+    @Test
+    public void testDebugger() throws Exception {
+        // set mock expectations
+        getMockEndpoint("mock:a").expectedMessageCount(1);
+        getMockEndpoint("mock:b").expectedMessageCount(1);
+
+        // send a message
+        template.sendBody("direct:start", "World");
+
+        // assert mocks
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testTwo() throws Exception {
+        // set mock expectations
+        getMockEndpoint("mock:a").expectedMessageCount(2);
+        getMockEndpoint("mock:b").expectedMessageCount(2);
+
+        // send a message
+        template.sendBody("direct:start", "World");
+        template.sendBody("direct:start", "Camel");
+
+        // assert mocks
+        assertMockEndpointsSatisfied();
+    }
+
+    // START SNIPPET: e2
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                // this is the route we want to debug
+                from("direct:start")
+                    .to("mock:a")
+                    .transform(body().prepend("Hello "))
+                    .to("mock:b");
+            }
+        };
+    }
+    // END SNIPPET: e2
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/FilterCreateCamelContextPerClassTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/FilterCreateCamelContextPerClassTest.java
new file mode 100644
index 0000000..37144bc
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/FilterCreateCamelContextPerClassTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests filtering using Camel Test
+ */
+// START SNIPPET: example
+public class FilterCreateCamelContextPerClassTest extends CamelTestSupport {
+
+    @Override
+    public boolean isCreateCamelContextPerClass() {
+        // we override this method and return true, to tell Camel test-kit that
+        // it should only create CamelContext once (per class), so we will
+        // re-use the CamelContext between each test method in this class
+        return true;
+    }
+
+    @Test
+    public void testSendMatchingMessage() throws Exception {
+        String expectedBody = "<matched/>";
+
+        getMockEndpoint("mock:result").expectedBodiesReceived(expectedBody);
+
+        template.sendBodyAndHeader("direct:start", expectedBody, "foo", "bar");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Test
+    public void testSendNotMatchingMessage() throws Exception {
+        getMockEndpoint("mock:result").expectedMessageCount(0);
+
+        template.sendBodyAndHeader("direct:start", "<notMatched/>", "foo", "notMatchedHeaderValue");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                from("direct:start").filter(header("foo").isEqualTo("bar")).to("mock:result");
+            }
+        };
+    }
+}
\ No newline at end of file
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/FilterFluentTemplateTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/FilterFluentTemplateTest.java
new file mode 100644
index 0000000..e4cef04
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/FilterFluentTemplateTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.FluentProducerTemplate;
+import org.apache.camel.Produce;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests filtering using Camel Test
+ */
+// START SNIPPET: example
+// tag::example[]
+public class FilterFluentTemplateTest extends CamelTestSupport {
+
+    @EndpointInject("mock:result")
+    protected MockEndpoint resultEndpoint;
+
+    @Produce("direct:start")
+    protected FluentProducerTemplate fluentTemplate;
+
+    @Override
+    public boolean isDumpRouteCoverage() {
+        return true;
+    }
+
+    @Test
+    public void testSendMatchingMessage() throws Exception {
+        String expectedBody = "<matched/>";
+
+        resultEndpoint.expectedBodiesReceived(expectedBody);
+
+        fluentTemplate.withBody(expectedBody).withHeader("foo", "bar").send();
+
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testSendNotMatchingMessage() throws Exception {
+        resultEndpoint.expectedMessageCount(0);
+
+        fluentTemplate.withBody("<notMatched/>").withHeader("foo", "notMatchedHeaderValue").send();
+
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                from("direct:start").filter(header("foo").isEqualTo("bar")).to("mock:result");
+            }
+        };
+    }
+}
+// end::example[]
+// END SNIPPET: example
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/FilterJUnit5Test.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/FilterJUnit5Test.java
new file mode 100644
index 0000000..e946d6b
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/FilterJUnit5Test.java
@@ -0,0 +1,69 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests filtering using Camel Test
+ */
+// START SNIPPET: example
+public class FilterJUnit5Test extends CamelTestSupport {
+
+    @EndpointInject("mock:result")
+    protected MockEndpoint resultEndpoint;
+
+    @Produce("direct:start")
+    protected ProducerTemplate template;
+
+    @Test
+    public void testSendMatchingMessage() throws Exception {
+        String expectedBody = "<matched/>";
+
+        resultEndpoint.expectedBodiesReceived(expectedBody);
+
+        template.sendBodyAndHeader(expectedBody, "foo", "bar");
+
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testSendNotMatchingMessage() throws Exception {
+        resultEndpoint.expectedMessageCount(0);
+
+        template.sendBodyAndHeader("<notMatched/>", "foo", "notMatchedHeaderValue");
+
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                from("direct:start").filter(header("foo").isEqualTo("bar")).to("mock:result");
+            }
+        };
+    }
+
+}
+// END SNIPPET: example
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/FilterTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/FilterTest.java
new file mode 100644
index 0000000..a2455ce
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/FilterTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests filtering using Camel Test
+ */
+// START SNIPPET: example
+// tag::example[]
+public class FilterTest extends CamelTestSupport {
+
+    @EndpointInject("mock:result")
+    protected MockEndpoint resultEndpoint;
+
+    @Produce("direct:start")
+    protected ProducerTemplate template;
+
+    @Override
+    public boolean isDumpRouteCoverage() {
+        return true;
+    }
+
+    @Test
+    public void testSendMatchingMessage() throws Exception {
+        String expectedBody = "<matched/>";
+
+        resultEndpoint.expectedBodiesReceived(expectedBody);
+
+        template.sendBodyAndHeader(expectedBody, "foo", "bar");
+
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testSendNotMatchingMessage() throws Exception {
+        resultEndpoint.expectedMessageCount(0);
+
+        template.sendBodyAndHeader("<notMatched/>", "foo", "notMatchedHeaderValue");
+
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                from("direct:start").filter(header("foo").isEqualTo("bar")).to("mock:result");
+            }
+        };
+    }
+}
+// end::example[]
+// END SNIPPET: example
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/IsMockEndpointsAndSkipJUnit5Test.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/IsMockEndpointsAndSkipJUnit5Test.java
new file mode 100644
index 0000000..11c4bea
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/IsMockEndpointsAndSkipJUnit5Test.java
@@ -0,0 +1,65 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.seda.SedaEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+// START SNIPPET: e1
+// tag::e1[]
+public class IsMockEndpointsAndSkipJUnit5Test extends CamelTestSupport {
+
+    @Override
+    public String isMockEndpointsAndSkip() {
+        // override this method and return the pattern for which endpoints to mock,
+        // and skip sending to the original endpoint.
+        return "direct:foo";
+    }
+
+    @Test
+    public void testMockEndpointAndSkip() throws Exception {
+        // notice we have automatic mocked the direct:foo endpoints and the name of the endpoints is "mock:uri"
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:direct:foo").expectedMessageCount(1);
+
+        template.sendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+
+        // the message was not send to the direct:foo route and thus not sent to the seda endpoint
+        SedaEndpoint seda = context.getEndpoint("seda:foo", SedaEndpoint.class);
+        assertEquals(0, seda.getCurrentQueueSize());
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to("direct:foo").to("mock:result");
+
+                from("direct:foo").transform(constant("Bye World")).to("seda:foo");
+            }
+        };
+    }
+}
+// end::e1[]
+// END SNIPPET: e1
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/IsMockEndpointsFileTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/IsMockEndpointsFileTest.java
new file mode 100644
index 0000000..6bedaa2
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/IsMockEndpointsFileTest.java
@@ -0,0 +1,68 @@
+/*
+ * 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.test.junit5.patterns;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class IsMockEndpointsFileTest extends CamelTestSupport {
+
+    @Override
+    @BeforeEach
+    public void setUp() throws Exception {
+        deleteDirectory("target/input");
+        deleteDirectory("target/messages");
+        super.setUp();
+    }
+
+    @Override
+    public String isMockEndpoints() {
+        // override this method and return the pattern for which endpoints to mock.
+        return "file:target*";
+    }
+
+    @Test
+    public void testMockFileEndpoints() throws Exception {
+        // notice we have automatic mocked all endpoints and the name of the endpoints is "mock:uri"
+        MockEndpoint camel = getMockEndpoint("mock:file:target/messages/camel");
+        camel.expectedMessageCount(1);
+
+        MockEndpoint other = getMockEndpoint("mock:file:target/messages/others");
+        other.expectedMessageCount(1);
+
+        template.sendBodyAndHeader("file:target/input", "Hello Camel", Exchange.FILE_NAME, "camel.txt");
+        template.sendBodyAndHeader("file:target/input", "Hello World", Exchange.FILE_NAME, "world.txt");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("file:target/input")
+                    .choice()
+                        .when(bodyAs(String.class).contains("Camel")).to("file:target/messages/camel")
+                        .otherwise().to("file:target/messages/others");
+            }
+        };
+    }
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/IsMockEndpointsJUnit5Test.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/IsMockEndpointsJUnit5Test.java
new file mode 100644
index 0000000..e8a9e27
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/IsMockEndpointsJUnit5Test.java
@@ -0,0 +1,72 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+// START SNIPPET: e1
+// tag::e1[]
+public class IsMockEndpointsJUnit5Test extends CamelTestSupport {
+
+    @Override
+    public String isMockEndpoints() {
+        // override this method and return the pattern for which endpoints to mock.
+        // use * to indicate all
+        return "*";
+    }
+
+    @Test
+    public void testMockAllEndpoints() throws Exception {
+        // notice we have automatic mocked all endpoints and the name of the endpoints is "mock:uri"
+        getMockEndpoint("mock:direct:start").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:direct:foo").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:log:foo").expectedBodiesReceived("Bye World");
+        getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
+
+        template.sendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+
+        // additional test to ensure correct endpoints in registry
+        assertNotNull(context.hasEndpoint("direct:start"));
+        assertNotNull(context.hasEndpoint("direct:foo"));
+        assertNotNull(context.hasEndpoint("log:foo"));
+        assertNotNull(context.hasEndpoint("mock:result"));
+        // all the endpoints was mocked
+        assertNotNull(context.hasEndpoint("mock:direct:start"));
+        assertNotNull(context.hasEndpoint("mock:direct:foo"));
+        assertNotNull(context.hasEndpoint("mock:log:foo"));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to("direct:foo").to("log:foo").to("mock:result");
+
+                from("direct:foo").transform(constant("Bye World"));
+            }
+        };
+    }
+}
+// end::e1[]
+// END SNIPPET: e1
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/IsMockEndpointsTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/IsMockEndpointsTest.java
new file mode 100644
index 0000000..9bc4707
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/IsMockEndpointsTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+public class IsMockEndpointsTest extends CamelTestSupport {
+
+    @Override
+    public String isMockEndpoints() {
+        return "*";
+    }
+    
+    @Test
+    public void testMockAllEndpoints() throws Exception {
+        getMockEndpoint("mock:direct:start").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:direct:foo").expectedBodiesReceived("Hello World");
+        getMockEndpoint("mock:log:foo").expectedBodiesReceived("Bye World");
+        getMockEndpoint("mock:result").expectedBodiesReceived("Bye World");
+
+        template.sendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+
+        // additional test to ensure correct endpoints in registry
+        assertNotNull(context.hasEndpoint("direct:start"));
+        assertNotNull(context.hasEndpoint("direct:foo"));
+        assertNotNull(context.hasEndpoint("log:foo"));
+        assertNotNull(context.hasEndpoint("mock:result"));
+        // all the endpoints was mocked
+        assertNotNull(context.hasEndpoint("mock:direct:start"));
+        assertNotNull(context.hasEndpoint("mock:direct:foo"));
+        assertNotNull(context.hasEndpoint("mock:log:foo"));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to("direct:foo").to("log:foo").to("mock:result");
+
+                from("direct:foo").transform(constant("Bye World"));
+            }
+        };
+    }
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/MockEndpointFailNoHeaderTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/MockEndpointFailNoHeaderTest.java
new file mode 100644
index 0000000..8746df2
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/MockEndpointFailNoHeaderTest.java
@@ -0,0 +1,63 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+public class MockEndpointFailNoHeaderTest extends CamelTestSupport {
+
+    @EndpointInject("mock:result")
+    protected MockEndpoint resultEndpoint;
+
+    @Produce("direct:start")
+    protected ProducerTemplate template;
+
+    @Override
+    public boolean isDumpRouteCoverage() {
+        return true;
+    }
+
+    @Test
+    public void withHeaderTestCase() throws InterruptedException {
+        String expectedBody = "<matched/>";
+        resultEndpoint.expectedHeaderReceived("foo", "bar");
+        template.sendBodyAndHeader(expectedBody, "foo", "bar");
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void noHeaderTestCase() throws InterruptedException {
+        resultEndpoint.expectedHeaderReceived("foo", "bar");
+        resultEndpoint.setResultWaitTime(1); // speedup test
+        resultEndpoint.assertIsNotSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                from("direct:start").filter(header("foo").isEqualTo("bar")).to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/MyProduceBean.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/MyProduceBean.java
new file mode 100644
index 0000000..95d7263
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/MyProduceBean.java
@@ -0,0 +1,32 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.Produce;
+
+/**
+ *
+ */
+public class MyProduceBean {
+
+    @Produce("mock:result")
+    MySender sender;
+
+    public void doSomething(String body) {
+        sender.send(body);
+    }
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/MySender.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/MySender.java
new file mode 100644
index 0000000..0188296
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/MySender.java
@@ -0,0 +1,25 @@
+/*
+ * 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.test.junit5.patterns;
+
+/**
+ *
+ */
+public interface MySender {
+
+    void send(String body);
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/ProduceBeanTest.java
similarity index 55%
copy from components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
copy to components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/ProduceBeanTest.java
index 33987ac..0b7969b 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/ProduceBeanTest.java
@@ -14,39 +14,33 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.junit5;
+package org.apache.camel.test.junit5.patterns;
 
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
-@CamelTest
-public class SimpleMockTest {
+/**
+ *
+ */
+public class ProduceBeanTest extends CamelTestSupport {
 
     @Test
-    public void testMock(ProducerTemplate template, ModelCamelContext ctx) throws Exception {
-        MockEndpoint mockResult = ctx.getEndpoint("mock:result", MockEndpoint.class);
-        mockResult.expectedBodiesReceived("Hello World");
-        template.sendBody("direct:start", "Hello World");
-        MockEndpoint.assertIsSatisfied(ctx);
-    }
+    public void testProduceBean() throws Exception {
+        getMockEndpoint("mock:result").expectedMessageCount(1);
 
-    /* Same test is shorter with junit4
-    @Test
-    public void testMock() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
         template.sendBody("direct:start", "Hello World");
+
         assertMockEndpointsSatisfied();
-    }*/
+    }
 
-    protected RoutesBuilder createRouteBuilder() throws Exception {
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start").to("mock:result");
+                from("direct:start")
+                    .bean(MyProduceBean.class, "doSomething");
             }
         };
     }
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/RouteBuilderConfigureExceptionTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/RouteBuilderConfigureExceptionTest.java
new file mode 100644
index 0000000..46954b6
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/RouteBuilderConfigureExceptionTest.java
@@ -0,0 +1,54 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.Predicate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.fail;
+
+public class RouteBuilderConfigureExceptionTest extends CamelTestSupport {
+
+    private Predicate iAmNull;
+
+    @Override
+    @BeforeEach
+    public void setUp() throws Exception {
+        try {
+            super.setUp();
+            fail("Should have thrown exception");
+        } catch (Exception e) {
+            // expected
+        }
+    }
+
+    @Test
+    public void testFoo() throws Exception {
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                from("direct:start").choice().when(iAmNull).to("mock:dead");
+            }
+        };
+    }
+}
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/RouteProcessorDumpRouteCoverageTest.java
similarity index 54%
copy from components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
copy to components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/RouteProcessorDumpRouteCoverageTest.java
index 33987ac..53150c0 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/RouteProcessorDumpRouteCoverageTest.java
@@ -14,40 +14,46 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.junit5;
+package org.apache.camel.test.junit5.patterns;
 
-import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 
-@CamelTest
-public class SimpleMockTest {
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
-    @Test
-    public void testMock(ProducerTemplate template, ModelCamelContext ctx) throws Exception {
-        MockEndpoint mockResult = ctx.getEndpoint("mock:result", MockEndpoint.class);
-        mockResult.expectedBodiesReceived("Hello World");
-        template.sendBody("direct:start", "Hello World");
-        MockEndpoint.assertIsSatisfied(ctx);
+public class RouteProcessorDumpRouteCoverageTest extends CamelTestSupport {
+
+    @Override
+    public boolean isDumpRouteCoverage() {
+        return true;
     }
 
-    /* Same test is shorter with junit4
     @Test
-    public void testMock() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
-        template.sendBody("direct:start", "Hello World");
-        assertMockEndpointsSatisfied();
-    }*/
+    public void testProcessorJunit5() throws Exception {
+        String out = template.requestBody("direct:start", "Hello World", String.class);
+        assertEquals("Bye World", out);
+    }
 
+    @Override
+    @AfterEach
+    public void tearDown() throws Exception {
+        super.tearDown();
+        // should create that file when test is done
+        assertFileExists("target/camel-route-coverage/RouteProcessorDumpRouteCoverageTest-testProcessorJunit5.xml");
+    }
+
+    @Override
     protected RoutesBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start").to("mock:result");
+                from("direct:start")
+                    .process(exchange -> exchange.getOut().setBody("Bye World"));
             }
         };
     }
+
 }
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleMockEndpointsTest.java
similarity index 58%
copy from components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
copy to components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleMockEndpointsTest.java
index 33987ac..6f32ff8 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleMockEndpointsTest.java
@@ -14,40 +14,39 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.junit5;
+package org.apache.camel.test.junit5.patterns;
 
-import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
-@CamelTest
-public class SimpleMockTest {
+public class SimpleMockEndpointsTest extends CamelTestSupport {
 
-    @Test
-    public void testMock(ProducerTemplate template, ModelCamelContext ctx) throws Exception {
-        MockEndpoint mockResult = ctx.getEndpoint("mock:result", MockEndpoint.class);
-        mockResult.expectedBodiesReceived("Hello World");
-        template.sendBody("direct:start", "Hello World");
-        MockEndpoint.assertIsSatisfied(ctx);
+    @Override
+    public String isMockEndpointsAndSkip() {
+        return "seda:queue";
     }
 
-    /* Same test is shorter with junit4
     @Test
-    public void testMock() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
-        template.sendBody("direct:start", "Hello World");
+    public void testMockAndSkip() throws Exception {
+        getMockEndpoint("mock:seda:queue").expectedBodiesReceived("Bye Camel");
+
+        template.sendBody("seda:start", "Camel");
+
         assertMockEndpointsSatisfied();
-    }*/
+    }
 
+    @Override
     protected RoutesBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start").to("mock:result");
+                from("seda:start")
+                    .transform(simple("Bye ${body}"))
+                    .to("seda:queue");
             }
         };
     }
+
 }
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleMockTest.java
similarity index 67%
copy from components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
copy to components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleMockTest.java
index 33987ac..beaa4c9 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleMockTest.java
@@ -14,40 +14,33 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.junit5;
+package org.apache.camel.test.junit5.patterns;
 
-import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
-@CamelTest
-public class SimpleMockTest {
+public class SimpleMockTest extends CamelTestSupport {
 
     @Test
-    public void testMock(ProducerTemplate template, ModelCamelContext ctx) throws Exception {
-        MockEndpoint mockResult = ctx.getEndpoint("mock:result", MockEndpoint.class);
-        mockResult.expectedBodiesReceived("Hello World");
-        template.sendBody("direct:start", "Hello World");
-        MockEndpoint.assertIsSatisfied(ctx);
-    }
-
-    /* Same test is shorter with junit4
-    @Test
     public void testMock() throws Exception {
         getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
         template.sendBody("direct:start", "Hello World");
+
         assertMockEndpointsSatisfied();
-    }*/
+    }
 
+    @Override
     protected RoutesBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start").to("mock:result");
+                from("direct:start")
+                        .to("mock:result");
             }
         };
     }
+
 }
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleMockUsingExtensionTest.java
similarity index 83%
copy from components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
copy to components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleMockUsingExtensionTest.java
index 33987ac..9b8d2d2 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleMockUsingExtensionTest.java
@@ -14,17 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.junit5;
+package org.apache.camel.test.junit5.patterns;
 
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.test.junit5.CamelTest;
 import org.junit.jupiter.api.Test;
 
 @CamelTest
-public class SimpleMockTest {
+public class SimpleMockUsingExtensionTest {
 
     @Test
     public void testMock(ProducerTemplate template, ModelCamelContext ctx) throws Exception {
@@ -34,14 +35,6 @@ public class SimpleMockTest {
         MockEndpoint.assertIsSatisfied(ctx);
     }
 
-    /* Same test is shorter with junit4
-    @Test
-    public void testMock() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
-        template.sendBody("direct:start", "Hello World");
-        assertMockEndpointsSatisfied();
-    }*/
-
     protected RoutesBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             @Override
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleNotifyBuilderTest.java
similarity index 56%
copy from components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
copy to components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleNotifyBuilderTest.java
index 33987ac..ba91a1a 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleNotifyBuilderTest.java
@@ -14,40 +14,46 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.junit5;
+package org.apache.camel.test.junit5.patterns;
+
+import java.util.concurrent.TimeUnit;
 
-import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.NotifyBuilder;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
-@CamelTest
-public class SimpleMockTest {
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-    @Test
-    public void testMock(ProducerTemplate template, ModelCamelContext ctx) throws Exception {
-        MockEndpoint mockResult = ctx.getEndpoint("mock:result", MockEndpoint.class);
-        mockResult.expectedBodiesReceived("Hello World");
-        template.sendBody("direct:start", "Hello World");
-        MockEndpoint.assertIsSatisfied(ctx);
-    }
+public class SimpleNotifyBuilderTest extends CamelTestSupport {
 
-    /* Same test is shorter with junit4
     @Test
-    public void testMock() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
-        template.sendBody("direct:start", "Hello World");
-        assertMockEndpointsSatisfied();
-    }*/
+    public void testNotifyBuilder() throws Exception {
+        NotifyBuilder notify = new NotifyBuilder(context)
+                .from("seda:start")
+                .wereSentTo("seda:queue")
+                .whenDone(10)
+                .create();
+
+        for (int i = 0; i < 10; i++) {
+            template.sendBody("seda:start", "Camel" + i);
+        }
 
+        boolean matches = notify.matches(10, TimeUnit.SECONDS);
+        assertTrue(matches);
+    }
+
+    @Override
     protected RoutesBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start").to("mock:result");
+                from("seda:start")
+                    .transform(simple("Bye ${body}"))
+                    .to("seda:queue");
             }
         };
     }
+
 }
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleWeaveAddMockLastTest.java
similarity index 55%
rename from components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleWeaveAddMockLastTest.java
index 33987ac..aaf8800 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/junit5/SimpleMockTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/SimpleWeaveAddMockLastTest.java
@@ -14,40 +14,48 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.junit5;
+package org.apache.camel.test.junit5.patterns;
 
-import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.reifier.RouteReifier;
+import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
-@CamelTest
-public class SimpleMockTest {
+public class SimpleWeaveAddMockLastTest extends CamelTestSupport {
 
-    @Test
-    public void testMock(ProducerTemplate template, ModelCamelContext ctx) throws Exception {
-        MockEndpoint mockResult = ctx.getEndpoint("mock:result", MockEndpoint.class);
-        mockResult.expectedBodiesReceived("Hello World");
-        template.sendBody("direct:start", "Hello World");
-        MockEndpoint.assertIsSatisfied(ctx);
+    public boolean isUseAdviceWith() {
+        return true;
     }
 
-    /* Same test is shorter with junit4
     @Test
-    public void testMock() throws Exception {
-        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
-        template.sendBody("direct:start", "Hello World");
+    public void testWeaveAddMockLast() throws Exception {
+        RouteReifier.adviceWith(context.getRouteDefinitions().get(0), context, new AdviceWithRouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                weaveAddLast().to("mock:result");
+            }
+        });
+        context.start();
+
+        getMockEndpoint("mock:result").expectedBodiesReceived("Bye Camel");
+
+        template.sendBody("seda:start", "Camel");
+
         assertMockEndpointsSatisfied();
-    }*/
+    }
 
+    @Override
     protected RoutesBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start").to("mock:result");
+                from("seda:start")
+                    .transform(simple("Bye ${body}"))
+                    .to("seda:queue");
             }
         };
     }
+
 }
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/UseOverridePropertiesWithPropertiesComponentTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/UseOverridePropertiesWithPropertiesComponentTest.java
new file mode 100644
index 0000000..d4a4719
--- /dev/null
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit5/patterns/UseOverridePropertiesWithPropertiesComponentTest.java
@@ -0,0 +1,78 @@
+/*
+ * 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.test.junit5.patterns;
+
+import java.util.Properties;
+
+import org.apache.camel.builder.AdviceWithRouteBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.reifier.RouteReifier;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class UseOverridePropertiesWithPropertiesComponentTest extends CamelTestSupport {
+
+    @Override
+    public boolean isUseAdviceWith() {
+        return true;
+    }
+
+    @BeforeEach
+    public void doSomethingBefore() throws Exception {
+        AdviceWithRouteBuilder mocker = new AdviceWithRouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                replaceFromWith("direct:sftp");
+
+                interceptSendToEndpoint("file:*")
+                        .skipSendToOriginalEndpoint()
+                        .to("mock:file");
+            }
+        };
+        RouteReifier.adviceWith(context.getRouteDefinition("myRoute"), context, mocker);
+    }
+
+    @Override
+    protected Properties useOverridePropertiesWithPropertiesComponent() {
+        Properties pc = new Properties();
+        pc.put("ftp.username", "scott");
+        pc.put("ftp.password", "tiger");
+        return pc;
+    }
+
+    @Test
+    public void testOverride() throws Exception {
+        context.start();
+
+        getMockEndpoint("mock:file").expectedMessageCount(1);
+
+        template.sendBody("direct:sftp", "Hello World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                from("ftp:somepath?username={{ftp.username}}&password={{ftp.password}}").routeId("myRoute")
+                    .to("file:target/out");
+            }
+        };
+    }
+}


[camel] 01/09: CAMEL-13342: Created CamelTest annotation and move existing tests to **test/junit4**

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aldettinger pushed a commit to branch CAMEL-13342-JUNIT5-EXPLORATORY
in repository https://gitbox.apache.org/repos/asf/camel.git

commit afced8d2ef32a4d9c009bad9d6685fdde6b2e7d9
Author: aldettinger <al...@gmail.com>
AuthorDate: Wed Jun 5 14:11:35 2019 +0200

    CAMEL-13342: Created CamelTest annotation and move existing tests to **test/junit4**
---
 components/camel-test/pom.xml                        |  5 +++++
 .../org/apache/camel/test/junit5/CamelTest.java}     | 20 ++++++++------------
 .../patterns/AdviceWithNotStartedTest.java           |  2 +-
 .../{ => junit4}/patterns/AsyncSendMockTest.java     |  2 +-
 .../test/{ => junit4}/patterns/DebugJUnit4Test.java  |  2 +-
 .../patterns/DebugNoLazyTypeConverterTest.java       |  2 +-
 .../camel/test/{ => junit4}/patterns/DebugTest.java  |  2 +-
 .../FilterCreateCamelContextPerClassTest.java        |  2 +-
 .../patterns/FilterFluentTemplateTest.java           |  2 +-
 .../test/{ => junit4}/patterns/FilterJUnit4Test.java |  2 +-
 .../camel/test/{ => junit4}/patterns/FilterTest.java |  2 +-
 .../patterns/IsMockEndpointsAndSkipJUnit4Test.java   |  2 +-
 .../patterns/IsMockEndpointsFileTest.java            |  2 +-
 .../patterns/IsMockEndpointsJUnit4Test.java          |  2 +-
 .../{ => junit4}/patterns/IsMockEndpointsTest.java   |  2 +-
 .../patterns/MockEndpointFailNoHeaderTest.java       |  2 +-
 .../test/{ => junit4}/patterns/MyProduceBean.java    |  2 +-
 .../camel/test/{ => junit4}/patterns/MySender.java   |  2 +-
 .../test/{ => junit4}/patterns/ProduceBeanTest.java  |  2 +-
 .../patterns/RouteBuilderConfigureExceptionTest.java |  2 +-
 .../RouteProcessorDumpRouteCoverageTest.java         |  2 +-
 .../patterns/SimpleMockEndpointsTest.java            |  2 +-
 .../test/{ => junit4}/patterns/SimpleMockTest.java   |  2 +-
 .../patterns/SimpleNotifyBuilderTest.java            |  2 +-
 .../patterns/SimpleWeaveAddMockLastTest.java         |  2 +-
 ...verridePropertiesWithPropertiesComponentTest.java |  2 +-
 26 files changed, 37 insertions(+), 36 deletions(-)

diff --git a/components/camel-test/pom.xml b/components/camel-test/pom.xml
index 2e70437..c3485f4 100644
--- a/components/camel-test/pom.xml
+++ b/components/camel-test/pom.xml
@@ -54,6 +54,11 @@
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <version>5.5.0-M1</version>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.logging.log4j</groupId>
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/MyProduceBean.java b/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTest.java
similarity index 73%
copy from components/camel-test/src/test/java/org/apache/camel/test/patterns/MyProduceBean.java
copy to components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTest.java
index d8864c9..05ed250 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/MyProduceBean.java
+++ b/components/camel-test/src/main/java/org/apache/camel/test/junit5/CamelTest.java
@@ -14,19 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit5;
 
-import org.apache.camel.Produce;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
-/**
- *
- */
-public class MyProduceBean {
-
-    @Produce("mock:result")
-    MySender sender;
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface CamelTest {
 
-    public void doSomething(String body) {
-        sender.send(body);
-    }
 }
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/AdviceWithNotStartedTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/AdviceWithNotStartedTest.java
similarity index 98%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/AdviceWithNotStartedTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/AdviceWithNotStartedTest.java
index bcbc0e4..2d792c4 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/AdviceWithNotStartedTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/AdviceWithNotStartedTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import java.util.concurrent.RejectedExecutionException;
 
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/AsyncSendMockTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/AsyncSendMockTest.java
similarity index 97%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/AsyncSendMockTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/AsyncSendMockTest.java
index 48d818d..4e37d70 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/AsyncSendMockTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/AsyncSendMockTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.support.DefaultExchange;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/DebugJUnit4Test.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/DebugJUnit4Test.java
similarity index 98%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/DebugJUnit4Test.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/DebugJUnit4Test.java
index 6aa7524..7b28a24 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/DebugJUnit4Test.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/DebugJUnit4Test.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/DebugNoLazyTypeConverterTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/DebugNoLazyTypeConverterTest.java
similarity index 98%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/DebugNoLazyTypeConverterTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/DebugNoLazyTypeConverterTest.java
index 31e8938..763123d 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/DebugNoLazyTypeConverterTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/DebugNoLazyTypeConverterTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/DebugTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/DebugTest.java
similarity index 98%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/DebugTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/DebugTest.java
index c7b7466..9e31817 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/DebugTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/DebugTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterCreateCamelContextPerClassTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/FilterCreateCamelContextPerClassTest.java
similarity index 97%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterCreateCamelContextPerClassTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/FilterCreateCamelContextPerClassTest.java
index 0392f0f..d9ce4a2 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterCreateCamelContextPerClassTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/FilterCreateCamelContextPerClassTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterFluentTemplateTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/FilterFluentTemplateTest.java
similarity index 98%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterFluentTemplateTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/FilterFluentTemplateTest.java
index 913ecbe..72df15d 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterFluentTemplateTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/FilterFluentTemplateTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.FluentProducerTemplate;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterJUnit4Test.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/FilterJUnit4Test.java
similarity index 97%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterJUnit4Test.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/FilterJUnit4Test.java
index 9213e5b..54386b9 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterJUnit4Test.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/FilterJUnit4Test.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/FilterTest.java
similarity index 98%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/FilterTest.java
index 8ad2636..aa13656 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/FilterTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/FilterTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsAndSkipJUnit4Test.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/IsMockEndpointsAndSkipJUnit4Test.java
similarity index 98%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsAndSkipJUnit4Test.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/IsMockEndpointsAndSkipJUnit4Test.java
index da82ca0..8e2a91a 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsAndSkipJUnit4Test.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/IsMockEndpointsAndSkipJUnit4Test.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.seda.SedaEndpoint;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsFileTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/IsMockEndpointsFileTest.java
similarity index 98%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsFileTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/IsMockEndpointsFileTest.java
index 9df144b..82b08c9 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsFileTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/IsMockEndpointsFileTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsJUnit4Test.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/IsMockEndpointsJUnit4Test.java
similarity index 98%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsJUnit4Test.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/IsMockEndpointsJUnit4Test.java
index d8cf4c0..d8cfbaa 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsJUnit4Test.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/IsMockEndpointsJUnit4Test.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/IsMockEndpointsTest.java
similarity index 98%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/IsMockEndpointsTest.java
index e3bcb9e..ed3288b 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/IsMockEndpointsTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/MockEndpointFailNoHeaderTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/MockEndpointFailNoHeaderTest.java
similarity index 97%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/MockEndpointFailNoHeaderTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/MockEndpointFailNoHeaderTest.java
index c878091..9b341eb 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/MockEndpointFailNoHeaderTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/MockEndpointFailNoHeaderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/MyProduceBean.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/MyProduceBean.java
similarity index 95%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/MyProduceBean.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/MyProduceBean.java
index d8864c9..696b6ea 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/MyProduceBean.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/MyProduceBean.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.Produce;
 
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/MySender.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/MySender.java
similarity index 94%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/MySender.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/MySender.java
index 0319c98..c68a1c6 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/MySender.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/MySender.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 /**
  *
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/ProduceBeanTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/ProduceBeanTest.java
similarity index 97%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/ProduceBeanTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/ProduceBeanTest.java
index 2050e6c..bb49119 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/ProduceBeanTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/ProduceBeanTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/RouteBuilderConfigureExceptionTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/RouteBuilderConfigureExceptionTest.java
similarity index 97%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/RouteBuilderConfigureExceptionTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/RouteBuilderConfigureExceptionTest.java
index 033d64c..7d2c456 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/RouteBuilderConfigureExceptionTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/RouteBuilderConfigureExceptionTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 import org.apache.camel.Predicate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/RouteProcessorDumpRouteCoverageTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/RouteProcessorDumpRouteCoverageTest.java
similarity index 97%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/RouteProcessorDumpRouteCoverageTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/RouteProcessorDumpRouteCoverageTest.java
index 675c14e..6bfbd6a 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/RouteProcessorDumpRouteCoverageTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/RouteProcessorDumpRouteCoverageTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleMockEndpointsTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/SimpleMockEndpointsTest.java
similarity index 97%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleMockEndpointsTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/SimpleMockEndpointsTest.java
index 786d972..ad66ca0 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleMockEndpointsTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/SimpleMockEndpointsTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleMockTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/SimpleMockTest.java
similarity index 97%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleMockTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/SimpleMockTest.java
index c9b89aa..1bbd710 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleMockTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/SimpleMockTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleNotifyBuilderTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/SimpleNotifyBuilderTest.java
similarity index 97%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleNotifyBuilderTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/SimpleNotifyBuilderTest.java
index e8640ee..577587b 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleNotifyBuilderTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/SimpleNotifyBuilderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import java.util.concurrent.TimeUnit;
 
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleWeaveAddMockLastTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/SimpleWeaveAddMockLastTest.java
similarity index 97%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleWeaveAddMockLastTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/SimpleWeaveAddMockLastTest.java
index 3a34b94..878b31d 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/SimpleWeaveAddMockLastTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/SimpleWeaveAddMockLastTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.AdviceWithRouteBuilder;
diff --git a/components/camel-test/src/test/java/org/apache/camel/test/patterns/UseOverridePropertiesWithPropertiesComponentTest.java b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/UseOverridePropertiesWithPropertiesComponentTest.java
similarity index 98%
rename from components/camel-test/src/test/java/org/apache/camel/test/patterns/UseOverridePropertiesWithPropertiesComponentTest.java
rename to components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/UseOverridePropertiesWithPropertiesComponentTest.java
index fbcba31..ac72996 100644
--- a/components/camel-test/src/test/java/org/apache/camel/test/patterns/UseOverridePropertiesWithPropertiesComponentTest.java
+++ b/components/camel-test/src/test/java/org/apache/camel/test/junit4/patterns/UseOverridePropertiesWithPropertiesComponentTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.test.patterns;
+package org.apache.camel.test.junit4.patterns;
 
 import java.util.Properties;
 


[camel] 09/09: CAMEL-13342: Implemented a first version of a proof-of-concept for camel-test-spring/SprintBootTest with JUnit 5

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aldettinger pushed a commit to branch CAMEL-13342-JUNIT5-EXPLORATORY
in repository https://gitbox.apache.org/repos/asf/camel.git

commit de6f06d87d0dbd1676a060b37e1b6843ce1e0b79
Author: aldettinger <al...@gmail.com>
AuthorDate: Wed Jul 24 16:35:27 2019 +0200

    CAMEL-13342: Implemented a first version of a proof-of-concept for camel-test-spring/SprintBootTest with JUnit 5
---
 .../spring/boot/mockendpoints/AdviceWithTest.java  | 11 ++++----
 .../MockEndpointsAndSkipDirtiesContextTest.java    |  9 +++---
 .../boot/mockendpoints/MockEndpointsTest.java      |  9 +++---
 .../camel/spring/boot/routefilter/BarTest.java     |  7 ++---
 .../routefilter/FooExcludeRouteAnnotationTest.java |  9 +++---
 .../camel/spring/boot/routefilter/FooTest.java     |  7 ++---
 .../spring/CamelSpringBootExecutionListener.java   | 10 +++++++
 ...utionListener.java => CamelSpringBootTest.java} | 32 ++++++++++------------
 ...ringTestContextLoaderTestExecutionListener.java |  9 ++----
 .../spring/DisableJmxTestExecutionListener.java    | 10 +++++++
 .../spring/StopWatchTestExecutionListener.java     | 10 +++++++
 11 files changed, 71 insertions(+), 52 deletions(-)

diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/AdviceWithTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/AdviceWithTest.java
index bea0229..c902c50 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/AdviceWithTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/AdviceWithTest.java
@@ -21,17 +21,16 @@ import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.reifier.RouteReifier;
-import org.apache.camel.test.spring.CamelSpringBootRunner;
-import org.apache.camel.test.spring.UseAdviceWith;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.apache.camel.test.junit5.spring.CamelSpringBootTest;
+import org.apache.camel.test.junit5.spring.UseAdviceWith;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
-@RunWith(CamelSpringBootRunner.class)
+@CamelSpringBootTest
 @UseAdviceWith
 @SpringBootApplication
 @SpringBootTest(classes = AdviceWithTest.class)
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsAndSkipDirtiesContextTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsAndSkipDirtiesContextTest.java
index 6133451..c7ac277 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsAndSkipDirtiesContextTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsAndSkipDirtiesContextTest.java
@@ -22,17 +22,16 @@ import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringRouteBuilder;
-import org.apache.camel.test.spring.CamelSpringBootRunner;
-import org.apache.camel.test.spring.MockEndpointsAndSkip;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.apache.camel.test.junit5.spring.CamelSpringBootTest;
+import org.apache.camel.test.junit5.spring.MockEndpointsAndSkip;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.annotation.DirtiesContext;
 
-@RunWith(CamelSpringBootRunner.class)
+@CamelSpringBootTest
 @MockEndpointsAndSkip("direct:b")
 @SpringBootApplication
 @SpringBootTest(classes = MockEndpointsAndSkipDirtiesContextTest.class)
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsTest.java
index bacfc31..13c95e6 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/mockendpoints/MockEndpointsTest.java
@@ -19,15 +19,14 @@ package org.apache.camel.spring.boot.mockendpoints;
 import org.apache.camel.CamelContext;
 import org.apache.camel.FluentProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringBootRunner;
-import org.apache.camel.test.spring.MockEndpoints;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.apache.camel.test.junit5.spring.CamelSpringBootTest;
+import org.apache.camel.test.junit5.spring.MockEndpoints;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 
-@RunWith(CamelSpringBootRunner.class)
+@CamelSpringBootTest
 @MockEndpoints
 @SpringBootApplication
 @SpringBootTest(classes = MockEndpointsTest.class)
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/BarTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/BarTest.java
index f563e8a..5d5e25a 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/BarTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/BarTest.java
@@ -19,14 +19,13 @@ package org.apache.camel.spring.boot.routefilter;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.ModelCamelContext;
-import org.apache.camel.test.spring.CamelSpringBootRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.apache.camel.test.junit5.spring.CamelSpringBootTest;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 
-@RunWith(CamelSpringBootRunner.class)
+@CamelSpringBootTest
 @SpringBootApplication
 @SpringBootTest(classes = BarTest.class,
     properties = {"camel.springboot.java-routes-include-pattern=**/Bar*"})
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooExcludeRouteAnnotationTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooExcludeRouteAnnotationTest.java
index badc9a4..288c84a 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooExcludeRouteAnnotationTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooExcludeRouteAnnotationTest.java
@@ -19,15 +19,14 @@ package org.apache.camel.spring.boot.routefilter;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.ModelCamelContext;
-import org.apache.camel.test.spring.CamelSpringBootRunner;
-import org.apache.camel.test.spring.ExcludeRoutes;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.apache.camel.test.junit5.spring.CamelSpringBootTest;
+import org.apache.camel.test.junit5.spring.ExcludeRoutes;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 
-@RunWith(CamelSpringBootRunner.class)
+@CamelSpringBootTest
 @SpringBootApplication()
 @SpringBootTest(classes = FooTest.class)
 @ExcludeRoutes({BarRoute.class, DrinkRoute.class})
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooTest.java
index f12b309..5b69324 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/routefilter/FooTest.java
@@ -19,14 +19,13 @@ package org.apache.camel.spring.boot.routefilter;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.ModelCamelContext;
-import org.apache.camel.test.spring.CamelSpringBootRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.apache.camel.test.junit5.spring.CamelSpringBootTest;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.test.context.SpringBootTest;
 
-@RunWith(CamelSpringBootRunner.class)
+@CamelSpringBootTest
 @SpringBootApplication()
 @SpringBootTest(classes = FooTest.class,
     properties = {"camel.springboot.java-routes-exclude-pattern=**/Bar*,**/Drink*"})
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootExecutionListener.java
index 4192e5e..3e88a3f 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootExecutionListener.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootExecutionListener.java
@@ -20,6 +20,7 @@ import org.apache.camel.spring.SpringCamelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.core.Ordered;
 import org.springframework.test.context.TestContext;
 import org.springframework.test.context.support.AbstractTestExecutionListener;
 
@@ -29,6 +30,15 @@ public class CamelSpringBootExecutionListener extends AbstractTestExecutionListe
 
     private static final Logger LOG = LoggerFactory.getLogger(CamelSpringBootExecutionListener.class);
 
+    /**
+     * Ensure proper order of test execution listeners.
+     * @TODO: centralize in a kind of util precedence class ?
+     */
+    @Override
+    public int getOrder() {
+        return Ordered.HIGHEST_PRECEDENCE + 3000;
+    }
+
     @Override
     public void prepareTestInstance(TestContext testContext) throws Exception {
         LOG.info("@RunWith(CamelSpringBootRunner.class) preparing: {}", testContext.getTestClass());
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootTest.java
similarity index 50%
copy from components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java
copy to components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootTest.java
index f3aaee6..7114927 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootTest.java
@@ -16,24 +16,22 @@
  */
 package org.apache.camel.test.junit5.spring;
 
-import org.apache.camel.api.management.JmxSystemPropertyKeys;
-import org.springframework.test.context.TestContext;
-import org.springframework.test.context.support.AbstractTestExecutionListener;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
-/**
- * Provides reset to pre-test state behavior for global enable/disable of JMX
- * support in Camel through the use of {@link DisableJmx}.
- * Tries to ensure that the pre-test value is restored.
- */
-public class DisableJmxTestExecutionListener extends AbstractTestExecutionListener {
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.TestExecutionListeners;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
 
-    @Override
-    public void afterTestClass(TestContext testContext) throws Exception {
-        if (CamelSpringTestHelper.getOriginalJmxDisabled() == null) {
-            System.clearProperty(JmxSystemPropertyKeys.DISABLED);
-        } else {
-            System.setProperty(JmxSystemPropertyKeys.DISABLED, CamelSpringTestHelper.getOriginalJmxDisabled());
-        }
-    }
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+@ExtendWith(SpringExtension.class)
+@TestExecutionListeners(value = {CamelSpringTestContextLoaderTestExecutionListener.class, DisableJmxTestExecutionListener.class, CamelSpringBootExecutionListener.class,
+                                 StopWatchTestExecutionListener.class}, mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS)
+public @interface CamelSpringBootTest {
 
 }
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoaderTestExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoaderTestExecutionListener.java
index a749104..88e7d36 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoaderTestExecutionListener.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoaderTestExecutionListener.java
@@ -31,15 +31,12 @@ import org.springframework.test.context.support.AbstractTestExecutionListener;
 public class CamelSpringTestContextLoaderTestExecutionListener extends AbstractTestExecutionListener {
 
     /**
-     * The default implementation returns {@link org.springframework.core.Ordered#LOWEST_PRECEDENCE},
-     * thereby ensuring that custom listeners are ordered after default
-     * listeners supplied by the framework. Can be overridden by subclasses
-     * as necessary.
+     * Ensure proper order of test execution listeners.
+     * @TODO: centralize in a kind of util precedence class ?
      */
     @Override
     public int getOrder() {
-        //set Camel first
-        return Ordered.HIGHEST_PRECEDENCE;
+        return Ordered.HIGHEST_PRECEDENCE + 1000;
     }
 
     @Override
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java
index f3aaee6..10e6c74 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java
@@ -17,6 +17,7 @@
 package org.apache.camel.test.junit5.spring;
 
 import org.apache.camel.api.management.JmxSystemPropertyKeys;
+import org.springframework.core.Ordered;
 import org.springframework.test.context.TestContext;
 import org.springframework.test.context.support.AbstractTestExecutionListener;
 
@@ -27,6 +28,15 @@ import org.springframework.test.context.support.AbstractTestExecutionListener;
  */
 public class DisableJmxTestExecutionListener extends AbstractTestExecutionListener {
 
+    /**
+     * Ensure proper order of test execution listeners.
+     * @TODO: centralize in a kind of util precedence class ?
+     */
+    @Override
+    public int getOrder() {
+        return Ordered.HIGHEST_PRECEDENCE + 2000;
+    }
+
     @Override
     public void afterTestClass(TestContext testContext) throws Exception {
         if (CamelSpringTestHelper.getOriginalJmxDisabled() == null) {
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/StopWatchTestExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/StopWatchTestExecutionListener.java
index 535a7dc..e4c5115 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/StopWatchTestExecutionListener.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/StopWatchTestExecutionListener.java
@@ -20,6 +20,7 @@ import org.apache.camel.util.StopWatch;
 import org.apache.camel.util.TimeUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.core.Ordered;
 import org.springframework.test.context.TestContext;
 import org.springframework.test.context.support.AbstractTestExecutionListener;
 
@@ -37,6 +38,15 @@ public class StopWatchTestExecutionListener extends AbstractTestExecutionListene
         return threadStopWatch.get();
     }
     
+    /**
+     * Ensure proper order of test execution listeners.
+     * @TODO: centralize in a kind of util precedence class ?
+     */
+    @Override
+    public int getOrder() {
+        return Ordered.HIGHEST_PRECEDENCE + 4000;
+    }
+    
     @Override
     public void beforeTestMethod(TestContext testContext) throws Exception {
         StopWatch stopWatch = new StopWatch();


[camel] 06/09: CAMEL-13342: Implemented a first version of a proof-of-concept for camel-testcontainers-spring with JUnit 5

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aldettinger pushed a commit to branch CAMEL-13342-JUNIT5-EXPLORATORY
in repository https://gitbox.apache.org/repos/asf/camel.git

commit d995abb254e892c281494d875cc0dbdab9d26e10
Author: aldettinger <al...@gmail.com>
AuthorDate: Thu Jul 11 10:12:37 2019 +0200

    CAMEL-13342: Implemented a first version of a proof-of-concept for camel-testcontainers-spring with JUnit 5
---
 .../SpringConsulDefaultServiceCallRouteTest.java   |  12 +-
 ...SpringConsulExpressionServiceCallRouteTest.java |  12 +-
 .../SpringConsulRibbonServiceCallRouteTest.java    |  12 +-
 .../cloud/SpringConsulServiceCallRouteTest.java    |   8 +-
 .../junit5/spring/CamelAnnotationsHandler.java     | 367 ++++++++++++++
 .../spring/CamelSpringBootExecutionListener.java   |  95 ++++
 .../spring/CamelSpringBootJUnit4ClassRunner.java   |  33 ++
 .../test/junit5/spring/CamelSpringBootRunner.java  |  87 ++++
 .../CamelSpringDelegatingTestContextLoader.java    | 138 ++++++
 .../test/junit5/spring/CamelSpringRunner.java      |  83 ++++
 .../spring/CamelSpringTestContextLoader.java       | 551 +++++++++++++++++++++
 ...ringTestContextLoaderTestExecutionListener.java |  50 ++
 .../test/junit5/spring/CamelSpringTestHelper.java  | 109 ++++
 .../test/junit5/spring/CamelSpringTestSupport.java | 212 ++++++++
 .../spring/CamelTestContextBootstrapper.java       |  31 ++
 .../camel/test/junit5/spring/DisableJmx.java       |  43 ++
 .../spring/DisableJmxTestExecutionListener.java    |  39 ++
 .../test/junit5/spring/EnableRouteCoverage.java    |  41 ++
 .../camel/test/junit5/spring/ExcludeRoutes.java    |  44 ++
 .../camel/test/junit5/spring/MockEndpoints.java    |  43 ++
 .../test/junit5/spring/MockEndpointsAndSkip.java   |  43 ++
 .../test/junit5/spring/ProvidesBreakpoint.java     |  36 ++
 .../test/junit5/spring/RouteCoverageDumper.java    |  82 +++
 .../junit5/spring/RouteCoverageEventNotifier.java  |  51 ++
 .../camel/test/junit5/spring/ShutdownTimeout.java  |  49 ++
 .../spring/StopWatchTestExecutionListener.java     |  62 +++
 .../camel/test/junit5/spring/UseAdviceWith.java    |  49 ++
 ...eOverridePropertiesWithPropertiesComponent.java |  34 ++
 .../spring/ContainerAwareSpringTestSupport.java    | 112 +++++
 .../spring/ContainerAwareSpringTestSupportIT.java  |  61 +++
 30 files changed, 2567 insertions(+), 22 deletions(-)

diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulDefaultServiceCallRouteTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulDefaultServiceCallRouteTest.java
index e0cbcb9..bbe67f2 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulDefaultServiceCallRouteTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulDefaultServiceCallRouteTest.java
@@ -20,8 +20,8 @@ import java.util.List;
 
 import org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancer;
 import org.apache.camel.impl.cloud.DefaultServiceCallProcessor;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
@@ -35,9 +35,9 @@ public class SpringConsulDefaultServiceCallRouteTest extends SpringConsulService
     public void testServiceCallConfiguration() throws Exception {
         List<DefaultServiceCallProcessor> processors = findServiceCallProcessors();
 
-        Assert.assertFalse(processors.isEmpty());
-        Assert.assertEquals(2, processors.size());
-        Assert.assertFalse(processors.get(0).getLoadBalancer() instanceof RibbonServiceLoadBalancer);
-        Assert.assertFalse(processors.get(1).getLoadBalancer() instanceof RibbonServiceLoadBalancer);
+        Assertions.assertFalse(processors.isEmpty());
+        Assertions.assertEquals(2, processors.size());
+        Assertions.assertFalse(processors.get(0).getLoadBalancer() instanceof RibbonServiceLoadBalancer);
+        Assertions.assertFalse(processors.get(1).getLoadBalancer() instanceof RibbonServiceLoadBalancer);
     }
 }
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulExpressionServiceCallRouteTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulExpressionServiceCallRouteTest.java
index 21995d7..f1f937f 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulExpressionServiceCallRouteTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulExpressionServiceCallRouteTest.java
@@ -20,8 +20,8 @@ import java.util.List;
 
 import org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancer;
 import org.apache.camel.impl.cloud.DefaultServiceCallProcessor;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
@@ -35,9 +35,9 @@ public class SpringConsulExpressionServiceCallRouteTest extends SpringConsulServ
     public void testServiceCallConfiguration() throws Exception {
         List<DefaultServiceCallProcessor> processors = findServiceCallProcessors();
 
-        Assert.assertFalse(processors.isEmpty());
-        Assert.assertEquals(2, processors.size());
-        Assert.assertFalse(processors.get(0).getLoadBalancer() instanceof RibbonServiceLoadBalancer);
-        Assert.assertFalse(processors.get(1).getLoadBalancer() instanceof RibbonServiceLoadBalancer);
+        Assertions.assertFalse(processors.isEmpty());
+        Assertions.assertEquals(2, processors.size());
+        Assertions.assertFalse(processors.get(0).getLoadBalancer() instanceof RibbonServiceLoadBalancer);
+        Assertions.assertFalse(processors.get(1).getLoadBalancer() instanceof RibbonServiceLoadBalancer);
     }
 }
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulRibbonServiceCallRouteTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulRibbonServiceCallRouteTest.java
index 230d178..b8cd79b 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulRibbonServiceCallRouteTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulRibbonServiceCallRouteTest.java
@@ -20,8 +20,8 @@ import java.util.List;
 
 import org.apache.camel.component.ribbon.cloud.RibbonServiceLoadBalancer;
 import org.apache.camel.impl.cloud.DefaultServiceCallProcessor;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
@@ -35,9 +35,9 @@ public class SpringConsulRibbonServiceCallRouteTest extends SpringConsulServiceC
     public void testServiceCallConfiguration() throws Exception {
         List<DefaultServiceCallProcessor> processors = findServiceCallProcessors();
 
-        Assert.assertFalse(processors.isEmpty());
-        Assert.assertEquals(2, processors.size());
-        Assert.assertTrue(processors.get(0).getLoadBalancer() instanceof RibbonServiceLoadBalancer);
-        Assert.assertTrue(processors.get(1).getLoadBalancer() instanceof RibbonServiceLoadBalancer);
+        Assertions.assertFalse(processors.isEmpty());
+        Assertions.assertEquals(2, processors.size());
+        Assertions.assertTrue(processors.get(0).getLoadBalancer() instanceof RibbonServiceLoadBalancer);
+        Assertions.assertTrue(processors.get(1).getLoadBalancer() instanceof RibbonServiceLoadBalancer);
     }
 }
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulServiceCallRouteTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulServiceCallRouteTest.java
index 68de60c..83a4608 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulServiceCallRouteTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/SpringConsulServiceCallRouteTest.java
@@ -31,9 +31,9 @@ import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.impl.cloud.DefaultServiceCallProcessor;
 import org.apache.camel.processor.ChoiceProcessor;
 import org.apache.camel.processor.FilterProcessor;
-import org.apache.camel.test.testcontainers.spring.ContainerAwareSpringTestSupport;
-import org.junit.Assert;
-import org.junit.Test;
+import org.apache.camel.test.junit5.testcontainers.spring.ContainerAwareSpringTestSupport;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.testcontainers.containers.GenericContainer;
 
 public abstract class SpringConsulServiceCallRouteTest extends ContainerAwareSpringTestSupport {
@@ -130,7 +130,7 @@ public abstract class SpringConsulServiceCallRouteTest extends ContainerAwareSpr
     protected List<DefaultServiceCallProcessor> findServiceCallProcessors() {
         Route route = context().getRoute("scall");
 
-        Assert.assertNotNull("ServiceCall Route should be present", route);
+        Assertions.assertNotNull(route, "ServiceCall Route should be present");
 
         return findServiceCallProcessors(new ArrayList<>(), route.navigate());
     }
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelAnnotationsHandler.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelAnnotationsHandler.java
new file mode 100644
index 0000000..8bc45b2
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelAnnotationsHandler.java
@@ -0,0 +1,367 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.api.management.JmxSystemPropertyKeys;
+import org.apache.camel.api.management.ManagedCamelContext;
+import org.apache.camel.api.management.mbean.ManagedCamelContextMBean;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.apache.camel.impl.engine.InterceptSendToMockEndpointStrategy;
+import org.apache.camel.processor.interceptor.DefaultDebugger;
+import org.apache.camel.spi.Breakpoint;
+import org.apache.camel.spi.Debugger;
+import org.apache.camel.spi.EventNotifier;
+import org.apache.camel.spring.SpringCamelContext;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.apache.camel.util.CollectionStringBuffer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.core.annotation.AnnotationUtils;
+
+import static org.apache.camel.test.spring.CamelSpringTestHelper.getAllMethods;
+
+public final class CamelAnnotationsHandler {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(CamelAnnotationsHandler.class);
+
+    private CamelAnnotationsHandler() {
+    }
+
+    /**
+     * Handles @ExcludeRoutes to make it easier to exclude other routes when testing with Spring Boot.
+     *
+     * @param testClass the test class being executed
+     */
+    public static void handleExcludeRoutesForSpringBoot(Class<?> testClass) {
+        if (testClass.isAnnotationPresent(ExcludeRoutes.class)) {
+            Class[] routes = testClass.getAnnotation(ExcludeRoutes.class).value();
+            // need to setup this as a JVM system property
+            CollectionStringBuffer csb = new CollectionStringBuffer(",");
+            for (Class clazz : routes) {
+                csb.append(clazz.getName());
+            }
+            String key = "CamelTestSpringExcludeRoutes";
+            String value = csb.toString();
+
+            String exists = System.getProperty(key);
+            if (exists != null) {
+                LOGGER.warn("Cannot use @ExcludeRoutes as JVM property " + key + " has already been set.");
+            } else {
+                LOGGER.info("@ExcludeRoutes annotation found. Setting up JVM property {}={}", key, value);
+                System.setProperty(key, value);
+            }
+        }
+    }
+
+    /**
+     * Handles disabling of JMX on Camel contexts based on {@link DisableJmx}.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    public static void handleDisableJmx(ConfigurableApplicationContext context, Class<?> testClass) {
+        CamelSpringTestHelper.setOriginalJmxDisabledValue(System.getProperty(JmxSystemPropertyKeys.DISABLED));
+
+        if (testClass.isAnnotationPresent(DisableJmx.class)) {
+            if (testClass.getAnnotation(DisableJmx.class).value()) {
+                LOGGER.info("Disabling Camel JMX globally as DisableJmx annotation was found and disableJmx is set to true.");
+                System.setProperty(JmxSystemPropertyKeys.DISABLED, "true");
+
+            } else {
+                LOGGER.info("Enabling Camel JMX as DisableJmx annotation was found and disableJmx is set to false.");
+                System.clearProperty(JmxSystemPropertyKeys.DISABLED);
+            }
+        } else {
+            LOGGER.info("Disabling Camel JMX globally for tests by default. Use the DisableJMX annotation to override the default setting.");
+            System.setProperty(JmxSystemPropertyKeys.DISABLED, "true");
+        }
+    }
+
+    /**
+     * Handles disabling of JMX on Camel contexts based on {@link DisableJmx}.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    public static void handleRouteCoverage(ConfigurableApplicationContext context, Class<?> testClass, Function testMethod) throws Exception {
+        if (testClass.isAnnotationPresent(EnableRouteCoverage.class)) {
+            System.setProperty(CamelTestSupport.ROUTE_COVERAGE_ENABLED, "true");
+
+            CamelSpringTestHelper.doToSpringCamelContexts(context, new CamelSpringTestHelper.DoToSpringCamelContextsStrategy() {
+
+                @Override
+                public void execute(String contextName, SpringCamelContext camelContext) throws Exception {
+                    LOGGER.info("Enabling RouteCoverage");
+                    EventNotifier notifier = new RouteCoverageEventNotifier(testClass.getName(), testMethod);
+                    camelContext.addService(notifier, true);
+                    camelContext.getManagementStrategy().addEventNotifier(notifier);
+                }
+            });
+        }
+    }
+
+    public static void handleRouteCoverageDump(ConfigurableApplicationContext context, Class<?> testClass, Function testMethod) throws Exception {
+        if (testClass.isAnnotationPresent(EnableRouteCoverage.class)) {
+            CamelSpringTestHelper.doToSpringCamelContexts(context, new CamelSpringTestHelper.DoToSpringCamelContextsStrategy() {
+
+                @Override
+                public void execute(String contextName, SpringCamelContext camelContext) throws Exception {
+                    LOGGER.debug("Dumping RouteCoverage");
+
+                    String testMethodName = (String) testMethod.apply(this);
+                    RouteCoverageDumper.dumpRouteCoverage(camelContext, testClass.getName(), testMethodName);
+
+                    // reset JMX statistics
+                    ManagedCamelContextMBean managedCamelContext = camelContext.getExtension(ManagedCamelContext.class).getManagedCamelContext();
+                    if (managedCamelContext != null) {
+                        LOGGER.debug("Resetting JMX statistics for RouteCoverage");
+                        managedCamelContext.reset(true);
+                    }
+
+                    // turn off dumping one more time by removing the event listener (which would dump as well when Camel is stopping)
+                    // but this method was explicit invoked to dump such as from afterTest callbacks from JUnit.
+                    RouteCoverageEventNotifier eventNotifier = camelContext.hasService(RouteCoverageEventNotifier.class);
+                    if (eventNotifier != null) {
+                        camelContext.getManagementStrategy().removeEventNotifier(eventNotifier);
+                        camelContext.removeService(eventNotifier);
+                    }
+                }
+            });
+        }
+    }
+
+    public static void handleProvidesBreakpoint(ConfigurableApplicationContext context, Class<?> testClass) throws Exception {
+        Collection<Method> methods = getAllMethods(testClass);
+        final List<Breakpoint> breakpoints = new LinkedList<>();
+
+        for (Method method : methods) {
+            if (AnnotationUtils.findAnnotation(method, ProvidesBreakpoint.class) != null) {
+                Class<?>[] argTypes = method.getParameterTypes();
+                if (argTypes.length != 0) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                            + "] is annotated with ProvidesBreakpoint but is not a no-argument method.");
+                } else if (!Breakpoint.class.isAssignableFrom(method.getReturnType())) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                            + "] is annotated with ProvidesBreakpoint but does not return a Breakpoint.");
+                } else if (!Modifier.isStatic(method.getModifiers())) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                            + "] is annotated with ProvidesBreakpoint but is not static.");
+                } else if (!Modifier.isPublic(method.getModifiers())) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                            + "] is annotated with ProvidesBreakpoint but is not public.");
+                }
+
+                try {
+                    breakpoints.add((Breakpoint) method.invoke(null));
+                } catch (Exception e) {
+                    throw new RuntimeException("Method [" + method.getName()
+                            + "] threw exception during evaluation.", e);
+                }
+            }
+        }
+
+        if (breakpoints.size() != 0) {
+            CamelSpringTestHelper.doToSpringCamelContexts(context, new CamelSpringTestHelper.DoToSpringCamelContextsStrategy() {
+
+                public void execute(String contextName, SpringCamelContext camelContext)
+                        throws Exception {
+                    Debugger debugger = camelContext.getDebugger();
+                    if (debugger == null) {
+                        debugger = new DefaultDebugger();
+                        camelContext.setDebugger(debugger);
+                    }
+
+                    for (Breakpoint breakpoint : breakpoints) {
+                        LOGGER.info("Adding Breakpoint [{}] to CamelContext with name [{}].", breakpoint, contextName);
+                        debugger.addBreakpoint(breakpoint);
+                    }
+                }
+            });
+        }
+    }
+
+    /**
+     * Handles updating shutdown timeouts on Camel contexts based on {@link ShutdownTimeout}.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    public static void handleShutdownTimeout(ConfigurableApplicationContext context, Class<?> testClass) throws Exception {
+        final int shutdownTimeout;
+        final TimeUnit shutdownTimeUnit;
+        if (testClass.isAnnotationPresent(ShutdownTimeout.class)) {
+            shutdownTimeout = testClass.getAnnotation(ShutdownTimeout.class).value();
+            shutdownTimeUnit = testClass.getAnnotation(ShutdownTimeout.class).timeUnit();
+        } else {
+            shutdownTimeout = 10;
+            shutdownTimeUnit = TimeUnit.SECONDS;
+        }
+
+        CamelSpringTestHelper.doToSpringCamelContexts(context, new CamelSpringTestHelper.DoToSpringCamelContextsStrategy() {
+
+            public void execute(String contextName, SpringCamelContext camelContext)
+                    throws Exception {
+                LOGGER.info("Setting shutdown timeout to [{} {}] on CamelContext with name [{}].", shutdownTimeout, shutdownTimeUnit, contextName);
+                camelContext.getShutdownStrategy().setTimeout(shutdownTimeout);
+                camelContext.getShutdownStrategy().setTimeUnit(shutdownTimeUnit);
+            }
+        });
+    }
+
+    /**
+     * Handles auto-intercepting of endpoints with mocks based on {@link MockEndpoints}.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    public static void handleMockEndpoints(ConfigurableApplicationContext context, Class<?> testClass) throws Exception {
+        if (testClass.isAnnotationPresent(MockEndpoints.class)) {
+            final String mockEndpoints = testClass.getAnnotation(MockEndpoints.class).value();
+            CamelSpringTestHelper.doToSpringCamelContexts(context, new CamelSpringTestHelper.DoToSpringCamelContextsStrategy() {
+
+                public void execute(String contextName, SpringCamelContext camelContext)
+                        throws Exception {
+                    LOGGER.info("Enabling auto mocking of endpoints matching pattern [{}] on CamelContext with name [{}].", mockEndpoints, contextName);
+                    camelContext.adapt(ExtendedCamelContext.class).registerEndpointCallback(new InterceptSendToMockEndpointStrategy(mockEndpoints));
+                }
+            });
+        }
+    }
+
+    /**
+     * Handles auto-intercepting of endpoints with mocks based on {@link MockEndpointsAndSkip} and skipping the
+     * original endpoint.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    public static void handleMockEndpointsAndSkip(ConfigurableApplicationContext context, Class<?> testClass) throws Exception {
+        if (testClass.isAnnotationPresent(MockEndpointsAndSkip.class)) {
+            final String mockEndpoints = testClass.getAnnotation(MockEndpointsAndSkip.class).value();
+            CamelSpringTestHelper.doToSpringCamelContexts(context, new CamelSpringTestHelper.DoToSpringCamelContextsStrategy() {
+
+                public void execute(String contextName, SpringCamelContext camelContext)
+                        throws Exception {
+                    // resolve the property place holders of the mockEndpoints
+                    String mockEndpointsValue = camelContext.resolvePropertyPlaceholders(mockEndpoints);
+                    LOGGER.info("Enabling auto mocking and skipping of endpoints matching pattern [{}] on CamelContext with name [{}].", mockEndpointsValue, contextName);
+                    camelContext.adapt(ExtendedCamelContext.class).registerEndpointCallback(new InterceptSendToMockEndpointStrategy(mockEndpointsValue, true));
+                }
+            });
+        }
+    }
+
+    /**
+     * Handles override this method to include and override properties with the Camel {@link org.apache.camel.component.properties.PropertiesComponent}.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    public static void handleUseOverridePropertiesWithPropertiesComponent(ConfigurableApplicationContext context, Class<?> testClass) throws Exception {
+        Collection<Method> methods = getAllMethods(testClass);
+        final List<Properties> properties = new LinkedList<>();
+
+        for (Method method : methods) {
+            if (AnnotationUtils.findAnnotation(method, UseOverridePropertiesWithPropertiesComponent.class) != null) {
+                Class<?>[] argTypes = method.getParameterTypes();
+                if (argTypes.length > 0) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                            + "] is annotated with UseOverridePropertiesWithPropertiesComponent but is not a no-argument method.");
+                } else if (!Properties.class.isAssignableFrom(method.getReturnType())) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                            + "] is annotated with UseOverridePropertiesWithPropertiesComponent but does not return a java.util.Properties.");
+                } else if (!Modifier.isStatic(method.getModifiers())) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                            + "] is annotated with UseOverridePropertiesWithPropertiesComponent but is not static.");
+                } else if (!Modifier.isPublic(method.getModifiers())) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                            + "] is annotated with UseOverridePropertiesWithPropertiesComponent but is not public.");
+                }
+
+                try {
+                    properties.add((Properties) method.invoke(null));
+                } catch (Exception e) {
+                    throw new RuntimeException("Method [" + method.getName()
+                            + "] threw exception during evaluation.", e);
+                }
+            }
+        }
+
+        if (properties.size() != 0) {
+            CamelSpringTestHelper.doToSpringCamelContexts(context, new CamelSpringTestHelper.DoToSpringCamelContextsStrategy() {
+                public void execute(String contextName, SpringCamelContext camelContext) throws Exception {
+                    PropertiesComponent pc = camelContext.getComponent("properties", PropertiesComponent.class);
+                    Properties extra = new Properties();
+                    for (Properties prop : properties) {
+                        extra.putAll(prop);
+                    }
+                    if (!extra.isEmpty()) {
+                        LOGGER.info("Using {} properties to override any existing properties on the PropertiesComponent on CamelContext with name [{}].", extra.size(), contextName);
+                        pc.setOverrideProperties(extra);
+                    }
+                }
+            });
+        }
+    }
+
+    /**
+     * Handles starting of Camel contexts based on {@link UseAdviceWith} and other state in the JVM.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    public static void handleCamelContextStartup(ConfigurableApplicationContext context, Class<?> testClass) throws Exception {
+        boolean skip = "true".equalsIgnoreCase(System.getProperty("skipStartingCamelContext"));
+        if (skip) {
+            LOGGER.info("Skipping starting CamelContext(s) as system property skipStartingCamelContext is set to be true.");
+        } else if (testClass.isAnnotationPresent(UseAdviceWith.class)) {
+            if (testClass.getAnnotation(UseAdviceWith.class).value()) {
+                LOGGER.info("Skipping starting CamelContext(s) as UseAdviceWith annotation was found and isUseAdviceWith is set to true.");
+                skip = true;
+            } else {
+                LOGGER.info("Starting CamelContext(s) as UseAdviceWith annotation was found, but isUseAdviceWith is set to false.");
+                skip = false;
+            }
+        }
+
+        if (!skip) {
+            CamelSpringTestHelper.doToSpringCamelContexts(context, new CamelSpringTestHelper.DoToSpringCamelContextsStrategy() {
+                public void execute(String contextName,
+                                    SpringCamelContext camelContext) throws Exception {
+                    if (!camelContext.isStarted()) {
+                        LOGGER.info("Starting CamelContext with name [{}].", contextName);
+                        camelContext.start();
+                    } else {
+                        LOGGER.debug("CamelContext with name [{}] already started.", contextName);
+                    }
+                }
+            });
+        }
+    }
+
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootExecutionListener.java
new file mode 100644
index 0000000..4192e5e
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootExecutionListener.java
@@ -0,0 +1,95 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.spring.SpringCamelContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.test.context.TestContext;
+import org.springframework.test.context.support.AbstractTestExecutionListener;
+
+public class CamelSpringBootExecutionListener extends AbstractTestExecutionListener {
+
+    protected static ThreadLocal<ConfigurableApplicationContext> threadApplicationContext = new ThreadLocal<>();
+
+    private static final Logger LOG = LoggerFactory.getLogger(CamelSpringBootExecutionListener.class);
+
+    @Override
+    public void prepareTestInstance(TestContext testContext) throws Exception {
+        LOG.info("@RunWith(CamelSpringBootRunner.class) preparing: {}", testContext.getTestClass());
+
+        Class<?> testClass = testContext.getTestClass();
+
+        // need to prepare this before we load spring application context
+        CamelAnnotationsHandler.handleExcludeRoutesForSpringBoot(testClass);
+
+        // we are customizing the Camel context with
+        // CamelAnnotationsHandler so we do not want to start it
+        // automatically, which would happen when SpringCamelContext
+        // is added to Spring ApplicationContext, so we set the flag
+        // not to start it just yet
+        SpringCamelContext.setNoStart(true);
+        System.setProperty("skipStartingCamelContext", "true");
+        ConfigurableApplicationContext context = (ConfigurableApplicationContext) testContext.getApplicationContext();
+
+        // Post CamelContext(s) instantiation but pre CamelContext(s) start setup
+        CamelAnnotationsHandler.handleProvidesBreakpoint(context, testClass);
+        CamelAnnotationsHandler.handleShutdownTimeout(context, testClass);
+        CamelAnnotationsHandler.handleMockEndpoints(context, testClass);
+        CamelAnnotationsHandler.handleMockEndpointsAndSkip(context, testClass);
+        CamelAnnotationsHandler.handleUseOverridePropertiesWithPropertiesComponent(context, testClass);
+
+        System.clearProperty("skipStartingCamelContext");
+        SpringCamelContext.setNoStart(false);
+    }
+
+    @Override
+    public void beforeTestMethod(TestContext testContext) throws Exception {
+        LOG.info("@RunWith(CamelSpringBootRunner.class) before: {}.{}", testContext.getTestClass(), testContext.getTestMethod().getName());
+
+        Class<?> testClass = testContext.getTestClass();
+        String testName = testContext.getTestMethod().getName();
+
+        ConfigurableApplicationContext context = (ConfigurableApplicationContext) testContext.getApplicationContext();
+        threadApplicationContext.set(context);
+
+        // mark Camel to be startable again and start Camel
+        System.clearProperty("skipStartingCamelContext");
+
+        // route coverage need to know the test method
+        CamelAnnotationsHandler.handleRouteCoverage(context, testClass, s -> testName);
+
+        LOG.info("Initialized CamelSpringBootRunner now ready to start CamelContext");
+        CamelAnnotationsHandler.handleCamelContextStartup(context, testClass);
+    }
+
+    @Override
+    public void afterTestMethod(TestContext testContext) throws Exception {
+        LOG.info("@RunWith(CamelSpringBootRunner.class) after: {}.{}", testContext.getTestClass(), testContext.getTestMethod().getName());
+
+        Class<?> testClass = testContext.getTestClass();
+        String testName = testContext.getTestMethod().getName();
+
+        ConfigurableApplicationContext context = threadApplicationContext.get();
+        if (context != null && context.isRunning()) {
+            // dump route coverage for each test method so its accurate statistics
+            // even if spring application context is running (i.e. its not dirtied per test method)
+            CamelAnnotationsHandler.handleRouteCoverageDump(context, testClass, s -> testName);
+        }
+    }
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootJUnit4ClassRunner.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootJUnit4ClassRunner.java
new file mode 100644
index 0000000..d96c903
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootJUnit4ClassRunner.java
@@ -0,0 +1,33 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.junit.runners.model.InitializationError;
+
+/**
+ * The class {@link CamelSpringBootJUnit4ClassRunner} has been renamed to {@link CamelSpringBootRunner}
+ * which is a shorter and easier to remember name.
+ *
+ * @deprecated use {@link CamelSpringBootRunner}
+ */
+@Deprecated
+public class CamelSpringBootJUnit4ClassRunner extends CamelSpringBootRunner {
+
+    public CamelSpringBootJUnit4ClassRunner(Class<?> clazz) throws InitializationError {
+        super(clazz);
+    }
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootRunner.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootRunner.java
new file mode 100644
index 0000000..fbd3a2e
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringBootRunner.java
@@ -0,0 +1,87 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.util.List;
+
+import org.junit.runners.model.InitializationError;
+import org.springframework.test.context.TestContextManager;
+import org.springframework.test.context.TestExecutionListener;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+/**
+ * An implementation bringing the functionality of {@link CamelSpringTestSupport} to
+ * Spring Boot Test based test cases.  This approach allows developers to implement tests
+ * for their Spring Boot based applications/routes using the typical Spring Test conventions
+ * for test development.
+ */
+public class CamelSpringBootRunner extends SpringJUnit4ClassRunner {
+
+    public CamelSpringBootRunner(Class<?> clazz) throws InitializationError {
+        super(clazz);
+    }
+
+    /**
+     * Returns the specialized manager instance that provides tight integration between Camel testing
+     * features and Spring.
+     *
+     * @return a new instance of {@link CamelTestContextManager}.
+     */
+    @Override
+    protected TestContextManager createTestContextManager(Class<?> clazz) {
+        return new CamelTestContextManager(clazz);
+    }
+
+    /**
+     * An implementation providing additional integration between Spring Test and Camel
+     * testing features.
+     */
+    public static final class CamelTestContextManager extends TestContextManager {
+
+        public CamelTestContextManager(Class<?> testClass) {
+            super(testClass);
+
+            // turn off auto starting spring as we need to do this later
+            System.setProperty("skipStartingCamelContext", "true");
+
+            // is Camel already registered
+            if (!alreadyRegistered()) {
+                // inject Camel first, and then disable jmx and add the stop-watch
+                List<TestExecutionListener> list = getTestExecutionListeners();
+                list.add(0, new CamelSpringTestContextLoaderTestExecutionListener());
+                list.add(1, new DisableJmxTestExecutionListener());
+                list.add(2, new CamelSpringBootExecutionListener());
+                list.add(3, new StopWatchTestExecutionListener());
+            }
+        }
+
+        private boolean alreadyRegistered() {
+            List<TestExecutionListener> list = getTestExecutionListeners();
+            if (list != null) {
+                for (TestExecutionListener listener : list) {
+                    if (listener instanceof CamelSpringTestContextLoaderTestExecutionListener) {
+                        return true;
+                    }
+                }
+            }
+
+            return false;
+        }
+
+    }
+
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringDelegatingTestContextLoader.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringDelegatingTestContextLoader.java
new file mode 100644
index 0000000..ce486e5
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringDelegatingTestContextLoader.java
@@ -0,0 +1,138 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.reflect.Method;
+
+import org.apache.camel.api.management.JmxSystemPropertyKeys;
+import org.apache.camel.spring.SpringCamelContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigUtils;
+import org.springframework.test.context.MergedContextConfiguration;
+import org.springframework.test.context.support.DelegatingSmartContextLoader;
+
+/**
+ * CamelSpringDelegatingTestContextLoader which fixes issues in Camel's JavaConfigContextLoader. (adds support for Camel's test annotations)
+ * <br>
+ * <em>This loader can handle either classes or locations for configuring the context.</em>
+ * <br>
+ * NOTE: This TestContextLoader doesn't support the annotation of ExcludeRoutes now.
+ *
+ * @deprecated use {@link CamelSpringRunner} or {@link CamelSpringBootRunner} instead.
+ */
+@Deprecated
+public class CamelSpringDelegatingTestContextLoader extends DelegatingSmartContextLoader {
+
+    protected final Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Override
+    public ApplicationContext loadContext(MergedContextConfiguration mergedConfig) throws Exception {
+        
+        Class<?> testClass = getTestClass();
+        
+        if (logger.isDebugEnabled()) {
+            logger.debug("Loading ApplicationContext for merged context configuration [{}].", mergedConfig);
+        }
+        
+        // Pre CamelContext(s) instantiation setup
+        CamelAnnotationsHandler.handleDisableJmx(null, testClass);
+
+        try {
+            SpringCamelContext.setNoStart(true);
+            System.setProperty("skipStartingCamelContext", "true");
+            ConfigurableApplicationContext context = (ConfigurableApplicationContext) super.loadContext(mergedConfig);
+            SpringCamelContext.setNoStart(false);
+            System.clearProperty("skipStartingCamelContext");
+            return loadContext(context, testClass);
+        } finally {
+            cleanup(testClass);
+        }
+    }
+
+    /**
+     * Performs the bulk of the Spring application context loading/customization.
+     *
+     * @param context the partially configured context.  The context should have the bean definitions loaded, but nothing else.
+     * @param testClass the test class being executed
+     * @return the initialized (refreshed) Spring application context
+     *
+     * @throws Exception if there is an error during initialization/customization
+     */
+    public ApplicationContext loadContext(ConfigurableApplicationContext context, Class<?> testClass)
+        throws Exception {
+            
+        AnnotationConfigUtils.registerAnnotationConfigProcessors((BeanDefinitionRegistry) context);
+
+        // Post CamelContext(s) instantiation but pre CamelContext(s) start setup
+        CamelAnnotationsHandler.handleRouteCoverage(context, testClass, s -> getTestMethod().getName());
+        CamelAnnotationsHandler.handleProvidesBreakpoint(context, testClass);
+        CamelAnnotationsHandler.handleShutdownTimeout(context, testClass);
+        CamelAnnotationsHandler.handleMockEndpoints(context, testClass);
+        CamelAnnotationsHandler.handleMockEndpointsAndSkip(context, testClass);
+        CamelAnnotationsHandler.handleUseOverridePropertiesWithPropertiesComponent(context, testClass);
+        
+        // CamelContext(s) startup
+        CamelAnnotationsHandler.handleCamelContextStartup(context, testClass);
+        
+        return context;
+    }
+    
+    /**
+     * Cleanup/restore global state to defaults / pre-test values after the test setup
+     * is complete. 
+     * 
+     * @param testClass the test class being executed
+     */
+    protected void cleanup(Class<?> testClass) {
+        SpringCamelContext.setNoStart(false);
+        
+        if (testClass.isAnnotationPresent(DisableJmx.class)) {
+            if (CamelSpringTestHelper.getOriginalJmxDisabled() == null) {
+                System.clearProperty(JmxSystemPropertyKeys.DISABLED);
+            } else {
+                System.setProperty(JmxSystemPropertyKeys.DISABLED,
+                    CamelSpringTestHelper.getOriginalJmxDisabled());
+            }
+        }
+    }
+
+    /**
+     * Returns the class under test in order to enable inspection of annotations while the
+     * Spring context is being created.
+     * 
+     * @return the test class that is being executed
+     * @see CamelSpringTestHelper
+     */
+    protected Class<?> getTestClass() {
+        return CamelSpringTestHelper.getTestClass();
+    }
+
+    /**
+     * Returns the test method under test.
+     *
+     * @return the method that is being executed
+     * @see CamelSpringTestHelper
+     */
+    protected Method getTestMethod() {
+        return CamelSpringTestHelper.getTestMethod();
+    }
+
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringRunner.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringRunner.java
new file mode 100644
index 0000000..d64ce29
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringRunner.java
@@ -0,0 +1,83 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.util.List;
+
+import org.junit.runners.model.InitializationError;
+import org.springframework.test.context.TestContextManager;
+import org.springframework.test.context.TestExecutionListener;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+/**
+ * An implementation bringing the functionality of {@link org.apache.camel.test.spring.CamelSpringTestSupport} to
+ * Spring Test based test cases.  This approach allows developers to implement tests
+ * for their Spring based applications/routes using the typical Spring Test conventions
+ * for test development.
+ */
+public class CamelSpringRunner extends SpringJUnit4ClassRunner {
+
+    public CamelSpringRunner(Class<?> clazz) throws InitializationError {
+        super(clazz);
+    }
+
+    /**
+     * Returns the specialized manager instance that provides tight integration between Camel testing
+     * features and Spring.
+     *
+     * @return a new instance of {@link CamelTestContextManager}.
+     */
+    @Override
+    protected TestContextManager createTestContextManager(Class<?> clazz) {
+        return new CamelTestContextManager(clazz);
+    }
+
+    /**
+     * An implementation providing additional integration between Spring Test and Camel
+     * testing features.
+     */
+    public static final class CamelTestContextManager extends TestContextManager {
+
+        public CamelTestContextManager(Class<?> testClass) {
+            super(testClass);
+
+            // is Camel already registered
+            if (!alreadyRegistered()) {
+                // inject Camel first, and then disable jmx and add the stop-watch
+                List<TestExecutionListener> list = getTestExecutionListeners();
+                list.add(0, new CamelSpringTestContextLoaderTestExecutionListener());
+                list.add(1, new DisableJmxTestExecutionListener());
+                list.add(2, new StopWatchTestExecutionListener());
+            }
+        }
+
+        private boolean alreadyRegistered() {
+            List<TestExecutionListener> list = getTestExecutionListeners();
+            if (list != null) {
+                for (TestExecutionListener listener : list) {
+                    if (listener instanceof CamelSpringTestContextLoaderTestExecutionListener) {
+                        return true;
+                    }
+                }
+            }
+
+            return false;
+        }
+
+    }
+
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoader.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoader.java
new file mode 100644
index 0000000..99e52e0
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoader.java
@@ -0,0 +1,551 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.api.management.JmxSystemPropertyKeys;
+import org.apache.camel.impl.engine.InterceptSendToMockEndpointStrategy;
+import org.apache.camel.processor.interceptor.DefaultDebugger;
+import org.apache.camel.spi.Breakpoint;
+import org.apache.camel.spi.Debugger;
+import org.apache.camel.spi.EventNotifier;
+import org.apache.camel.spi.PropertiesComponent;
+import org.apache.camel.spring.SpringCamelContext;
+import org.apache.camel.test.ExcludingPackageScanClassResolver;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.apache.camel.test.junit5.spring.CamelSpringTestHelper.DoToSpringCamelContextsStrategy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.beans.factory.support.RootBeanDefinition;
+import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigUtils;
+import org.springframework.context.support.GenericApplicationContext;
+import org.springframework.core.annotation.AnnotationUtils;
+import org.springframework.test.context.MergedContextConfiguration;
+import org.springframework.test.context.support.AbstractContextLoader;
+import org.springframework.test.context.support.AbstractGenericContextLoader;
+import org.springframework.test.context.support.GenericXmlContextLoader;
+import org.springframework.util.StringUtils;
+
+import static org.apache.camel.test.spring.CamelSpringTestHelper.getAllMethods;
+
+/**
+ * Replacement for the default {@link GenericXmlContextLoader} that provides hooks for
+ * processing some class level Camel related test annotations.
+ */
+public class CamelSpringTestContextLoader extends AbstractContextLoader {
+    
+    private static final Logger LOG = LoggerFactory.getLogger(CamelSpringTestContextLoader.class);
+    
+    /**
+     *  Modeled after the Spring implementation in {@link AbstractGenericContextLoader},
+     *  this method creates and refreshes the application context while providing for
+     *  processing of additional Camel specific post-refresh actions.  We do not provide the
+     *  pre-post hooks for customization seen in {@link AbstractGenericContextLoader} because
+     *  they probably are unnecessary for 90+% of users.
+     *  <p/>
+     *  For some functionality, we cannot use {@link org.springframework.test.context.TestExecutionListener} because we need
+     *  to both produce the desired outcome during application context loading, and also cleanup
+     *  after ourselves even if the test class never executes.  Thus the listeners, which
+     *  only run if the application context is successfully initialized are insufficient to
+     *  provide the behavior described above.
+     */
+    @Override
+    public ApplicationContext loadContext(MergedContextConfiguration mergedConfig) throws Exception {
+        Class<?> testClass = getTestClass();
+        
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Loading ApplicationContext for merged context configuration [{}].", mergedConfig);
+        }
+        
+        try {            
+            GenericApplicationContext context = createContext(testClass, mergedConfig);
+            prepareContext(context, mergedConfig);
+            loadBeanDefinitions(context, mergedConfig);
+            return loadContext(context, testClass);
+        } finally {
+            cleanup(testClass);
+        }
+    }
+    
+    /**
+     *  Modeled after the Spring implementation in {@link AbstractGenericContextLoader},
+     *  this method creates and refreshes the application context while providing for
+     *  processing of additional Camel specific post-refresh actions.  We do not provide the
+     *  pre-post hooks for customization seen in {@link AbstractGenericContextLoader} because
+     *  they probably are unnecessary for 90+% of users.
+     *  <p/>
+     *  For some functionality, we cannot use {@link org.springframework.test.context.TestExecutionListener} because we need
+     *  to both produce the desired outcome during application context loading, and also cleanup
+     *  after ourselves even if the test class never executes.  Thus the listeners, which
+     *  only run if the application context is successfully initialized are insufficient to
+     *  provide the behavior described above.
+     */
+    @Override
+    public ApplicationContext loadContext(String... locations) throws Exception {
+        
+        Class<?> testClass = getTestClass();
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Loading ApplicationContext for locations [" + StringUtils.arrayToCommaDelimitedString(locations) + "].");
+        }
+        
+        try {
+            GenericApplicationContext context = createContext(testClass, null);
+            loadBeanDefinitions(context, locations);
+            return loadContext(context, testClass);
+        } finally {
+            cleanup(testClass);
+        }
+    }
+
+    /**
+     * Returns &quot;<code>-context.xml</code>&quot;.
+     */
+    @Override
+    public String getResourceSuffix() {
+        return "-context.xml";
+    }
+    
+    /**
+     * Performs the bulk of the Spring application context loading/customization.
+     *
+     * @param context the partially configured context.  The context should have the bean definitions loaded, but nothing else.
+     * @param testClass the test class being executed
+     * @return the initialized (refreshed) Spring application context
+     *
+     * @throws Exception if there is an error during initialization/customization
+     */
+    protected ApplicationContext loadContext(GenericApplicationContext context, Class<?> testClass) throws Exception {
+            
+        AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
+        
+        // Pre CamelContext(s) instantiation setup
+        handleDisableJmx(context, testClass);        
+        handleUseOverridePropertiesWithPropertiesComponent(context, testClass);
+        
+        // Temporarily disable CamelContext start while the contexts are instantiated.
+        SpringCamelContext.setNoStart(true);
+        context.refresh();
+        context.registerShutdownHook();
+        // Turn CamelContext startup back on since the context's have now been instantiated.
+        SpringCamelContext.setNoStart(false);
+        
+        // Post CamelContext(s) instantiation but pre CamelContext(s) start setup
+        handleRouteCoverage(context, testClass);
+        handleProvidesBreakpoint(context, testClass);
+        handleShutdownTimeout(context, testClass);
+        handleMockEndpoints(context, testClass);
+        handleMockEndpointsAndSkip(context, testClass);
+
+        // CamelContext(s) startup
+        handleCamelContextStartup(context, testClass);
+        
+        return context;
+    }
+    
+    /**
+     * Cleanup/restore global state to defaults / pre-test values after the test setup
+     * is complete. 
+     * 
+     * @param testClass the test class being executed
+     */
+    protected void cleanup(Class<?> testClass) {
+        SpringCamelContext.setNoStart(false);
+        
+        if (testClass.isAnnotationPresent(DisableJmx.class)) {
+            if (CamelSpringTestHelper.getOriginalJmxDisabled() == null) {
+                System.clearProperty(JmxSystemPropertyKeys.DISABLED);
+            } else {
+                System.setProperty(JmxSystemPropertyKeys.DISABLED,
+                    CamelSpringTestHelper.getOriginalJmxDisabled());
+            }
+        }
+    }
+    
+    protected void loadBeanDefinitions(GenericApplicationContext context, MergedContextConfiguration mergedConfig) {
+        (new XmlBeanDefinitionReader(context)).loadBeanDefinitions(mergedConfig.getLocations());
+    }
+    
+    protected void loadBeanDefinitions(GenericApplicationContext context, String... locations) {
+        (new XmlBeanDefinitionReader(context)).loadBeanDefinitions(locations);
+    }
+    
+    /**
+     * Creates and starts the Spring context while optionally starting any loaded Camel contexts.
+     *
+     * @param testClass the test class that is being executed
+     * @return the loaded Spring context
+     */
+    protected GenericApplicationContext createContext(Class<?> testClass, MergedContextConfiguration mergedConfig) {
+        ApplicationContext parentContext = null;
+        GenericApplicationContext routeExcludingContext = null;
+        
+        if (mergedConfig != null) {
+            parentContext = mergedConfig.getParentApplicationContext();
+        }
+        
+        if (testClass.isAnnotationPresent(ExcludeRoutes.class)) {
+            Class<?>[] excludedClasses = testClass.getAnnotation(ExcludeRoutes.class).value();
+            
+            if (excludedClasses.length > 0) {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Setting up package scanning excluded classes as ExcludeRoutes "
+                            + "annotation was found. Excluding [" + StringUtils.arrayToCommaDelimitedString(excludedClasses) + "].");
+                }
+                
+                if (parentContext == null) {
+                    routeExcludingContext = new GenericApplicationContext();
+                } else {
+                    routeExcludingContext = new GenericApplicationContext(parentContext);
+                }
+                routeExcludingContext.registerBeanDefinition("excludingResolver", new RootBeanDefinition(ExcludingPackageScanClassResolver.class));
+                routeExcludingContext.refresh();
+                
+                ExcludingPackageScanClassResolver excludingResolver = routeExcludingContext.getBean("excludingResolver", ExcludingPackageScanClassResolver.class);
+                List<Class<?>> excluded = Arrays.asList(excludedClasses);
+                excludingResolver.setExcludedClasses(new HashSet<>(excluded));
+            } else {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Not enabling package scanning excluded classes as ExcludeRoutes "
+                            + "annotation was found but no classes were excluded.");
+                }
+            }
+        }
+        
+        GenericApplicationContext context;
+
+        if (routeExcludingContext != null) {
+            context = new GenericApplicationContext(routeExcludingContext);
+        } else {
+            if (parentContext != null) {
+                context = new GenericApplicationContext(parentContext);
+            } else {
+                context = new GenericApplicationContext();
+            }
+        }
+        
+        return context;
+    }
+    
+    /**
+     * Handles disabling of JMX on Camel contexts based on {@link DisableJmx}.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    protected void handleDisableJmx(GenericApplicationContext context, Class<?> testClass) {
+        CamelSpringTestHelper.setOriginalJmxDisabledValue(System.getProperty(JmxSystemPropertyKeys.DISABLED));
+
+        if (testClass.isAnnotationPresent(DisableJmx.class)) {
+            if (testClass.getAnnotation(DisableJmx.class).value()) {
+                LOG.info("Disabling Camel JMX globally as DisableJmx annotation was found and disableJmx is set to true.");
+                System.setProperty(JmxSystemPropertyKeys.DISABLED, "true");
+            } else {
+                LOG.info("Enabling Camel JMX as DisableJmx annotation was found and disableJmx is set to false.");
+                System.clearProperty(JmxSystemPropertyKeys.DISABLED);
+            }
+        } else if (!testClass.isAnnotationPresent(EnableRouteCoverage.class)) {
+            // route coverage need JMX so do not disable it by default
+            LOG.info("Disabling Camel JMX globally for tests by default.  Use the DisableJMX annotation to override the default setting.");
+            System.setProperty(JmxSystemPropertyKeys.DISABLED, "true");
+        }
+    }
+
+    /**
+     * Handles disabling of JMX on Camel contexts based on {@link DisableJmx}.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    private void handleRouteCoverage(GenericApplicationContext context, Class<?> testClass) throws Exception {
+        if (testClass.isAnnotationPresent(EnableRouteCoverage.class)) {
+            System.setProperty(CamelTestSupport.ROUTE_COVERAGE_ENABLED, "true");
+
+            CamelSpringTestHelper.doToSpringCamelContexts(context, new DoToSpringCamelContextsStrategy() {
+
+                @Override
+                public void execute(String contextName, SpringCamelContext camelContext) throws Exception {
+                    LOG.info("Enabling RouteCoverage");
+                    EventNotifier notifier = new RouteCoverageEventNotifier(testClass.getName(), s -> getTestMethod().getName());
+                    camelContext.addService(notifier, true);
+                    camelContext.getManagementStrategy().addEventNotifier(notifier);
+                }
+            });
+        }
+    }
+
+    /**
+     * Handles the processing of the {@link ProvidesBreakpoint} annotation on a test class.  Exists here
+     * as it is needed in 
+     *
+     * @param context the initialized Spring context containing the Camel context(s) to insert breakpoints into 
+     * @param testClass the test class being processed
+     *
+     * @throws Exception if there is an error processing the class
+     */
+    protected void handleProvidesBreakpoint(GenericApplicationContext context, Class<?> testClass) throws Exception {
+        Collection<Method> methods = getAllMethods(testClass);
+        final List<Breakpoint> breakpoints = new LinkedList<>();
+        
+        for (Method method : methods) {
+            if (AnnotationUtils.findAnnotation(method, ProvidesBreakpoint.class) != null) {
+                Class<?>[] argTypes = method.getParameterTypes();
+                if (argTypes.length != 0) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                           + "] is annotated with ProvidesBreakpoint but is not a no-argument method.");
+                } else if (!Breakpoint.class.isAssignableFrom(method.getReturnType())) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                           + "] is annotated with ProvidesBreakpoint but does not return a Breakpoint.");
+                } else if (!Modifier.isStatic(method.getModifiers())) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                           + "] is annotated with ProvidesBreakpoint but is not static.");
+                } else if (!Modifier.isPublic(method.getModifiers())) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                           + "] is annotated with ProvidesBreakpoint but is not public.");
+                }
+                
+                try {
+                    breakpoints.add((Breakpoint) method.invoke(null));
+                } catch (Exception e) {
+                    throw new RuntimeException("Method [" + method.getName()
+                           + "] threw exception during evaluation.", e);
+                }
+            }
+        }
+        
+        if (breakpoints.size() != 0) {
+            CamelSpringTestHelper.doToSpringCamelContexts(context, new DoToSpringCamelContextsStrategy() {
+                
+                @Override
+                public void execute(String contextName, SpringCamelContext camelContext)
+                    throws Exception {
+                    Debugger debugger = camelContext.getDebugger();
+                    if (debugger == null) {
+                        debugger = new DefaultDebugger();
+                        camelContext.setDebugger(debugger);
+                    }
+                    
+                    for (Breakpoint breakpoint : breakpoints) {
+                        LOG.info("Adding Breakpoint [{}] to CamelContext with name [{}].", breakpoint, contextName);
+                        debugger.addBreakpoint(breakpoint);
+                    }
+                }
+            });
+        }
+    }
+    
+    
+    /**
+     * Handles updating shutdown timeouts on Camel contexts based on {@link ShutdownTimeout}.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    protected void handleShutdownTimeout(GenericApplicationContext context, Class<?> testClass) throws Exception {
+        final int shutdownTimeout;
+        final TimeUnit shutdownTimeUnit;
+        if (testClass.isAnnotationPresent(ShutdownTimeout.class)) {
+            shutdownTimeout = testClass.getAnnotation(ShutdownTimeout.class).value();
+            shutdownTimeUnit = testClass.getAnnotation(ShutdownTimeout.class).timeUnit();
+        } else {
+            shutdownTimeout = 10;
+            shutdownTimeUnit = TimeUnit.SECONDS;
+        }
+        
+        CamelSpringTestHelper.doToSpringCamelContexts(context, new DoToSpringCamelContextsStrategy() {
+            
+            @Override
+            public void execute(String contextName, SpringCamelContext camelContext)
+                throws Exception {
+                LOG.info("Setting shutdown timeout to [{} {}] on CamelContext with name [{}].", shutdownTimeout, shutdownTimeUnit, contextName);
+                camelContext.getShutdownStrategy().setTimeout(shutdownTimeout);
+                camelContext.getShutdownStrategy().setTimeUnit(shutdownTimeUnit);
+            }
+        });
+    }
+    
+    /**
+     * Handles auto-intercepting of endpoints with mocks based on {@link MockEndpoints}.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    protected void handleMockEndpoints(GenericApplicationContext context, Class<?> testClass) throws Exception {
+        if (testClass.isAnnotationPresent(MockEndpoints.class)) {
+            final String mockEndpoints = testClass.getAnnotation(MockEndpoints.class).value();
+            CamelSpringTestHelper.doToSpringCamelContexts(context, new DoToSpringCamelContextsStrategy() {
+                
+                @Override
+                public void execute(String contextName, SpringCamelContext camelContext)
+                    throws Exception {
+                    LOG.info("Enabling auto mocking of endpoints matching pattern [{}] on CamelContext with name [{}].", mockEndpoints, contextName);
+                    camelContext.adapt(ExtendedCamelContext.class).registerEndpointCallback(new InterceptSendToMockEndpointStrategy(mockEndpoints));
+                }
+            });
+        }
+    }
+    
+    /**
+     * Handles auto-intercepting of endpoints with mocks based on {@link MockEndpointsAndSkip} and skipping the
+     * original endpoint.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    protected void handleMockEndpointsAndSkip(GenericApplicationContext context, Class<?> testClass) throws Exception {
+        if (testClass.isAnnotationPresent(MockEndpointsAndSkip.class)) {
+            final String mockEndpoints = testClass.getAnnotation(MockEndpointsAndSkip.class).value();
+            CamelSpringTestHelper.doToSpringCamelContexts(context, new DoToSpringCamelContextsStrategy() {
+                
+                @Override
+                public void execute(String contextName, SpringCamelContext camelContext)
+                    throws Exception {
+                    // resovle the property place holders of the mockEndpoints 
+                    String mockEndpointsValue = camelContext.resolvePropertyPlaceholders(mockEndpoints);
+                    LOG.info("Enabling auto mocking and skipping of endpoints matching pattern [{}] on CamelContext with name [{}].", mockEndpointsValue, contextName);
+                    camelContext.adapt(ExtendedCamelContext.class).registerEndpointCallback(new InterceptSendToMockEndpointStrategy(mockEndpointsValue, true));
+                }
+            });
+        }
+    }
+    
+    /**
+     * Sets property overrides for the Camel {@link org.apache.camel.component.properties.PropertiesComponent}.
+     *
+     * @param context the pre-refresh Spring context
+     * @param testClass the test class being executed
+     */
+    protected void handleUseOverridePropertiesWithPropertiesComponent(ConfigurableApplicationContext context, Class<?> testClass) throws Exception {
+        Collection<Method> methods = getAllMethods(testClass);
+        final List<Properties> properties = new LinkedList<>();
+
+        for (Method method : methods) {
+            if (AnnotationUtils.findAnnotation(method, UseOverridePropertiesWithPropertiesComponent.class) != null) {
+                Class<?>[] argTypes = method.getParameterTypes();
+                if (argTypes.length > 0) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                            + "] is annotated with UseOverridePropertiesWithPropertiesComponent but is not a no-argument method.");
+                } else if (!Properties.class.isAssignableFrom(method.getReturnType())) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                            + "] is annotated with UseOverridePropertiesWithPropertiesComponent but does not return a java.util.Properties.");
+                } else if (!Modifier.isStatic(method.getModifiers())) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                            + "] is annotated with UseOverridePropertiesWithPropertiesComponent but is not static.");
+                } else if (!Modifier.isPublic(method.getModifiers())) {
+                    throw new IllegalArgumentException("Method [" + method.getName()
+                            + "] is annotated with UseOverridePropertiesWithPropertiesComponent but is not public.");
+                }
+
+                try {
+                    properties.add((Properties) method.invoke(null));
+                } catch (Exception e) {
+                    throw new RuntimeException("Method [" + method.getName()
+                            + "] threw exception during evaluation.", e);
+                }
+            }
+        }
+        
+        Properties extra = new Properties();
+        for (Properties prop : properties) {
+            extra.putAll(prop);
+        }
+
+        if (!extra.isEmpty()) {
+            context.addBeanFactoryPostProcessor(beanFactory -> beanFactory.addBeanPostProcessor(new BeanPostProcessor() {
+                @Override
+                public Object postProcessAfterInitialization(Object bean, String beanName) {
+                    if (bean instanceof CamelContext) {
+                        CamelContext camelContext = (CamelContext) bean;
+                        PropertiesComponent pc = camelContext.getPropertiesComponent(true);
+                        LOG.info("Using {} properties to override any existing properties on the PropertiesComponent on CamelContext with name [{}].", extra.size(), camelContext.getName());
+                        pc.setOverrideProperties(extra);
+                    }
+                    return bean;
+                }
+            }));
+        }
+    }
+
+    /**
+     * Handles starting of Camel contexts based on {@link UseAdviceWith} and other state in the JVM.
+     *
+     * @param context the initialized Spring context
+     * @param testClass the test class being executed
+     */
+    protected void handleCamelContextStartup(GenericApplicationContext context, Class<?> testClass) throws Exception {
+        boolean skip = "true".equalsIgnoreCase(System.getProperty("skipStartingCamelContext"));
+        if (skip) {
+            LOG.info("Skipping starting CamelContext(s) as system property skipStartingCamelContext is set to be true.");
+        } else if (testClass.isAnnotationPresent(UseAdviceWith.class)) {
+            if (testClass.getAnnotation(UseAdviceWith.class).value()) {
+                LOG.info("Skipping starting CamelContext(s) as UseAdviceWith annotation was found and isUseAdviceWith is set to true.");
+                skip = true;
+            } else {
+                LOG.info("Starting CamelContext(s) as UseAdviceWith annotation was found, but isUseAdviceWith is set to false.");
+                skip = false;
+            }
+        }
+        
+        if (!skip) {
+            CamelSpringTestHelper.doToSpringCamelContexts(context, new DoToSpringCamelContextsStrategy() {
+                
+                @Override
+                public void execute(String contextName,
+                        SpringCamelContext camelContext) throws Exception {
+                    LOG.info("Starting CamelContext with name [{}].", contextName);
+                    camelContext.start();
+                }
+            });
+        }
+    }
+    
+    /**
+     * Returns the class under test in order to enable inspection of annotations while the
+     * Spring context is being created.
+     * 
+     * @return the test class that is being executed
+     * @see CamelSpringTestHelper
+     */
+    protected Class<?> getTestClass() {
+        return CamelSpringTestHelper.getTestClass();
+    }
+
+    /**
+     * Returns the test method under test.
+     *
+     * @return the method that is being executed
+     * @see CamelSpringTestHelper
+     */
+    protected Method getTestMethod() {
+        return CamelSpringTestHelper.getTestMethod();
+    }
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoaderTestExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoaderTestExecutionListener.java
new file mode 100644
index 0000000..a749104
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestContextLoaderTestExecutionListener.java
@@ -0,0 +1,50 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.springframework.core.Ordered;
+import org.springframework.test.context.TestContext;
+import org.springframework.test.context.support.AbstractTestExecutionListener;
+
+/**
+ * Helper for {@link CamelSpringTestContextLoader} that sets the test class state
+ * in {@link CamelSpringTestHelper} almost immediately before the loader initializes
+ * the Spring context.
+ * <p/>
+ * Implemented as a listener as the state can be set on a {@code ThreadLocal} and we are pretty sure
+ * that the same thread will be used to initialize the Spring context.
+ */
+public class CamelSpringTestContextLoaderTestExecutionListener extends AbstractTestExecutionListener {
+
+    /**
+     * The default implementation returns {@link org.springframework.core.Ordered#LOWEST_PRECEDENCE},
+     * thereby ensuring that custom listeners are ordered after default
+     * listeners supplied by the framework. Can be overridden by subclasses
+     * as necessary.
+     */
+    @Override
+    public int getOrder() {
+        //set Camel first
+        return Ordered.HIGHEST_PRECEDENCE;
+    }
+
+    @Override
+    public void prepareTestInstance(TestContext testContext) throws Exception {
+        CamelSpringTestHelper.setTestClass(testContext.getTestClass());
+        CamelSpringTestHelper.setTestContext(testContext);
+    }
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestHelper.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestHelper.java
new file mode 100644
index 0000000..a9ed288
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestHelper.java
@@ -0,0 +1,109 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.apache.camel.spring.SpringCamelContext;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.test.context.TestContext;
+
+/**
+ * Helper that provides state information across the levels of Spring Test that do not expose the
+ * necessary context/state for integration of Camel testing features into Spring test.  Also
+ * provides utility methods.
+ * <p/>
+ * Note that this class makes use of {@link ThreadLocal}s to maintain some state.  It is imperative
+ * that the state setters and getters are accessed within the scope of a single thread in order
+ * for this class to work right.
+ */
+public final class CamelSpringTestHelper {
+    
+    private static ThreadLocal<String> originalJmxDisabledValue = new ThreadLocal<>();
+    private static ThreadLocal<Class<?>> testClazz = new ThreadLocal<>();
+    private static ThreadLocal<TestContext> testContext = new ThreadLocal<>();
+
+    private CamelSpringTestHelper() {
+    }
+    
+    public static String getOriginalJmxDisabled() {
+        return originalJmxDisabledValue.get();
+    }
+    
+    public static void setOriginalJmxDisabledValue(String originalValue) {
+        originalJmxDisabledValue.set(originalValue);
+    }
+    
+    public static Class<?> getTestClass() {
+        return testClazz.get();
+    }
+    
+    public static void setTestClass(Class<?> testClass) {
+        testClazz.set(testClass);
+    }
+
+    public static Method getTestMethod() {
+        return testContext.get().getTestMethod();
+    }
+
+    public static void setTestContext(TestContext context) {
+        testContext.set(context);
+    }
+
+    /**
+     * Returns all methods defined in {@code clazz} and its superclasses/interfaces.
+     */
+    public static Collection<Method> getAllMethods(Class<?> clazz)  {
+        Set<Method> methods = new LinkedHashSet<>();
+        Class<?> currentClass = clazz;
+        
+        while (currentClass != null) {
+            methods.addAll(Arrays.asList(clazz.getMethods()));
+            currentClass = currentClass.getSuperclass(); 
+        }
+                
+        return methods;
+    }
+    
+    /**
+     * Executes {@code strategy} against all {@link SpringCamelContext}s found in the Spring context.
+     * This method reduces the amount of repeated find and loop code throughout this class.
+     *
+     * @param context the Spring context to search
+     * @param strategy the strategy to execute against the found {@link SpringCamelContext}s
+     *
+     * @throws Exception if there is an error executing any of the strategies
+     */
+    public static void doToSpringCamelContexts(ApplicationContext context, DoToSpringCamelContextsStrategy strategy) throws Exception {
+        Map<String, SpringCamelContext> contexts = context.getBeansOfType(SpringCamelContext.class);
+        
+        for (Entry<String, SpringCamelContext> entry : contexts.entrySet()) {
+            strategy.execute(entry.getKey(), entry.getValue());
+        }
+    }
+    
+    public interface DoToSpringCamelContextsStrategy {
+        void execute(String contextName, SpringCamelContext camelContext) throws Exception;
+    }
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestSupport.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestSupport.java
new file mode 100644
index 0000000..839f675
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTestSupport.java
@@ -0,0 +1,212 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.spring.SpringCamelContext;
+import org.apache.camel.test.ExcludingPackageScanClassResolver;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.springframework.beans.factory.support.RootBeanDefinition;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.GenericApplicationContext;
+
+/**
+ * Base test-class for classic Spring application such as standalone, web applications.
+ * Do <tt>not</tt> use this class for Spring Boot testing, instead use <code>@RunWith(CamelSpringBootRunner.class)</code>.
+ */
+public abstract class CamelSpringTestSupport extends CamelTestSupport {
+    protected static ThreadLocal<AbstractApplicationContext> threadAppContext = new ThreadLocal<>();
+    protected static Object lock = new Object();
+    
+    protected AbstractApplicationContext applicationContext;
+    protected abstract AbstractApplicationContext createApplicationContext();
+
+    @Override
+    public void postProcessTest() throws Exception {
+        if (isCreateCamelContextPerClass()) {
+            applicationContext = threadAppContext.get();
+        }
+        super.postProcessTest();
+    }
+
+    @Override
+    public void doPreSetup() throws Exception {
+        if (!"true".equalsIgnoreCase(System.getProperty("skipStartingCamelContext"))) {
+            // tell camel-spring it should not trigger starting CamelContext, since we do that later
+            // after we are finished setting up the unit test
+            synchronized (lock) {
+                SpringCamelContext.setNoStart(true);
+                if (isCreateCamelContextPerClass()) {
+                    applicationContext = threadAppContext.get();
+                    if (applicationContext == null) {
+                        applicationContext = doCreateApplicationContext();
+                        threadAppContext.set(applicationContext);
+                    }
+                } else {
+                    applicationContext = doCreateApplicationContext();
+                }
+                SpringCamelContext.setNoStart(false);
+            }
+        } else {
+            log.info("Skipping starting CamelContext as system property skipStartingCamelContext is set to be true.");
+        }
+    }
+
+    private AbstractApplicationContext doCreateApplicationContext() {
+        AbstractApplicationContext context = createApplicationContext();
+        Assertions.assertNotNull(context, "Should have created a valid Spring application context");
+
+        String[] profiles = activeProfiles();
+        if (profiles != null && profiles.length > 0) {
+            // the context must not be active
+            if (context.isActive()) {
+                throw new IllegalStateException("Cannot active profiles: " + Arrays.asList(profiles) + " on active Spring application context: " + context
+                    + ". The code in your createApplicationContext() method should be adjusted to create the application context with refresh = false as parameter");
+            }
+            log.info("Spring activating profiles: {}", Arrays.asList(profiles));
+            context.getEnvironment().setActiveProfiles(profiles);
+        }
+
+        // ensure the context has been refreshed at least once
+        if (!context.isActive()) {
+            context.refresh();
+        }
+
+        return context;
+    }
+
+    @Override
+    @AfterEach
+    public void tearDown() throws Exception {
+        super.tearDown();
+
+        if (!isCreateCamelContextPerClass()) {
+            IOHelper.close(applicationContext);
+            applicationContext = null;
+        }
+    }
+
+    @Override
+    public void doPostTearDown() throws Exception {
+        super.doPostTearDown();
+
+        if (threadAppContext.get() != null) {
+            IOHelper.close(threadAppContext.get());
+            threadAppContext.remove();
+        }
+    }
+    
+    /**
+     * Create a parent context that initializes a
+     * {@link org.apache.camel.spi.PackageScanClassResolver} to exclude a set of given classes from
+     * being resolved. Typically this is used at test time to exclude certain routes,
+     * which might otherwise be just noisy, from being discovered and initialized.
+     * <p/>
+     * To use this filtering mechanism it is necessary to provide the
+     * {@link org.springframework.context.ApplicationContext} returned from here as the parent context to
+     * your test context e.g.
+     *
+     * <pre>
+     * protected AbstractXmlApplicationContext createApplicationContext() {
+     *     return new ClassPathXmlApplicationContext(new String[] {&quot;test-context.xml&quot;}, getRouteExcludingApplicationContext());
+     * }
+     * </pre>
+     *
+     * This will, in turn, call the template methods <code>excludedRoutes</code>
+     * and <code>excludedRoute</code> to determine the classes to be excluded from scanning.
+     *
+     * @return ApplicationContext a parent {@link org.springframework.context.ApplicationContext} configured
+     *         to exclude certain classes from package scanning
+     */
+    protected ApplicationContext getRouteExcludingApplicationContext() {
+        GenericApplicationContext routeExcludingContext = new GenericApplicationContext();
+        routeExcludingContext.registerBeanDefinition("excludingResolver", new RootBeanDefinition(ExcludingPackageScanClassResolver.class));
+        routeExcludingContext.refresh();
+
+        ExcludingPackageScanClassResolver excludingResolver = routeExcludingContext.getBean("excludingResolver", ExcludingPackageScanClassResolver.class);
+        List<Class<?>> excluded = Arrays.asList(excludeRoutes());
+        excludingResolver.setExcludedClasses(new HashSet<>(excluded));
+
+        return routeExcludingContext;
+    }
+
+    /**
+     * Template method used to exclude {@link org.apache.camel.Route} from the test time context
+     * route scanning
+     *
+     * @return Class[] the classes to be excluded from test time context route scanning
+     */
+    protected Class<?>[] excludeRoutes() {
+        Class<?> excludedRoute = excludeRoute();
+        return excludedRoute != null ? new Class[] {excludedRoute} : new Class[0];
+    }
+
+    /**
+     * Template method used to exclude a {@link org.apache.camel.Route} from the test camel context
+     */
+    protected Class<?> excludeRoute() {
+        return null;
+    }
+
+    /**
+     * Looks up the mandatory spring bean of the given name and type, failing if
+     * it is not present or the correct type
+     */
+    public <T> T getMandatoryBean(Class<T> type, String name) {
+        Object value = applicationContext.getBean(name);
+        Assertions.assertNotNull(value, "No spring bean found for name <" + name + ">");
+        if (type.isInstance(value)) {
+            return type.cast(value);
+        } else {
+            Assertions.fail("Spring bean <" + name + "> is not an instanceof " + type.getName() + " but is of type " + ObjectHelper.className(value));
+            return null;
+        }
+    }
+
+    /**
+     * Which active profiles should be used.
+     * <p/>
+     * <b>Important:</b> When using active profiles, then the code in {@link #createApplicationContext()} should create
+     * the Spring {@link org.springframework.context.support.AbstractApplicationContext} without refreshing. For example creating an
+     * {@link org.springframework.context.support.ClassPathXmlApplicationContext} you would need to pass in
+     * <tt>false</tt> in the refresh parameter, in the constructor.
+     * Camel will thrown an {@link IllegalStateException} if this is not correct stating this problem.
+     * The reason is that we cannot active profiles <b>after</b> a Spring application context has already
+     * been refreshed, and is active.
+     *
+     * @return an array of active profiles to use, use <tt>null</tt> to not use any active profiles.
+     */
+    protected String[] activeProfiles() {
+        return null;
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        // don't start the springCamelContext if we
+        return SpringCamelContext.springCamelContext(applicationContext, false);
+    }
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelTestContextBootstrapper.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelTestContextBootstrapper.java
new file mode 100644
index 0000000..aef6e19
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelTestContextBootstrapper.java
@@ -0,0 +1,31 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.springframework.test.context.ContextLoader;
+import org.springframework.test.context.support.DefaultTestContextBootstrapper;
+
+/**
+ * To bootstrap Camel for testing with Spring 4.1 onwards.
+ */
+public class CamelTestContextBootstrapper extends DefaultTestContextBootstrapper {
+
+    @Override
+    protected Class<? extends ContextLoader> getDefaultContextLoaderClass(Class<?> testClass) {
+        return CamelSpringTestContextLoader.class;
+    }
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmx.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmx.java
new file mode 100644
index 0000000..b3f44c1
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmx.java
@@ -0,0 +1,43 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Indicates if JMX should be globally disabled in the {@code CamelContext}s that are bootstrapped 
+ * during the test through the use of Spring Test loaded application contexts.  Note that the
+ * presence of this annotation will result in the manipulation of System Properties that
+ * will affect Camel contexts constructed outside of the Spring Test loaded application contexts.
+ */
+@Documented
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface DisableJmx {
+    
+    /**
+     * Whether the test annotated with this annotation should be run with JMX disabled in Camel.
+     * Defaults to {@code true}. 
+     */
+    boolean value() default true;
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java
new file mode 100644
index 0000000..f3aaee6
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/DisableJmxTestExecutionListener.java
@@ -0,0 +1,39 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.api.management.JmxSystemPropertyKeys;
+import org.springframework.test.context.TestContext;
+import org.springframework.test.context.support.AbstractTestExecutionListener;
+
+/**
+ * Provides reset to pre-test state behavior for global enable/disable of JMX
+ * support in Camel through the use of {@link DisableJmx}.
+ * Tries to ensure that the pre-test value is restored.
+ */
+public class DisableJmxTestExecutionListener extends AbstractTestExecutionListener {
+
+    @Override
+    public void afterTestClass(TestContext testContext) throws Exception {
+        if (CamelSpringTestHelper.getOriginalJmxDisabled() == null) {
+            System.clearProperty(JmxSystemPropertyKeys.DISABLED);
+        } else {
+            System.setProperty(JmxSystemPropertyKeys.DISABLED, CamelSpringTestHelper.getOriginalJmxDisabled());
+        }
+    }
+
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/EnableRouteCoverage.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/EnableRouteCoverage.java
new file mode 100644
index 0000000..9b846b9
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/EnableRouteCoverage.java
@@ -0,0 +1,41 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Enables dumping route coverage statistic.
+ * The route coverage status is written as xml files in the <tt>target/camel-route-coverage</tt> directory after the test has finished.
+ * <p/>
+ * This allows tooling or manual inspection of the stats, so you can generate a route trace diagram of which EIPs
+ * have been in use and which have not. Similar concepts as a code coverage report.
+ * <p/>
+ * You can also turn on route coverage globally via setting JVM system property <tt>CamelTestRouteCoverage=true</tt>.
+ */
+@Documented
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface EnableRouteCoverage {
+
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/ExcludeRoutes.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/ExcludeRoutes.java
new file mode 100644
index 0000000..eab25f0
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/ExcludeRoutes.java
@@ -0,0 +1,44 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.camel.RoutesBuilder;
+
+/**
+ * Indicates if certain route builder classes should be excluded from discovery.  
+ * Initializes a {@link org.apache.camel.spi.PackageScanClassResolver} to exclude a set of given
+ * classes from being resolved. Typically this is used at test time to exclude certain routes,
+ * which might otherwise be noisy, from being discovered and initialized.
+ */
+@Documented
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface ExcludeRoutes {
+
+    /**
+     * The classes to exclude from resolution when using package scanning.
+     */
+    Class<? extends RoutesBuilder>[] value() default {};
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/MockEndpoints.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/MockEndpoints.java
new file mode 100644
index 0000000..2e9215a
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/MockEndpoints.java
@@ -0,0 +1,43 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.camel.impl.engine.InterceptSendToMockEndpointStrategy;
+
+/**
+ * Triggers the auto-mocking of endpoints whose URIs match the provided filter.  The default
+ * filter is "*" which matches all endpoints.  See {@link InterceptSendToMockEndpointStrategy} for
+ * more details on the registration of the mock endpoints.
+ */
+@Documented
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface MockEndpoints {
+    
+    /**
+     * The pattern to use for matching endpoints to enable mocking on.
+     */
+    String value() default "*";
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/MockEndpointsAndSkip.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/MockEndpointsAndSkip.java
new file mode 100644
index 0000000..4e88a3c
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/MockEndpointsAndSkip.java
@@ -0,0 +1,43 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.camel.impl.engine.InterceptSendToMockEndpointStrategy;
+
+/**
+ * Triggers the auto-mocking of endpoints whose URIs match the provided filter with the added provision
+ * that the endpoints are also skipped.  The default filter is "*" which matches all endpoints.
+ * See {@link InterceptSendToMockEndpointStrategy} for more details on the registration of the mock endpoints.
+ */
+@Documented
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface MockEndpointsAndSkip {
+    
+    /**
+     * The pattern to use for matching endpoints to enable mocking on.
+     */
+    String value() default "*";
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/ProvidesBreakpoint.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/ProvidesBreakpoint.java
new file mode 100644
index 0000000..088b313
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/ProvidesBreakpoint.java
@@ -0,0 +1,36 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.camel.spi.Breakpoint;
+
+/**
+ * Indicates that the annotated method returns a {@link Breakpoint} for use in the test.  Useful for intercepting
+ * traffic to all endpoints or simply for setting a break point in an IDE for debugging.  The method must
+ * be {@code public}, {@code static}, take no arguments, and return {@link Breakpoint}.
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD})
+public @interface ProvidesBreakpoint {
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/RouteCoverageDumper.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/RouteCoverageDumper.java
new file mode 100644
index 0000000..11b11b2
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/RouteCoverageDumper.java
@@ -0,0 +1,82 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.api.management.ManagedCamelContext;
+import org.apache.camel.api.management.mbean.ManagedCamelContextMBean;
+import org.apache.camel.util.IOHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Helper to dump route coverage when using {@link EnableRouteCoverage}.
+ */
+public final class RouteCoverageDumper {
+
+    private static final Logger LOG = LoggerFactory.getLogger(RouteCoverageDumper.class);
+
+    private RouteCoverageDumper() {
+    }
+
+    public static void dumpRouteCoverage(CamelContext context, String testClassName, String testName) {
+        try {
+            String dir = "target/camel-route-coverage";
+            String name = testClassName + "-" + testName + ".xml";
+
+            ManagedCamelContextMBean managedCamelContext = context.getExtension(ManagedCamelContext.class).getManagedCamelContext();
+            if (managedCamelContext == null) {
+                LOG.warn("Cannot dump route coverage to file as JMX is not enabled. Override useJmx() method to enable JMX in the unit test classes.");
+            } else {
+                String xml = managedCamelContext.dumpRoutesCoverageAsXml();
+                String combined = "<camelRouteCoverage>\n" + gatherTestDetailsAsXml(testClassName, testName) + xml + "\n</camelRouteCoverage>";
+
+                File file = new File(dir);
+                // ensure dir exists
+                file.mkdirs();
+                file = new File(dir, name);
+
+                LOG.info("Dumping route coverage to file: " + file);
+                InputStream is = new ByteArrayInputStream(combined.getBytes());
+                OutputStream os = new FileOutputStream(file, false);
+                IOHelper.copyAndCloseInput(is, os);
+                IOHelper.close(os);
+            }
+        } catch (Exception e) {
+            LOG.warn("Error during dumping route coverage statistic. This exception is ignored.", e);
+        }
+
+    }
+
+    /**
+     * Gathers test details as xml
+     */
+    private static String gatherTestDetailsAsXml(String testClassName, String testName) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("<test>\n");
+        sb.append("  <class>").append(testClassName).append("</class>\n");
+        sb.append("  <method>").append(testName).append("</method>\n");
+        sb.append("</test>\n");
+        return sb.toString();
+    }
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/RouteCoverageEventNotifier.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/RouteCoverageEventNotifier.java
new file mode 100644
index 0000000..7d7df3d
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/RouteCoverageEventNotifier.java
@@ -0,0 +1,51 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.util.function.Function;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStoppingEvent;
+import org.apache.camel.support.EventNotifierSupport;
+
+public class RouteCoverageEventNotifier extends EventNotifierSupport {
+
+    private final String testClassName;
+    private final Function testMethodName;
+
+    public RouteCoverageEventNotifier(String testClassName, Function testMethodName) {
+        this.testClassName = testClassName;
+        this.testMethodName = testMethodName;
+        setIgnoreCamelContextEvents(false);
+        setIgnoreExchangeEvents(true);
+    }
+
+    @Override
+    public boolean isEnabled(CamelEvent event) {
+        return event instanceof CamelContextStoppingEvent;
+    }
+
+    @Override
+    public void notify(CamelEvent event) throws Exception {
+        CamelContext context = ((CamelContextStoppingEvent) event).getContext();
+        String testName = (String) testMethodName.apply(this);
+        RouteCoverageDumper.dumpRouteCoverage(context, testClassName, testName);
+    }
+
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/ShutdownTimeout.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/ShutdownTimeout.java
new file mode 100644
index 0000000..8e35d58
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/ShutdownTimeout.java
@@ -0,0 +1,49 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Indicates to set the shutdown timeout of all {@code CamelContext}s instantiated through the 
+ * use of Spring Test loaded application contexts.  If no annotation is used, the timeout is
+ * automatically reduced to 10 seconds by the test framework.  If the annotation is present the
+ * shutdown timeout is set based on the value of {@link #value()}. 
+ */
+@Documented
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface ShutdownTimeout {
+
+    /**
+     * The shutdown timeout to set on the {@code CamelContext}(s).
+     * Defaults to {@code 10} seconds.
+     */
+    int value() default 10;
+    
+    /**
+     * The time unit that {@link #value()} is in.
+     */
+    TimeUnit timeUnit() default TimeUnit.SECONDS;
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/StopWatchTestExecutionListener.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/StopWatchTestExecutionListener.java
new file mode 100644
index 0000000..535a7dc
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/StopWatchTestExecutionListener.java
@@ -0,0 +1,62 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.util.StopWatch;
+import org.apache.camel.util.TimeUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.test.context.TestContext;
+import org.springframework.test.context.support.AbstractTestExecutionListener;
+
+/**
+ * An execution listener that simulates the timing output built in to {@link org.apache.camel.test.junit4.CamelTestSupport}.
+ */
+public class StopWatchTestExecutionListener extends AbstractTestExecutionListener {
+    
+    protected static ThreadLocal<StopWatch> threadStopWatch = new ThreadLocal<>();
+    
+    /**
+     * Exists primarily for testing purposes, but allows for access to the underlying stop watch instance for a test.
+     */
+    public static StopWatch getStopWatch() {
+        return threadStopWatch.get();
+    }
+    
+    @Override
+    public void beforeTestMethod(TestContext testContext) throws Exception {
+        StopWatch stopWatch = new StopWatch();
+        threadStopWatch.set(stopWatch);
+    }
+
+    @Override
+    public void afterTestMethod(TestContext testContext) throws Exception {
+        StopWatch watch = threadStopWatch.get();
+        if (watch != null) {
+            long time = watch.taken();
+            Logger log = LoggerFactory.getLogger(testContext.getTestClass());
+
+            log.info("********************************************************************************");
+            log.info("Testing done: " + testContext.getTestMethod().getName() + "(" + testContext.getTestClass().getName() + ")");
+            log.info("Took: " + TimeUtils.printDuration(time) + " (" + time + " millis)");
+            log.info("********************************************************************************");
+
+            threadStopWatch.remove();
+        }
+    }
+
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/UseAdviceWith.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/UseAdviceWith.java
new file mode 100644
index 0000000..9e09deb
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/UseAdviceWith.java
@@ -0,0 +1,49 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.camel.CamelContext;
+
+/**
+ * Indicates the use of {@code adviceWith()} within the test class.  If a class is annotated with
+ * this annotation and {@link UseAdviceWith#value()} returns true, any 
+ * {@code CamelContext}s bootstrapped during the test through the use of Spring Test loaded 
+ * application contexts will not be started automatically.  The test author is responsible for 
+ * injecting the Camel contexts into the test and executing {@link CamelContext#start()} on them 
+ * at the appropriate time after any advice has been applied to the routes in the Camel context(s). 
+ */
+@Documented
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface UseAdviceWith {
+    
+    /**
+     * Whether the test annotated with this annotation should be treated as if 
+     * {@code adviceWith()} is in use in the test and the Camel contexts should not be started
+     * automatically.
+     * Defaults to {@code true}.
+     */
+    boolean value() default true;
+}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/UseOverridePropertiesWithPropertiesComponent.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/UseOverridePropertiesWithPropertiesComponent.java
new file mode 100644
index 0000000..89a71a5
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/UseOverridePropertiesWithPropertiesComponent.java
@@ -0,0 +1,34 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Indicates that the annotated method returns a {@link java.util.Properties} for use in the test, and that
+ * those properties override any existing properties configured on the {@link org.apache.camel.component.properties.PropertiesComponent}.
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD})
+public @interface UseOverridePropertiesWithPropertiesComponent {
+
+}
diff --git a/components/camel-testcontainers-spring/src/main/java/org/apache/camel/test/junit5/testcontainers/spring/ContainerAwareSpringTestSupport.java b/components/camel-testcontainers-spring/src/main/java/org/apache/camel/test/junit5/testcontainers/spring/ContainerAwareSpringTestSupport.java
new file mode 100644
index 0000000..74130af
--- /dev/null
+++ b/components/camel-testcontainers-spring/src/main/java/org/apache/camel/test/junit5/testcontainers/spring/ContainerAwareSpringTestSupport.java
@@ -0,0 +1,112 @@
+/*
+ * 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.test.junit5.testcontainers.spring;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.apache.camel.test.testcontainers.ContainerPropertiesFunction;
+import org.apache.camel.test.testcontainers.Containers;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.Network;
+
+public abstract class ContainerAwareSpringTestSupport extends CamelSpringTestSupport {
+    private List<GenericContainer<?>> containers = new CopyOnWriteArrayList<>();
+
+    // ******************
+    // Setup
+    // ******************
+
+    @Override
+    protected void setupResources() throws Exception {
+        super.setupResources();
+
+        containers.clear();
+        containers.addAll(createContainers());
+
+        final Network network = containerNetwork();
+        final long timeout = containersStartupTimeout();
+
+        Containers.start(containers, network, timeout);
+    }
+
+    @Override
+    protected void cleanupResources() throws Exception {
+        super.cleanupResources();
+
+        Containers.stop(containers, containerShutdownTimeout());
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        final CamelContext context = super.createCamelContext();
+        final PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class);
+
+        pc.addFunction(new ContainerPropertiesFunction(containers));
+
+        return context;
+    }
+
+    // ******************
+    // Containers set-up
+    // ******************
+
+    protected GenericContainer<?> createContainer() {
+        return null;
+    }
+
+    protected List<GenericContainer<?>> createContainers() {
+        GenericContainer<?> container = createContainer();
+
+        return container == null
+            ? Collections.emptyList()
+            : Collections.singletonList(container);
+    }
+
+    protected long containersStartupTimeout() {
+        return TimeUnit.MINUTES.toSeconds(1);
+    }
+
+    protected long containerShutdownTimeout() {
+        return TimeUnit.MINUTES.toSeconds(1);
+    }
+
+    protected Network containerNetwork() {
+        return null;
+    }
+
+    // ******************
+    // Helpers
+    // ******************
+
+    protected GenericContainer<?> getContainer(String containerName) {
+        return Containers.lookup(containers, containerName);
+    }
+
+    protected String getContainerHost(String containerName) {
+        return getContainer(containerName).getContainerIpAddress();
+    }
+
+    protected int getContainerPort(String containerName, int originalPort) {
+        return getContainer(containerName).getMappedPort(originalPort);
+    }
+}
diff --git a/components/camel-testcontainers-spring/src/test/java/org/apache/camel/test/junit5/testcontainers/spring/ContainerAwareSpringTestSupportIT.java b/components/camel-testcontainers-spring/src/test/java/org/apache/camel/test/junit5/testcontainers/spring/ContainerAwareSpringTestSupportIT.java
new file mode 100644
index 0000000..fef4342
--- /dev/null
+++ b/components/camel-testcontainers-spring/src/test/java/org/apache/camel/test/junit5/testcontainers/spring/ContainerAwareSpringTestSupportIT.java
@@ -0,0 +1,61 @@
+/*
+ * 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.test.junit5.testcontainers.spring;
+
+import org.apache.camel.test.testcontainers.Wait;
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.testcontainers.containers.GenericContainer;
+
+public class ContainerAwareSpringTestSupportIT extends ContainerAwareSpringTestSupport {
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/test/testcontainers/spring/ContainerAwareSpringTestSupportTest.xml");
+    }
+
+    @Test
+    public void testPropertyPlaceholders() throws Exception {
+        final GenericContainer<?> container = getContainer("myconsul");
+
+        final String host = context.resolvePropertyPlaceholders("{{container:host:myconsul}}");
+        Assertions.assertThat(host).isEqualTo(container.getContainerIpAddress());
+
+        final String port = context.resolvePropertyPlaceholders("{{container:port:8500@myconsul}}");
+        Assertions.assertThat(port).isEqualTo("" + container.getMappedPort(8500));
+    }
+
+    @Override
+    protected GenericContainer<?> createContainer() {
+        return new GenericContainer("consul:1.5.1")
+            .withNetworkAliases("myconsul")
+            .withExposedPorts(8500)
+            .waitingFor(Wait.forLogMessageContaining("Synced node info", 1))
+            .withCommand(
+                "agent",
+                "-dev",
+                "-server",
+                "-bootstrap",
+                "-client",
+                "0.0.0.0",
+                "-log-level",
+                "trace"
+            );
+    }
+
+}


[camel] 08/09: CAMEL-13342: Implemented a first version of a proof-of-concept for camel-test-spring/SpringExtension with JUnit 5

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aldettinger pushed a commit to branch CAMEL-13342-JUNIT5-EXPLORATORY
in repository https://gitbox.apache.org/repos/asf/camel.git

commit b306b3475ca57166d320c2ec170ebf53b4680a0c
Author: aldettinger <al...@gmail.com>
AuthorDate: Wed Jul 17 17:20:28 2019 +0200

    CAMEL-13342: Implemented a first version of a proof-of-concept for camel-test-spring/SpringExtension with JUnit 5
---
 .../test/junit5/spring/CamelSpringRunner.java      |  83 --------------
 .../camel/test/junit5/spring/CamelSpringTest.java  |  39 +++++++
 .../patterns/DebugSpringCamelContextTest.java      |  40 +++++++
 .../test/junit5/patterns/DebugSpringTest.java      |  83 ++++++++++++++
 .../camel/test/junit5/patterns/MyProduceBean.java  |  41 +++++++
 .../camel/test/junit5/patterns/MySender.java       |  25 +++++
 .../test/junit5/patterns/ProduceBeanTest.java      |  42 +++++++
 .../junit5/patterns/ProducerBeanInjectTest.java    |  40 +++++++
 .../camel/test/junit5/patterns/SimpleMockTest.java |  63 +++++++++++
 .../spring/CamelSpringActiveProfileTest.java       |  56 +++++++++
 ...CamelSpringDisableJmxInheritedOverrideTest.java |  32 ++++++
 .../spring/CamelSpringDisableJmxInheritedTest.java |  21 ++++
 .../junit5/spring/CamelSpringDisableJmxTest.java   |  33 ++++++
 .../spring/CamelSpringExcludeRoutesTest.java       |  32 ++++++
 .../CamelSpringMockEndpointsAndSkipTest.java       |  57 ++++++++++
 .../spring/CamelSpringMockEndpointsTest.java       |  58 ++++++++++
 ...ingOverridePropertiesForPropertyInjectTest.java |  54 +++++++++
 .../spring/CamelSpringOverridePropertiesTest.java  |  69 ++++++++++++
 .../test/junit5/spring/CamelSpringPlainTest.java   | 125 +++++++++++++++++++++
 .../CamelSpringPropertiesLocationElementTest.java  |  64 +++++++++++
 ...amelSpringProvidesBreakpointInherritedTest.java |  22 ++++
 .../spring/CamelSpringProvidesBreakpointTest.java  |  67 +++++++++++
 ...lSpringRouteProcessorDumpRouteCoverageTest.java |  57 ++++++++++
 ...SpringShutdownTimeoutInheritedOverrideTest.java |  35 ++++++
 .../CamelSpringShutdownTimeoutInheritedTest.java   |  22 ++++
 .../spring/CamelSpringShutdownTimeoutTest.java     |  35 ++++++
 .../spring/CamelSpringTestPropertySourceTest.java  |  46 ++++++++
 .../CamelSpringTestSupportActiveProfileTest.java   |  51 +++++++++
 .../spring/CamelSpringUseAdviceWithTest.java       |  52 +++++++++
 .../spring/TestPropertyInjectRouteBuilder.java     |  33 ++++++
 .../camel/test/junit5/spring/TestRouteBuilder.java |  30 +++++
 ...InterceptSendToEndpointWithLoadbalancerTest.xml |  32 ++++++
 .../junit5/issues/AdviceWithOnCompletionTest.xml   |  39 +++++++
 .../AdviceWithOnExceptionMultipleIssueTest.xml     |  49 ++++++++
 .../junit5/issues/MockEndpointsAndSkipTest.xml     |  37 ++++++
 .../test/junit5/patterns/ProduceBeanInjectTest.xml |  39 +++++++
 .../camel/test/junit5/patterns/ProduceBeanTest.xml |  35 ++++++
 .../camel/test/junit5/patterns/SimpleMockTest.xml  |  33 ++++++
 .../test/junit5/patterns/applicationContext.xml    |  40 +++++++
 .../CamelSpringActiveProfileTest-context.xml       |  43 +++++++
 ...ridePropertiesForPropertyInjectTest-context.xml |  36 ++++++
 .../CamelSpringOverridePropertiesTest-context.xml  |  42 +++++++
 .../junit5/spring/CamelSpringPlainTest-context.xml |  56 +++++++++
 ...SpringPropertiesLocationElementTest-context.xml |  49 ++++++++
 .../CamelSpringTestPropertySourceTest-context.xml  |  41 +++++++
 .../properties-location-element-1.properties       |  18 +++
 .../properties-location-element-2.properties       |  18 +++
 .../properties-location-element-3.properties       |  18 +++
 .../camel/test/junit5/spring/test.properties       |  20 ++++
 49 files changed, 2069 insertions(+), 83 deletions(-)

diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringRunner.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringRunner.java
deleted file mode 100644
index d64ce29..0000000
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringRunner.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.test.junit5.spring;
-
-import java.util.List;
-
-import org.junit.runners.model.InitializationError;
-import org.springframework.test.context.TestContextManager;
-import org.springframework.test.context.TestExecutionListener;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
-/**
- * An implementation bringing the functionality of {@link org.apache.camel.test.spring.CamelSpringTestSupport} to
- * Spring Test based test cases.  This approach allows developers to implement tests
- * for their Spring based applications/routes using the typical Spring Test conventions
- * for test development.
- */
-public class CamelSpringRunner extends SpringJUnit4ClassRunner {
-
-    public CamelSpringRunner(Class<?> clazz) throws InitializationError {
-        super(clazz);
-    }
-
-    /**
-     * Returns the specialized manager instance that provides tight integration between Camel testing
-     * features and Spring.
-     *
-     * @return a new instance of {@link CamelTestContextManager}.
-     */
-    @Override
-    protected TestContextManager createTestContextManager(Class<?> clazz) {
-        return new CamelTestContextManager(clazz);
-    }
-
-    /**
-     * An implementation providing additional integration between Spring Test and Camel
-     * testing features.
-     */
-    public static final class CamelTestContextManager extends TestContextManager {
-
-        public CamelTestContextManager(Class<?> testClass) {
-            super(testClass);
-
-            // is Camel already registered
-            if (!alreadyRegistered()) {
-                // inject Camel first, and then disable jmx and add the stop-watch
-                List<TestExecutionListener> list = getTestExecutionListeners();
-                list.add(0, new CamelSpringTestContextLoaderTestExecutionListener());
-                list.add(1, new DisableJmxTestExecutionListener());
-                list.add(2, new StopWatchTestExecutionListener());
-            }
-        }
-
-        private boolean alreadyRegistered() {
-            List<TestExecutionListener> list = getTestExecutionListeners();
-            if (list != null) {
-                for (TestExecutionListener listener : list) {
-                    if (listener instanceof CamelSpringTestContextLoaderTestExecutionListener) {
-                        return true;
-                    }
-                }
-            }
-
-            return false;
-        }
-
-    }
-
-}
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTest.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTest.java
new file mode 100644
index 0000000..b43e77f
--- /dev/null
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/junit5/spring/CamelSpringTest.java
@@ -0,0 +1,39 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.test.context.BootstrapWith;
+import org.springframework.test.context.TestExecutionListeners;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+@ExtendWith(SpringExtension.class)
+@BootstrapWith(CamelTestContextBootstrapper.class)
+@TestExecutionListeners(value = {CamelSpringTestContextLoaderTestExecutionListener.class, DisableJmxTestExecutionListener.class,
+                                 StopWatchTestExecutionListener.class}, mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS)
+public @interface CamelSpringTest {
+
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/DebugSpringCamelContextTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/DebugSpringCamelContextTest.java
new file mode 100644
index 0000000..340dc22
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/DebugSpringCamelContextTest.java
@@ -0,0 +1,40 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+
+public class DebugSpringCamelContextTest extends DebugSpringTest {
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                // there is no route to be used
+            }
+        };
+    }
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/test/junit5/patterns/applicationContext.xml");
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/DebugSpringTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/DebugSpringTest.java
new file mode 100644
index 0000000..c9138a3
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/DebugSpringTest.java
@@ -0,0 +1,83 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.GenericApplicationContext;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class DebugSpringTest extends CamelSpringTestSupport {
+    private boolean debugged;
+    
+    @Override
+    public boolean isUseDebugger() {
+        // must enable debugger
+        return true;
+    }
+
+    @Override
+    protected void debugBefore(Exchange exchange, Processor processor,
+                               ProcessorDefinition<?> definition, String id, String shortName) {
+        // this method is invoked before we are about to enter the given processor
+        // from your Java editor you can just add a breakpoint in the code line below
+        log.info("Before " + definition + " with body " + exchange.getIn().getBody());
+        debugged = true;
+    }
+
+
+    @Test
+    public void testDebugger() throws Exception {
+        // set mock expectations
+        getMockEndpoint("mock:a").expectedMessageCount(1);
+        getMockEndpoint("mock:b").expectedMessageCount(1);
+
+        // send a message
+        template.sendBody("direct:start", "World");
+
+        // assert mocks
+        assertMockEndpointsSatisfied();
+        assertTrue(debugged, "The debugger is not called!");
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                // this is the route we want to debug
+                from("direct:start")
+                    .to("mock:a")
+                    .transform(body().prepend("Hello "))
+                    .to("mock:b");
+            }
+        };
+    }
+    
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new GenericApplicationContext();
+    }
+
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/MyProduceBean.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/MyProduceBean.java
new file mode 100644
index 0000000..ba33b34
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/MyProduceBean.java
@@ -0,0 +1,41 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+
+/**
+ *
+ */
+public class MyProduceBean {
+
+    @Produce("mock:result")
+    MySender sender;
+    
+    @EndpointInject("direct:start")
+    ProducerTemplate template;
+
+    public void doSomething(String body) {
+        sender.send(body);
+    }
+    
+    public ProducerTemplate getProducerTemplate() {
+        return template;
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/MySender.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/MySender.java
new file mode 100644
index 0000000..0188296
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/MySender.java
@@ -0,0 +1,25 @@
+/*
+ * 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.test.junit5.patterns;
+
+/**
+ *
+ */
+public interface MySender {
+
+    void send(String body);
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/ProduceBeanTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/ProduceBeanTest.java
new file mode 100644
index 0000000..101d97a
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/ProduceBeanTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ *
+ */
+public class ProduceBeanTest extends CamelSpringTestSupport {
+
+    @Test
+    public void testProduceBean() throws Exception {
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+
+        template.sendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/test/junit5/patterns/ProduceBeanTest.xml");
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/ProducerBeanInjectTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/ProducerBeanInjectTest.java
new file mode 100644
index 0000000..147847c
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/ProducerBeanInjectTest.java
@@ -0,0 +1,40 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+public class ProducerBeanInjectTest extends CamelSpringTestSupport {
+
+    @Test
+    public void checkProducerBeanInjection() {
+        MyProduceBean bean = applicationContext.getBean("myProduceBean", MyProduceBean.class);
+        assertNotNull(bean.getProducerTemplate(), "The producerTemplate should not be null.");
+        assertEquals(bean.getProducerTemplate().requestBody("Camel"), "Camel rocks!", "Get a wrong response");
+    }
+
+    protected AbstractApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/test/junit5/patterns/ProduceBeanInjectTest.xml");
+    }
+
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/SimpleMockTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/SimpleMockTest.java
new file mode 100644
index 0000000..a693ad9
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/patterns/SimpleMockTest.java
@@ -0,0 +1,63 @@
+/*
+ * 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.test.junit5.patterns;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.spring.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class SimpleMockTest extends CamelSpringTestSupport {
+
+    @EndpointInject("mock:result")
+    protected MockEndpoint resultEndpoint;
+
+    @Produce("direct:start")
+    protected ProducerTemplate template;
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/test/junit5/patterns/SimpleMockTest.xml");
+    }
+
+    @Test
+    public void testMock() throws Exception {
+        String expectedBody = "Hello World";
+
+        resultEndpoint.expectedBodiesReceived(expectedBody);
+
+        template.sendBodyAndHeader(expectedBody, "foo", "bar");
+
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testMockAgain() throws Exception {
+        String expectedBody = "Bye World";
+
+        resultEndpoint.expectedBodiesReceived(expectedBody);
+
+        template.sendBodyAndHeader(expectedBody, "foo", "bar");
+
+        resultEndpoint.assertIsSatisfied();
+    }
+
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringActiveProfileTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringActiveProfileTest.java
new file mode 100644
index 0000000..64bb894
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringActiveProfileTest.java
@@ -0,0 +1,56 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.ContextConfiguration;
+
+// START SNIPPET: e1
+
+/**
+ * Spring style testing with annotations to configure and setup the test.
+ * <p/>
+ * As we do next extend any base test class, we need to inject our resources
+ * for testing such as the {@link CamelContext} and {@link ProducerTemplate}.
+ */
+@ContextConfiguration
+@ActiveProfiles("test")
+@CamelSpringTest
+public class CamelSpringActiveProfileTest {
+
+    @Autowired
+    protected CamelContext camelContext;
+
+    @Produce(value = "direct:start", context = "camelContext")
+    protected ProducerTemplate start;
+
+    @Test
+    public void testLoadActiveProfile() throws InterruptedException {
+        MockEndpoint mock = camelContext.getEndpoint("mock:test", MockEndpoint.class);
+        mock.expectedBodiesReceived("Hello World");
+        start.sendBody("World");
+        mock.assertIsSatisfied();
+    }
+
+}
+// END SNIPPET: e1
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringDisableJmxInheritedOverrideTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringDisableJmxInheritedOverrideTest.java
new file mode 100644
index 0000000..d40c4fa
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringDisableJmxInheritedOverrideTest.java
@@ -0,0 +1,32 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.impl.engine.DefaultManagementStrategy;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@DisableJmx
+public class CamelSpringDisableJmxInheritedOverrideTest
+        extends CamelSpringDisableJmxTest {
+
+    @Test
+    public void testJmx() throws Exception {
+        assertEquals(DefaultManagementStrategy.class, camelContext.getManagementStrategy().getClass());
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringDisableJmxInheritedTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringDisableJmxInheritedTest.java
new file mode 100644
index 0000000..e57afdf
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringDisableJmxInheritedTest.java
@@ -0,0 +1,21 @@
+/*
+ * 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.test.junit5.spring;
+
+public class CamelSpringDisableJmxInheritedTest
+        extends CamelSpringDisableJmxTest {
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringDisableJmxTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringDisableJmxTest.java
new file mode 100644
index 0000000..c9000c7
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringDisableJmxTest.java
@@ -0,0 +1,33 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.management.JmxManagementStrategy;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@DisableJmx(false)
+public class CamelSpringDisableJmxTest
+        extends CamelSpringPlainTest {
+
+    @Test
+    @Override
+    public void testJmx() throws Exception {
+        assertEquals(JmxManagementStrategy.class, camelContext.getManagementStrategy().getClass());
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringExcludeRoutesTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringExcludeRoutesTest.java
new file mode 100644
index 0000000..5a0c632
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringExcludeRoutesTest.java
@@ -0,0 +1,32 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+@ExcludeRoutes(TestRouteBuilder.class)
+public class CamelSpringExcludeRoutesTest
+        extends CamelSpringPlainTest {
+
+    @Override
+    @Test
+    public void testExcludedRoute() {
+        assertNull(camelContext.getRoute("excludedRoute"));
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringMockEndpointsAndSkipTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringMockEndpointsAndSkipTest.java
new file mode 100644
index 0000000..87af61c
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringMockEndpointsAndSkipTest.java
@@ -0,0 +1,57 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.seda.SedaEndpoint;
+import org.apache.camel.spi.InterceptSendToEndpoint;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+
+@MockEndpointsAndSkip("{{mock.skip}}")
+public class CamelSpringMockEndpointsAndSkipTest
+        extends CamelSpringPlainTest {
+
+    @EndpointInject(value = "mock:seda:context2.seda", context = "camelContext2")
+    protected MockEndpoint mock;
+
+    @EndpointInject(value = "seda:context2.seda", context = "camelContext2")
+    private InterceptSendToEndpoint original;
+
+    @Test
+    @Override
+    public void testPositive() throws Exception {
+        assertEquals(ServiceStatus.Started, camelContext.getStatus());
+        assertEquals(ServiceStatus.Started, camelContext2.getStatus());
+
+        mockA.expectedBodiesReceived("David");
+        mockB.expectedBodiesReceived("Hello David");
+        mock.expectedBodiesReceived("Hello David");
+
+        start.sendBody("David");
+        start2.sendBody("David");
+
+        MockEndpoint.assertIsSatisfied(camelContext);
+        MockEndpoint.assertIsSatisfied(camelContext2);
+        assertTrue(((SedaEndpoint) original.getOriginalEndpoint()).getExchanges().isEmpty(), "Original endpoint was invoked");
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringMockEndpointsTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringMockEndpointsTest.java
new file mode 100644
index 0000000..34708e7
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringMockEndpointsTest.java
@@ -0,0 +1,58 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.seda.SedaEndpoint;
+import org.apache.camel.spi.InterceptSendToEndpoint;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+@MockEndpoints("seda:context2.seda")
+public class CamelSpringMockEndpointsTest
+        extends CamelSpringPlainTest {
+
+    @EndpointInject(value = "mock:seda:context2.seda", context = "camelContext2")
+    protected MockEndpoint mock;
+    
+    @EndpointInject(value = "seda:context2.seda", context = "camelContext2")
+    private InterceptSendToEndpoint original;
+    
+    @Test
+    @Override
+    public void testPositive() throws Exception {
+        
+        assertEquals(ServiceStatus.Started, camelContext.getStatus());
+        assertEquals(ServiceStatus.Started, camelContext2.getStatus());
+        
+        mockA.expectedBodiesReceived("David");
+        mockB.expectedBodiesReceived("Hello David");
+        mockC.expectedBodiesReceived("David");
+        mock.expectedBodiesReceived("Hello David");
+        
+        start.sendBody("David");
+        start2.sendBody("David");
+        
+        MockEndpoint.assertIsSatisfied(camelContext);
+        MockEndpoint.assertIsSatisfied(camelContext2);
+        assertTrue(((SedaEndpoint) original.getOriginalEndpoint()).getExchanges().size() == 1, "Original endpoint should be invoked");
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringOverridePropertiesForPropertyInjectTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringOverridePropertiesForPropertyInjectTest.java
new file mode 100644
index 0000000..18cef45
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringOverridePropertiesForPropertyInjectTest.java
@@ -0,0 +1,54 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.util.Properties;
+
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.junit.jupiter.api.Test;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+@ContextConfiguration()
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
+@CamelSpringTest
+public class CamelSpringOverridePropertiesForPropertyInjectTest {
+    
+    private static final String EXPECTED_PROPERTY_VALUE = "The value is overriden";
+    
+    @Produce(value = "direct:start-override-route")
+    private ProducerTemplate start;
+
+    @UseOverridePropertiesWithPropertiesComponent
+    public static Properties override() {
+        Properties answer = new Properties();
+        answer.put("property.to.override", EXPECTED_PROPERTY_VALUE);
+        return answer;
+    }
+
+    @Test
+    public void testOverride() throws Exception {
+        String response = start.requestBody((Object)"ignored", String.class);
+
+        assertThat(response, is(EXPECTED_PROPERTY_VALUE));
+    }
+
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringOverridePropertiesTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringOverridePropertiesTest.java
new file mode 100644
index 0000000..c87e110
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringOverridePropertiesTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.util.Properties;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Test;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+
+@ContextConfiguration()
+// Put here to prevent Spring context caching across tests and test methods since some tests inherit
+// from this test and therefore use the same Spring context.  Also because we want to reset the
+// Camel context and mock endpoints between test methods automatically.
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
+@CamelSpringTest
+public class CamelSpringOverridePropertiesTest {
+
+    @Produce("direct:start")
+    private ProducerTemplate start;
+
+    @EndpointInject("mock:a")
+    private MockEndpoint mockA;
+
+    @EndpointInject("mock:test")
+    private MockEndpoint mockTest;
+
+    @EndpointInject("mock:foo")
+    private MockEndpoint mockFoo;
+
+    @UseOverridePropertiesWithPropertiesComponent
+    public static Properties override() {
+        Properties answer = new Properties();
+        answer.put("cool.end", "mock:foo");
+        return answer;
+    }
+
+    @Test
+    public void testOverride() throws Exception {
+        mockA.expectedBodiesReceived("Camel");
+        mockTest.expectedMessageCount(0);
+        mockFoo.expectedBodiesReceived("Hello Camel");
+
+        start.sendBody("Camel");
+
+        mockA.assertIsSatisfied();
+        mockTest.assertIsSatisfied();
+        mockFoo.assertIsSatisfied();
+    }
+
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringPlainTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringPlainTest.java
new file mode 100644
index 0000000..508e7b8
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringPlainTest.java
@@ -0,0 +1,125 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.engine.DefaultManagementStrategy;
+import org.apache.camel.util.StopWatch;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.annotation.DirtiesContext.ClassMode;
+import org.springframework.test.context.ContextConfiguration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+
+// START SNIPPET: e1
+// tag::example[]
+@ContextConfiguration()
+// Put here to prevent Spring context caching across tests and test methods since some tests inherit
+// from this test and therefore use the same Spring context.  Also because we want to reset the
+// Camel context and mock endpoints between test methods automatically.
+@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
+@CamelSpringTest
+public class CamelSpringPlainTest {
+    
+    @Autowired
+    protected CamelContext camelContext;
+    
+    @Autowired
+    protected CamelContext camelContext2;
+    
+    @EndpointInject(value = "mock:a", context = "camelContext")
+    protected MockEndpoint mockA;
+    
+    @EndpointInject(value = "mock:b", context = "camelContext")
+    protected MockEndpoint mockB;
+    
+    @EndpointInject(value = "mock:c", context = "camelContext2")
+    protected MockEndpoint mockC;
+    
+    @Produce(value = "direct:start", context = "camelContext")
+    protected ProducerTemplate start;
+    
+    @Produce(value = "direct:start2", context = "camelContext2")
+    protected ProducerTemplate start2;
+    
+    @Test
+    public void testPositive() throws Exception {
+        assertEquals(ServiceStatus.Started, camelContext.getStatus());
+        assertEquals(ServiceStatus.Started, camelContext2.getStatus());
+        
+        mockA.expectedBodiesReceived("David");
+        mockB.expectedBodiesReceived("Hello David");
+        mockC.expectedBodiesReceived("David");
+        
+        start.sendBody("David");
+        start2.sendBody("David");
+        
+        MockEndpoint.assertIsSatisfied(camelContext);
+        MockEndpoint.assertIsSatisfied(camelContext2);
+    }
+    
+    @Test
+    public void testJmx() throws Exception {
+        assertEquals(DefaultManagementStrategy.class, camelContext.getManagementStrategy().getClass());
+    }
+    
+    @Test
+    public void testShutdownTimeout() throws Exception {
+        assertEquals(10, camelContext.getShutdownStrategy().getTimeout());
+        assertEquals(TimeUnit.SECONDS, camelContext.getShutdownStrategy().getTimeUnit());
+    }
+    
+    @Test
+    public void testStopwatch() {
+        StopWatch stopWatch = StopWatchTestExecutionListener.getStopWatch();
+        
+        assertNotNull(stopWatch);
+        assertTrue(stopWatch.taken() < 100);
+    }
+    
+    @Test
+    public void testExcludedRoute() {
+        assertNotNull(camelContext.getRoute("excludedRoute"));
+    }
+    
+    @Test
+    public void testProvidesBreakpoint() {
+        assertNull(camelContext.getDebugger());
+        assertNull(camelContext2.getDebugger());
+    }
+
+    @Test
+    public void testRouteCoverage() throws Exception {
+        // noop
+    }
+
+}
+// end::example[]
+// END SNIPPET: e1
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringPropertiesLocationElementTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringPropertiesLocationElementTest.java
new file mode 100644
index 0000000..a02fe71
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringPropertiesLocationElementTest.java
@@ -0,0 +1,64 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.util.List;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+@ContextConfiguration()
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
+@CamelSpringTest
+public class CamelSpringPropertiesLocationElementTest {
+    @Autowired
+    protected CamelContext context;
+    @Produce
+    private ProducerTemplate producer;
+    @EndpointInject("mock:result")
+    private MockEndpoint mock;
+
+    @Test
+    public void testPropertiesLocationElement() throws Exception {
+        mock.expectedHeaderReceived("property-1", "property-value-1");
+        mock.expectedHeaderReceived("property-2", "property-value-2");
+        mock.expectedHeaderReceived("property-3", "property-value-3");
+
+        PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class);
+        assertNotNull(pc, "Properties component not defined");
+
+        List<String> locations = pc.getLocations();
+
+        assertNotNull(locations);
+        assertEquals(4, locations.size(), "Properties locations");
+
+        producer.sendBody("direct:start", null);
+
+        mock.assertIsSatisfied();
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringProvidesBreakpointInherritedTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringProvidesBreakpointInherritedTest.java
new file mode 100644
index 0000000..3154fae
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringProvidesBreakpointInherritedTest.java
@@ -0,0 +1,22 @@
+/*
+ * 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.test.junit5.spring;
+
+public class CamelSpringProvidesBreakpointInherritedTest
+        extends CamelSpringProvidesBreakpointTest {
+
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringProvidesBreakpointTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringProvidesBreakpointTest.java
new file mode 100644
index 0000000..7889817
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringProvidesBreakpointTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.NamedNode;
+import org.apache.camel.Processor;
+import org.apache.camel.processor.interceptor.BreakpointSupport;
+import org.apache.camel.spi.Breakpoint;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class CamelSpringProvidesBreakpointTest
+        extends CamelSpringPlainTest {
+
+    @ProvidesBreakpoint
+    public static Breakpoint createBreakpoint() {
+        return new TestBreakpoint();
+    }
+    
+    @Test
+    @Override
+    public void testProvidesBreakpoint() {
+        assertNotNull(camelContext.getDebugger());
+        assertNotNull(camelContext2.getDebugger());
+        
+        start.sendBody("David");
+        
+        assertNotNull(camelContext.getDebugger());
+        assertNotNull(camelContext.getDebugger().getBreakpoints());
+        assertEquals(1, camelContext.getDebugger().getBreakpoints().size());
+        
+        assertTrue(camelContext.getDebugger().getBreakpoints().get(0) instanceof TestBreakpoint);
+        assertTrue(((TestBreakpoint) camelContext.getDebugger().getBreakpoints().get(0)).isBreakpointHit());
+    }
+    
+    private static final class TestBreakpoint extends BreakpointSupport {
+        
+        private boolean breakpointHit;
+
+        @Override
+        public void beforeProcess(Exchange exchange, Processor processor, NamedNode definition) {
+            breakpointHit = true;
+        }
+
+        public boolean isBreakpointHit() {
+            return breakpointHit;
+        }
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringRouteProcessorDumpRouteCoverageTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringRouteProcessorDumpRouteCoverageTest.java
new file mode 100644
index 0000000..16e4957
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringRouteProcessorDumpRouteCoverageTest.java
@@ -0,0 +1,57 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.io.File;
+
+import org.apache.camel.management.JmxManagementStrategy;
+import org.apache.camel.test.junit5.TestSupport;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+@EnableRouteCoverage
+public class CamelSpringRouteProcessorDumpRouteCoverageTest extends CamelSpringPlainTest {
+
+    @BeforeAll
+    public static void prepareFiles() throws Exception {
+        TestSupport.deleteDirectory("target/camel-route-coverage");
+    }
+
+    @Test
+    @Disabled("@TODO: This test seems to run alone but not amongst other tests")
+    public void testJmx() throws Exception {
+        // JMX is enabled with route coverage
+        assertEquals(JmxManagementStrategy.class, camelContext.getManagementStrategy().getClass());
+    }
+
+    @Override
+    public void testRouteCoverage() throws Exception {
+        camelContext.stop();
+        camelContext2.stop();
+
+        // there should be files
+        String[] names = new File("target/camel-route-coverage").list();
+        assertNotNull(names);
+        assertTrue(names.length > 0);
+    }
+
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringShutdownTimeoutInheritedOverrideTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringShutdownTimeoutInheritedOverrideTest.java
new file mode 100644
index 0000000..5764c93
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringShutdownTimeoutInheritedOverrideTest.java
@@ -0,0 +1,35 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.util.concurrent.TimeUnit;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@ShutdownTimeout
+public class CamelSpringShutdownTimeoutInheritedOverrideTest
+        extends CamelSpringShutdownTimeoutTest {
+
+    @Test
+    @Override
+    public void testShutdownTimeout() throws Exception {
+        assertEquals(10, camelContext.getShutdownStrategy().getTimeout());
+        assertEquals(TimeUnit.SECONDS, camelContext.getShutdownStrategy().getTimeUnit());
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringShutdownTimeoutInheritedTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringShutdownTimeoutInheritedTest.java
new file mode 100644
index 0000000..a146d8a
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringShutdownTimeoutInheritedTest.java
@@ -0,0 +1,22 @@
+/*
+ * 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.test.junit5.spring;
+
+public class CamelSpringShutdownTimeoutInheritedTest
+        extends CamelSpringShutdownTimeoutTest {
+
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringShutdownTimeoutTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringShutdownTimeoutTest.java
new file mode 100644
index 0000000..7bca1b5
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringShutdownTimeoutTest.java
@@ -0,0 +1,35 @@
+/*
+ * 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.test.junit5.spring;
+
+import java.util.concurrent.TimeUnit;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@ShutdownTimeout(value = 11, timeUnit = TimeUnit.MILLISECONDS)
+public class CamelSpringShutdownTimeoutTest
+        extends CamelSpringPlainTest {
+
+    @Test
+    @Override
+    public void testShutdownTimeout() throws Exception {
+        assertEquals(11, camelContext.getShutdownStrategy().getTimeout());
+        assertEquals(TimeUnit.MILLISECONDS, camelContext.getShutdownStrategy().getTimeUnit());
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringTestPropertySourceTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringTestPropertySourceTest.java
new file mode 100644
index 0000000..a745834
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringTestPropertySourceTest.java
@@ -0,0 +1,46 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Test;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestPropertySource;
+
+@ContextConfiguration
+@TestPropertySource(properties = "fixedBody=Camel")
+@CamelSpringTest
+public class CamelSpringTestPropertySourceTest {
+
+    @Produce("direct:in")
+    private ProducerTemplate start;
+
+    @EndpointInject("mock:out")
+    private MockEndpoint end;
+
+    @Test
+    public void readsFileAndInlinedPropertiesFromAnnotation() throws Exception {
+        end.expectedBodiesReceived("Camel");
+
+        start.sendBody("Aardvark");
+
+        end.assertIsSatisfied();
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringTestSupportActiveProfileTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringTestSupportActiveProfileTest.java
new file mode 100644
index 0000000..c4a6400
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringTestSupportActiveProfileTest.java
@@ -0,0 +1,51 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+// START SNIPPET: e1
+
+/**
+ * Just extend the CamelSpringTestSupport and use Camel test kit for easy Camel based unit testing.
+ */
+public class CamelSpringTestSupportActiveProfileTest extends CamelSpringTestSupport {
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        // must not refresh when using active profiles
+        // lets reuse the xml file from the other test
+        return new ClassPathXmlApplicationContext(new String[]{"org/apache/camel/test/junit5/spring/CamelSpringActiveProfileTest-context.xml"}, false);
+    }
+
+    @Override
+    protected String[] activeProfiles() {
+        // return the active profiles to be used
+        return new String[]{"test"};
+    }
+
+    @Test
+    public void testLoadActiveProfile() throws InterruptedException {
+        getMockEndpoint("mock:test").expectedBodiesReceived("Hello World");
+        template.sendBody("direct:start", "World");
+        assertMockEndpointsSatisfied();
+    }
+
+}
+// END SNIPPET: e1
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringUseAdviceWithTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringUseAdviceWithTest.java
new file mode 100644
index 0000000..6140fb1
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/CamelSpringUseAdviceWithTest.java
@@ -0,0 +1,52 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.util.StopWatch;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+@UseAdviceWith
+public class CamelSpringUseAdviceWithTest extends CamelSpringPlainTest {
+    
+    @BeforeEach
+    public void testContextStarted() throws Exception {
+        
+        assertEquals(ServiceStatus.Stopped, camelContext.getStatus());
+        assertEquals(ServiceStatus.Stopped, camelContext2.getStatus());
+        camelContext.start();
+        camelContext2.start();
+
+        // just sleep a little to simulate testing take a bit time
+        Thread.sleep(1000);
+    }
+    
+    @Test
+    public void testStopwatch() {
+        StopWatch stopWatch = StopWatchTestExecutionListener.getStopWatch();
+        
+        assertNotNull(stopWatch);
+        long taken = stopWatch.taken();
+        assertTrue(taken > 0, taken + " > 0, but was: " + taken);
+        assertTrue(taken < 3000, taken + " < 3000, but was: " + taken);
+    }
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/TestPropertyInjectRouteBuilder.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/TestPropertyInjectRouteBuilder.java
new file mode 100644
index 0000000..0ef4ca9
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/TestPropertyInjectRouteBuilder.java
@@ -0,0 +1,33 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.PropertyInject;
+import org.apache.camel.builder.RouteBuilder;
+
+public class TestPropertyInjectRouteBuilder extends RouteBuilder {
+
+    @PropertyInject("{{property.to.override}}")
+    private String propertyToOverride;
+    
+    @Override
+    public void configure() throws Exception {
+        from("direct:start-override-route")
+            .transform(constant(propertyToOverride));
+    }
+
+}
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/TestRouteBuilder.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/TestRouteBuilder.java
new file mode 100644
index 0000000..838652c
--- /dev/null
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/junit5/spring/TestRouteBuilder.java
@@ -0,0 +1,30 @@
+/*
+ * 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.test.junit5.spring;
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class TestRouteBuilder extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+        
+        from("direct:z")
+            .routeId("excludedRoute")
+            .to("log:org.apache.camel.test.junit4.spring");
+    }
+}
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/issues/AdviceWithInterceptSendToEndpointWithLoadbalancerTest.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/issues/AdviceWithInterceptSendToEndpointWithLoadbalancerTest.xml
new file mode 100644
index 0000000..9570008
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/issues/AdviceWithInterceptSendToEndpointWithLoadbalancerTest.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:camel="http://camel.apache.org/schema/spring"
+       xsi:schemaLocation="
+        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+    <bean id="route" class="org.apache.camel.test.issues.AdviceWithInterceptSendToEndpointWithLoadbalancerTest.LoadbalancerTestRoute" />
+
+    <camelContext xmlns="http://camel.apache.org/schema/spring">
+        <camel:routeBuilder ref="route"/>
+    </camelContext>
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/issues/AdviceWithOnCompletionTest.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/issues/AdviceWithOnCompletionTest.xml
new file mode 100644
index 0000000..ad80f65
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/issues/AdviceWithOnCompletionTest.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:camel="http://camel.apache.org/schema/spring"
+       xsi:schemaLocation="
+        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+  <camelContext xmlns="http://camel.apache.org/schema/spring">
+
+    <onCompletion>
+      <to uri="mock:complete"/>
+    </onCompletion>
+
+    <route>
+      <from uri="file:start"/>
+      <to uri="log:end"/>
+    </route>
+
+  </camelContext>
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/issues/AdviceWithOnExceptionMultipleIssueTest.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/issues/AdviceWithOnExceptionMultipleIssueTest.xml
new file mode 100644
index 0000000..030be6c
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/issues/AdviceWithOnExceptionMultipleIssueTest.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:camel="http://camel.apache.org/schema/spring"
+       xsi:schemaLocation="
+		http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+  <camelContext xmlns="http://camel.apache.org/schema/spring">
+
+    <onException>
+      <exception>java.lang.Exception</exception>
+      <handled>
+        <constant>true</constant>
+      </handled>
+      <to uri="mock:error"/>
+    </onException>
+
+    <route id="RouteA">
+      <from uri="direct:startA"/>
+      <to uri="mock:resultA"/>
+    </route>
+
+    <route id="RouteB">
+      <from uri="direct:startB"/>
+      <to uri="mock:resultB"/>
+    </route>
+
+  </camelContext>
+
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/issues/MockEndpointsAndSkipTest.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/issues/MockEndpointsAndSkipTest.xml
new file mode 100644
index 0000000..e96d01a
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/issues/MockEndpointsAndSkipTest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:camel="http://camel.apache.org/schema/spring"
+       xsi:schemaLocation="
+		http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+  <camelContext xmlns="http://camel.apache.org/schema/spring">
+
+    <route>
+      <from uri="direct:start"/>
+      <to uri="log:foo"/>
+      <to uri="seda:foo"/>
+    </route>
+
+  </camelContext>
+
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/patterns/ProduceBeanInjectTest.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/patterns/ProduceBeanInjectTest.xml
new file mode 100644
index 0000000..beef19b
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/patterns/ProduceBeanInjectTest.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:camel="http://camel.apache.org/schema/spring"
+       xsi:schemaLocation="
+		http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+   
+    <camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
+		<route>
+			<from uri="direct:start"/>
+            <transform>
+               <simple>${in.body} rocks!</simple>
+             </transform>
+		</route>
+    </camelContext>
+
+    <bean id="myProduceBean" class="org.apache.camel.test.junit5.patterns.MyProduceBean"/>
+    
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/patterns/ProduceBeanTest.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/patterns/ProduceBeanTest.xml
new file mode 100644
index 0000000..13863a8
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/patterns/ProduceBeanTest.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:camel="http://camel.apache.org/schema/spring"
+       xsi:schemaLocation="
+		http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+<camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
+
+		<route>
+			<from uri="direct:start"/>
+      <bean beanType="org.apache.camel.test.junit5.patterns.MyProduceBean"/>
+		</route>
+	</camelContext>
+
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/patterns/SimpleMockTest.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/patterns/SimpleMockTest.xml
new file mode 100644
index 0000000..6f84464
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/patterns/SimpleMockTest.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+		http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+  <camelContext xmlns="http://camel.apache.org/schema/spring">
+    <route>
+      <from uri="direct:start"/>
+      <to uri="mock:result"/>
+    </route>
+  </camelContext>
+
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/patterns/applicationContext.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/patterns/applicationContext.xml
new file mode 100644
index 0000000..17179a4
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/patterns/applicationContext.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:camel="http://camel.apache.org/schema/spring"
+	xsi:schemaLocation="
+		http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+
+	<camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring" trace="true" autoStartup="true" >
+
+		<route>
+			<from uri="direct:start" />
+			<to uri="mock:a" />
+			<transform>
+				<simple>Hello ${body}</simple>
+			</transform>
+			<to uri="mock:b" />
+		</route>
+	</camelContext>
+
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringActiveProfileTest-context.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringActiveProfileTest-context.xml
new file mode 100644
index 0000000..a188ede
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringActiveProfileTest-context.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:camel="http://camel.apache.org/schema/spring"
+	xsi:schemaLocation="
+		http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+  <camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
+    <route>
+      <from uri="direct:start" />
+      <transform>
+        <simple>Hello ${body}</simple>
+      </transform>
+      <to uri="properties:{{cool.end}}" />
+    </route>
+  </camelContext>
+  
+  <!-- setup the profile for testing -->
+  <beans profile="test">
+     <bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
+         <property name="location" value="classpath:org/apache/camel/test/junit5/spring/test.properties"/>
+     </bean>
+  </beans>
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringOverridePropertiesForPropertyInjectTest-context.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringOverridePropertiesForPropertyInjectTest-context.xml
new file mode 100644
index 0000000..a7510b2
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringOverridePropertiesForPropertyInjectTest-context.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="
+		http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+  <bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
+    <property name="location" value="classpath:org/apache/camel/test/junit5/spring/test.properties"/>
+  </bean>
+  
+  <bean id="testRouteBuilder" class="org.apache.camel.test.junit5.spring.TestPropertyInjectRouteBuilder"></bean>
+
+  <camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
+      <routeBuilder ref="testRouteBuilder"/>
+  </camelContext>
+
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringOverridePropertiesTest-context.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringOverridePropertiesTest-context.xml
new file mode 100644
index 0000000..712e4dd
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringOverridePropertiesTest-context.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="
+		http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+  <bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
+    <property name="location" value="classpath:org/apache/camel/test/junit5/spring/test.properties"/>
+  </bean>
+
+  <camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
+    <route>
+      <from uri="direct:start"/>
+      <to uri="mock:a"/>
+      <transform>
+        <simple>Hello ${body}</simple>
+      </transform>
+      <to uri="{{cool.end}}"/>
+    </route>
+  </camelContext>
+  
+
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringPlainTest-context.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringPlainTest-context.xml
new file mode 100644
index 0000000..218f158
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringPlainTest-context.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="
+		http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+  <camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring" trace="true" autoStartup="true">
+    <packageScan>
+      <package>org.apache.camel.test.junit5.spring</package>
+    </packageScan>
+    <route>
+      <from uri="direct:start"/>
+      <to uri="mock:a"/>
+      <transform>
+        <simple>Hello ${body}</simple>
+      </transform>
+      <to uri="mock:b"/>
+    </route>
+  </camelContext>
+  
+  <bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
+     <property name="location" value="classpath:org/apache/camel/test/junit5/spring/test.properties"/>
+  </bean>
+
+  <camelContext id="camelContext2" xmlns="http://camel.apache.org/schema/spring" trace="true" autoStartup="true">
+    <route>
+      <from uri="direct:start2"/>
+      <to uri="mock:c"/>
+      <transform>
+        <simple>Hello ${body}</simple>
+      </transform>
+      <to uri="log:org.apache.camel.test.junit5.spring"/>
+      <to uri="seda:context2.seda"/>
+    </route>
+  </camelContext>
+
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringPropertiesLocationElementTest-context.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringPropertiesLocationElementTest-context.xml
new file mode 100644
index 0000000..be91d6c
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringPropertiesLocationElementTest-context.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+		http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">
+
+  <camelContext xmlns="http://camel.apache.org/schema/spring">
+    <propertyPlaceholder id="property-placeholder-camel" location="classpath:org/apache/camel/test/junit5/spring/properties-location-element-3.properties">
+      <propertiesLocation resolver="classpath" path="org/apache/camel/test/junit5/spring/properties-location-element-1.properties"/>
+      <propertiesLocation resolver="classpath" path="org/apache/camel/test/junit5/spring/properties-location-element-2.properties"/>
+      <propertiesLocation resolver="classpath" path="org/apache/camel/test/junit5/spring/properties-location-element-4.properties" optional="true"/>
+    </propertyPlaceholder>
+
+    <route>
+      <from uri="direct:start"/>
+      <setHeader name="property-1">
+        <constant>{{property-key-1}}</constant>
+      </setHeader>
+      <setHeader name="property-2">
+        <constant>{{property-key-2}}</constant>
+      </setHeader>
+      <setHeader name="property-3">
+        <constant>{{property-key-3}}</constant>
+      </setHeader>
+      <to uri="mock:result"/>
+    </route>
+
+  </camelContext>
+
+</beans>
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringTestPropertySourceTest-context.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringTestPropertySourceTest-context.xml
new file mode 100644
index 0000000..220e140
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/CamelSpringTestPropertySourceTest-context.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+		http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+  <!-- Enable PropertySource -->
+  <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"/>
+
+  <bean id="myBean" class="org.apache.camel.ValueHolder">
+    <constructor-arg value="${fixedBody}"/> <!-- configured from @TestPropertySource -->
+  </bean>
+
+  <camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring" trace="true" autoStartup="true">
+    <route>
+      <from uri="direct:in"/>
+      <bean ref="myBean" method="get"/>
+      <to uri="mock:out"/>
+    </route>
+  </camelContext>
+
+</beans>
\ No newline at end of file
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/properties-location-element-1.properties b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/properties-location-element-1.properties
new file mode 100644
index 0000000..81ff2b5
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/properties-location-element-1.properties
@@ -0,0 +1,18 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+property-key-1 = property-value-1
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/properties-location-element-2.properties b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/properties-location-element-2.properties
new file mode 100644
index 0000000..24ebe3f
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/properties-location-element-2.properties
@@ -0,0 +1,18 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+property-key-2 = property-value-2
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/properties-location-element-3.properties b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/properties-location-element-3.properties
new file mode 100644
index 0000000..6c94f7f
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/properties-location-element-3.properties
@@ -0,0 +1,18 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+property-key-3 = property-value-3
diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/test.properties b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/test.properties
new file mode 100644
index 0000000..e8a539c
--- /dev/null
+++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/junit5/spring/test.properties
@@ -0,0 +1,20 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+cool.end=mock:test
+mock.skip=seda:*
+property.to.override=This value should be overriden


[camel] 05/09: CAMEL-13342: Implemented a first version of a proof-of-concept for camel-testcontainers with JUnit 5

Posted by al...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

aldettinger pushed a commit to branch CAMEL-13342-JUNIT5-EXPLORATORY
in repository https://gitbox.apache.org/repos/asf/camel.git

commit e044da13e5e7687730619071cedba84e4170ac7e
Author: aldettinger <al...@gmail.com>
AuthorDate: Thu Jul 4 11:35:54 2019 +0200

    CAMEL-13342: Implemented a first version of a proof-of-concept for camel-testcontainers with JUnit 5
---
 .../camel/component/consul/ConsulCatalogTest.java  |  16 +--
 .../component/consul/ConsulClientKeyValueTest.java |   7 +-
 .../component/consul/ConsulCoordinatesTest.java    |  20 ++--
 .../camel/component/consul/ConsulEventTest.java    |   9 +-
 .../component/consul/ConsulEventWatchTest.java     |   2 +-
 .../camel/component/consul/ConsulHealthTest.java   |  14 +--
 .../camel/component/consul/ConsulKeyValueTest.java |   7 +-
 .../component/consul/ConsulKeyValueWatchTest.java  |   2 +-
 .../camel/component/consul/ConsulRegistryTest.java |  32 +++---
 .../component/consul/ConsulRegistryUtilsTest.java  |   6 +-
 .../camel/component/consul/ConsulSessionTest.java  |  18 ++--
 .../camel/component/consul/ConsulTestSupport.java  |  17 ++--
 .../cloud/ConsulDefaultServiceCallRouteTest.java   |   2 +-
 .../cloud/ConsulRibbonServiceCallRouteTest.java    |   2 +-
 .../ConsulServiceCallWithRegistrationTest.java     |  60 ++++++-----
 .../consul/cloud/ConsulServiceDiscoveryTest.java   |   5 +-
 .../cloud/ConsulServiceRegistrationTestBase.java   |   5 +-
 .../consul/cloud/ConsulServiceRegistryTest.java    |   4 +-
 .../ConsulClusteredRoutePolicyFactoryTest.java     |  14 +--
 .../cluster/ConsulClusteredRoutePolicyTest.java    |  14 +--
 .../component/consul/cluster/ConsulMasterTest.java |  14 +--
 components/camel-testcontainers/pom.xml            |   6 +-
 .../testcontainers/ContainerAwareTestSupport.java  | 112 +++++++++++++++++++++
 .../ContainerAwareTestSupportIT.java               |  54 ++++++++++
 24 files changed, 315 insertions(+), 127 deletions(-)

diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCatalogTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCatalogTest.java
index d96305b..097daec 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCatalogTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCatalogTest.java
@@ -21,8 +21,8 @@ import java.util.List;
 import com.orbitz.consul.model.health.Node;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulCatalogActions;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ConsulCatalogTest extends ConsulTestSupport {
 
@@ -34,9 +34,9 @@ public class ConsulCatalogTest extends ConsulTestSupport {
             .to("direct:consul")
             .request(List.class);
 
-        Assert.assertFalse(ref.isEmpty());
-        Assert.assertFalse(res.isEmpty());
-        Assert.assertEquals(ref, res);
+        Assertions.assertFalse(ref.isEmpty());
+        Assertions.assertFalse(res.isEmpty());
+        Assertions.assertEquals(ref, res);
     }
 
     @Test
@@ -47,9 +47,9 @@ public class ConsulCatalogTest extends ConsulTestSupport {
             .to("direct:consul")
             .request(List.class);
 
-        Assert.assertFalse(ref.isEmpty());
-        Assert.assertFalse(res.isEmpty());
-        Assert.assertEquals(ref, res);
+        Assertions.assertFalse(ref.isEmpty());
+        Assertions.assertFalse(res.isEmpty());
+        Assertions.assertEquals(ref, res);
     }
 
     @Override
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulClientKeyValueTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulClientKeyValueTest.java
index ef6cc27..0835d8c 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulClientKeyValueTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulClientKeyValueTest.java
@@ -24,7 +24,8 @@ import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulKeyValueActions;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ConsulClientKeyValueTest extends ConsulTestSupport {
 
@@ -49,8 +50,8 @@ public class ConsulClientKeyValueTest extends ConsulTestSupport {
 
         Optional<String> keyVal = getConsul().keyValueClient().getValueAsString(key);
 
-        assertTrue(keyVal.isPresent());
-        assertEquals(val, keyVal.get());
+        Assertions.assertTrue(keyVal.isPresent());
+        Assertions.assertEquals(val, keyVal.get());
     }
 
     @BindToRegistry("consulClient")
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCoordinatesTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCoordinatesTest.java
index 1b9d280..fc8a855 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCoordinatesTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulCoordinatesTest.java
@@ -22,9 +22,9 @@ import com.orbitz.consul.model.coordinate.Coordinate;
 import com.orbitz.consul.model.coordinate.Datacenter;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulCoordinatesActions;
-import org.junit.Assert;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 public class ConsulCoordinatesTest extends ConsulTestSupport {
 
@@ -36,12 +36,12 @@ public class ConsulCoordinatesTest extends ConsulTestSupport {
             .to("direct:consul")
             .request(List.class);
 
-        Assert.assertFalse(ref.isEmpty());
-        Assert.assertFalse(res.isEmpty());
-        Assert.assertEquals(ref, res);
+        Assertions.assertFalse(ref.isEmpty());
+        Assertions.assertFalse(res.isEmpty());
+        Assertions.assertEquals(ref, res);
     }
 
-    @Ignore("Disabled as it seems that nodes is always 0")
+    @Disabled("Disabled as it seems that nodes is always 0")
     @Test
     public void testNodes() throws Exception {
         List<Coordinate> ref = getConsul().coordinateClient().getNodes();
@@ -50,9 +50,9 @@ public class ConsulCoordinatesTest extends ConsulTestSupport {
             .to("direct:consul")
             .request(List.class);
 
-        Assert.assertFalse(ref.isEmpty());
-        Assert.assertFalse(res.isEmpty());
-        Assert.assertEquals(ref, res);
+        Assertions.assertFalse(ref.isEmpty());
+        Assertions.assertFalse(res.isEmpty());
+        Assertions.assertEquals(ref, res);
     }
 
     @Override
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventTest.java
index 6daed84..5050343 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventTest.java
@@ -23,7 +23,8 @@ import com.orbitz.consul.model.event.Event;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulEventActions;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ConsulEventTest extends ConsulTestSupport {
 
@@ -48,9 +49,9 @@ public class ConsulEventTest extends ConsulTestSupport {
         EventResponse response = getConsul().eventClient().listEvents(key);
         List<Event> events = response.getEvents();
 
-        assertFalse(events.isEmpty());
-        assertTrue(events.get(0).getPayload().isPresent());
-        assertEquals(val, events.get(0).getPayload().get());
+        Assertions.assertFalse(events.isEmpty());
+        Assertions.assertTrue(events.get(0).getPayload().isPresent());
+        Assertions.assertEquals(val, events.get(0).getPayload().get());
     }
 
     @Override
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventWatchTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventWatchTest.java
index 8550295..b546e1c 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventWatchTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulEventWatchTest.java
@@ -21,7 +21,7 @@ import java.util.List;
 import com.orbitz.consul.EventClient;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ConsulEventWatchTest extends ConsulTestSupport {
     private String key;
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulHealthTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulHealthTest.java
index 79e2cfe..79855b7 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulHealthTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulHealthTest.java
@@ -27,8 +27,8 @@ import com.orbitz.consul.model.agent.Registration;
 import com.orbitz.consul.model.health.ServiceHealth;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulHealthActions;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ConsulHealthTest extends ConsulTestSupport {
     private AgentClient client;
@@ -85,14 +85,14 @@ public class ConsulHealthTest extends ConsulTestSupport {
             .to("direct:consul")
             .request(List.class);
 
-        Assert.assertEquals(2, ref.size());
-        Assert.assertEquals(2, res.size());
-        Assert.assertEquals(ref, res);
+        Assertions.assertEquals(2, ref.size());
+        Assertions.assertEquals(2, res.size());
+        Assertions.assertEquals(ref, res);
 
-        assertTrue(registrations.stream().anyMatch(
+        Assertions.assertTrue(registrations.stream().anyMatch(
             r -> r.getPort().isPresent() && r.getPort().get() == res.get(0).getService().getPort() && r.getId().equalsIgnoreCase(res.get(0).getService().getId())
         ));
-        assertTrue(registrations.stream().anyMatch(
+        Assertions.assertTrue(registrations.stream().anyMatch(
             r -> r.getPort().isPresent() && r.getPort().get() == res.get(1).getService().getPort() && r.getId().equalsIgnoreCase(res.get(1).getService().getId())
         ));
     }
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueTest.java
index dc03889..1a61f29 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueTest.java
@@ -21,7 +21,8 @@ import java.util.Optional;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulKeyValueActions;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ConsulKeyValueTest extends ConsulTestSupport {
 
@@ -46,8 +47,8 @@ public class ConsulKeyValueTest extends ConsulTestSupport {
 
         Optional<String> keyVal = getConsul().keyValueClient().getValueAsString(key);
 
-        assertTrue(keyVal.isPresent());
-        assertEquals(val, keyVal.get());
+        Assertions.assertTrue(keyVal.isPresent());
+        Assertions.assertEquals(val, keyVal.get());
     }
 
     @Override
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueWatchTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueWatchTest.java
index 716e25e..7dcfab9 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueWatchTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulKeyValueWatchTest.java
@@ -22,7 +22,7 @@ import java.util.Random;
 import com.orbitz.consul.KeyValueClient;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ConsulKeyValueWatchTest extends ConsulTestSupport {
     private String key;
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryTest.java
index 67cc2fd..68e94fd 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryTest.java
@@ -23,14 +23,14 @@ import java.util.Set;
 
 import com.orbitz.consul.Consul;
 import org.apache.camel.NoSuchBeanException;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 import org.testcontainers.containers.GenericContainer;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Unit test for Camel Registry implementation for Consul
@@ -49,7 +49,7 @@ public class ConsulRegistryTest implements Serializable {
         }
     }
 
-    @BeforeClass
+    @BeforeAll
     public static void setUp() {
         container = ConsulTestSupport.consulContainer();
         container.start();
@@ -57,7 +57,7 @@ public class ConsulRegistryTest implements Serializable {
         registry = new ConsulRegistry(container.getContainerIpAddress(), container.getMappedPort(Consul.DEFAULT_HTTP_PORT));
     }
 
-    @AfterClass
+    @AfterAll
     public static void tearDown() {
         container.stop();
     }
@@ -67,7 +67,7 @@ public class ConsulRegistryTest implements Serializable {
         registry.put("stringTestKey", "stringValue");
         String result = (String) registry.lookupByName("stringTestKey");
         registry.remove("stringTestKey");
-        assertNotNull(result);
+        Assertions.assertNotNull(result);
         assertEquals("stringValue", result);
     }
 
@@ -77,7 +77,7 @@ public class ConsulRegistryTest implements Serializable {
         registry.put("uniqueKey", "stringValueTwo");
         String result = (String) registry.lookupByName("uniqueKey");
         registry.remove("uniqueKey");
-        assertNotNull(result);
+        Assertions.assertNotNull(result);
         assertEquals("stringValueTwo", result);
     }
 
@@ -86,7 +86,7 @@ public class ConsulRegistryTest implements Serializable {
         registry.put("namedKey", "namedValue");
         String result = (String) registry.lookupByName("namedKey");
         registry.remove("namedKey");
-        assertNotNull(result);
+        Assertions.assertNotNull(result);
         assertEquals("namedValue", result);
     }
 
@@ -104,7 +104,7 @@ public class ConsulRegistryTest implements Serializable {
         registry.put("testClass", consulTestClass);
         ConsulTestClass consulTestClassClone = registry.lookupByNameAndType("testClass", consulTestClass.getClass());
         registry.remove("testClass");
-        assertNotNull(consulTestClassClone);
+        Assertions.assertNotNull(consulTestClassClone);
         assertEquals(consulTestClass.getClass(), consulTestClassClone.getClass());
     }
 
@@ -128,7 +128,7 @@ public class ConsulRegistryTest implements Serializable {
         registry.remove("testClassOne");
         registry.remove("testClassTwo");
         HashMap<String, ConsulTestClass> emptyHashMap = new HashMap<>();
-        assertNotNull(consulTestClassMap);
+        Assertions.assertNotNull(consulTestClassMap);
         assertEquals(consulTestClassMap.getClass(), emptyHashMap.getClass());
         assertEquals(2, consulTestClassMap.size());
     }
@@ -153,7 +153,7 @@ public class ConsulRegistryTest implements Serializable {
         ConsulTestClass classTwo = new ConsulTestClass();
         registry.put("classTwo", classTwo);
         Set<? extends ConsulTestClass> results = registry.findByType(classOne.getClass());
-        assertNotNull(results);
+        Assertions.assertNotNull(results);
         HashSet<ConsulTestClass> hashSet = new HashSet<>();
         registry.remove("classOne");
         registry.remove("classTwo");
@@ -165,8 +165,8 @@ public class ConsulRegistryTest implements Serializable {
 
     }
 
-    @Test(expected = NoSuchBeanException.class)
+    @Test
     public void deleteNonExisting() {
-        registry.remove("nonExisting");
+        Assertions.assertThrows(NoSuchBeanException.class, () -> registry.remove("nonExisting"));
     }
 }
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryUtilsTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryUtilsTest.java
index f56045d..221e569 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryUtilsTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulRegistryUtilsTest.java
@@ -21,10 +21,10 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.camel.component.consul.ConsulRegistry.ConsulRegistryUtils;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author <a href="https://github.com/ppalaga">Peter Palaga</a>
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulSessionTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulSessionTest.java
index 63fa765..300feaa 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulSessionTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulSessionTest.java
@@ -24,8 +24,8 @@ import com.orbitz.consul.model.session.SessionCreatedResponse;
 import com.orbitz.consul.model.session.SessionInfo;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulSessionActions;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 
 public class ConsulSessionTest extends ConsulTestSupport {
 
@@ -40,8 +40,8 @@ public class ConsulSessionTest extends ConsulTestSupport {
                 .to("direct:consul")
                 .request(List.class);
 
-            Assert.assertEquals(sessions, list.size());
-            Assert.assertFalse(list.stream().anyMatch(s -> s.getName().isPresent() && s.getName().get().equals(name)));
+            Assertions.assertEquals(sessions, list.size());
+            Assertions.assertFalse(list.stream().anyMatch(s -> s.getName().isPresent() && s.getName().get().equals(name)));
         }
 
         SessionCreatedResponse res = fluentTemplate()
@@ -50,7 +50,7 @@ public class ConsulSessionTest extends ConsulTestSupport {
             .to("direct:consul")
             .request(SessionCreatedResponse.class);
 
-        Assert.assertNotNull(res.getId());
+        Assertions.assertNotNull(res.getId());
 
         {
             List<SessionInfo> list = fluentTemplate()
@@ -58,8 +58,8 @@ public class ConsulSessionTest extends ConsulTestSupport {
                 .to("direct:consul")
                 .request(List.class);
 
-            Assert.assertEquals(sessions + 1, list.size());
-            Assert.assertTrue(list.stream().anyMatch(s -> s.getName().isPresent() && s.getName().get().equals(name)));
+            Assertions.assertEquals(sessions + 1, list.size());
+            Assertions.assertTrue(list.stream().anyMatch(s -> s.getName().isPresent() && s.getName().get().equals(name)));
         }
 
         {
@@ -74,8 +74,8 @@ public class ConsulSessionTest extends ConsulTestSupport {
                 .to("direct:consul")
                 .request(List.class);
 
-            Assert.assertEquals(sessions, list.size());
-            Assert.assertFalse(list.stream().anyMatch(s -> s.getName().isPresent() && s.getName().get().equals(name)));
+            Assertions.assertEquals(sessions, list.size());
+            Assertions.assertFalse(list.stream().anyMatch(s -> s.getName().isPresent() && s.getName().get().equals(name)));
         }
     }
 
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulTestSupport.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulTestSupport.java
index bc1d6cd..a5e8831 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulTestSupport.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/ConsulTestSupport.java
@@ -24,10 +24,10 @@ import com.orbitz.consul.Consul;
 import com.orbitz.consul.KeyValueClient;
 
 import org.apache.camel.BindToRegistry;
-import org.apache.camel.test.testcontainers.ContainerAwareTestSupport;
+import org.apache.camel.test.junit5.testcontainers.ContainerAwareTestSupport;
 import org.apache.camel.test.testcontainers.Wait;
-import org.junit.Rule;
-import org.junit.rules.TestName;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.TestInfo;
 import org.testcontainers.containers.GenericContainer;
 
 public class ConsulTestSupport extends ContainerAwareTestSupport {
@@ -35,8 +35,13 @@ public class ConsulTestSupport extends ContainerAwareTestSupport {
     public static final String CONTAINER_NAME = "consul";
     public static final String KV_PREFIX = "/camel";
 
-    @Rule
-    public final TestName testName = new TestName();
+    protected String testName;
+
+    @BeforeEach
+    public void setUp(TestInfo testInfo) throws Exception {
+        super.setUp();
+        testName = testInfo.getDisplayName();
+    }
 
     @BindToRegistry("consul")
     public ConsulComponent getConsulComponent() {
@@ -69,7 +74,7 @@ public class ConsulTestSupport extends ContainerAwareTestSupport {
     }
 
     protected String generateKey() {
-        return KV_PREFIX + "/" + testName.getMethodName() + "/" + generateRandomString();
+        return KV_PREFIX + "/" + testName + "/" + generateRandomString();
     }
 
     protected String consulUrl() {
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulDefaultServiceCallRouteTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulDefaultServiceCallRouteTest.java
index c21ed04..1f054d0 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulDefaultServiceCallRouteTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulDefaultServiceCallRouteTest.java
@@ -26,7 +26,7 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.test.AvailablePortFinder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ConsulDefaultServiceCallRouteTest extends ConsulTestSupport {
     private static final String SERVICE_NAME = "http-service";
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulRibbonServiceCallRouteTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulRibbonServiceCallRouteTest.java
index eb7c769..ec26483 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulRibbonServiceCallRouteTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulRibbonServiceCallRouteTest.java
@@ -26,7 +26,7 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.test.AvailablePortFinder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class ConsulRibbonServiceCallRouteTest extends ConsulTestSupport {
     private static final String SERVICE_NAME = "http-service";
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceCallWithRegistrationTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceCallWithRegistrationTest.java
index e7f6a80..9cb0334 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceCallWithRegistrationTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceCallWithRegistrationTest.java
@@ -23,9 +23,12 @@ import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.impl.cloud.ServiceRegistrationRoutePolicy;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.springframework.util.SocketUtils;
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 public class ConsulServiceCallWithRegistrationTest extends ConsulTestSupport {
     private static final String SERVICE_HOST = "localhost";
 
@@ -90,43 +93,36 @@ public class ConsulServiceCallWithRegistrationTest extends ConsulTestSupport {
 
         context.start();
 
-        assertEquals("ping on " + port, template.requestBody("direct:start", "ping", String.class));
+        Assertions.assertEquals("ping on " + port, template.requestBody("direct:start", "ping", String.class));
     }
 
-    @Test(expected = CamelExecutionException.class)
+    @Test
     public void testServiceCallFailure() throws Exception {
-        final int port = SocketUtils.findAvailableTcpPort();
-        final String serviceId = UUID.randomUUID().toString();
-        final String serviceName = UUID.randomUUID().toString();
 
-        context.addRoutes(new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                // context path is had coded so it should fail as it not exposed
-                // by jetty
-                from("direct:start")
-                    .serviceCall()
-                        .name(serviceName + "/bad/path")
-                        .component("http")
-                        .defaultLoadBalancer()
-                        .consulServiceDiscovery()
-                            .url(consulUrl())
-                        .end()
-                    .end()
-                    .log("${body}");
+        assertThrows(CamelExecutionException.class, () -> {
 
-                fromF("undertow:http://%s:%d/service/path", SERVICE_HOST, port)
-                    .routeId(serviceId)
-                    .routeGroup(serviceName)
-                    .routePolicy(new ServiceRegistrationRoutePolicy())
-                    .transform()
-                    .simple("${in.body} on " + port);
-            }
-        });
+            final int port = SocketUtils.findAvailableTcpPort();
+            final String serviceId = UUID.randomUUID().toString();
+            final String serviceName = UUID.randomUUID().toString();
 
-        context.start();
+            context.addRoutes(new RouteBuilder() {
+                @Override
+                public void configure() throws Exception {
+                    // context path is had coded so it should fail as it not
+                    // exposed
+                    // by jetty
+                    from("direct:start").serviceCall().name(serviceName + "/bad/path").component("http").defaultLoadBalancer().consulServiceDiscovery().url(consulUrl()).end().end()
+                        .log("${body}");
 
-        template.requestBody("direct:start", "ping", String.class);
-        fail("Should have failed");
+                    fromF("undertow:http://%s:%d/service/path", SERVICE_HOST, port).routeId(serviceId).routeGroup(serviceName).routePolicy(new ServiceRegistrationRoutePolicy())
+                        .transform().simple("${in.body} on " + port);
+                }
+            });
+
+            context.start();
+
+            template.requestBody("direct:start", "ping", String.class);
+            Assertions.fail("Should have failed");
+        });
     }
 }
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryTest.java
index 8023c29..196500f 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceDiscoveryTest.java
@@ -29,9 +29,12 @@ import org.apache.camel.cloud.ServiceDiscovery;
 import org.apache.camel.component.consul.ConsulConfiguration;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.assertj.core.api.Assertions;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.util.SocketUtils;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
 public class ConsulServiceDiscoveryTest extends ConsulTestSupport {
     private AgentClient client;
     private List<Registration> registrations;
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistrationTestBase.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistrationTestBase.java
index b9a3bed..231cf88 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistrationTestBase.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistrationTestBase.java
@@ -28,9 +28,12 @@ import com.orbitz.consul.model.health.ServiceHealth;
 import org.apache.camel.CamelContext;
 import org.apache.camel.cloud.ServiceDefinition;
 import org.apache.camel.component.consul.ConsulTestSupport;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.springframework.util.SocketUtils;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 public abstract class ConsulServiceRegistrationTestBase extends ConsulTestSupport {
     protected static final String SERVICE_ID = UUID.randomUUID().toString();
     protected static final String SERVICE_NAME = "my-service";
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistryTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistryTest.java
index 2c7f574..b4e0df0 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistryTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cloud/ConsulServiceRegistryTest.java
@@ -24,7 +24,9 @@ import com.orbitz.consul.model.catalog.CatalogService;
 import com.orbitz.consul.model.health.ServiceHealth;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.impl.cloud.DefaultServiceDefinition;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class ConsulServiceRegistryTest extends ConsulTestSupport {
     @Override
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyFactoryTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyFactoryTest.java
index bdd59df..7d996d5 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyFactoryTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyFactoryTest.java
@@ -31,16 +31,18 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.cluster.ClusteredRoutePolicyFactory;
-import org.junit.Assert;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
+@Testcontainers
 public class ConsulClusteredRoutePolicyFactoryTest {
 
-    @ClassRule
+    @Container
     public static GenericContainer container = ConsulTestSupport.consulContainer();
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ConsulClusteredRoutePolicyFactoryTest.class);
@@ -62,8 +64,8 @@ public class ConsulClusteredRoutePolicyFactoryTest {
         LATCH.await(1, TimeUnit.MINUTES);
         SCHEDULER.shutdownNow();
 
-        Assert.assertEquals(CLIENTS.size(), RESULTS.size());
-        Assert.assertTrue(RESULTS.containsAll(CLIENTS));
+        Assertions.assertEquals(CLIENTS.size(), RESULTS.size());
+        Assertions.assertTrue(RESULTS.containsAll(CLIENTS));
     }
 
     // ************************************
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyTest.java
index cb06bb6..a7867d3 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulClusteredRoutePolicyTest.java
@@ -31,16 +31,18 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.cluster.ClusteredRoutePolicy;
-import org.junit.Assert;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
+@Testcontainers
 public class ConsulClusteredRoutePolicyTest {
 
-    @ClassRule
+    @Container
     public static GenericContainer container = ConsulTestSupport.consulContainer();
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ConsulClusteredRoutePolicyTest.class);
@@ -62,8 +64,8 @@ public class ConsulClusteredRoutePolicyTest {
         LATCH.await(1, TimeUnit.MINUTES);
         SCHEDULER.shutdownNow();
 
-        Assert.assertEquals(CLIENTS.size(), RESULTS.size());
-        Assert.assertTrue(RESULTS.containsAll(CLIENTS));
+        Assertions.assertEquals(CLIENTS.size(), RESULTS.size());
+        Assertions.assertTrue(RESULTS.containsAll(CLIENTS));
     }
 
     // ************************************
diff --git a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulMasterTest.java b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulMasterTest.java
index 90129b2..0a609ff 100644
--- a/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulMasterTest.java
+++ b/components/camel-consul/src/test/java/org/apache/camel/component/consul/cluster/ConsulMasterTest.java
@@ -30,16 +30,18 @@ import com.orbitz.consul.Consul;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.ConsulTestSupport;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.junit.Assert;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
 
+@Testcontainers
 public class ConsulMasterTest {
 
-    @ClassRule
+    @Container
     public static GenericContainer container = ConsulTestSupport.consulContainer();
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ConsulMasterTest.class);
@@ -61,8 +63,8 @@ public class ConsulMasterTest {
         LATCH.await(1, TimeUnit.MINUTES);
         SCHEDULER.shutdownNow();
 
-        Assert.assertEquals(CLIENTS.size(), RESULTS.size());
-        Assert.assertTrue(RESULTS.containsAll(CLIENTS));
+        Assertions.assertEquals(CLIENTS.size(), RESULTS.size());
+        Assertions.assertTrue(RESULTS.containsAll(CLIENTS));
     }
 
     // ************************************
diff --git a/components/camel-testcontainers/pom.xml b/components/camel-testcontainers/pom.xml
index c882cf5..7686ef5 100644
--- a/components/camel-testcontainers/pom.xml
+++ b/components/camel-testcontainers/pom.xml
@@ -49,7 +49,11 @@
             <artifactId>testcontainers</artifactId>
             <version>${testcontainers-version}</version>
         </dependency>
-
+        <dependency>
+            <groupId>org.testcontainers</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <version>${testcontainers-version}</version>
+        </dependency>
         <!-- optional dependencies for running tests -->
         <dependency>
             <groupId>org.assertj</groupId>
diff --git a/components/camel-testcontainers/src/main/java/org/apache/camel/test/junit5/testcontainers/ContainerAwareTestSupport.java b/components/camel-testcontainers/src/main/java/org/apache/camel/test/junit5/testcontainers/ContainerAwareTestSupport.java
new file mode 100644
index 0000000..c5381ff
--- /dev/null
+++ b/components/camel-testcontainers/src/main/java/org/apache/camel/test/junit5/testcontainers/ContainerAwareTestSupport.java
@@ -0,0 +1,112 @@
+/*
+ * 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.test.junit5.testcontainers;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.apache.camel.test.testcontainers.ContainerPropertiesFunction;
+import org.apache.camel.test.testcontainers.Containers;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.Network;
+
+public class ContainerAwareTestSupport extends CamelTestSupport {
+    private List<GenericContainer<?>> containers = new CopyOnWriteArrayList<>();
+
+    // ******************
+    // Setup
+    // ******************
+
+    @Override
+    protected void setupResources() throws Exception {
+        super.setupResources();
+
+        containers.clear();
+        containers.addAll(createContainers());
+
+        final Network network = containerNetwork();
+        final long timeout = containersStartupTimeout();
+
+        Containers.start(containers, network, timeout);
+    }
+
+    @Override
+    protected void cleanupResources() throws Exception {
+        super.cleanupResources();
+
+        Containers.stop(containers, containerShutdownTimeout());
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        final CamelContext context = super.createCamelContext();
+        final PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class);
+
+        pc.addFunction(new ContainerPropertiesFunction(containers));
+
+        return context;
+    }
+
+    // ******************
+    // Containers set-up
+    // ******************
+
+    protected GenericContainer<?> createContainer() {
+        return null;
+    }
+
+    protected List<GenericContainer<?>> createContainers() {
+        GenericContainer<?> container = createContainer();
+
+        return container == null
+            ? Collections.emptyList()
+            : Collections.singletonList(container);
+    }
+
+    protected long containersStartupTimeout() {
+        return TimeUnit.MINUTES.toSeconds(1);
+    }
+
+    protected long containerShutdownTimeout() {
+        return TimeUnit.MINUTES.toSeconds(1);
+    }
+
+    protected Network containerNetwork() {
+        return null;
+    }
+
+    // ******************
+    // Helpers
+    // ******************
+
+    protected GenericContainer<?> getContainer(String containerName) {
+        return Containers.lookup(containers, containerName);
+    }
+
+    protected String getContainerHost(String containerName) {
+        return getContainer(containerName).getContainerIpAddress();
+    }
+
+    protected int getContainerPort(String containerName, int originalPort) {
+        return getContainer(containerName).getMappedPort(originalPort);
+    }
+}
diff --git a/components/camel-testcontainers/src/test/java/org/apache/camel/test/junit5/testcontainers/ContainerAwareTestSupportIT.java b/components/camel-testcontainers/src/test/java/org/apache/camel/test/junit5/testcontainers/ContainerAwareTestSupportIT.java
new file mode 100644
index 0000000..1a608ea
--- /dev/null
+++ b/components/camel-testcontainers/src/test/java/org/apache/camel/test/junit5/testcontainers/ContainerAwareTestSupportIT.java
@@ -0,0 +1,54 @@
+/*
+ * 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.test.junit5.testcontainers;
+
+import org.apache.camel.test.testcontainers.Wait;
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.testcontainers.containers.GenericContainer;
+
+public class ContainerAwareTestSupportIT extends ContainerAwareTestSupport {
+    @Test
+    public void testPropertyPlaceholders() throws Exception {
+        final GenericContainer<?> container = getContainer("myconsul");
+
+        final String host = context.resolvePropertyPlaceholders("{{container:host:myconsul}}");
+        Assertions.assertThat(host).isEqualTo(container.getContainerIpAddress());
+
+        final String port = context.resolvePropertyPlaceholders("{{container:port:8500@myconsul}}");
+        Assertions.assertThat(port).isEqualTo("" + container.getMappedPort(8500));
+    }
+
+    @Override
+    protected GenericContainer<?> createContainer() {
+        return new GenericContainer<>("consul:1.5.1")
+            .withNetworkAliases("myconsul")
+            .withExposedPorts(8500)
+            .waitingFor(Wait.forLogMessageContaining("Synced node info", 1))
+            .withCommand(
+                "agent",
+                "-dev",
+                "-server",
+                "-bootstrap",
+                "-client",
+                "0.0.0.0",
+                "-log-level",
+                "trace"
+            );
+    }
+
+}