diff --git a/catalog/camel-catalog-provider-springboot/src/test/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProviderTest.java b/catalog/camel-catalog-provider-springboot/src/test/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProviderTest.java
index 5afd845..1d6f54e 100644
--- a/catalog/camel-catalog-provider-springboot/src/test/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProviderTest.java
+++ b/catalog/camel-catalog-provider-springboot/src/test/java/org/apache/camel/catalog/springboot/SpringBootRuntimeProviderTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.catalog.springboot;
+
 import java.util.List;
 
 import org.apache.camel.catalog.CamelCatalog;
diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
index 6cc8523..c3760c5 100644
--- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
+++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
@@ -20,6 +20,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+
 import javax.management.MXBean;
 
 /**
diff --git a/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/GenerateMojo.java b/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/GenerateMojo.java
index c76cf89..a6946ff 100644
--- a/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/GenerateMojo.java
+++ b/catalog/camel-main-maven-plugin/src/main/java/org/apache/camel/maven/GenerateMojo.java
@@ -49,7 +49,6 @@
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
-
 import org.jboss.forge.roaster.Roaster;
 import org.jboss.forge.roaster.model.Extendable;
 import org.jboss.forge.roaster.model.JavaType;
diff --git a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java
index 435d94d..880db29 100644
--- a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java
+++ b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java
@@ -26,7 +26,6 @@
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.catalog.JSonSchemaHelper;
-
 import org.apache.camel.parser.model.CamelNodeDetails;
 import org.apache.camel.parser.model.CamelNodeDetailsFactory;
 
diff --git a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/XmlLineNumberParser.java b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/XmlLineNumberParser.java
index 329b3a9..76cbb80 100644
--- a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/XmlLineNumberParser.java
+++ b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/XmlLineNumberParser.java
@@ -35,6 +35,7 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
+
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.Locator;
diff --git a/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/ActiveMQOriginalDestinationTest.java b/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/ActiveMQOriginalDestinationTest.java
index 29ceea5..e23db5e 100644
--- a/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/ActiveMQOriginalDestinationTest.java
+++ b/components/camel-activemq/src/test/java/org/apache/camel/component/activemq/ActiveMQOriginalDestinationTest.java
@@ -30,7 +30,6 @@
 
 import static org.apache.camel.component.activemq.ActiveMQComponent.activeMQComponent;
 
-
 public class ActiveMQOriginalDestinationTest extends CamelTestSupport {
 
     @Test
diff --git a/components/camel-ahc-ws/src/test/java/org/apache/camel/component/ahc/ws/WsProducerConsumerTest.java b/components/camel-ahc-ws/src/test/java/org/apache/camel/component/ahc/ws/WsProducerConsumerTest.java
index e556130..3026278 100644
--- a/components/camel-ahc-ws/src/test/java/org/apache/camel/component/ahc/ws/WsProducerConsumerTest.java
+++ b/components/camel-ahc-ws/src/test/java/org/apache/camel/component/ahc/ws/WsProducerConsumerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.ahc.ws;
+
 import java.util.List;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/HttpProtocolHeaderFilterStrategy.java b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/HttpProtocolHeaderFilterStrategy.java
index c665fb4..4d276df 100644
--- a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/HttpProtocolHeaderFilterStrategy.java
+++ b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/HttpProtocolHeaderFilterStrategy.java
@@ -18,7 +18,6 @@
 
 import org.apache.camel.support.DefaultHeaderFilterStrategy;
 
-
 public class HttpProtocolHeaderFilterStrategy extends DefaultHeaderFilterStrategy {
     
     public HttpProtocolHeaderFilterStrategy() {
diff --git a/components/camel-ahc/src/test/java/org/apache/camel/component/ahc/AhcComponentClientConfigTest.java b/components/camel-ahc/src/test/java/org/apache/camel/component/ahc/AhcComponentClientConfigTest.java
index 6664ada..560e8b6 100644
--- a/components/camel-ahc/src/test/java/org/apache/camel/component/ahc/AhcComponentClientConfigTest.java
+++ b/components/camel-ahc/src/test/java/org/apache/camel/component/ahc/AhcComponentClientConfigTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.ahc;
 
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPConnectionDetails.java b/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPConnectionDetails.java
index 07d1e9d..fa1e05f 100644
--- a/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPConnectionDetails.java
+++ b/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPConnectionDetails.java
@@ -104,4 +104,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPRouteTraceFrameTest.java b/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPRouteTraceFrameTest.java
index 3f35ede..8912473 100644
--- a/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPRouteTraceFrameTest.java
+++ b/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPRouteTraceFrameTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.amqp;
+
 import org.apache.activemq.broker.BrokerService;
 import org.apache.camel.CamelContext;
 import org.apache.camel.EndpointInject;
diff --git a/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/Any23DataFormat.java b/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/Any23DataFormat.java
index 57af357..c597b14 100644
--- a/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/Any23DataFormat.java
+++ b/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/Any23DataFormat.java
@@ -23,12 +23,12 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+
 import org.apache.any23.Any23;
 import org.apache.any23.configuration.DefaultConfiguration;
 import org.apache.any23.configuration.ModifiableConfiguration;
 import org.apache.any23.source.ByteArrayDocumentSource;
 import org.apache.any23.writer.TripleHandler;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.dataformat.any23.utils.Any23Utils;
 import org.apache.camel.dataformat.any23.writer.RDF4JModelWriter;
diff --git a/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/utils/Any23Utils.java b/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/utils/Any23Utils.java
index 7213a67..6b3ce65 100644
--- a/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/utils/Any23Utils.java
+++ b/components/camel-any23/src/main/java/org/apache/camel/dataformat/any23/utils/Any23Utils.java
@@ -17,6 +17,7 @@
 package org.apache.camel.dataformat.any23.utils;
 
 import java.io.OutputStream;
+
 import org.apache.any23.writer.JSONLDWriter;
 import org.apache.any23.writer.NQuadsWriter;
 import org.apache.any23.writer.NTriplesWriter;
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatConfigurationsTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatConfigurationsTest.java
index ebf85a2..3262b11 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatConfigurationsTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatConfigurationsTest.java
@@ -22,6 +22,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java
index 7d032a7..c686c5a 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatDefaultTest.java
@@ -18,6 +18,7 @@
 
 import java.io.File;
 import java.util.List;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatExtractorsTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatExtractorsTest.java
index d1b8c60..9c085e5 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatExtractorsTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatExtractorsTest.java
@@ -23,6 +23,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatHTTPTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatHTTPTest.java
index dd4ab1f..ed5cef2 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatHTTPTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatHTTPTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.dataformat.any23;
 
 import java.util.List;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatMarshalTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatMarshalTest.java
index 356bd05..c7fd0d1 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatMarshalTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatMarshalTest.java
@@ -18,6 +18,7 @@
 
 import java.io.File;
 import java.util.List;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatModelTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatModelTest.java
index 29702c3..9b6501b 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatModelTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatModelTest.java
@@ -18,6 +18,7 @@
 
 import java.io.File;
 import java.util.List;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatOutputFormatTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatOutputFormatTest.java
index f53c71c..dea0687 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatOutputFormatTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatOutputFormatTest.java
@@ -20,6 +20,7 @@
 import java.io.InputStream;
 import java.nio.charset.Charset;
 import java.util.List;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatSpringTest.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatSpringTest.java
index e19ac47..03dbded 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatSpringTest.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23DataFormatSpringTest.java
@@ -19,6 +19,7 @@
 import java.io.InputStream;
 import java.nio.charset.Charset;
 import java.util.List;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23TestSupport.java b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23TestSupport.java
index 448a88e..4229b73 100644
--- a/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23TestSupport.java
+++ b/components/camel-any23/src/test/java/org/apache/camel/dataformat/any23/Any23TestSupport.java
@@ -19,6 +19,7 @@
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
+
 import org.apache.camel.util.IOHelper;
 
 public final class Any23TestSupport {
diff --git a/components/camel-apns/src/main/java/org/apache/camel/component/apns/factory/ApnsServiceFactory.java b/components/camel-apns/src/main/java/org/apache/camel/component/apns/factory/ApnsServiceFactory.java
index 3404d7f..bc6cd21 100644
--- a/components/camel-apns/src/main/java/org/apache/camel/component/apns/factory/ApnsServiceFactory.java
+++ b/components/camel-apns/src/main/java/org/apache/camel/component/apns/factory/ApnsServiceFactory.java
@@ -26,7 +26,6 @@
 import com.notnoop.apns.ApnsServiceBuilder;
 import com.notnoop.apns.ReconnectPolicy;
 import com.notnoop.apns.internal.Utilities;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.RuntimeCamelException;
diff --git a/components/camel-apns/src/main/java/org/apache/camel/component/apns/util/ResourceUtils.java b/components/camel-apns/src/main/java/org/apache/camel/component/apns/util/ResourceUtils.java
index e147da0..b8a4c7c 100644
--- a/components/camel-apns/src/main/java/org/apache/camel/component/apns/util/ResourceUtils.java
+++ b/components/camel-apns/src/main/java/org/apache/camel/component/apns/util/ResourceUtils.java
@@ -23,7 +23,6 @@
 import java.io.InputStream;
 
 import com.notnoop.exceptions.RuntimeIOException;
-
 import org.apache.camel.util.IOHelper;
 
 public final class ResourceUtils {
diff --git a/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsConsumerIdleMessageTest.java b/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsConsumerIdleMessageTest.java
index f59cf06..62951ba 100644
--- a/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsConsumerIdleMessageTest.java
+++ b/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsConsumerIdleMessageTest.java
@@ -18,7 +18,6 @@
 
 import com.notnoop.apns.ApnsService;
 import com.notnoop.apns.utils.ApnsServerStub;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.apns.factory.ApnsServiceFactory;
diff --git a/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsConsumerTest.java b/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsConsumerTest.java
index a3f973a..d4b7102 100644
--- a/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsConsumerTest.java
+++ b/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsConsumerTest.java
@@ -18,7 +18,6 @@
 
 import com.notnoop.apns.ApnsService;
 import com.notnoop.apns.utils.ApnsServerStub;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.apns.factory.ApnsServiceFactory;
@@ -31,7 +30,6 @@
 import org.junit.Before;
 import org.junit.Test;
 
-
 /**
  * Unit test that we can produce JMS message from files
  */
diff --git a/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerTest.java b/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerTest.java
index 6a722ec..10775d8 100644
--- a/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerTest.java
+++ b/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerTest.java
@@ -20,7 +20,6 @@
 import com.notnoop.apns.ApnsService;
 import com.notnoop.apns.EnhancedApnsNotification;
 import com.notnoop.apns.utils.ApnsServerStub;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.apns.factory.ApnsServiceFactory;
diff --git a/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerWithoutTokensHeaderTest.java b/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerWithoutTokensHeaderTest.java
index 082d893..7f5383c 100644
--- a/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerWithoutTokensHeaderTest.java
+++ b/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerWithoutTokensHeaderTest.java
@@ -20,7 +20,6 @@
 import com.notnoop.apns.ApnsService;
 import com.notnoop.apns.EnhancedApnsNotification;
 import com.notnoop.apns.utils.ApnsServerStub;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.apns.factory.ApnsServiceFactory;
diff --git a/components/camel-apns/src/test/java/org/apache/camel/component/apns/factory/ApnsServiceFactoryTest.java b/components/camel-apns/src/test/java/org/apache/camel/component/apns/factory/ApnsServiceFactoryTest.java
index e60e425..8a4d7f9 100644
--- a/components/camel-apns/src/test/java/org/apache/camel/component/apns/factory/ApnsServiceFactoryTest.java
+++ b/components/camel-apns/src/test/java/org/apache/camel/component/apns/factory/ApnsServiceFactoryTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.apns.factory;
 
 import com.notnoop.apns.ApnsService;
-
 import org.apache.camel.component.apns.model.ConnectionStrategy;
 import org.apache.camel.component.apns.util.ApnsUtils;
 import org.apache.camel.component.apns.util.TestConstants;
diff --git a/components/camel-apns/src/test/java/org/apache/camel/component/apns/factory/ConfiguredApnsServiceFactoryTest.java b/components/camel-apns/src/test/java/org/apache/camel/component/apns/factory/ConfiguredApnsServiceFactoryTest.java
index 195cfa5..882ca23 100644
--- a/components/camel-apns/src/test/java/org/apache/camel/component/apns/factory/ConfiguredApnsServiceFactoryTest.java
+++ b/components/camel-apns/src/test/java/org/apache/camel/component/apns/factory/ConfiguredApnsServiceFactoryTest.java
@@ -19,7 +19,6 @@
 import java.io.IOException;
 
 import com.notnoop.apns.ApnsServiceBuilder;
-
 import org.apache.camel.support.jsse.SSLContextParameters;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/components/camel-apns/src/test/java/org/apache/camel/component/apns/spring/SpringApnsConsumerTest.java b/components/camel-apns/src/test/java/org/apache/camel/component/apns/spring/SpringApnsConsumerTest.java
index 6f2af38..c2a4505 100644
--- a/components/camel-apns/src/test/java/org/apache/camel/component/apns/spring/SpringApnsConsumerTest.java
+++ b/components/camel-apns/src/test/java/org/apache/camel/component/apns/spring/SpringApnsConsumerTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.apns.spring;
 
 import com.notnoop.apns.utils.ApnsServerStub;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.component.apns.model.InactiveDevice;
diff --git a/components/camel-apns/src/test/java/org/apache/camel/component/apns/util/ApnsUtils.java b/components/camel-apns/src/test/java/org/apache/camel/component/apns/util/ApnsUtils.java
index b2b2b01..ef30f52 100644
--- a/components/camel-apns/src/test/java/org/apache/camel/component/apns/util/ApnsUtils.java
+++ b/components/camel-apns/src/test/java/org/apache/camel/component/apns/util/ApnsUtils.java
@@ -27,6 +27,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Random;
+
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
@@ -35,7 +36,6 @@
 import com.notnoop.apns.internal.Utilities;
 import com.notnoop.apns.utils.ApnsServerStub;
 import com.notnoop.apns.utils.FixedCertificates;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.apns.factory.ApnsServiceFactory;
 import org.apache.camel.support.jsse.KeyManagersParameters;
diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2SignedDataGenerator.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2SignedDataGenerator.java
index 9147776..a6944d9 100644
--- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2SignedDataGenerator.java
+++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2SignedDataGenerator.java
@@ -17,22 +17,6 @@
 package org.apache.camel.component.as2.api;
 
 import java.security.Key;
-/**
- * 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.
- */
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
diff --git a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java
index db43751..84ebd96 100644
--- a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java
+++ b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.as2.api;
+
 import java.io.IOException;
 import java.security.KeyPair;
 import java.security.KeyPairGenerator;
diff --git a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ClientManagerIntegrationTest.java b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ClientManagerIntegrationTest.java
index c3f2292..4830406 100644
--- a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ClientManagerIntegrationTest.java
+++ b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ClientManagerIntegrationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.as2;
+
 import java.io.IOException;
 import java.security.KeyPair;
 import java.security.KeyPairGenerator;
diff --git a/components/camel-asn1/src/main/java/org/apache/camel/dataformat/asn1/ASN1DataFormat.java b/components/camel-asn1/src/main/java/org/apache/camel/dataformat/asn1/ASN1DataFormat.java
index 414651a..7b5d808 100644
--- a/components/camel-asn1/src/main/java/org/apache/camel/dataformat/asn1/ASN1DataFormat.java
+++ b/components/camel-asn1/src/main/java/org/apache/camel/dataformat/asn1/ASN1DataFormat.java
@@ -25,7 +25,6 @@
 import java.lang.reflect.Method;
 
 import com.beanit.jasn1.ber.ReverseByteArrayOutputStream;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataFormatName;
@@ -148,4 +147,4 @@
         // no op
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosFileUploadResult.java b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosFileUploadResult.java
index e25b485..f347cf1 100644
--- a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosFileUploadResult.java
+++ b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosFileUploadResult.java
@@ -22,7 +22,6 @@
 import org.apache.camel.component.atmos.util.AtmosResultCode;
 import org.apache.camel.component.atmos.util.AtmosResultHeader;
 
-
 public class AtmosFileUploadResult extends AtmosResult {
 
     /**
diff --git a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosMoveResult.java b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosMoveResult.java
index ba41482..3f97213 100644
--- a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosMoveResult.java
+++ b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosMoveResult.java
@@ -19,7 +19,6 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.component.atmos.util.AtmosResultHeader;
 
-
 public class AtmosMoveResult extends AtmosResult {
     
     /**
diff --git a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosResult.java b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosResult.java
index 6f95d13..a6d6b9e 100644
--- a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosResult.java
+++ b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosResult.java
@@ -18,7 +18,6 @@
 
 import org.apache.camel.Exchange;
 
-
 public abstract class AtmosResult {
 
     protected Object resultEntries;
diff --git a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/integration/consumer/AtmosScheduledPollConsumer.java b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/integration/consumer/AtmosScheduledPollConsumer.java
index a4b0d93..7f5108c 100644
--- a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/integration/consumer/AtmosScheduledPollConsumer.java
+++ b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/integration/consumer/AtmosScheduledPollConsumer.java
@@ -21,7 +21,6 @@
 import org.apache.camel.component.atmos.AtmosEndpoint;
 import org.apache.camel.support.ScheduledPollConsumer;
 
-
 public abstract class AtmosScheduledPollConsumer extends ScheduledPollConsumer {
 
     protected AtmosEndpoint endpoint;
diff --git a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/validator/AtmosConfigurationValidator.java b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/validator/AtmosConfigurationValidator.java
index 94a261a..99c5e0f 100644
--- a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/validator/AtmosConfigurationValidator.java
+++ b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/validator/AtmosConfigurationValidator.java
@@ -25,6 +25,7 @@
 import org.apache.camel.component.atmos.AtmosConfiguration;
 import org.apache.camel.component.atmos.util.AtmosException;
 import org.apache.camel.component.atmos.util.AtmosOperation;
+
 import static org.apache.camel.component.atmos.util.AtmosConstants.ATMOS_FILE_SEPARATOR;
 
 public final class AtmosConfigurationValidator {
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/AtmosTestSupport.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/AtmosTestSupport.java
index e452665..a43721c 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/AtmosTestSupport.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/AtmosTestSupport.java
@@ -22,7 +22,6 @@
 import org.apache.camel.component.atmos.AtmosComponent;
 import org.apache.camel.test.junit4.CamelTestSupport;
 
-
 public class AtmosTestSupport extends CamelTestSupport {
 
     @Override
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/consumer/AtmosConsumerGetSingleTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/consumer/AtmosConsumerGetSingleTest.java
index 21d700d..898583f 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/consumer/AtmosConsumerGetSingleTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/consumer/AtmosConsumerGetSingleTest.java
@@ -26,7 +26,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class AtmosConsumerGetSingleTest extends AtmosTestSupport {
 
     public AtmosConsumerGetSingleTest() throws Exception { }
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerDelTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerDelTest.java
index f8d70c0..dbed8bd 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerDelTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerDelTest.java
@@ -26,7 +26,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class AtmosProducerDelTest extends AtmosTestSupport {
 
     public AtmosProducerDelTest() throws Exception { }
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetFolderTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetFolderTest.java
index 657db68..98b2f6e 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetFolderTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetFolderTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class AtmosProducerGetFolderTest extends AtmosTestSupport {
 
     public AtmosProducerGetFolderTest() throws Exception { }
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetSingleTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetSingleTest.java
index b652cc0..0fd3eb8 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetSingleTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetSingleTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class AtmosProducerGetSingleTest extends AtmosTestSupport {
 
     public AtmosProducerGetSingleTest() throws Exception { }
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerMoveTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerMoveTest.java
index 6e495fd..9cc9beb 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerMoveTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerMoveTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class AtmosProducerMoveTest extends AtmosTestSupport {
 
     public AtmosProducerMoveTest() throws Exception { }
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutFolderWithRemotePathTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutFolderWithRemotePathTest.java
index d62e078..59e50d5 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutFolderWithRemotePathTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutFolderWithRemotePathTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.atmos.integration.producer;
 
-
 import java.util.List;
 
 import org.apache.camel.Exchange;
@@ -27,7 +26,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class AtmosProducerPutFolderWithRemotePathTest extends AtmosTestSupport {
 
     public AtmosProducerPutFolderWithRemotePathTest() throws Exception { }
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileTest.java
index a0c13ae..dc8dc0b 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class AtmosProducerPutSingleFileTest extends AtmosTestSupport {
 
     public AtmosProducerPutSingleFileTest() throws Exception { }
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileWithRemotePathTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileWithRemotePathTest.java
index 9f99546..19da018 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileWithRemotePathTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileWithRemotePathTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class AtmosProducerPutSingleFileWithRemotePathTest extends AtmosTestSupport {
 
     public AtmosProducerPutSingleFileWithRemotePathTest() throws Exception { }
diff --git a/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/CamelWebSocketServlet.java b/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/CamelWebSocketServlet.java
index 46b2bec..01bacdf 100644
--- a/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/CamelWebSocketServlet.java
+++ b/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/CamelWebSocketServlet.java
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 import java.util.Map;
+
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
diff --git a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/MemoryWebSocketStoreTest.java b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/MemoryWebSocketStoreTest.java
index 097aa13..e4042e2 100644
--- a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/MemoryWebSocketStoreTest.java
+++ b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/MemoryWebSocketStoreTest.java
@@ -23,7 +23,6 @@
 import org.junit.Test;
 import org.mockito.Mockito;
 
-
 public class MemoryWebSocketStoreTest extends Assert {
     
     @Test
diff --git a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteWithInitParamTest.java b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteWithInitParamTest.java
index 538cf11..acb4ecf 100644
--- a/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteWithInitParamTest.java
+++ b/components/camel-atmosphere-websocket/src/test/java/org/apache/camel/component/atmosphere/websocket/WebsocketRouteWithInitParamTest.java
@@ -24,7 +24,6 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-
 import org.junit.Test;
 
 public class WebsocketRouteWithInitParamTest extends WebsocketCamelRouterWithInitParamTestSupport {
diff --git a/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomEntryPollingConsumerWithBasicAuthTest.java b/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomEntryPollingConsumerWithBasicAuthTest.java
index 3ed62cd..27d3633 100644
--- a/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomEntryPollingConsumerWithBasicAuthTest.java
+++ b/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomEntryPollingConsumerWithBasicAuthTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.atom;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerWithBasicAuthTest.java b/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerWithBasicAuthTest.java
index 45c2590..9edbe71 100644
--- a/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerWithBasicAuthTest.java
+++ b/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerWithBasicAuthTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.atom;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomProducerTest.java b/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomProducerTest.java
index 89d846d..f1c4d33 100644
--- a/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomProducerTest.java
+++ b/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomProducerTest.java
@@ -19,7 +19,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 /**
  * Unit test for AtomProducer.
  */
diff --git a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/AbstractAtomixClientEndpoint.java b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/AbstractAtomixClientEndpoint.java
index f1750e6..4556f08 100644
--- a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/AbstractAtomixClientEndpoint.java
+++ b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/AbstractAtomixClientEndpoint.java
@@ -26,7 +26,6 @@
 import org.apache.camel.support.DefaultEndpoint;
 import org.apache.camel.util.ObjectHelper;
 
-
 public abstract class AbstractAtomixClientEndpoint<T extends AbstractAtomixClientComponent, C extends AtomixClientConfiguration> extends DefaultEndpoint {
     @UriPath(description = "The distributed resource name")
     @Metadata(required = true)
diff --git a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/map/AtomixMapEndpoint.java b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/map/AtomixMapEndpoint.java
index 99fab81..30cd724 100644
--- a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/map/AtomixMapEndpoint.java
+++ b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/map/AtomixMapEndpoint.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.atomix.client.map;
 
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/messaging/AtomixMessagingEndpoint.java b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/messaging/AtomixMessagingEndpoint.java
index d0674e9..ac71440 100644
--- a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/messaging/AtomixMessagingEndpoint.java
+++ b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/messaging/AtomixMessagingEndpoint.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.atomix.client.messaging;
 
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/multimap/AtomixMultiMapEndpoint.java b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/multimap/AtomixMultiMapEndpoint.java
index 0a0de4a..818a887 100644
--- a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/multimap/AtomixMultiMapEndpoint.java
+++ b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/multimap/AtomixMultiMapEndpoint.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.atomix.client.multimap;
 
-
 import org.apache.camel.Producer;
 import org.apache.camel.component.atomix.client.AbstractAtomixClientEndpoint;
 import org.apache.camel.spi.UriEndpoint;
diff --git a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/queue/AtomixQueueEndpoint.java b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/queue/AtomixQueueEndpoint.java
index 21fe107..b89cc58 100644
--- a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/queue/AtomixQueueEndpoint.java
+++ b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/queue/AtomixQueueEndpoint.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.atomix.client.queue;
 
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/set/AtomixSetEndpoint.java b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/set/AtomixSetEndpoint.java
index 4a95a37..072780c 100644
--- a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/set/AtomixSetEndpoint.java
+++ b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/set/AtomixSetEndpoint.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.atomix.client.set;
 
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/value/AtomixValueEndpoint.java b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/value/AtomixValueEndpoint.java
index 804404f..f25b95c 100644
--- a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/value/AtomixValueEndpoint.java
+++ b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/client/value/AtomixValueEndpoint.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.atomix.client.value;
 
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/map/AtomixMapConsumerTest.java b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/map/AtomixMapConsumerTest.java
index 8c2fa20..fb88aa6f 100644
--- a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/map/AtomixMapConsumerTest.java
+++ b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/map/AtomixMapConsumerTest.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 package org.apache.camel.component.atomix.client.map;
+
 import java.util.Collections;
 import java.util.Map;
 import java.util.UUID;
 
 import io.atomix.collections.DistributedMap;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Component;
 import org.apache.camel.RoutesBuilder;
diff --git a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/map/AtomixMapNodesProducerTest.java b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/map/AtomixMapNodesProducerTest.java
index f0b268b..b43fb18 100644
--- a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/map/AtomixMapNodesProducerTest.java
+++ b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/map/AtomixMapNodesProducerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.atomix.client.map;
+
 import java.util.Collections;
 import java.util.Map;
 import java.util.UUID;
diff --git a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/map/AtomixMapProducerTest.java b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/map/AtomixMapProducerTest.java
index f8d7552..2c4074bd 100644
--- a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/map/AtomixMapProducerTest.java
+++ b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/map/AtomixMapProducerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.atomix.client.map;
+
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
diff --git a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/messaging/AtomixMessagingTest.java b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/messaging/AtomixMessagingTest.java
index 283e4fe..61818a9 100644
--- a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/messaging/AtomixMessagingTest.java
+++ b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/messaging/AtomixMessagingTest.java
@@ -30,7 +30,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class AtomixMessagingTest extends AtomixClientTestSupport {
     private static final String NODE_NAME = UUID.randomUUID().toString();
 
diff --git a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/multimap/AtomixMultiMapProducerTest.java b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/multimap/AtomixMultiMapProducerTest.java
index d245c65..49ac0ad 100644
--- a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/multimap/AtomixMultiMapProducerTest.java
+++ b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/multimap/AtomixMultiMapProducerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.atomix.client.multimap;
+
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
diff --git a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/queue/AtomixQueueConsumerTest.java b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/queue/AtomixQueueConsumerTest.java
index 64ca52a..8f08cef 100644
--- a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/queue/AtomixQueueConsumerTest.java
+++ b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/queue/AtomixQueueConsumerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.atomix.client.queue;
+
 import java.util.Collections;
 import java.util.Map;
 import java.util.UUID;
diff --git a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/queue/AtomixQueueProducerTest.java b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/queue/AtomixQueueProducerTest.java
index f997c2d..2ded4a6 100644
--- a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/queue/AtomixQueueProducerTest.java
+++ b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/queue/AtomixQueueProducerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.atomix.client.queue;
+
 import java.util.Collections;
 import java.util.Map;
 import java.util.UUID;
diff --git a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/set/AtomixSetConsumerTest.java b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/set/AtomixSetConsumerTest.java
index cfd7168..85d6a33 100644
--- a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/set/AtomixSetConsumerTest.java
+++ b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/set/AtomixSetConsumerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.atomix.client.set;
+
 import java.util.Collections;
 import java.util.Map;
 import java.util.UUID;
diff --git a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/set/AtomixSetProducerTest.java b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/set/AtomixSetProducerTest.java
index b59fcd5..3977e6e 100644
--- a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/set/AtomixSetProducerTest.java
+++ b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/set/AtomixSetProducerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.atomix.client.set;
+
 import java.util.Collections;
 import java.util.Map;
 import java.util.UUID;
diff --git a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/value/AtomixValueConsumerTest.java b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/value/AtomixValueConsumerTest.java
index ab390dd..3efc45f 100644
--- a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/value/AtomixValueConsumerTest.java
+++ b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/value/AtomixValueConsumerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.atomix.client.value;
+
 import java.util.Collections;
 import java.util.Map;
 import java.util.UUID;
diff --git a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/value/AtomixValueProducerTest.java b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/value/AtomixValueProducerTest.java
index 9593493..770476b 100644
--- a/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/value/AtomixValueProducerTest.java
+++ b/components/camel-atomix/src/test/java/org/apache/camel/component/atomix/client/value/AtomixValueProducerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.atomix.client.value;
+
 import java.util.Collections;
 import java.util.Map;
 import java.util.UUID;
diff --git a/components/camel-attachments/src/main/java/org/apache/camel/attachment/AttachmentMessage.java b/components/camel-attachments/src/main/java/org/apache/camel/attachment/AttachmentMessage.java
index dd89b35..e653935 100644
--- a/components/camel-attachments/src/main/java/org/apache/camel/attachment/AttachmentMessage.java
+++ b/components/camel-attachments/src/main/java/org/apache/camel/attachment/AttachmentMessage.java
@@ -18,6 +18,7 @@
 
 import java.util.Map;
 import java.util.Set;
+
 import javax.activation.DataHandler;
 
 import org.apache.camel.Message;
diff --git a/components/camel-attachments/src/test/java/org/apache/camel/attachment/BodyAndHeaderConvertTest.java b/components/camel-attachments/src/test/java/org/apache/camel/attachment/BodyAndHeaderConvertTest.java
index 640b78a..53265e4 100644
--- a/components/camel-attachments/src/test/java/org/apache/camel/attachment/BodyAndHeaderConvertTest.java
+++ b/components/camel-attachments/src/test/java/org/apache/camel/attachment/BodyAndHeaderConvertTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.attachment;
 
 import java.net.URL;
+
 import javax.activation.DataHandler;
 import javax.activation.URLDataSource;
 
diff --git a/components/camel-attachments/src/test/java/org/apache/camel/attachment/MessageWithAttachmentRedeliveryIssueTest.java b/components/camel-attachments/src/test/java/org/apache/camel/attachment/MessageWithAttachmentRedeliveryIssueTest.java
index c72c851..f15308f 100644
--- a/components/camel-attachments/src/test/java/org/apache/camel/attachment/MessageWithAttachmentRedeliveryIssueTest.java
+++ b/components/camel-attachments/src/test/java/org/apache/camel/attachment/MessageWithAttachmentRedeliveryIssueTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.attachment;
 
 import java.io.File;
+
 import javax.activation.DataHandler;
 import javax.activation.FileDataSource;
 
diff --git a/components/camel-avro/src/main/java/org/apache/camel/component/avro/AvroListener.java b/components/camel-avro/src/main/java/org/apache/camel/component/avro/AvroListener.java
index d259c58..793f14c 100644
--- a/components/camel-avro/src/main/java/org/apache/camel/component/avro/AvroListener.java
+++ b/components/camel-avro/src/main/java/org/apache/camel/component/avro/AvroListener.java
@@ -35,7 +35,6 @@
 import static org.apache.camel.component.avro.AvroConstants.AVRO_HTTP_TRANSPORT;
 import static org.apache.camel.component.avro.AvroConstants.AVRO_NETTY_TRANSPORT;
 
-
 /**
  * This class holds server that listen to given protocol:host:port combination and dispatches messages to
  * different routes mapped.
diff --git a/components/camel-avro/src/main/java/org/apache/camel/component/avro/AvroProducer.java b/components/camel-avro/src/main/java/org/apache/camel/component/avro/AvroProducer.java
index d062f1d..62b24e9 100644
--- a/components/camel-avro/src/main/java/org/apache/camel/component/avro/AvroProducer.java
+++ b/components/camel-avro/src/main/java/org/apache/camel/component/avro/AvroProducer.java
@@ -25,7 +25,6 @@
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.apache.commons.lang3.StringUtils;
 
-
 public abstract class AvroProducer extends DefaultAsyncProducer {
 
     Transceiver transceiver;
diff --git a/components/camel-avro/src/test/java/org/apache/camel/component/avro/AvroNettySpringProducerTest.java b/components/camel-avro/src/test/java/org/apache/camel/component/avro/AvroNettySpringProducerTest.java
index 95077ff..1b3d7d5 100644
--- a/components/camel-avro/src/test/java/org/apache/camel/component/avro/AvroNettySpringProducerTest.java
+++ b/components/camel-avro/src/test/java/org/apache/camel/component/avro/AvroNettySpringProducerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.avro;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.spring.SpringCamelContext;
 import org.apache.camel.util.IOHelper;
diff --git a/components/camel-avro/src/test/java/org/apache/camel/dataformat/avro/AvroGenericMarshaAndUnmarshaTest.java b/components/camel-avro/src/test/java/org/apache/camel/dataformat/avro/AvroGenericMarshaAndUnmarshaTest.java
index b1e98bd..04b77d3 100644
--- a/components/camel-avro/src/test/java/org/apache/camel/dataformat/avro/AvroGenericMarshaAndUnmarshaTest.java
+++ b/components/camel-avro/src/test/java/org/apache/camel/dataformat/avro/AvroGenericMarshaAndUnmarshaTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.avro;
+
 import java.io.File;
 import java.io.IOException;
 
@@ -27,7 +28,6 @@
 import org.junit.Before;
 import org.junit.Test;
 
-
 public class AvroGenericMarshaAndUnmarshaTest extends CamelTestSupport {
 
     private Schema schema;
diff --git a/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwComponent.java b/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwComponent.java
index c391918..bced4d9 100644
--- a/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwComponent.java
+++ b/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
@@ -129,4 +128,4 @@
             configuration.setAmazonCwClient(clients.stream().findFirst().get());
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwComponentVerifierExtension.java b/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwComponentVerifierExtension.java
index cb0a9bd..48f40d1 100644
--- a/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwComponentVerifierExtension.java
+++ b/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwComponentVerifierExtension.java
@@ -26,7 +26,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
 import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwConfiguration.java b/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwConfiguration.java
index 9aed890..76a57b0 100644
--- a/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwConfiguration.java
+++ b/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwConfiguration.java
@@ -20,7 +20,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
@@ -199,4 +198,4 @@
             throw new RuntimeCamelException(e);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwEndpoint.java b/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwEndpoint.java
index f70800a..1a7239f 100644
--- a/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwEndpoint.java
+++ b/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwEndpoint.java
@@ -24,7 +24,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.cloudwatch.AmazonCloudWatch;
 import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwProducer.java b/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwProducer.java
index 5079a52..28b6ae0 100644
--- a/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwProducer.java
+++ b/components/camel-aws-cw/src/main/java/org/apache/camel/component/aws/cw/CwProducer.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.aws.cw;
 
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -150,4 +149,4 @@
     public CwEndpoint getEndpoint() {
         return (CwEndpoint) super.getEndpoint();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/CwComponentConfigurationTest.java b/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/CwComponentConfigurationTest.java
index e4a1558..05a3ac1 100644
--- a/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/CwComponentConfigurationTest.java
+++ b/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/CwComponentConfigurationTest.java
@@ -21,7 +21,6 @@
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
@@ -107,4 +106,4 @@
         assertEquals(new Integer(9000), endpoint.getConfiguration().getProxyPort());
         assertEquals(Protocol.HTTPS, endpoint.getConfiguration().getProxyProtocol());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/CwComponentRegistryClientTest.java b/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/CwComponentRegistryClientTest.java
index 065b63d..24754ea 100644
--- a/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/CwComponentRegistryClientTest.java
+++ b/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/CwComponentRegistryClientTest.java
@@ -19,7 +19,6 @@
 import java.util.Date;
 
 import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
@@ -51,4 +50,4 @@
         CwComponent component = new CwComponent(context);
         CwEndpoint endpoint = (CwEndpoint)component.createEndpoint("aws-cw://camel.apache.org/test");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/CwComponentTest.java b/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/CwComponentTest.java
index 4b1f8de..03dc265 100644
--- a/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/CwComponentTest.java
+++ b/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/CwComponentTest.java
@@ -26,7 +26,6 @@
 import com.amazonaws.services.cloudwatch.model.MetricDatum;
 import com.amazonaws.services.cloudwatch.model.PutMetricDataRequest;
 import com.amazonaws.services.cloudwatch.model.StandardUnit;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
diff --git a/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/integration/CwComponentIntegrationTest.java b/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/integration/CwComponentIntegrationTest.java
index 6b9d3c3..bceed8f 100644
--- a/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/integration/CwComponentIntegrationTest.java
+++ b/components/camel-aws-cw/src/test/java/org/apache/camel/component/aws/cw/integration/CwComponentIntegrationTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.aws.cw.integration;
 
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
@@ -28,7 +27,6 @@
 import org.junit.Ignore;
 import org.junit.Test;
 
-
 @Ignore("Must be manually tested. Provide your own accessKey and secretKey!")
 public class CwComponentIntegrationTest extends CamelTestSupport {
 
@@ -61,4 +59,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/AbstractDdbCommand.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/AbstractDdbCommand.java
index 5d4f4f6..02e8fa6 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/AbstractDdbCommand.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/AbstractDdbCommand.java
@@ -93,4 +93,4 @@
     protected Boolean determineConsistentRead() {
         return exchange.getIn().getHeader(DdbConstants.CONSISTENT_READ, configuration.isConsistentRead(), Boolean.class);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/BatchGetItemsCommand.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/BatchGetItemsCommand.java
index 3ba036e..7c93f78 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/BatchGetItemsCommand.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/BatchGetItemsCommand.java
@@ -23,7 +23,6 @@
 import com.amazonaws.services.dynamodbv2.model.BatchGetItemRequest;
 import com.amazonaws.services.dynamodbv2.model.BatchGetItemResult;
 import com.amazonaws.services.dynamodbv2.model.KeysAndAttributes;
-
 import org.apache.camel.Exchange;
 
 public class BatchGetItemsCommand extends AbstractDdbCommand {
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbComponent.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbComponent.java
index c2a8c79..7039f7a 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbComponent.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
@@ -129,4 +128,4 @@
             configuration.setAmazonDDBClient(clients.stream().findFirst().get());
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbComponentVerifierExtension.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbComponentVerifierExtension.java
index 874a847..9ee60ac 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbComponentVerifierExtension.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbComponentVerifierExtension.java
@@ -26,7 +26,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbConfiguration.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbConfiguration.java
index 4c7027a..4a8c3d4 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbConfiguration.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbEndpoint.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbEndpoint.java
index fa9867a..d691148 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbEndpoint.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DdbEndpoint.java
@@ -32,7 +32,6 @@
 import com.amazonaws.services.dynamodbv2.model.ResourceNotFoundException;
 import com.amazonaws.services.dynamodbv2.model.TableDescription;
 import com.amazonaws.services.dynamodbv2.model.TableStatus;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DeleteItemCommand.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DeleteItemCommand.java
index 2c616f5..140b2d6 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DeleteItemCommand.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DeleteItemCommand.java
@@ -19,7 +19,6 @@
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
 import com.amazonaws.services.dynamodbv2.model.DeleteItemRequest;
 import com.amazonaws.services.dynamodbv2.model.DeleteItemResult;
-
 import org.apache.camel.Exchange;
 
 public class DeleteItemCommand extends AbstractDdbCommand {
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DescribeTableCommand.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DescribeTableCommand.java
index c16533d..a6e6b64 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DescribeTableCommand.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/DescribeTableCommand.java
@@ -19,7 +19,6 @@
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
 import com.amazonaws.services.dynamodbv2.model.DescribeTableRequest;
 import com.amazonaws.services.dynamodbv2.model.DescribeTableResult;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/GetItemCommand.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/GetItemCommand.java
index 670e157..f023d86 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/GetItemCommand.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/GetItemCommand.java
@@ -19,7 +19,6 @@
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
 import com.amazonaws.services.dynamodbv2.model.GetItemRequest;
 import com.amazonaws.services.dynamodbv2.model.GetItemResult;
-
 import org.apache.camel.Exchange;
 
 public class GetItemCommand extends AbstractDdbCommand {
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/PutItemCommand.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/PutItemCommand.java
index b0012bd..560565a 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/PutItemCommand.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/PutItemCommand.java
@@ -19,7 +19,6 @@
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
 import com.amazonaws.services.dynamodbv2.model.PutItemRequest;
 import com.amazonaws.services.dynamodbv2.model.PutItemResult;
-
 import org.apache.camel.Exchange;
 
 public class PutItemCommand extends AbstractDdbCommand {
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/QueryCommand.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/QueryCommand.java
index df41e7b..dbeba63 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/QueryCommand.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/QueryCommand.java
@@ -23,7 +23,6 @@
 import com.amazonaws.services.dynamodbv2.model.AttributeValue;
 import com.amazonaws.services.dynamodbv2.model.QueryRequest;
 import com.amazonaws.services.dynamodbv2.model.QueryResult;
-
 import org.apache.camel.Exchange;
 
 public class QueryCommand extends AbstractDdbCommand {
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/ScanCommand.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/ScanCommand.java
index f9a04d3..672e8a4 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/ScanCommand.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/ScanCommand.java
@@ -23,7 +23,6 @@
 import com.amazonaws.services.dynamodbv2.model.Condition;
 import com.amazonaws.services.dynamodbv2.model.ScanRequest;
 import com.amazonaws.services.dynamodbv2.model.ScanResult;
-
 import org.apache.camel.Exchange;
 
 public class ScanCommand extends AbstractDdbCommand {
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/UpdateItemCommand.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/UpdateItemCommand.java
index d394992..4b015d3 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/UpdateItemCommand.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/UpdateItemCommand.java
@@ -22,7 +22,6 @@
 import com.amazonaws.services.dynamodbv2.model.AttributeValueUpdate;
 import com.amazonaws.services.dynamodbv2.model.UpdateItemRequest;
 import com.amazonaws.services.dynamodbv2.model.UpdateItemResult;
-
 import org.apache.camel.Exchange;
 
 public class UpdateItemCommand extends AbstractDdbCommand {
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/UpdateTableCommand.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/UpdateTableCommand.java
index 7891000..2172a5d 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/UpdateTableCommand.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddb/UpdateTableCommand.java
@@ -19,7 +19,6 @@
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
 import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput;
 import com.amazonaws.services.dynamodbv2.model.UpdateTableRequest;
-
 import org.apache.camel.Exchange;
 
 public class UpdateTableCommand extends AbstractDdbCommand {
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamComponent.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamComponent.java
index b8f41da..39ac7c5 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamComponent.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDBStreams;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamComponentVerifierExtension.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamComponentVerifierExtension.java
index bdf3d51..cef3ca6 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamComponentVerifierExtension.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamComponentVerifierExtension.java
@@ -27,7 +27,6 @@
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDBStreams;
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDBStreamsClientBuilder;
 import com.amazonaws.services.dynamodbv2.model.ListStreamsRequest;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamConfiguration.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamConfiguration.java
index 36b3514..92af2f0 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamConfiguration.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamConfiguration.java
@@ -19,7 +19,6 @@
 import com.amazonaws.Protocol;
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDBStreams;
 import com.amazonaws.services.dynamodbv2.model.ShardIteratorType;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamEndpoint.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamEndpoint.java
index 02aa8ec..b09f897 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamEndpoint.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/DdbStreamEndpoint.java
@@ -25,7 +25,6 @@
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDBStreams;
 import com.amazonaws.services.dynamodbv2.AmazonDynamoDBStreamsClientBuilder;
 import com.amazonaws.services.dynamodbv2.model.Record;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/AmazonDDBClientMock.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/AmazonDDBClientMock.java
index 7e65fbf..bc7a035 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/AmazonDDBClientMock.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/AmazonDDBClientMock.java
@@ -54,7 +54,6 @@
 import com.amazonaws.services.dynamodbv2.model.UpdateTableRequest;
 import com.amazonaws.services.dynamodbv2.model.UpdateTableResult;
 
-
 public class AmazonDDBClientMock extends AbstractAmazonDynamoDB {
     public static final long NOW = 1327709390233L;
     DescribeTableRequest describeTableRequest;
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/BatchGetItemsCommandTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/BatchGetItemsCommandTest.java
index f2237d1..5a40121 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/BatchGetItemsCommandTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/BatchGetItemsCommandTest.java
@@ -22,12 +22,12 @@
 
 import com.amazonaws.services.dynamodbv2.model.AttributeValue;
 import com.amazonaws.services.dynamodbv2.model.KeysAndAttributes;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 public class BatchGetItemsCommandTest {
@@ -71,4 +71,4 @@
         assertEquals(new AttributeValue("attrValue"), value);
         assertEquals(unprocessedKey, next);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DdbComponentConfigurationTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DdbComponentConfigurationTest.java
index 4dbb0c9..9d37410 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DdbComponentConfigurationTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DdbComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
@@ -65,4 +64,4 @@
         assertEquals(Protocol.HTTP, endpoint.getConfiguration().getProxyProtocol());
     }
     
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DeleteItemCommandTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DeleteItemCommandTest.java
index 9bf19ca..df315b9 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DeleteItemCommandTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DeleteItemCommandTest.java
@@ -21,12 +21,12 @@
 
 import com.amazonaws.services.dynamodbv2.model.AttributeValue;
 import com.amazonaws.services.dynamodbv2.model.ExpectedAttributeValue;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 public class DeleteItemCommandTest {
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DeleteTableCommandTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DeleteTableCommandTest.java
index b120379..63fd070 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DeleteTableCommandTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DeleteTableCommandTest.java
@@ -22,12 +22,12 @@
 import com.amazonaws.services.dynamodbv2.model.KeySchemaElement;
 import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughputDescription;
 import com.amazonaws.services.dynamodbv2.model.TableStatus;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 public class DeleteTableCommandTest {
@@ -61,4 +61,4 @@
         assertEquals(Long.valueOf(20L), exchange.getIn().getHeader(DdbConstants.TABLE_SIZE, Long.class));
         assertEquals(TableStatus.ACTIVE, exchange.getIn().getHeader(DdbConstants.TABLE_STATUS, TableStatus.class));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DescribeTableCommandTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DescribeTableCommandTest.java
index 6e05cee..af8a81c 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DescribeTableCommandTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/DescribeTableCommandTest.java
@@ -21,12 +21,12 @@
 import java.util.List;
 
 import com.amazonaws.services.dynamodbv2.model.KeySchemaElement;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 public class DescribeTableCommandTest {
@@ -61,4 +61,4 @@
         assertEquals(10L, exchange.getIn().getHeader(DdbConstants.WRITE_CAPACITY));
         assertEquals(1000L, exchange.getIn().getHeader(DdbConstants.TABLE_SIZE));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/GetItemCommandTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/GetItemCommandTest.java
index 1cb5043..fe82447 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/GetItemCommandTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/GetItemCommandTest.java
@@ -22,12 +22,12 @@
 import java.util.Map;
 
 import com.amazonaws.services.dynamodbv2.model.AttributeValue;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 public class GetItemCommandTest {
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/PutItemCommandTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/PutItemCommandTest.java
index d62a0d8..d37e2ed 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/PutItemCommandTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/PutItemCommandTest.java
@@ -21,12 +21,12 @@
 
 import com.amazonaws.services.dynamodbv2.model.AttributeValue;
 import com.amazonaws.services.dynamodbv2.model.ExpectedAttributeValue;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 public class PutItemCommandTest {
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/QueryCommandTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/QueryCommandTest.java
index 19b4983..1925fba 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/QueryCommandTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/QueryCommandTest.java
@@ -25,12 +25,12 @@
 import com.amazonaws.services.dynamodbv2.model.ComparisonOperator;
 import com.amazonaws.services.dynamodbv2.model.Condition;
 import com.amazonaws.services.dynamodbv2.model.ConsumedCapacity;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 public class QueryCommandTest {
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/ScanCommandTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/ScanCommandTest.java
index 4190677..6e08867 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/ScanCommandTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/ScanCommandTest.java
@@ -24,12 +24,12 @@
 import com.amazonaws.services.dynamodbv2.model.ComparisonOperator;
 import com.amazonaws.services.dynamodbv2.model.Condition;
 import com.amazonaws.services.dynamodbv2.model.ConsumedCapacity;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 public class ScanCommandTest {
@@ -72,4 +72,4 @@
         Map<?, ?> items = (Map<?, ?>) exchange.getIn().getHeader(DdbConstants.ITEMS, List.class).get(0);
         assertEquals(new AttributeValue("attrValue"), items.get("attrName"));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/UpdateItemCommandTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/UpdateItemCommandTest.java
index 7e1d174..76498e7 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/UpdateItemCommandTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/UpdateItemCommandTest.java
@@ -23,12 +23,12 @@
 import com.amazonaws.services.dynamodbv2.model.AttributeValue;
 import com.amazonaws.services.dynamodbv2.model.AttributeValueUpdate;
 import com.amazonaws.services.dynamodbv2.model.ExpectedAttributeValue;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 public class UpdateItemCommandTest {
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/UpdateTableCommandTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/UpdateTableCommandTest.java
index 01f5387..b768bfa 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/UpdateTableCommandTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/UpdateTableCommandTest.java
@@ -19,7 +19,6 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
-
 import org.junit.Before;
 import org.junit.Test;
 
@@ -52,4 +51,4 @@
         assertEquals(Long.valueOf(20), ddbClient.updateTableRequest.getProvisionedThroughput().getReadCapacityUnits());
         assertEquals(Long.valueOf(30), ddbClient.updateTableRequest.getProvisionedThroughput().getWriteCapacityUnits());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/integration/DdbComponentIntegrationTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/integration/DdbComponentIntegrationTest.java
index 56b680d..06fa004 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/integration/DdbComponentIntegrationTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddb/integration/DdbComponentIntegrationTest.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.dynamodbv2.model.AttributeValue;
 import com.amazonaws.services.dynamodbv2.model.ExpectedAttributeValue;
@@ -32,7 +33,6 @@
 import org.junit.Ignore;
 import org.junit.Test;
 
-
 @Ignore("Must be manually tested. Provide your own credentials below!")
 public class DdbComponentIntegrationTest extends CamelTestSupport {
 
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/DdbStreamComponentConfigurationTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/DdbStreamComponentConfigurationTest.java
index 774c562..17074aa 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/DdbStreamComponentConfigurationTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/DdbStreamComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.component.aws.ddb.DdbComponent;
 import org.apache.camel.component.aws.ddb.DdbEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
@@ -77,4 +76,4 @@
         assertEquals(Protocol.HTTP, endpoint.getConfiguration().getProxyProtocol());
     }
     
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/DdbStreamConsumerTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/DdbStreamConsumerTest.java
index 3752acf..3734583 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/DdbStreamConsumerTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/DdbStreamConsumerTest.java
@@ -204,4 +204,4 @@
                     .withNextShardIterator(nextShardIterator);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/DdbStreamEndpointTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/DdbStreamEndpointTest.java
index 747e6c2..d4c5dae 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/DdbStreamEndpointTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/DdbStreamEndpointTest.java
@@ -100,4 +100,4 @@
 
         undertest.getSequenceNumber();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/ShardIteratorHandlerTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/ShardIteratorHandlerTest.java
index e025abe..67f0d12 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/ShardIteratorHandlerTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/ShardIteratorHandlerTest.java
@@ -187,4 +187,4 @@
         assertThat(getIteratorCaptor.getValue().getShardIteratorType(), is(ShardIteratorType.AFTER_SEQUENCE_NUMBER.name()));
         assertThat(getIteratorCaptor.getValue().getSequenceNumber(), is("12"));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/ShardListTest.java b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/ShardListTest.java
index 78e475f..c243d61 100644
--- a/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/ShardListTest.java
+++ b/components/camel-aws-ddb/src/test/java/org/apache/camel/component/aws/ddbstream/ShardListTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.aws.ddbstream;
 
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -149,4 +148,4 @@
         }
         return result;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Component.java b/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Component.java
index e3514cc..b5c060d 100644
--- a/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Component.java
+++ b/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Component.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.ec2.AmazonEC2;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2ComponentVerifierExtension.java b/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2ComponentVerifierExtension.java
index efb6548..a78dec3 100644
--- a/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2ComponentVerifierExtension.java
+++ b/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2ComponentVerifierExtension.java
@@ -26,7 +26,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.ec2.AmazonEC2;
 import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Configuration.java b/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Configuration.java
index ae4aa1e..9ae613a 100644
--- a/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Configuration.java
+++ b/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Configuration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.ec2.AmazonEC2;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Endpoint.java b/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Endpoint.java
index 0c73f78..61a09e8 100644
--- a/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Endpoint.java
+++ b/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Endpoint.java
@@ -25,7 +25,6 @@
 import com.amazonaws.services.ec2.AmazonEC2;
 import com.amazonaws.services.ec2.AmazonEC2Client;
 import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java b/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java
index 9a21522a..c9f3050 100644
--- a/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java
+++ b/components/camel-aws-ec2/src/main/java/org/apache/camel/component/aws/ec2/EC2Producer.java
@@ -44,7 +44,6 @@
 import com.amazonaws.services.ec2.model.TerminateInstancesResult;
 import com.amazonaws.services.ec2.model.UnmonitorInstancesRequest;
 import com.amazonaws.services.ec2.model.UnmonitorInstancesResult;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -425,4 +424,4 @@
         }
         return exchange.getIn();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java b/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java
index 410eae8..9bf3d9c 100644
--- a/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java
+++ b/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/AmazonEC2ClientMock.java
@@ -55,7 +55,6 @@
 import com.amazonaws.services.ec2.model.TerminateInstancesResult;
 import com.amazonaws.services.ec2.model.UnmonitorInstancesRequest;
 import com.amazonaws.services.ec2.model.UnmonitorInstancesResult;
-
 import org.apache.camel.util.ObjectHelper;
 
 public class AmazonEC2ClientMock extends AbstractAmazonEC2 {
@@ -307,4 +306,4 @@
     public DeleteTagsResult deleteTags(DeleteTagsRequest deleteTagsRequest) {
         return new DeleteTagsResult();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentConfigurationTest.java b/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentConfigurationTest.java
index 2816520..cdffaa7 100644
--- a/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentConfigurationTest.java
+++ b/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentConfigurationTest.java
@@ -19,7 +19,6 @@
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.ec2.AmazonEC2Client;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest.java b/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest.java
index 2894746..27c1be5 100644
--- a/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest.java
+++ b/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/EC2ComponentSpringTest.java
@@ -30,7 +30,6 @@
 import com.amazonaws.services.ec2.model.StopInstancesResult;
 import com.amazonaws.services.ec2.model.TerminateInstancesResult;
 import com.amazonaws.services.ec2.model.UnmonitorInstancesResult;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
diff --git a/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java b/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java
index 74d00e7..f4a8660 100644
--- a/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java
+++ b/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/EC2ProducerTest.java
@@ -32,7 +32,6 @@
 import com.amazonaws.services.ec2.model.StopInstancesResult;
 import com.amazonaws.services.ec2.model.TerminateInstancesResult;
 import com.amazonaws.services.ec2.model.UnmonitorInstancesResult;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
@@ -529,4 +528,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/integration/EC2ComponentIntegrationTest.java b/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/integration/EC2ComponentIntegrationTest.java
index 632e812..8dd301b 100644
--- a/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/integration/EC2ComponentIntegrationTest.java
+++ b/components/camel-aws-ec2/src/test/java/org/apache/camel/component/aws/ec2/integration/EC2ComponentIntegrationTest.java
@@ -20,7 +20,6 @@
 import java.util.Collection;
 
 import com.amazonaws.services.ec2.model.InstanceType;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSComponent.java b/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSComponent.java
index a4ee861..2b457ae 100644
--- a/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSComponent.java
+++ b/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.ecs.AmazonECS;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSComponentVerifierExtension.java b/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSComponentVerifierExtension.java
index c1f8c8d..8c3a0a8 100644
--- a/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSComponentVerifierExtension.java
+++ b/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSComponentVerifierExtension.java
@@ -27,7 +27,6 @@
 import com.amazonaws.services.ecs.AmazonECS;
 import com.amazonaws.services.ecs.AmazonECSClientBuilder;
 import com.amazonaws.services.ecs.model.ListClustersRequest;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSConfiguration.java b/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSConfiguration.java
index b0d400f..9277fad 100644
--- a/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSConfiguration.java
+++ b/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.ecs.AmazonECS;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSEndpoint.java b/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSEndpoint.java
index 0ed4a52..845d231 100644
--- a/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSEndpoint.java
+++ b/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSEndpoint.java
@@ -24,7 +24,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.ecs.AmazonECS;
 import com.amazonaws.services.ecs.AmazonECSClientBuilder;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSProducer.java b/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSProducer.java
index 0118e78..06e0e9d 100644
--- a/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSProducer.java
+++ b/components/camel-aws-ecs/src/main/java/org/apache/camel/component/aws/ecs/ECSProducer.java
@@ -26,7 +26,6 @@
 import com.amazonaws.services.ecs.model.DescribeClustersResult;
 import com.amazonaws.services.ecs.model.ListClustersRequest;
 import com.amazonaws.services.ecs.model.ListClustersResult;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -169,4 +168,4 @@
         }
         return exchange.getIn();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ecs/src/test/java/org/apache/camel/component/aws/ecs/ECSComponentConfigurationTest.java b/components/camel-aws-ecs/src/test/java/org/apache/camel/component/aws/ecs/ECSComponentConfigurationTest.java
index c8e0e0b..b596cd5 100644
--- a/components/camel-aws-ecs/src/test/java/org/apache/camel/component/aws/ecs/ECSComponentConfigurationTest.java
+++ b/components/camel-aws-ecs/src/test/java/org/apache/camel/component/aws/ecs/ECSComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-aws-ecs/src/test/java/org/apache/camel/component/aws/ecs/ECSProducerSpringTest.java b/components/camel-aws-ecs/src/test/java/org/apache/camel/component/aws/ecs/ECSProducerSpringTest.java
index c57b6c5..331c038 100644
--- a/components/camel-aws-ecs/src/test/java/org/apache/camel/component/aws/ecs/ECSProducerSpringTest.java
+++ b/components/camel-aws-ecs/src/test/java/org/apache/camel/component/aws/ecs/ECSProducerSpringTest.java
@@ -20,7 +20,6 @@
 import com.amazonaws.services.ecs.model.DeleteClusterResult;
 import com.amazonaws.services.ecs.model.DescribeClustersResult;
 import com.amazonaws.services.ecs.model.ListClustersResult;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-ecs/src/test/java/org/apache/camel/component/aws/ecs/ECSProducerTest.java b/components/camel-aws-ecs/src/test/java/org/apache/camel/component/aws/ecs/ECSProducerTest.java
index 5626367..7094b90 100644
--- a/components/camel-aws-ecs/src/test/java/org/apache/camel/component/aws/ecs/ECSProducerTest.java
+++ b/components/camel-aws-ecs/src/test/java/org/apache/camel/component/aws/ecs/ECSProducerTest.java
@@ -20,7 +20,6 @@
 import com.amazonaws.services.ecs.model.DeleteClusterResult;
 import com.amazonaws.services.ecs.model.DescribeClustersResult;
 import com.amazonaws.services.ecs.model.ListClustersResult;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSComponent.java b/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSComponent.java
index c0bf32b..f3710cc 100644
--- a/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSComponent.java
+++ b/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.eks.AmazonEKS;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSComponentVerifierExtension.java b/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSComponentVerifierExtension.java
index 14f83d0..6332f79 100644
--- a/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSComponentVerifierExtension.java
+++ b/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSComponentVerifierExtension.java
@@ -27,7 +27,6 @@
 import com.amazonaws.services.eks.AmazonEKS;
 import com.amazonaws.services.eks.AmazonEKSClientBuilder;
 import com.amazonaws.services.eks.model.ListClustersRequest;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSConfiguration.java b/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSConfiguration.java
index 26a6768..8ed11d2 100644
--- a/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSConfiguration.java
+++ b/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.eks.AmazonEKS;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSEndpoint.java b/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSEndpoint.java
index 510679c..42f7cd4 100644
--- a/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSEndpoint.java
+++ b/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSEndpoint.java
@@ -24,7 +24,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.eks.AmazonEKS;
 import com.amazonaws.services.eks.AmazonEKSClientBuilder;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSProducer.java b/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSProducer.java
index 1929115..d65eeba 100644
--- a/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSProducer.java
+++ b/components/camel-aws-eks/src/main/java/org/apache/camel/component/aws/eks/EKSProducer.java
@@ -27,7 +27,6 @@
 import com.amazonaws.services.eks.model.ListClustersRequest;
 import com.amazonaws.services.eks.model.ListClustersResult;
 import com.amazonaws.services.eks.model.VpcConfigRequest;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -180,4 +179,4 @@
         }
         return exchange.getIn();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-eks/src/test/java/org/apache/camel/component/aws/eks/EKSComponentConfigurationTest.java b/components/camel-aws-eks/src/test/java/org/apache/camel/component/aws/eks/EKSComponentConfigurationTest.java
index cfd43dfd..9c82089 100644
--- a/components/camel-aws-eks/src/test/java/org/apache/camel/component/aws/eks/EKSComponentConfigurationTest.java
+++ b/components/camel-aws-eks/src/test/java/org/apache/camel/component/aws/eks/EKSComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-aws-eks/src/test/java/org/apache/camel/component/aws/eks/EKSProducerSpringTest.java b/components/camel-aws-eks/src/test/java/org/apache/camel/component/aws/eks/EKSProducerSpringTest.java
index e34f0f1..cf0aa56 100644
--- a/components/camel-aws-eks/src/test/java/org/apache/camel/component/aws/eks/EKSProducerSpringTest.java
+++ b/components/camel-aws-eks/src/test/java/org/apache/camel/component/aws/eks/EKSProducerSpringTest.java
@@ -21,7 +21,6 @@
 import com.amazonaws.services.eks.model.DescribeClusterResult;
 import com.amazonaws.services.eks.model.ListClustersResult;
 import com.amazonaws.services.eks.model.VpcConfigRequest;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
@@ -114,4 +113,4 @@
     protected ClassPathXmlApplicationContext createApplicationContext() {
         return new ClassPathXmlApplicationContext("org/apache/camel/component/aws/eks/EKSComponentSpringTest-context.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-eks/src/test/java/org/apache/camel/component/aws/eks/EKSProducerTest.java b/components/camel-aws-eks/src/test/java/org/apache/camel/component/aws/eks/EKSProducerTest.java
index 4aa0fd4..eff53b6 100644
--- a/components/camel-aws-eks/src/test/java/org/apache/camel/component/aws/eks/EKSProducerTest.java
+++ b/components/camel-aws-eks/src/test/java/org/apache/camel/component/aws/eks/EKSProducerTest.java
@@ -21,7 +21,6 @@
 import com.amazonaws.services.eks.model.DescribeClusterResult;
 import com.amazonaws.services.eks.model.ListClustersResult;
 import com.amazonaws.services.eks.model.VpcConfigRequest;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
@@ -134,4 +133,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMComponent.java b/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMComponent.java
index 47f1b8e..856d99c 100644
--- a/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMComponent.java
+++ b/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMComponentVerifierExtension.java b/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMComponentVerifierExtension.java
index 7d58e39..bf690d1 100644
--- a/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMComponentVerifierExtension.java
+++ b/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMComponentVerifierExtension.java
@@ -26,7 +26,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
 import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMConfiguration.java b/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMConfiguration.java
index ee665e4..c98830d 100644
--- a/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMConfiguration.java
+++ b/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMEndpoint.java b/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMEndpoint.java
index 1106e90..b8cd550 100644
--- a/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMEndpoint.java
+++ b/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMEndpoint.java
@@ -24,7 +24,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
 import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMProducer.java b/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMProducer.java
index 2a036e7..1e0431f 100644
--- a/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMProducer.java
+++ b/components/camel-aws-iam/src/main/java/org/apache/camel/component/aws/iam/IAMProducer.java
@@ -42,7 +42,6 @@
 import com.amazonaws.services.identitymanagement.model.StatusType;
 import com.amazonaws.services.identitymanagement.model.UpdateAccessKeyRequest;
 import com.amazonaws.services.identitymanagement.model.UpdateAccessKeyResult;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-aws-iam/src/test/java/org/apache/camel/component/aws/iam/IAMComponentConfigurationTest.java b/components/camel-aws-iam/src/test/java/org/apache/camel/component/aws/iam/IAMComponentConfigurationTest.java
index 03d74af..eec6aa0 100644
--- a/components/camel-aws-iam/src/test/java/org/apache/camel/component/aws/iam/IAMComponentConfigurationTest.java
+++ b/components/camel-aws-iam/src/test/java/org/apache/camel/component/aws/iam/IAMComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-aws-iam/src/test/java/org/apache/camel/component/aws/iam/IAMProducerSpringTest.java b/components/camel-aws-iam/src/test/java/org/apache/camel/component/aws/iam/IAMProducerSpringTest.java
index 13b7c6c..4f734f5 100644
--- a/components/camel-aws-iam/src/test/java/org/apache/camel/component/aws/iam/IAMProducerSpringTest.java
+++ b/components/camel-aws-iam/src/test/java/org/apache/camel/component/aws/iam/IAMProducerSpringTest.java
@@ -30,7 +30,6 @@
 import com.amazonaws.services.identitymanagement.model.RemoveUserFromGroupResult;
 import com.amazonaws.services.identitymanagement.model.StatusType;
 import com.amazonaws.services.identitymanagement.model.UpdateAccessKeyResult;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-iam/src/test/java/org/apache/camel/component/aws/iam/IAMProducerTest.java b/components/camel-aws-iam/src/test/java/org/apache/camel/component/aws/iam/IAMProducerTest.java
index 08ae571..cc4eb52 100644
--- a/components/camel-aws-iam/src/test/java/org/apache/camel/component/aws/iam/IAMProducerTest.java
+++ b/components/camel-aws-iam/src/test/java/org/apache/camel/component/aws/iam/IAMProducerTest.java
@@ -30,7 +30,6 @@
 import com.amazonaws.services.identitymanagement.model.RemoveUserFromGroupResult;
 import com.amazonaws.services.identitymanagement.model.StatusType;
 import com.amazonaws.services.identitymanagement.model.UpdateAccessKeyResult;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseComponent.java b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseComponent.java
index 1876969..c41aeee 100644
--- a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseComponent.java
+++ b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.kinesisfirehose.AmazonKinesisFirehose;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseComponentVerifierExtension.java b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseComponentVerifierExtension.java
index 24690c0..bb197e2 100644
--- a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseComponentVerifierExtension.java
+++ b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseComponentVerifierExtension.java
@@ -27,7 +27,6 @@
 import com.amazonaws.services.kinesisfirehose.AmazonKinesisFirehose;
 import com.amazonaws.services.kinesisfirehose.AmazonKinesisFirehoseClientBuilder;
 import com.amazonaws.services.kinesisfirehose.model.ListDeliveryStreamsRequest;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseConfiguration.java b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseConfiguration.java
index fc99775..397a0ae 100644
--- a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseConfiguration.java
+++ b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.kinesisfirehose.AmazonKinesisFirehose;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseEndpoint.java b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseEndpoint.java
index 717fe90..4100253 100644
--- a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseEndpoint.java
+++ b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseEndpoint.java
@@ -24,7 +24,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.kinesisfirehose.AmazonKinesisFirehose;
 import com.amazonaws.services.kinesisfirehose.AmazonKinesisFirehoseClientBuilder;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
@@ -118,4 +117,4 @@
     public KinesisFirehoseConfiguration getConfiguration() {
         return configuration;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseProducer.java b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseProducer.java
index 474991b..fddf355 100644
--- a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseProducer.java
+++ b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/firehose/KinesisFirehoseProducer.java
@@ -65,4 +65,4 @@
         }
         return exchange.getIn();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisComponent.java b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisComponent.java
index 5428f77..d0d43f8 100644
--- a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisComponent.java
+++ b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.kinesis.AmazonKinesis;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisComponentVerifierExtension.java b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisComponentVerifierExtension.java
index 4d3abe9..8c28a25 100644
--- a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisComponentVerifierExtension.java
+++ b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisComponentVerifierExtension.java
@@ -26,7 +26,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.kinesis.AmazonKinesis;
 import com.amazonaws.services.kinesis.AmazonKinesisClientBuilder;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisConfiguration.java b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisConfiguration.java
index 78f884a..25afb05 100644
--- a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisConfiguration.java
+++ b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisConfiguration.java
@@ -19,7 +19,6 @@
 import com.amazonaws.Protocol;
 import com.amazonaws.services.kinesis.AmazonKinesis;
 import com.amazonaws.services.kinesis.model.ShardIteratorType;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisConsumer.java b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisConsumer.java
index 918c109..f836056 100644
--- a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisConsumer.java
+++ b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisConsumer.java
@@ -31,7 +31,6 @@
 import com.amazonaws.services.kinesis.model.Record;
 import com.amazonaws.services.kinesis.model.Shard;
 import com.amazonaws.services.kinesis.model.ShardIteratorType;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisEndpoint.java b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisEndpoint.java
index 38722f6..9fe8702 100644
--- a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisEndpoint.java
+++ b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/KinesisEndpoint.java
@@ -26,7 +26,6 @@
 import com.amazonaws.services.kinesis.AmazonKinesisClientBuilder;
 import com.amazonaws.services.kinesis.model.Record;
 import com.amazonaws.services.kinesis.model.ShardIteratorType;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/firehose/KinesisFirehoseComponentConfigurationTest.java b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/firehose/KinesisFirehoseComponentConfigurationTest.java
index f13d3d4..343d404 100644
--- a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/firehose/KinesisFirehoseComponentConfigurationTest.java
+++ b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/firehose/KinesisFirehoseComponentConfigurationTest.java
@@ -18,9 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
-import org.apache.camel.component.aws.kinesis.KinesisComponent;
-import org.apache.camel.component.aws.kinesis.KinesisEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
@@ -77,4 +74,4 @@
         assertEquals("localhost", endpoint.getConfiguration().getProxyHost());
         assertEquals(Integer.valueOf(9000), endpoint.getConfiguration().getProxyPort());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/firehose/integration/KinesisFirehoseComponentIntegrationTest.java b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/firehose/integration/KinesisFirehoseComponentIntegrationTest.java
index a5977a2..01ff6db 100644
--- a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/firehose/integration/KinesisFirehoseComponentIntegrationTest.java
+++ b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/firehose/integration/KinesisFirehoseComponentIntegrationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.services.kinesisfirehose.AmazonKinesisFirehose;
 import com.amazonaws.services.kinesisfirehose.AmazonKinesisFirehoseAsyncClientBuilder;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
diff --git a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisComponentConfigurationTest.java b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisComponentConfigurationTest.java
index 2105a86..a2a4d6b 100644
--- a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisComponentConfigurationTest.java
+++ b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
@@ -75,4 +74,4 @@
         assertEquals("localhost", endpoint.getConfiguration().getProxyHost());
         assertEquals(Integer.valueOf(9000), endpoint.getConfiguration().getProxyPort());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisConsumerClosedShardWithFailTest.java b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisConsumerClosedShardWithFailTest.java
index 713127c..141d762 100644
--- a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisConsumerClosedShardWithFailTest.java
+++ b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisConsumerClosedShardWithFailTest.java
@@ -29,7 +29,6 @@
 import com.amazonaws.services.kinesis.model.Shard;
 import com.amazonaws.services.kinesis.model.ShardIteratorType;
 import com.amazonaws.services.kinesis.model.StreamDescription;
-
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
diff --git a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisConsumerClosedShardWithSilentTest.java b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisConsumerClosedShardWithSilentTest.java
index 9e06c84..a7eb3e2 100644
--- a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisConsumerClosedShardWithSilentTest.java
+++ b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisConsumerClosedShardWithSilentTest.java
@@ -212,4 +212,4 @@
         assertThat(exchangeCaptor.getValue().getIn().getHeader(KinesisConstants.PARTITION_KEY, String.class), is(partitionKey));
         assertThat(exchangeCaptor.getValue().getIn().getHeader(KinesisConstants.SEQUENCE_NUMBER, String.class), is(sequenceNumber));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisConsumerTest.java b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisConsumerTest.java
index e3de94f..62b5b59 100644
--- a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisConsumerTest.java
+++ b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisConsumerTest.java
@@ -213,4 +213,4 @@
         assertThat(exchangeCaptor.getValue().getIn().getHeader(KinesisConstants.SEQUENCE_NUMBER, String.class), is(sequenceNumber));
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisProducerTest.java b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisProducerTest.java
index 017a492..b253ad8 100644
--- a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisProducerTest.java
+++ b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/KinesisProducerTest.java
@@ -113,4 +113,4 @@
         verify(outMessage).setHeader(KinesisConstants.SEQUENCE_NUMBER, SEQUENCE_NUMBER);
         verify(outMessage).setHeader(KinesisConstants.SHARD_ID, SHARD_ID);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/RecordStringConverterTest.java b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/RecordStringConverterTest.java
index cfac1be..820098a 100644
--- a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/RecordStringConverterTest.java
+++ b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/RecordStringConverterTest.java
@@ -36,4 +36,4 @@
         String result = RecordStringConverter.toString(record);
         assertThat(result, is("this is a String"));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/integration/KinesisComponentIntegrationTest.java b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/integration/KinesisComponentIntegrationTest.java
index b437455..804c683 100644
--- a/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/integration/KinesisComponentIntegrationTest.java
+++ b/components/camel-aws-kinesis/src/test/java/org/apache/camel/component/aws/kinesis/integration/KinesisComponentIntegrationTest.java
@@ -20,7 +20,6 @@
 import com.amazonaws.services.kinesis.AmazonKinesis;
 import com.amazonaws.services.kinesis.AmazonKinesisClientBuilder;
 import com.amazonaws.services.kinesis.model.Record;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSComponent.java b/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSComponent.java
index f286726..ce8fe7d 100644
--- a/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSComponent.java
+++ b/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.kms.AWSKMS;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSComponentVerifierExtension.java b/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSComponentVerifierExtension.java
index cf1c669..05e9f7a 100644
--- a/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSComponentVerifierExtension.java
+++ b/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSComponentVerifierExtension.java
@@ -26,7 +26,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.kms.AWSKMS;
 import com.amazonaws.services.kms.AWSKMSClientBuilder;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSConfiguration.java b/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSConfiguration.java
index dfbf482..91847dc 100644
--- a/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSConfiguration.java
+++ b/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.kms.AWSKMS;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSEndpoint.java b/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSEndpoint.java
index 9dd3697..039542c 100644
--- a/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSEndpoint.java
+++ b/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSEndpoint.java
@@ -24,7 +24,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.kms.AWSKMS;
 import com.amazonaws.services.kms.AWSKMSClientBuilder;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSProducer.java b/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSProducer.java
index 4cdcbdc..4247edc 100644
--- a/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSProducer.java
+++ b/components/camel-aws-kms/src/main/java/org/apache/camel/component/aws/kms/KMSProducer.java
@@ -30,7 +30,6 @@
 import com.amazonaws.services.kms.model.ListKeysResult;
 import com.amazonaws.services.kms.model.ScheduleKeyDeletionRequest;
 import com.amazonaws.services.kms.model.ScheduleKeyDeletionResult;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -227,4 +226,4 @@
         }
         return exchange.getIn();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/AmazonKMSClientMock.java b/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/AmazonKMSClientMock.java
index 00647c4..b3ae713 100644
--- a/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/AmazonKMSClientMock.java
+++ b/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/AmazonKMSClientMock.java
@@ -96,7 +96,6 @@
 import com.amazonaws.services.kms.model.UpdateKeyDescriptionRequest;
 import com.amazonaws.services.kms.model.UpdateKeyDescriptionResult;
 
-
 public class AmazonKMSClientMock extends AbstractAWSKMS {
 
     public AmazonKMSClientMock() {
diff --git a/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/KMSComponentConfigurationTest.java b/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/KMSComponentConfigurationTest.java
index 36f2c31..66e412e 100644
--- a/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/KMSComponentConfigurationTest.java
+++ b/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/KMSComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/KMSProducerSpringTest.java b/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/KMSProducerSpringTest.java
index e55c1f0..c3affef 100644
--- a/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/KMSProducerSpringTest.java
+++ b/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/KMSProducerSpringTest.java
@@ -20,7 +20,6 @@
 import com.amazonaws.services.kms.model.DescribeKeyResult;
 import com.amazonaws.services.kms.model.ListKeysResult;
 import com.amazonaws.services.kms.model.ScheduleKeyDeletionResult;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
@@ -144,4 +143,4 @@
     protected ClassPathXmlApplicationContext createApplicationContext() {
         return new ClassPathXmlApplicationContext("org/apache/camel/component/aws/kms/KMSComponentSpringTest-context.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/KMSProducerTest.java b/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/KMSProducerTest.java
index 1f483c3..0499e73 100644
--- a/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/KMSProducerTest.java
+++ b/components/camel-aws-kms/src/test/java/org/apache/camel/component/aws/kms/KMSProducerTest.java
@@ -20,7 +20,6 @@
 import com.amazonaws.services.kms.model.DescribeKeyResult;
 import com.amazonaws.services.kms.model.ListKeysResult;
 import com.amazonaws.services.kms.model.ScheduleKeyDeletionResult;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
@@ -170,4 +169,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaComponent.java b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaComponent.java
index e6ddbf5..04d0b19 100644
--- a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaComponent.java
+++ b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.lambda.AWSLambda;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaComponentVerifierExtension.java b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaComponentVerifierExtension.java
index a707a5d..135b46d 100644
--- a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaComponentVerifierExtension.java
+++ b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaComponentVerifierExtension.java
@@ -26,7 +26,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.lambda.AWSLambda;
 import com.amazonaws.services.lambda.AWSLambdaClientBuilder;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaConfiguration.java b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaConfiguration.java
index f79e2cd..86afe2a 100644
--- a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaConfiguration.java
+++ b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.lambda.AWSLambda;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
@@ -161,4 +160,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java
index 5de9b7d..3058764 100644
--- a/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java
+++ b/components/camel-aws-lambda/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java
@@ -58,7 +58,6 @@
 import com.amazonaws.services.lambda.model.UpdateFunctionCodeResult;
 import com.amazonaws.services.lambda.model.VpcConfig;
 import com.amazonaws.util.IOUtils;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java
index b1707e9..145f116 100644
--- a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java
+++ b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java
@@ -19,6 +19,7 @@
 import java.nio.*;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
+
 import com.amazonaws.AmazonServiceException;
 import com.amazonaws.AmazonWebServiceRequest;
 import com.amazonaws.ResponseMetadata;
@@ -388,4 +389,4 @@
     public void shutdown() {
         throw new UnsupportedOperationException();        
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentClientRegistryTest.java b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentClientRegistryTest.java
index 5ab2f29..1fb30be 100644
--- a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentClientRegistryTest.java
+++ b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentClientRegistryTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.aws.lambda;
 
 import com.amazonaws.services.lambda.AWSLambdaClient;
-
 import org.apache.camel.PropertyBindingException;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
diff --git a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentConfigurationTest.java b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentConfigurationTest.java
index 038fde7..0c0112b 100644
--- a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentConfigurationTest.java
+++ b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentConfigurationTest.java
@@ -19,9 +19,9 @@
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.lambda.AWSLambdaClient;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
+
 import static org.mockito.Mockito.mock;
 
 public class LambdaComponentConfigurationTest extends CamelTestSupport {
@@ -112,4 +112,4 @@
         assertEquals("localhost", endpoint.getConfiguration().getProxyHost());
         assertEquals(Integer.valueOf(9000), endpoint.getConfiguration().getProxyPort());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentSpringTest.java b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentSpringTest.java
index e7dcb06..7d9bc23 100644
--- a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentSpringTest.java
+++ b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaComponentSpringTest.java
@@ -257,4 +257,4 @@
         return new ClassPathXmlApplicationContext(
             "org/apache/camel/component/aws/lambda/LambdaComponentSpringTest-context.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaOperationsTest.java b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaOperationsTest.java
index 14b6779..197abc2 100644
--- a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaOperationsTest.java
+++ b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaOperationsTest.java
@@ -20,8 +20,6 @@
 
 import static org.junit.Assert.assertEquals;
 
-
-
 public class LambdaOperationsTest {
 
     @Test
diff --git a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java
index 09264f7..b4a8a0b 100644
--- a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java
+++ b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java
@@ -37,7 +37,6 @@
 import com.amazonaws.services.lambda.model.UntagResourceResult;
 import com.amazonaws.services.lambda.model.UpdateFunctionCodeResult;
 import com.amazonaws.util.IOUtils;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/integration/LambdaComponentIntegrationTest.java b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/integration/LambdaComponentIntegrationTest.java
index 3cfaada..a2d4abe 100644
--- a/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/integration/LambdaComponentIntegrationTest.java
+++ b/components/camel-aws-lambda/src/test/java/org/apache/camel/component/aws/lambda/integration/LambdaComponentIntegrationTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.aws.lambda.integration;
 
 import java.io.*;
+
 import com.amazonaws.services.lambda.model.CreateFunctionResult;
 import com.amazonaws.services.lambda.model.DeleteFunctionResult;
 import com.amazonaws.services.lambda.model.GetFunctionResult;
@@ -140,4 +141,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQComponent.java b/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQComponent.java
index f8129ee..868806e 100644
--- a/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQComponent.java
+++ b/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.mq.AmazonMQ;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQComponentVerifierExtension.java b/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQComponentVerifierExtension.java
index cd68b26..92bc5ad 100644
--- a/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQComponentVerifierExtension.java
+++ b/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQComponentVerifierExtension.java
@@ -27,7 +27,6 @@
 import com.amazonaws.services.mq.AmazonMQ;
 import com.amazonaws.services.mq.AmazonMQClientBuilder;
 import com.amazonaws.services.mq.model.ListBrokersRequest;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQConfiguration.java b/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQConfiguration.java
index a2384cb..817589a 100644
--- a/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQConfiguration.java
+++ b/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.mq.AmazonMQ;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQEndpoint.java b/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQEndpoint.java
index efc2c2e..62b4659 100644
--- a/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQEndpoint.java
+++ b/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQEndpoint.java
@@ -25,7 +25,6 @@
 import com.amazonaws.services.mq.AmazonMQ;
 import com.amazonaws.services.mq.AmazonMQClient;
 import com.amazonaws.services.mq.AmazonMQClientBuilder;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQProducer.java b/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQProducer.java
index 8757feb..5b3415b 100644
--- a/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQProducer.java
+++ b/components/camel-aws-mq/src/main/java/org/apache/camel/component/aws/mq/MQProducer.java
@@ -36,7 +36,6 @@
 import com.amazonaws.services.mq.model.UpdateBrokerRequest;
 import com.amazonaws.services.mq.model.UpdateBrokerResult;
 import com.amazonaws.services.mq.model.User;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -281,4 +280,4 @@
         }
         return exchange.getIn();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-mq/src/test/java/org/apache/camel/component/aws/mq/MQComponentConfigurationTest.java b/components/camel-aws-mq/src/test/java/org/apache/camel/component/aws/mq/MQComponentConfigurationTest.java
index 941bad1..0617832 100644
--- a/components/camel-aws-mq/src/test/java/org/apache/camel/component/aws/mq/MQComponentConfigurationTest.java
+++ b/components/camel-aws-mq/src/test/java/org/apache/camel/component/aws/mq/MQComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-aws-mq/src/test/java/org/apache/camel/component/aws/mq/MQProducerSpringTest.java b/components/camel-aws-mq/src/test/java/org/apache/camel/component/aws/mq/MQProducerSpringTest.java
index 475715c..7a5a727 100644
--- a/components/camel-aws-mq/src/test/java/org/apache/camel/component/aws/mq/MQProducerSpringTest.java
+++ b/components/camel-aws-mq/src/test/java/org/apache/camel/component/aws/mq/MQProducerSpringTest.java
@@ -29,7 +29,6 @@
 import com.amazonaws.services.mq.model.ListBrokersResult;
 import com.amazonaws.services.mq.model.UpdateBrokerResult;
 import com.amazonaws.services.mq.model.User;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
@@ -171,4 +170,4 @@
     protected ClassPathXmlApplicationContext createApplicationContext() {
         return new ClassPathXmlApplicationContext("org/apache/camel/component/aws/mq/MQComponentSpringTest-context.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-mq/src/test/java/org/apache/camel/component/aws/mq/MQProducerTest.java b/components/camel-aws-mq/src/test/java/org/apache/camel/component/aws/mq/MQProducerTest.java
index 8a87346..a7cf82e 100644
--- a/components/camel-aws-mq/src/test/java/org/apache/camel/component/aws/mq/MQProducerTest.java
+++ b/components/camel-aws-mq/src/test/java/org/apache/camel/component/aws/mq/MQProducerTest.java
@@ -29,7 +29,6 @@
 import com.amazonaws.services.mq.model.ListBrokersResult;
 import com.amazonaws.services.mq.model.UpdateBrokerResult;
 import com.amazonaws.services.mq.model.User;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
@@ -197,4 +196,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKComponent.java b/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKComponent.java
index 63a100e..a220477 100644
--- a/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKComponent.java
+++ b/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.kafka.AWSKafka;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKComponentVerifierExtension.java b/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKComponentVerifierExtension.java
index 35e2ea9..d2c29d0 100644
--- a/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKComponentVerifierExtension.java
+++ b/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKComponentVerifierExtension.java
@@ -27,7 +27,6 @@
 import com.amazonaws.services.kafka.AWSKafka;
 import com.amazonaws.services.kafka.AWSKafkaClientBuilder;
 import com.amazonaws.services.kafka.model.ListClustersRequest;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKConfiguration.java b/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKConfiguration.java
index 4c66c7c..a862034 100644
--- a/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKConfiguration.java
+++ b/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.kafka.AWSKafka;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKEndpoint.java b/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKEndpoint.java
index 6480e2e..b0b71aa 100644
--- a/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKEndpoint.java
+++ b/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKEndpoint.java
@@ -24,7 +24,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.kafka.AWSKafka;
 import com.amazonaws.services.kafka.AWSKafkaClientBuilder;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKProducer.java b/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKProducer.java
index 81aa769..da5f783 100644
--- a/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKProducer.java
+++ b/components/camel-aws-msk/src/main/java/org/apache/camel/component/aws/msk/MSKProducer.java
@@ -27,7 +27,6 @@
 import com.amazonaws.services.kafka.model.DescribeClusterResult;
 import com.amazonaws.services.kafka.model.ListClustersRequest;
 import com.amazonaws.services.kafka.model.ListClustersResult;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-aws-msk/src/test/java/org/apache/camel/component/aws/msk/MSKComponentConfigurationTest.java b/components/camel-aws-msk/src/test/java/org/apache/camel/component/aws/msk/MSKComponentConfigurationTest.java
index ac3ce9c..1e06de3 100644
--- a/components/camel-aws-msk/src/test/java/org/apache/camel/component/aws/msk/MSKComponentConfigurationTest.java
+++ b/components/camel-aws-msk/src/test/java/org/apache/camel/component/aws/msk/MSKComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-aws-msk/src/test/java/org/apache/camel/component/aws/msk/MSKProducerSpringTest.java b/components/camel-aws-msk/src/test/java/org/apache/camel/component/aws/msk/MSKProducerSpringTest.java
index 37f98c8..6efee6b 100644
--- a/components/camel-aws-msk/src/test/java/org/apache/camel/component/aws/msk/MSKProducerSpringTest.java
+++ b/components/camel-aws-msk/src/test/java/org/apache/camel/component/aws/msk/MSKProducerSpringTest.java
@@ -22,7 +22,6 @@
 import com.amazonaws.services.kafka.model.DeleteClusterResult;
 import com.amazonaws.services.kafka.model.DescribeClusterResult;
 import com.amazonaws.services.kafka.model.ListClustersResult;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-msk/src/test/java/org/apache/camel/component/aws/msk/MSKProducerTest.java b/components/camel-aws-msk/src/test/java/org/apache/camel/component/aws/msk/MSKProducerTest.java
index 2d2912e..f08bbfa 100644
--- a/components/camel-aws-msk/src/test/java/org/apache/camel/component/aws/msk/MSKProducerTest.java
+++ b/components/camel-aws-msk/src/test/java/org/apache/camel/component/aws/msk/MSKProducerTest.java
@@ -22,7 +22,6 @@
 import com.amazonaws.services.kafka.model.DeleteClusterResult;
 import com.amazonaws.services.kafka.model.DescribeClusterResult;
 import com.amazonaws.services.kafka.model.ListClustersResult;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Component.java b/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Component.java
index 17f6e68..abf249f 100644
--- a/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Component.java
+++ b/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Component.java
@@ -20,10 +20,8 @@
 import java.util.Set;
 
 import com.amazonaws.services.s3.AmazonS3;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
diff --git a/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3ComponentVerifierExtension.java b/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3ComponentVerifierExtension.java
index 6599089..44ef543 100644
--- a/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3ComponentVerifierExtension.java
+++ b/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3ComponentVerifierExtension.java
@@ -26,7 +26,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.s3.AmazonS3;
 import com.amazonaws.services.s3.AmazonS3ClientBuilder;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Configuration.java b/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Configuration.java
index 29fa780..74e210a 100644
--- a/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Configuration.java
+++ b/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Configuration.java
@@ -19,7 +19,6 @@
 import com.amazonaws.Protocol;
 import com.amazonaws.services.s3.AmazonS3;
 import com.amazonaws.services.s3.model.EncryptionMaterials;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
diff --git a/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java b/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
index d67158e..86193f8 100644
--- a/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
+++ b/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Consumer.java
@@ -29,7 +29,6 @@
 import com.amazonaws.services.s3.model.ObjectListing;
 import com.amazonaws.services.s3.model.S3Object;
 import com.amazonaws.services.s3.model.S3ObjectSummary;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.NoFactoryAvailableException;
@@ -235,4 +234,4 @@
         }
         return s3ConsumerToString;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Producer.java b/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Producer.java
index dc4f810..e5fc068 100644
--- a/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Producer.java
+++ b/components/camel-aws-s3/src/main/java/org/apache/camel/component/aws/s3/S3Producer.java
@@ -53,7 +53,6 @@
 import com.amazonaws.services.s3.model.SSEAwsKeyManagementParams;
 import com.amazonaws.services.s3.model.StorageClass;
 import com.amazonaws.services.s3.model.UploadPartRequest;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
index 92e769c..055d545 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/AmazonS3ClientMock.java
@@ -75,7 +75,6 @@
 import com.amazonaws.services.s3.model.UploadPartRequest;
 import com.amazonaws.services.s3.model.UploadPartResult;
 import com.amazonaws.services.s3.model.VersionListing;
-
 import org.apache.camel.util.ObjectHelper;
 import org.junit.Assert;
 
@@ -480,4 +479,4 @@
     public S3ResponseMetadata getCachedResponseMetadata(AmazonWebServiceRequest request) {
         throw new UnsupportedOperationException();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/AmazonS3EncryptionClientMock.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/AmazonS3EncryptionClientMock.java
index 7fc475d..fdbf4478 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/AmazonS3EncryptionClientMock.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/AmazonS3EncryptionClientMock.java
@@ -74,7 +74,6 @@
 import com.amazonaws.services.s3.model.UploadPartRequest;
 import com.amazonaws.services.s3.model.UploadPartResult;
 import com.amazonaws.services.s3.model.VersionListing;
-
 import org.apache.camel.util.ObjectHelper;
 import org.junit.Assert;
 
@@ -464,4 +463,4 @@
     public S3ResponseMetadata getCachedResponseMetadata(AmazonWebServiceRequest request) {
         throw new UnsupportedOperationException();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerMaxMessagesPerPollTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerMaxMessagesPerPollTest.java
index 36ebc71..3a218c5 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerMaxMessagesPerPollTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerMaxMessagesPerPollTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.aws.s3;
 
 import com.amazonaws.services.s3.model.S3Object;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerTest.java
index fe77d60..814b4f2 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3BatchConsumerTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.aws.s3;
 
 import com.amazonaws.services.s3.model.S3Object;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentConfigurationTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentConfigurationTest.java
index 6d462f2..1376849 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentConfigurationTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentConfigurationTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.aws.s3;
 
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentContentLengthFileTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentContentLengthFileTest.java
index bd57cb1..1a9e7c2 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentContentLengthFileTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentContentLengthFileTest.java
@@ -23,7 +23,6 @@
 import java.util.Map;
 
 import com.amazonaws.services.s3.model.PutObjectRequest;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentExistingBucketTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentExistingBucketTest.java
index c30c42e..ef0f830 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentExistingBucketTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentExistingBucketTest.java
@@ -22,7 +22,6 @@
 import java.util.Map;
 
 import com.amazonaws.services.s3.model.PutObjectRequest;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentFileTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentFileTest.java
index 9fe3e8f..5427ca7 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentFileTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentFileTest.java
@@ -22,7 +22,6 @@
 import java.util.Map;
 
 import com.amazonaws.services.s3.model.PutObjectRequest;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentKeyNameFileTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentKeyNameFileTest.java
index ddf4242..e1ee26e 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentKeyNameFileTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentKeyNameFileTest.java
@@ -23,7 +23,6 @@
 import java.util.Map;
 
 import com.amazonaws.services.s3.model.PutObjectRequest;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsSpringTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsSpringTest.java
index 205ac62..4e2cb48 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsSpringTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsSpringTest.java
@@ -19,7 +19,6 @@
 import java.util.List;
 
 import com.amazonaws.services.s3.model.Bucket;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsTest.java
index 1d8f35a..39e0ed9 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListBucketsTest.java
@@ -19,7 +19,6 @@
 import java.util.List;
 
 import com.amazonaws.services.s3.model.Bucket;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListObjectTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListObjectTest.java
index 6577709..07cd8ec 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListObjectTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListObjectTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.aws.s3;
 
 import com.amazonaws.services.s3.model.ObjectListing;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListObjectsSpringTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListObjectsSpringTest.java
index cf85884..f8d1de6 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListObjectsSpringTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentListObjectsSpringTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.aws.s3;
 
 import com.amazonaws.services.s3.model.ObjectListing;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentNonExistingBucketTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentNonExistingBucketTest.java
index f201e24..34e9951 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentNonExistingBucketTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentNonExistingBucketTest.java
@@ -22,7 +22,6 @@
 import java.util.Map;
 
 import com.amazonaws.services.s3.model.PutObjectRequest;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentStringTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentStringTest.java
index 9e05d3d..94f5703 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentStringTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ComponentStringTest.java
@@ -19,7 +19,6 @@
 import java.io.File;
 
 import com.amazonaws.services.s3.model.PutObjectRequest;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ConsumerDelimiterTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ConsumerDelimiterTest.java
index d04192a..0cfc75b 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ConsumerDelimiterTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ConsumerDelimiterTest.java
@@ -28,7 +28,6 @@
 import com.amazonaws.services.s3.model.S3Object;
 import com.amazonaws.services.s3.model.S3ObjectSummary;
 import com.amazonaws.util.StringInputStream;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ConsumerPrefixTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ConsumerPrefixTest.java
index 6d109dd..52daf50 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ConsumerPrefixTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3ConsumerPrefixTest.java
@@ -28,7 +28,6 @@
 import com.amazonaws.services.s3.model.S3Object;
 import com.amazonaws.services.s3.model.S3ObjectSummary;
 import com.amazonaws.util.StringInputStream;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3IncludeBodyTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3IncludeBodyTest.java
index 65b6f88..50ad0fd 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3IncludeBodyTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/S3IncludeBodyTest.java
@@ -28,7 +28,6 @@
 import com.amazonaws.services.s3.model.S3Object;
 import com.amazonaws.services.s3.model.S3ObjectSummary;
 import com.amazonaws.util.StringInputStream;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/client/impl/IAMOptimizedAWSS3ClientImplTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/client/impl/IAMOptimizedAWSS3ClientImplTest.java
index 4b39215..e1c3507 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/client/impl/IAMOptimizedAWSS3ClientImplTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/client/impl/IAMOptimizedAWSS3ClientImplTest.java
@@ -24,6 +24,7 @@
 import org.apache.camel.component.aws.s3.S3Configuration;
 import org.junit.Assert;
 import org.junit.Test;
+
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
diff --git a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/client/impl/StandardAWSS3ClientImplTest.java b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/client/impl/StandardAWSS3ClientImplTest.java
index d5002ae..9de88bb 100644
--- a/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/client/impl/StandardAWSS3ClientImplTest.java
+++ b/components/camel-aws-s3/src/test/java/org/apache/camel/component/aws/s3/client/impl/StandardAWSS3ClientImplTest.java
@@ -24,6 +24,7 @@
 import org.apache.camel.component.aws.s3.S3Configuration;
 import org.junit.Assert;
 import org.junit.Test;
+
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/AbstractSdbCommand.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/AbstractSdbCommand.java
index e95819c..7eba8ce 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/AbstractSdbCommand.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/AbstractSdbCommand.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
 import com.amazonaws.services.simpledb.model.UpdateCondition;
-
 import org.apache.camel.Exchange;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -63,4 +62,4 @@
     protected String determineNextToken() {
         return exchange.getIn().getHeader(SdbConstants.NEXT_TOKEN, String.class);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/BatchDeleteAttributesCommand.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/BatchDeleteAttributesCommand.java
index 76d1cec..1b0507f 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/BatchDeleteAttributesCommand.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/BatchDeleteAttributesCommand.java
@@ -21,7 +21,6 @@
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
 import com.amazonaws.services.simpledb.model.BatchDeleteAttributesRequest;
 import com.amazonaws.services.simpledb.model.DeletableItem;
-
 import org.apache.camel.Exchange;
 
 public class BatchDeleteAttributesCommand extends AbstractSdbCommand {
@@ -46,4 +45,4 @@
     protected Collection<DeletableItem> determineDeletableItems() {
         return exchange.getIn().getHeader(SdbConstants.DELETABLE_ITEMS, Collection.class);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/BatchPutAttributesCommand.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/BatchPutAttributesCommand.java
index 52db2db..8476907 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/BatchPutAttributesCommand.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/BatchPutAttributesCommand.java
@@ -21,7 +21,6 @@
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
 import com.amazonaws.services.simpledb.model.BatchPutAttributesRequest;
 import com.amazonaws.services.simpledb.model.ReplaceableItem;
-
 import org.apache.camel.Exchange;
 
 public class BatchPutAttributesCommand extends AbstractSdbCommand {
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/DeleteAttributesCommand.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/DeleteAttributesCommand.java
index 128d554..84c05b0 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/DeleteAttributesCommand.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/DeleteAttributesCommand.java
@@ -21,7 +21,6 @@
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
 import com.amazonaws.services.simpledb.model.Attribute;
 import com.amazonaws.services.simpledb.model.DeleteAttributesRequest;
-
 import org.apache.camel.Exchange;
 
 public class DeleteAttributesCommand extends AbstractSdbCommand {
@@ -48,4 +47,4 @@
     protected Collection<Attribute> determineAttributes() {
         return exchange.getIn().getHeader(SdbConstants.ATTRIBUTES, Collection.class);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/DeleteDomainCommand.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/DeleteDomainCommand.java
index d07b15a..6527195 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/DeleteDomainCommand.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/DeleteDomainCommand.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
 import com.amazonaws.services.simpledb.model.DeleteDomainRequest;
-
 import org.apache.camel.Exchange;
 
 public class DeleteDomainCommand extends AbstractSdbCommand {
@@ -37,4 +36,4 @@
         
         log.trace("Request sent");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/DomainMetadataCommand.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/DomainMetadataCommand.java
index 703fab0..7aa47ca 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/DomainMetadataCommand.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/DomainMetadataCommand.java
@@ -19,7 +19,6 @@
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
 import com.amazonaws.services.simpledb.model.DomainMetadataRequest;
 import com.amazonaws.services.simpledb.model.DomainMetadataResult;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 
@@ -57,4 +56,4 @@
         }
         return exchange.getIn();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/GetAttributesCommand.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/GetAttributesCommand.java
index f867845..cd1900c 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/GetAttributesCommand.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/GetAttributesCommand.java
@@ -21,7 +21,6 @@
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
 import com.amazonaws.services.simpledb.model.GetAttributesRequest;
 import com.amazonaws.services.simpledb.model.GetAttributesResult;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 
@@ -61,4 +60,4 @@
         }
         return exchange.getIn();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/ListDomainsCommand.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/ListDomainsCommand.java
index ead7983..df4ec64 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/ListDomainsCommand.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/ListDomainsCommand.java
@@ -19,7 +19,6 @@
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
 import com.amazonaws.services.simpledb.model.ListDomainsRequest;
 import com.amazonaws.services.simpledb.model.ListDomainsResult;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 
@@ -61,4 +60,4 @@
         }
         return exchange.getIn();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/PutAttributesCommand.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/PutAttributesCommand.java
index f4f6ad1..2ca5d86 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/PutAttributesCommand.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/PutAttributesCommand.java
@@ -21,7 +21,6 @@
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
 import com.amazonaws.services.simpledb.model.PutAttributesRequest;
 import com.amazonaws.services.simpledb.model.ReplaceableAttribute;
-
 import org.apache.camel.Exchange;
 
 public class PutAttributesCommand extends AbstractSdbCommand {
@@ -48,4 +47,4 @@
     protected Collection<ReplaceableAttribute> determineReplaceableAttributes() {
         return exchange.getIn().getHeader(SdbConstants.REPLACEABLE_ATTRIBUTES, Collection.class);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SdbComponentVerifierExtension.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SdbComponentVerifierExtension.java
index 9e9efc0..22c8fd9 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SdbComponentVerifierExtension.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SdbComponentVerifierExtension.java
@@ -26,7 +26,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
 import com.amazonaws.services.simpledb.AmazonSimpleDBClientBuilder;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SdbConfiguration.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SdbConfiguration.java
index a444ba4..c5d7367 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SdbConfiguration.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SdbConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SdbEndpoint.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SdbEndpoint.java
index 1a567bd..05a0ca0 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SdbEndpoint.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SdbEndpoint.java
@@ -27,7 +27,6 @@
 import com.amazonaws.services.simpledb.model.CreateDomainRequest;
 import com.amazonaws.services.simpledb.model.DomainMetadataRequest;
 import com.amazonaws.services.simpledb.model.NoSuchDomainException;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SelectCommand.java b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SelectCommand.java
index 0e0dcf5..9cce570 100644
--- a/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SelectCommand.java
+++ b/components/camel-aws-sdb/src/main/java/org/apache/camel/component/aws/sdb/SelectCommand.java
@@ -19,7 +19,6 @@
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
 import com.amazonaws.services.simpledb.model.SelectRequest;
 import com.amazonaws.services.simpledb.model.SelectResult;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 
@@ -58,4 +57,4 @@
         }
         return exchange.getIn();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/AbstractSdbCommandTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/AbstractSdbCommandTest.java
index 69ae426..203b94e 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/AbstractSdbCommandTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/AbstractSdbCommandTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.services.simpledb.AmazonSimpleDB;
 import com.amazonaws.services.simpledb.model.UpdateCondition;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
@@ -103,4 +102,4 @@
         
         assertEquals("Token1", this.command.determineNextToken());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/BatchDeleteAttributesCommandTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/BatchDeleteAttributesCommandTest.java
index 03b9572..21bacf8 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/BatchDeleteAttributesCommandTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/BatchDeleteAttributesCommandTest.java
@@ -20,7 +20,6 @@
 import java.util.List;
 
 import com.amazonaws.services.simpledb.model.Item;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/BatchPutAttributesCommandTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/BatchPutAttributesCommandTest.java
index 0113ba6..b48956c 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/BatchPutAttributesCommandTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/BatchPutAttributesCommandTest.java
@@ -20,7 +20,6 @@
 import java.util.List;
 
 import com.amazonaws.services.simpledb.model.ReplaceableItem;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
@@ -69,4 +68,4 @@
         
         assertEquals(replaceableItems, this.command.determineReplaceableItems());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/DeleteAttributesCommandTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/DeleteAttributesCommandTest.java
index b047964..0af789f 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/DeleteAttributesCommandTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/DeleteAttributesCommandTest.java
@@ -21,7 +21,6 @@
 
 import com.amazonaws.services.simpledb.model.Attribute;
 import com.amazonaws.services.simpledb.model.UpdateCondition;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
@@ -86,4 +85,4 @@
         
         assertEquals(attributes, this.command.determineAttributes());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/DeleteDomainCommandTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/DeleteDomainCommandTest.java
index 0f5971f..d16622f 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/DeleteDomainCommandTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/DeleteDomainCommandTest.java
@@ -47,4 +47,4 @@
         
         assertEquals("DOMAIN1", sdbClient.deleteDomainRequest.getDomainName());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/DomainMetadataCommandTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/DomainMetadataCommandTest.java
index c4c45c4..2b9be94 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/DomainMetadataCommandTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/DomainMetadataCommandTest.java
@@ -55,4 +55,4 @@
         assertEquals(new Long(2000000), exchange.getIn().getHeader(SdbConstants.ATTRIBUTE_VALUE_SIZE));
         assertEquals(new Long(3000000), exchange.getIn().getHeader(SdbConstants.ITEM_NAME_SIZE));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/GetAttributesCommandTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/GetAttributesCommandTest.java
index d423e22..58d635d 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/GetAttributesCommandTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/GetAttributesCommandTest.java
@@ -20,7 +20,6 @@
 import java.util.List;
 
 import com.amazonaws.services.simpledb.model.Attribute;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
@@ -90,4 +89,4 @@
         
         assertEquals(attributeNames, this.command.determineAttributeNames());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/ListDomainsCommandTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/ListDomainsCommandTest.java
index f8a4a4c..08a3130 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/ListDomainsCommandTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/ListDomainsCommandTest.java
@@ -70,4 +70,4 @@
 
         assertEquals(new Integer(10), this.command.determineMaxNumberOfDomains());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/PutAttributesCommandTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/PutAttributesCommandTest.java
index b86f301..19f2a55 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/PutAttributesCommandTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/PutAttributesCommandTest.java
@@ -21,7 +21,6 @@
 
 import com.amazonaws.services.simpledb.model.ReplaceableAttribute;
 import com.amazonaws.services.simpledb.model.UpdateCondition;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
@@ -86,4 +85,4 @@
 
         assertEquals(replaceableAttributes, this.command.determineReplaceableAttributes());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SdbComponentConfigurationTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SdbComponentConfigurationTest.java
index 93b50cf..f80e1df 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SdbComponentConfigurationTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SdbComponentConfigurationTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.aws.sdb;
 
 import com.amazonaws.Protocol;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
@@ -146,4 +145,4 @@
         assertEquals("localhost", endpoint.getConfiguration().getProxyHost());
         assertEquals(Integer.valueOf(9000), endpoint.getConfiguration().getProxyPort());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SdbComponentSpringTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SdbComponentSpringTest.java
index 856a5ce..a01e146 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SdbComponentSpringTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SdbComponentSpringTest.java
@@ -25,7 +25,6 @@
 import com.amazonaws.services.simpledb.model.ReplaceableAttribute;
 import com.amazonaws.services.simpledb.model.ReplaceableItem;
 import com.amazonaws.services.simpledb.model.UpdateCondition;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.impl.engine.DefaultProducerTemplate;
@@ -292,4 +291,4 @@
         return new ClassPathXmlApplicationContext(
                 "org/apache/camel/component/aws/sdb/SDBComponentSpringTest-context.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SdbComponentTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SdbComponentTest.java
index 35d26aa..58b92e6 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SdbComponentTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SdbComponentTest.java
@@ -25,7 +25,6 @@
 import com.amazonaws.services.simpledb.model.ReplaceableAttribute;
 import com.amazonaws.services.simpledb.model.ReplaceableItem;
 import com.amazonaws.services.simpledb.model.UpdateCondition;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
@@ -289,4 +288,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SelectCommandTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SelectCommandTest.java
index 96ead43..69b4008 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SelectCommandTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/SelectCommandTest.java
@@ -19,7 +19,6 @@
 import java.util.List;
 
 import com.amazonaws.services.simpledb.model.Item;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
@@ -74,4 +73,4 @@
 
         assertEquals("SELECT NAME1 FROM DOMAIN1 WHERE NAME1 LIKE 'VALUE1'", this.command.determineSelectExpression());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/integration/SdbComponentIntegrationTest.java b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/integration/SdbComponentIntegrationTest.java
index e7bcb3a..7af1167 100644
--- a/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/integration/SdbComponentIntegrationTest.java
+++ b/components/camel-aws-sdb/src/test/java/org/apache/camel/component/aws/sdb/integration/SdbComponentIntegrationTest.java
@@ -24,7 +24,6 @@
 import com.amazonaws.services.simpledb.model.ReplaceableAttribute;
 import com.amazonaws.services.simpledb.model.ReplaceableItem;
 import com.amazonaws.services.simpledb.model.UpdateCondition;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
@@ -175,4 +174,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesComponent.java b/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesComponent.java
index 64af4c4..817453f 100644
--- a/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesComponent.java
+++ b/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesComponentVerifierExtension.java b/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesComponentVerifierExtension.java
index b7efbeb..b136a9a 100644
--- a/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesComponentVerifierExtension.java
+++ b/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesComponentVerifierExtension.java
@@ -26,7 +26,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
 import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesConfiguration.java b/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesConfiguration.java
index db20a18..d3f16be 100644
--- a/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesConfiguration.java
+++ b/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesConfiguration.java
@@ -21,7 +21,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesEndpoint.java b/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesEndpoint.java
index 1fb5e40..5ac6ac0 100644
--- a/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesEndpoint.java
+++ b/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesEndpoint.java
@@ -24,7 +24,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
 import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java b/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java
index eff6e7f..d9bfe47 100644
--- a/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java
+++ b/components/camel-aws-ses/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java
@@ -29,7 +29,6 @@
 import com.amazonaws.services.simpleemail.model.SendEmailResult;
 import com.amazonaws.services.simpleemail.model.SendRawEmailRequest;
 import com.amazonaws.services.simpleemail.model.SendRawEmailResult;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-aws-ses/src/test/java/org/apache/camel/component/aws/ses/SesComponentConfigurationTest.java b/components/camel-aws-ses/src/test/java/org/apache/camel/component/aws/ses/SesComponentConfigurationTest.java
index a3b9159..fdcb519 100644
--- a/components/camel-aws-ses/src/test/java/org/apache/camel/component/aws/ses/SesComponentConfigurationTest.java
+++ b/components/camel-aws-ses/src/test/java/org/apache/camel/component/aws/ses/SesComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
@@ -178,4 +177,4 @@
         SesComponent component = new SesComponent(context);
         component.createEndpoint("aws-ses://from@example.com?amazonSESClient=#amazonSESClient");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ses/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java b/components/camel-aws-ses/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java
index 29a3ba23..dfbae057 100644
--- a/components/camel-aws-ses/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java
+++ b/components/camel-aws-ses/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java
@@ -21,7 +21,6 @@
 
 import com.amazonaws.services.simpleemail.model.SendEmailRequest;
 import com.amazonaws.services.simpleemail.model.SendRawEmailRequest;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
@@ -146,4 +145,4 @@
     private List<String> getTo(SendRawEmailRequest sendEmailRequest) {
         return sendEmailRequest.getDestinations();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-ses/src/test/java/org/apache/camel/component/aws/ses/SesComponentTest.java b/components/camel-aws-ses/src/test/java/org/apache/camel/component/aws/ses/SesComponentTest.java
index 5e1d632..79acf9d 100644
--- a/components/camel-aws-ses/src/test/java/org/apache/camel/component/aws/ses/SesComponentTest.java
+++ b/components/camel-aws-ses/src/test/java/org/apache/camel/component/aws/ses/SesComponentTest.java
@@ -20,7 +20,6 @@
 import java.util.List;
 
 import com.amazonaws.services.simpleemail.model.SendEmailRequest;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
@@ -126,4 +125,4 @@
     private List<String> getTo(SendEmailRequest sendEmailRequest) {
         return sendEmailRequest.getDestination().getToAddresses();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsComponent.java b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsComponent.java
index 65e8ec6..f5772fe 100644
--- a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsComponent.java
+++ b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsComponent.java
@@ -21,7 +21,6 @@
 
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.sns.AmazonSNS;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsComponentVerifierExtension.java b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsComponentVerifierExtension.java
index b3f3d87..83da971 100644
--- a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsComponentVerifierExtension.java
+++ b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsComponentVerifierExtension.java
@@ -26,7 +26,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.sns.AmazonSNS;
 import com.amazonaws.services.sns.AmazonSNSClientBuilder;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsConfiguration.java b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsConfiguration.java
index 617b718..f5b2334 100644
--- a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsConfiguration.java
+++ b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsConfiguration.java
@@ -19,7 +19,6 @@
 import com.amazonaws.Protocol;
 import com.amazonaws.services.sns.AmazonSNS;
 import com.amazonaws.services.sqs.AmazonSQS;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
diff --git a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java
index bdd4aab..4732651 100644
--- a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java
+++ b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java
@@ -34,7 +34,6 @@
 import com.amazonaws.services.sns.model.SetTopicAttributesRequest;
 import com.amazonaws.services.sns.model.Topic;
 import com.amazonaws.services.sns.util.Topics;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsProducer.java b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsProducer.java
index a89b468..64b76fd 100644
--- a/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsProducer.java
+++ b/components/camel-aws-sns/src/main/java/org/apache/camel/component/aws/sns/SnsProducer.java
@@ -35,7 +35,6 @@
 import org.apache.camel.support.DefaultProducer;
 import org.apache.camel.util.URISupport;
 
-
 /**
  * A Producer which sends messages to the Amazon Web Service Simple Notification Service
  * <a href="http://aws.amazon.com/sns/">AWS SNS</a>
@@ -150,4 +149,4 @@
         }
         return exchange.getIn();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sns/src/test/java/org/apache/camel/component/aws/sns/AmazonSNSClientMock.java b/components/camel-aws-sns/src/test/java/org/apache/camel/component/aws/sns/AmazonSNSClientMock.java
index c3a0764..3053088 100644
--- a/components/camel-aws-sns/src/test/java/org/apache/camel/component/aws/sns/AmazonSNSClientMock.java
+++ b/components/camel-aws-sns/src/test/java/org/apache/camel/component/aws/sns/AmazonSNSClientMock.java
@@ -51,7 +51,6 @@
 import com.amazonaws.services.sns.model.Topic;
 import com.amazonaws.services.sns.model.UnsubscribeRequest;
 import com.amazonaws.services.sns.model.UnsubscribeResult;
-
 import org.junit.Assert;
 
 public class AmazonSNSClientMock extends AbstractAmazonSNS {
@@ -168,4 +167,4 @@
     public ResponseMetadata getCachedResponseMetadata(AmazonWebServiceRequest request) {
         throw new UnsupportedOperationException();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sns/src/test/java/org/apache/camel/component/aws/sns/SnsComponentConfigurationTest.java b/components/camel-aws-sns/src/test/java/org/apache/camel/component/aws/sns/SnsComponentConfigurationTest.java
index 78c6034..318790b 100644
--- a/components/camel-aws-sns/src/test/java/org/apache/camel/component/aws/sns/SnsComponentConfigurationTest.java
+++ b/components/camel-aws-sns/src/test/java/org/apache/camel/component/aws/sns/SnsComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.component.aws.sqs.AmazonSQSClientMock;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
diff --git a/components/camel-aws-sns/src/test/java/org/apache/camel/component/aws/sns/SnsProducerTest.java b/components/camel-aws-sns/src/test/java/org/apache/camel/component/aws/sns/SnsProducerTest.java
index c33cdba..bb46c6e 100644
--- a/components/camel-aws-sns/src/test/java/org/apache/camel/component/aws/sns/SnsProducerTest.java
+++ b/components/camel-aws-sns/src/test/java/org/apache/camel/component/aws/sns/SnsProducerTest.java
@@ -70,4 +70,4 @@
         assertThat(translateAttributes.get("key6").getStringValue(), is("[10, null, 12]"));
         assertThat(translateAttributes.get("key7").getStringValue(), is("[true, null, false]"));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsComponent.java b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsComponent.java
index fd6b4c3..91e1f34 100644
--- a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsComponent.java
+++ b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsComponent.java
@@ -21,7 +21,6 @@
 
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.sqs.AmazonSQS;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsComponentVerifierExtension.java b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsComponentVerifierExtension.java
index bb0e766..5a62fe7 100644
--- a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsComponentVerifierExtension.java
+++ b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsComponentVerifierExtension.java
@@ -26,7 +26,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.sqs.AmazonSQS;
 import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConfiguration.java b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConfiguration.java
index 4c5020d..e94e191 100644
--- a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConfiguration.java
+++ b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.sqs.AmazonSQS;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
diff --git a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConsumer.java b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConsumer.java
index 4458af5..2d57f97 100644
--- a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConsumer.java
+++ b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsConsumer.java
@@ -36,7 +36,6 @@
 import com.amazonaws.services.sqs.model.ReceiptHandleIsInvalidException;
 import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
 import com.amazonaws.services.sqs.model.ReceiveMessageResult;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsEndpoint.java b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsEndpoint.java
index 23a9cdc..2dcfd2f 100644
--- a/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsEndpoint.java
+++ b/components/camel-aws-sqs/src/main/java/org/apache/camel/component/aws/sqs/SqsEndpoint.java
@@ -37,7 +37,6 @@
 import com.amazonaws.services.sqs.model.MessageAttributeValue;
 import com.amazonaws.services.sqs.model.QueueAttributeName;
 import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsBatchConsumerTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsBatchConsumerTest.java
index 1516727..86601f7 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsBatchConsumerTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsBatchConsumerTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.aws.sqs;
 
 import com.amazonaws.services.sqs.model.Message;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsComponentConfigurationTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsComponentConfigurationTest.java
index 01029ec..854a015 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsComponentConfigurationTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsComponentSpringTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsComponentSpringTest.java
index f0c41a7..3b64810 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsComponentSpringTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsComponentSpringTest.java
@@ -21,7 +21,6 @@
 
 import com.amazonaws.services.sqs.model.DeleteMessageResult;
 import com.amazonaws.services.sqs.model.SendMessageBatchResult;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsConcurrentConsumerTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsConcurrentConsumerTest.java
index e374461..5fefcfae 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsConcurrentConsumerTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsConcurrentConsumerTest.java
@@ -21,7 +21,6 @@
 import java.util.concurrent.TimeUnit;
 
 import com.amazonaws.services.sqs.model.Message;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsConsumerIdleMessageTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsConsumerIdleMessageTest.java
index c82048f..be0521b 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsConsumerIdleMessageTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsConsumerIdleMessageTest.java
@@ -17,15 +17,15 @@
 package org.apache.camel.component.aws.sqs;
 
 import org.apache.camel.BindToRegistry;
-/**
- * Test to verify that the polling consumer delivers an empty Exchange when the
- * sendEmptyMessageWhenIdle property is set and a polling event yields no results.
- */
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
+/**
+ * Test to verify that the polling consumer delivers an empty Exchange when the
+ * sendEmptyMessageWhenIdle property is set and a polling event yields no results.
+ */
 public class SqsConsumerIdleMessageTest extends CamelTestSupport {
 
     @BindToRegistry("amazonSQSClient")
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsDoesNotExtendMessageVisibilityTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsDoesNotExtendMessageVisibilityTest.java
index 5a08ffc..713cf22 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsDoesNotExtendMessageVisibilityTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsDoesNotExtendMessageVisibilityTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.aws.sqs;
 
 import com.amazonaws.services.sqs.model.Message;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsEndpointTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsEndpointTest.java
index 4e953f0..013780e 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsEndpointTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsEndpointTest.java
@@ -23,7 +23,6 @@
 import com.amazonaws.services.sqs.model.GetQueueUrlResult;
 import com.amazonaws.services.sqs.model.ListQueuesResult;
 import com.amazonaws.services.sqs.model.QueueAttributeName;
-
 import org.apache.camel.impl.DefaultCamelContext;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsEndpointUseExistingQueueTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsEndpointUseExistingQueueTest.java
index e6a2b69..d55f6df 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsEndpointUseExistingQueueTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsEndpointUseExistingQueueTest.java
@@ -30,7 +30,6 @@
 import com.amazonaws.services.sqs.model.ReceiveMessageResult;
 import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;
 import com.amazonaws.services.sqs.model.SetQueueAttributesResult;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsExtendMessageVisibilityTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsExtendMessageVisibilityTest.java
index 1ba3be4..9da34c5 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsExtendMessageVisibilityTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsExtendMessageVisibilityTest.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.services.sqs.model.ChangeMessageVisibilityRequest;
 import com.amazonaws.services.sqs.model.Message;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerBatchTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerBatchTest.java
index 8c36956..3d22a46 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerBatchTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerBatchTest.java
@@ -20,7 +20,6 @@
 import java.util.Collection;
 
 import com.amazonaws.services.sqs.model.SendMessageBatchResult;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerDeleteTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerDeleteTest.java
index 000ea68..fb4168a 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerDeleteTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerDeleteTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.aws.sqs;
 
 import com.amazonaws.services.sqs.model.DeleteMessageResult;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerListQueuesTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerListQueuesTest.java
index b1badd1..a403f67 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerListQueuesTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerListQueuesTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.aws.sqs;
 
 import com.amazonaws.services.sqs.model.ListQueuesResult;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerTest.java b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerTest.java
index 340e321..2f830a9 100644
--- a/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerTest.java
+++ b/components/camel-aws-sqs/src/test/java/org/apache/camel/component/aws/sqs/SqsProducerTest.java
@@ -24,7 +24,6 @@
 import com.amazonaws.services.sqs.model.MessageAttributeValue;
 import com.amazonaws.services.sqs.model.SendMessageRequest;
 import com.amazonaws.services.sqs.model.SendMessageResult;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Message;
diff --git a/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFComponent.java b/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFComponent.java
index 51cb967..f627e6c 100644
--- a/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFComponent.java
+++ b/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFConfiguration.java b/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFConfiguration.java
index 65e68d3..5505a62 100644
--- a/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFConfiguration.java
+++ b/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFConfiguration.java
@@ -24,7 +24,6 @@
 import com.amazonaws.services.simpleworkflow.flow.WorkflowTypeRegistrationOptions;
 import com.amazonaws.services.simpleworkflow.flow.worker.ActivityTypeExecutionOptions;
 import com.amazonaws.services.simpleworkflow.flow.worker.ActivityTypeRegistrationOptions;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFWorkflowConsumer.java b/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFWorkflowConsumer.java
index 90a8b0c..014dc0c 100644
--- a/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFWorkflowConsumer.java
+++ b/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFWorkflowConsumer.java
@@ -25,6 +25,7 @@
 import org.apache.camel.util.URISupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import static org.apache.camel.ExchangePattern.InOnly;
 
 public class SWFWorkflowConsumer extends DefaultConsumer {
diff --git a/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFWorkflowProducer.java b/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFWorkflowProducer.java
index 5c845a9..e01ada0 100644
--- a/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFWorkflowProducer.java
+++ b/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SWFWorkflowProducer.java
@@ -26,7 +26,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class SWFWorkflowProducer extends DefaultProducer {
     private static final transient Logger LOGGER = LoggerFactory.getLogger(SWFWorkflowProducer.class);
     private final CamelSWFWorkflowClient camelSWFClient;
diff --git a/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SwfComponentVerifierExtension.java b/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SwfComponentVerifierExtension.java
index a3a4e67..0fa94b9 100644
--- a/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SwfComponentVerifierExtension.java
+++ b/components/camel-aws-swf/src/main/java/org/apache/camel/component/aws/swf/SwfComponentVerifierExtension.java
@@ -27,7 +27,6 @@
 import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow;
 import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClientBuilder;
 import com.amazonaws.services.simpleworkflow.model.ListDomainsRequest;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFActivityClientTest.java b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFActivityClientTest.java
index 964d104..fd07cb5 100644
--- a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFActivityClientTest.java
+++ b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFActivityClientTest.java
@@ -19,12 +19,10 @@
 import com.amazonaws.services.simpleworkflow.flow.DynamicActivitiesClient;
 import com.amazonaws.services.simpleworkflow.flow.core.Promise;
 import com.amazonaws.services.simpleworkflow.model.ActivityType;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentMatchers;
 
-
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
diff --git a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFActivityConsumerTest.java b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFActivityConsumerTest.java
index f8461be..c54b4fb 100644
--- a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFActivityConsumerTest.java
+++ b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFActivityConsumerTest.java
@@ -22,6 +22,7 @@
 import org.apache.camel.Predicate;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
+
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.verify;
@@ -65,4 +66,4 @@
         assertMockEndpointsSatisfied();
         verify(amazonSWClient, atLeastOnce()).pollForActivityTask(any(PollForActivityTaskRequest.class));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFTestSupport.java b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFTestSupport.java
index d427c9c..fc7c8b5 100644
--- a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFTestSupport.java
+++ b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFTestSupport.java
@@ -17,12 +17,12 @@
 package org.apache.camel.component.aws.swf;
 
 import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
+
 import static org.mockito.Mockito.mock;
 
 public class CamelSWFTestSupport extends CamelTestSupport {
@@ -45,4 +45,4 @@
 
     @BindToRegistry("amazonSWClient")
     protected AmazonSimpleWorkflowClient amazonSWClient = mock(AmazonSimpleWorkflowClient.class);
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowClientTest.java b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowClientTest.java
index cd1e4bd..13bdb3d 100644
--- a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowClientTest.java
+++ b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowClientTest.java
@@ -30,6 +30,7 @@
 import com.amazonaws.services.simpleworkflow.model.WorkflowExecutionInfo;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
diff --git a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowConsumerTest.java b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowConsumerTest.java
index a9d8865..6cef5d4 100644
--- a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowConsumerTest.java
+++ b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowConsumerTest.java
@@ -22,6 +22,7 @@
 import org.apache.camel.Predicate;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
+
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.verify;
@@ -64,4 +65,4 @@
         assertMockEndpointsSatisfied();
         verify(amazonSWClient, atLeastOnce()).pollForDecisionTask(any(PollForDecisionTaskRequest.class));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowProducerTest.java b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowProducerTest.java
index 666d4c7..eea9eb0 100644
--- a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowProducerTest.java
+++ b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowProducerTest.java
@@ -22,6 +22,7 @@
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
+
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
 
@@ -57,4 +58,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/SWFComponentConfigurationTest.java b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/SWFComponentConfigurationTest.java
index 20ccbfd..976a824 100644
--- a/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/SWFComponentConfigurationTest.java
+++ b/components/camel-aws-swf/src/test/java/org/apache/camel/component/aws/swf/SWFComponentConfigurationTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.aws.swf;
 
 import com.amazonaws.regions.Regions;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateComponent.java b/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateComponent.java
index a54bd0a..024aaf7 100644
--- a/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateComponent.java
+++ b/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateComponent.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import com.amazonaws.services.translate.AmazonTranslate;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateComponentVerifierExtension.java b/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateComponentVerifierExtension.java
index c7ed7ed..d03ba49 100644
--- a/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateComponentVerifierExtension.java
+++ b/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateComponentVerifierExtension.java
@@ -27,7 +27,6 @@
 import com.amazonaws.services.translate.AmazonTranslate;
 import com.amazonaws.services.translate.AmazonTranslateClientBuilder;
 import com.amazonaws.services.translate.model.TranslateTextRequest;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateConfiguration.java b/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateConfiguration.java
index aff98c9..b2a97bf 100644
--- a/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateConfiguration.java
+++ b/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.amazonaws.Protocol;
 import com.amazonaws.services.translate.AmazonTranslate;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateEndpoint.java b/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateEndpoint.java
index 8bc12c1..fd3cc8c 100644
--- a/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateEndpoint.java
+++ b/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateEndpoint.java
@@ -24,7 +24,6 @@
 import com.amazonaws.regions.Regions;
 import com.amazonaws.services.translate.AmazonTranslate;
 import com.amazonaws.services.translate.AmazonTranslateClientBuilder;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateProducer.java b/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateProducer.java
index 2cd33b2..4e251db 100644
--- a/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateProducer.java
+++ b/components/camel-aws-translate/src/main/java/org/apache/camel/component/aws/translate/TranslateProducer.java
@@ -20,7 +20,6 @@
 import com.amazonaws.services.translate.AmazonTranslate;
 import com.amazonaws.services.translate.model.TranslateTextRequest;
 import com.amazonaws.services.translate.model.TranslateTextResult;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/EIPTracingStrategy.java b/components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/EIPTracingStrategy.java
index b6bd99d..8efd127 100644
--- a/components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/EIPTracingStrategy.java
+++ b/components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/EIPTracingStrategy.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.aws.xray;
 
 import java.lang.invoke.MethodHandles;
+
 import com.amazonaws.xray.AWSXRay;
 import com.amazonaws.xray.entities.Subsegment;
 import org.apache.camel.CamelContext;
diff --git a/components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/TraceAnnotatedTracingStrategy.java b/components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/TraceAnnotatedTracingStrategy.java
index 9e7d497..8d31ca5 100644
--- a/components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/TraceAnnotatedTracingStrategy.java
+++ b/components/camel-aws-xray/src/main/java/org/apache/camel/component/aws/xray/TraceAnnotatedTracingStrategy.java
@@ -18,6 +18,7 @@
 
 import java.lang.annotation.Annotation;
 import java.lang.invoke.MethodHandles;
+
 import com.amazonaws.xray.AWSXRay;
 import com.amazonaws.xray.entities.Subsegment;
 import org.apache.camel.CamelContext;
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ABCRouteTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ABCRouteTest.java
index b6a3097..567b510 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ABCRouteTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ABCRouteTest.java
@@ -88,4 +88,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/BeanTracingTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/BeanTracingTest.java
index 4219e79..bb23b54 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/BeanTracingTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/BeanTracingTest.java
@@ -115,4 +115,4 @@
             exchange.getIn().setHeader("TEST", "done");
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ClientRecipientListRouteTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ClientRecipientListRouteTest.java
index 0538b32..edf6dbc 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ClientRecipientListRouteTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ClientRecipientListRouteTest.java
@@ -74,4 +74,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/EIPTracingTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/EIPTracingTest.java
index 22bc2ce..c8f0a05 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/EIPTracingTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/EIPTracingTest.java
@@ -126,4 +126,4 @@
             exchange.getIn().setHeader("TEST", "done");
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ErrorHandlingTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ErrorHandlingTest.java
index c813fc4..8605fa2 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ErrorHandlingTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ErrorHandlingTest.java
@@ -165,4 +165,4 @@
             return "ExceptionRetryProcessor";
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ErrorTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ErrorTest.java
index ebd4dee..f0d7c95 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ErrorTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/ErrorTest.java
@@ -146,4 +146,4 @@
             return "ExceptionRetryProcessor";
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/MulticastParallelRouteTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/MulticastParallelRouteTest.java
index 5bb12f0..f3323c8 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/MulticastParallelRouteTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/MulticastParallelRouteTest.java
@@ -86,4 +86,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/MulticastRouteTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/MulticastRouteTest.java
index 66f00ec..be9e66d 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/MulticastRouteTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/MulticastRouteTest.java
@@ -87,4 +87,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/Route2ConcurrentTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/Route2ConcurrentTest.java
index 61ef20b..b962826 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/Route2ConcurrentTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/Route2ConcurrentTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.aws.xray;
 
 import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.builder.NotifyBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
@@ -76,4 +77,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/RouteConcurrentTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/RouteConcurrentTest.java
index c42764a..955647f 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/RouteConcurrentTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/RouteConcurrentTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.aws.xray;
 
 import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.builder.NotifyBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
@@ -62,4 +63,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/SpringAwsXRaySimpleRouteTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/SpringAwsXRaySimpleRouteTest.java
index 1bf4da7..2ea70e3 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/SpringAwsXRaySimpleRouteTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/SpringAwsXRaySimpleRouteTest.java
@@ -74,4 +74,4 @@
 
         TestUtils.checkData(socketListener.getReceivedData(), testData);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TestUtils.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TestUtils.java
index e05c0da..348c371 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TestUtils.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TestUtils.java
@@ -172,4 +172,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TwoService2Test.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TwoService2Test.java
index 878a061..465b005 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TwoService2Test.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TwoService2Test.java
@@ -64,4 +64,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TwoServiceTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TwoServiceTest.java
index d1aeee5..029d4c3 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TwoServiceTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TwoServiceTest.java
@@ -65,4 +65,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TwoServiceWithExcludeTest.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TwoServiceWithExcludeTest.java
index be85aab..05c558d 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TwoServiceWithExcludeTest.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/TwoServiceWithExcludeTest.java
@@ -72,4 +72,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/bean/SomeBackingService.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/bean/SomeBackingService.java
index 76ba13c..4e2cb1b 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/bean/SomeBackingService.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/bean/SomeBackingService.java
@@ -20,7 +20,6 @@
 
 import com.amazonaws.xray.AWSXRay;
 import com.amazonaws.xray.entities.Entity;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
diff --git a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/bean/SomeBean.java b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/bean/SomeBean.java
index 3f2e2a0..f29b36f 100644
--- a/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/bean/SomeBean.java
+++ b/components/camel-aws-xray/src/test/java/org/apache/camel/component/aws/xray/bean/SomeBean.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import com.amazonaws.xray.AWSXRay;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
diff --git a/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceConfiguration.java b/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceConfiguration.java
index 457edfd..882f4d0 100644
--- a/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceConfiguration.java
+++ b/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceConfiguration.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.microsoft.azure.storage.blob.CloudBlob;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.azure.common.AbstractConfiguration;
 import org.apache.camel.spi.UriParam;
@@ -262,4 +261,4 @@
             throw new RuntimeCamelException(e);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceConsumer.java b/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceConsumer.java
index 8926f19..1fa97b2 100644
--- a/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceConsumer.java
+++ b/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceConsumer.java
@@ -63,4 +63,4 @@
         return (BlobServiceEndpoint) super.getEndpoint();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-azure/src/main/java/org/apache/camel/component/azure/common/AbstractConfiguration.java b/components/camel-azure/src/main/java/org/apache/camel/component/azure/common/AbstractConfiguration.java
index f3163fc..4be7429 100644
--- a/components/camel-azure/src/main/java/org/apache/camel/component/azure/common/AbstractConfiguration.java
+++ b/components/camel-azure/src/main/java/org/apache/camel/component/azure/common/AbstractConfiguration.java
@@ -48,4 +48,4 @@
     public void setCredentials(StorageCredentials credentials) {
         this.credentials = credentials;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceComponent.java b/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceComponent.java
index e47528c..3a2fea9 100644
--- a/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceComponent.java
+++ b/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceComponent.java
@@ -21,7 +21,6 @@
 
 import com.microsoft.azure.storage.StorageCredentials;
 import com.microsoft.azure.storage.queue.CloudQueue;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceConfiguration.java b/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceConfiguration.java
index 1a5e52e..eabdbb1 100644
--- a/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceConfiguration.java
+++ b/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceConfiguration.java
@@ -17,11 +17,11 @@
 package org.apache.camel.component.azure.queue;
 
 import com.microsoft.azure.storage.queue.CloudQueue;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.azure.common.AbstractConfiguration;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
+
 @UriParams
 public class QueueServiceConfiguration extends AbstractConfiguration {
 
diff --git a/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceConsumer.java b/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceConsumer.java
index 5eb1d7a..e26ca47 100644
--- a/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceConsumer.java
+++ b/components/camel-azure/src/main/java/org/apache/camel/component/azure/queue/QueueServiceConsumer.java
@@ -64,4 +64,4 @@
         return (QueueServiceEndpoint) super.getEndpoint();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-azure/src/test/java/org/apache/camel/component/azure/blob/BlobServiceAppendConsumerTest.java b/components/camel-azure/src/test/java/org/apache/camel/component/azure/blob/BlobServiceAppendConsumerTest.java
index c297836..49b9b38 100644
--- a/components/camel-azure/src/test/java/org/apache/camel/component/azure/blob/BlobServiceAppendConsumerTest.java
+++ b/components/camel-azure/src/test/java/org/apache/camel/component/azure/blob/BlobServiceAppendConsumerTest.java
@@ -88,4 +88,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-barcode/src/main/java/org/apache/camel/dataformat/barcode/BarcodeDataFormat.java b/components/camel-barcode/src/main/java/org/apache/camel/dataformat/barcode/BarcodeDataFormat.java
index d0a8dbc..07b3ad9 100644
--- a/components/camel-barcode/src/main/java/org/apache/camel/dataformat/barcode/BarcodeDataFormat.java
+++ b/components/camel-barcode/src/main/java/org/apache/camel/dataformat/barcode/BarcodeDataFormat.java
@@ -21,6 +21,7 @@
 import java.io.OutputStream;
 import java.util.EnumMap;
 import java.util.Map;
+
 import javax.imageio.ImageIO;
 
 import com.google.zxing.BarcodeFormat;
diff --git a/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeDataFormatCamelTest.java b/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeDataFormatCamelTest.java
index 2ec894b..3c130e3 100644
--- a/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeDataFormatCamelTest.java
+++ b/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeDataFormatCamelTest.java
@@ -20,7 +20,6 @@
 import java.util.concurrent.TimeUnit;
 
 import com.google.zxing.BarcodeFormat;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.spi.DataFormat;
 import org.junit.Before;
diff --git a/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeDataFormatTest.java b/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeDataFormatTest.java
index 855547b..9c4fced 100644
--- a/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeDataFormatTest.java
+++ b/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeDataFormatTest.java
@@ -21,7 +21,6 @@
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.DecodeHintType;
 import com.google.zxing.EncodeHintType;
-
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
diff --git a/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeTestBase.java b/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeTestBase.java
index 0c35312..e8bb986 100644
--- a/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeTestBase.java
+++ b/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeTestBase.java
@@ -33,7 +33,6 @@
 import com.google.zxing.Result;
 import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
 import com.google.zxing.common.HybridBinarizer;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -41,7 +40,6 @@
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 
-
 public class BarcodeTestBase extends CamelTestSupport {
 
     protected static final String MSG = "This is a testmessage!";
diff --git a/components/camel-base64/src/test/java/org/apache/camel/dataformat/base64/SpringBase64DataFormatDefaultsTest.java b/components/camel-base64/src/test/java/org/apache/camel/dataformat/base64/SpringBase64DataFormatDefaultsTest.java
index 26c5ee1..a296c6f 100644
--- a/components/camel-base64/src/test/java/org/apache/camel/dataformat/base64/SpringBase64DataFormatDefaultsTest.java
+++ b/components/camel-base64/src/test/java/org/apache/camel/dataformat/base64/SpringBase64DataFormatDefaultsTest.java
@@ -16,11 +16,10 @@
  */
 package org.apache.camel.dataformat.base64;
 
-
-
 import org.junit.Test;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
+
 import static org.apache.camel.dataformat.base64.Base64TestConstants.DECODED;
 
 public class SpringBase64DataFormatDefaultsTest extends SpringBase64DataFormatTestBase {
diff --git a/components/camel-base64/src/test/java/org/apache/camel/dataformat/base64/SpringBase64DataFormatLineEndingsTest.java b/components/camel-base64/src/test/java/org/apache/camel/dataformat/base64/SpringBase64DataFormatLineEndingsTest.java
index b096cb2..4c083ae 100644
--- a/components/camel-base64/src/test/java/org/apache/camel/dataformat/base64/SpringBase64DataFormatLineEndingsTest.java
+++ b/components/camel-base64/src/test/java/org/apache/camel/dataformat/base64/SpringBase64DataFormatLineEndingsTest.java
@@ -16,11 +16,10 @@
  */
 package org.apache.camel.dataformat.base64;
 
-
-
 import org.junit.Test;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
+
 import static org.apache.camel.dataformat.base64.Base64TestConstants.DECODED;
 
 public class SpringBase64DataFormatLineEndingsTest extends SpringBase64DataFormatTestBase {
diff --git a/components/camel-base64/src/test/java/org/apache/camel/dataformat/base64/SpringBase64DataFormatLineLengthTest.java b/components/camel-base64/src/test/java/org/apache/camel/dataformat/base64/SpringBase64DataFormatLineLengthTest.java
index 25cd3b5..188f733 100644
--- a/components/camel-base64/src/test/java/org/apache/camel/dataformat/base64/SpringBase64DataFormatLineLengthTest.java
+++ b/components/camel-base64/src/test/java/org/apache/camel/dataformat/base64/SpringBase64DataFormatLineLengthTest.java
@@ -16,11 +16,10 @@
  */
 package org.apache.camel.dataformat.base64;
 
-
-
 import org.junit.Test;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
+
 import static org.apache.camel.dataformat.base64.Base64TestConstants.DECODED;
 
 public class SpringBase64DataFormatLineLengthTest extends SpringBase64DataFormatTestBase {
diff --git a/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/BeanValidatorComponent.java b/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/BeanValidatorComponent.java
index ad4792c..8cf5137 100644
--- a/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/BeanValidatorComponent.java
+++ b/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/BeanValidatorComponent.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.bean.validator;
 
 import java.util.Map;
+
 import javax.validation.ConstraintValidatorFactory;
 import javax.validation.MessageInterpolator;
 import javax.validation.TraversableResolver;
@@ -118,4 +119,4 @@
         this.constraintValidatorFactory = constraintValidatorFactory;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/HibernateValidationProviderResolver.java b/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/HibernateValidationProviderResolver.java
index 1b42fe9..81bbd89 100644
--- a/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/HibernateValidationProviderResolver.java
+++ b/components/camel-bean-validator/src/main/java/org/apache/camel/component/bean/validator/HibernateValidationProviderResolver.java
@@ -18,12 +18,12 @@
 
 import java.util.List;
 
-import static java.util.Collections.singletonList;
-
 import javax.validation.ValidationProviderResolver;
 
 import org.hibernate.validator.HibernateValidator;
 
+import static java.util.Collections.singletonList;
+
 /**
  * OSGi-friendly implementation of {@code javax.validation.ValidationProviderResolver} returning
  * {@code org.hibernate.validator.HibernateValidator} instance.
@@ -35,4 +35,4 @@
         return singletonList(new HibernateValidator());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-bean-validator/src/test/java/org/apache/camel/component/bean/validator/CustomValidationProviderResolverTest.java b/components/camel-bean-validator/src/test/java/org/apache/camel/component/bean/validator/CustomValidationProviderResolverTest.java
index 782792a..08bd77e 100644
--- a/components/camel-bean-validator/src/test/java/org/apache/camel/component/bean/validator/CustomValidationProviderResolverTest.java
+++ b/components/camel-bean-validator/src/test/java/org/apache/camel/component/bean/validator/CustomValidationProviderResolverTest.java
@@ -18,8 +18,6 @@
 
 import java.util.List;
 
-import static java.util.Arrays.asList;
-
 import javax.validation.ValidationProviderResolver;
 import javax.validation.spi.ValidationProvider;
 
@@ -29,6 +27,7 @@
 import org.hibernate.validator.HibernateValidator;
 import org.junit.Test;
 
+import static java.util.Arrays.asList;
 import static org.mockito.BDDMockito.given;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.mock;
diff --git a/components/camel-beanio/src/test/java/org/apache/camel/dataformat/beanio/BeanIODataFormatComplexTest.java b/components/camel-beanio/src/test/java/org/apache/camel/dataformat/beanio/BeanIODataFormatComplexTest.java
index ecb286b..bf9c6f8 100644
--- a/components/camel-beanio/src/test/java/org/apache/camel/dataformat/beanio/BeanIODataFormatComplexTest.java
+++ b/components/camel-beanio/src/test/java/org/apache/camel/dataformat/beanio/BeanIODataFormatComplexTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.beanio;
+
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
diff --git a/components/camel-beanstalk/src/test/java/org/apache/camel/component/beanstalk/ConsumerToProducerHeadersTest.java b/components/camel-beanstalk/src/test/java/org/apache/camel/component/beanstalk/ConsumerToProducerHeadersTest.java
index 11ba9c5..509f7dd 100644
--- a/components/camel-beanstalk/src/test/java/org/apache/camel/component/beanstalk/ConsumerToProducerHeadersTest.java
+++ b/components/camel-beanstalk/src/test/java/org/apache/camel/component/beanstalk/ConsumerToProducerHeadersTest.java
@@ -18,13 +18,12 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import com.surftools.BeanstalkClient.Job;
 
+import com.surftools.BeanstalkClient.Job;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-
 import org.junit.Test;
 
 import static org.mockito.ArgumentMatchers.anyInt;
diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/FormatFactory.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/FormatFactory.java
index 753bd7f..92610cd 100644
--- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/FormatFactory.java
+++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/FormatFactory.java
@@ -16,10 +16,8 @@
  */
 package org.apache.camel.dataformat.bindy;
 
-
 import org.apache.camel.dataformat.bindy.format.factories.FactoryRegistry;
 
-
 /**
  * Factory to return {@link Format} classes for a given type.
  */
diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/BindyConverter.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/BindyConverter.java
index 950271f..6fc033a 100644
--- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/BindyConverter.java
+++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/BindyConverter.java
@@ -22,7 +22,6 @@
 
 import org.apache.camel.dataformat.bindy.Format;
 
-
 /**
  * An annotation used to identify which converter class will be used to convert
  * the String field to the attribute's data type.
diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/DataField.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/DataField.java
index 2efc563..c800863 100644
--- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/DataField.java
+++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/DataField.java
@@ -144,14 +144,14 @@
      * e.g : Number = 123456.789, Precision = 2, Rounding =  CEILING
      * Result : 123456.79
      */
-     String rounding() default "CEILING";
+    String rounding() default "CEILING";
 
-     /**
-      * Method name to call to apply such customization
-      * on DataField. This must be the method on the datafield
-      * itself or you must provide static fully qualified name of
-      * the class's method e.g: see unit test 
-      * org.apache.camel.dataformat.bindy.csv.BindySimpleCsvFunctionWithExternalMethodTest.replaceToBar
-      */
-     String method() default ""; 
+    /**
+     * Method name to call to apply such customization
+     * on DataField. This must be the method on the datafield
+     * itself or you must provide static fully qualified name of
+     * the class's method e.g: see unit test 
+     * org.apache.camel.dataformat.bindy.csv.BindySimpleCsvFunctionWithExternalMethodTest.replaceToBar
+     */
+    String method() default ""; 
 }
diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/FormatFactories.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/FormatFactories.java
index b65ada7..5abe8be 100644
--- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/FormatFactories.java
+++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/annotation/FormatFactories.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.dataformat.bindy.annotation;
 
-
 import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
index cf444a1..f7860df 100644
--- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
+++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.dataformat.bindy.csv;
 
-
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyCsvBigFileUnmarshallTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyCsvBigFileUnmarshallTest.java
index 4a0d20f..e0fcd9e 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyCsvBigFileUnmarshallTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyCsvBigFileUnmarshallTest.java
@@ -28,7 +28,6 @@
 
 import static org.junit.Assert.assertEquals;
 
-
 @ContextConfiguration
 public class BindyCsvBigFileUnmarshallTest extends AbstractJUnit4SpringContextTests {
 
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyCsvSkipFieldTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyCsvSkipFieldTest.java
index e1e0dd5..f411295 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyCsvSkipFieldTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyCsvSkipFieldTest.java
@@ -30,7 +30,6 @@
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 
-
 @ContextConfiguration
 public class BindyCsvSkipFieldTest  extends AbstractJUnit4SpringContextTests {
 
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyMarshalOneToManyWithHeadersTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyMarshalOneToManyWithHeadersTest.java
index d977045..549a371 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyMarshalOneToManyWithHeadersTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyMarshalOneToManyWithHeadersTest.java
@@ -26,7 +26,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.dataformat.bindy.model.simple.linkonetomany.Order;
 import org.apache.camel.dataformat.bindy.model.simple.linkonetomany.OrderItem;
-
 import org.junit.Test;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyPojoSimpleCsvMarshallTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyPojoSimpleCsvMarshallTest.java
index 052ec4b..dbe91c9 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyPojoSimpleCsvMarshallTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyPojoSimpleCsvMarshallTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.dataformat.bindy.model.simple.oneclass.Order;
-
 import org.junit.Test;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
@@ -107,4 +106,4 @@
 
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvBooleanUnmarshallTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvBooleanUnmarshallTest.java
index de48209..f0798b5 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvBooleanUnmarshallTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvBooleanUnmarshallTest.java
@@ -24,7 +24,6 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.dataformat.bindy.model.simple.bool.BooleanExample;
-
 import org.junit.Test;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvMarshallPositionModifiedTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvMarshallPositionModifiedTest.java
index fca2d3d..7dbcaff 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvMarshallPositionModifiedTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvMarshallPositionModifiedTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.dataformat.bindy.CommonBindyTest;
 import org.apache.camel.dataformat.bindy.model.simple.oneclassdifferentposition.Order;
-
 import org.junit.Test;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvMarshallTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvMarshallTest.java
index 0f50bdc..777509f 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvMarshallTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvMarshallTest.java
@@ -31,7 +31,6 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.dataformat.bindy.model.simple.oneclass.Order;
-
 import org.junit.Test;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvRemoveWhitespaceUnmarshallTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvRemoveWhitespaceUnmarshallTest.java
index deedf6b..7e03b84 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvRemoveWhitespaceUnmarshallTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvRemoveWhitespaceUnmarshallTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.dataformat.bindy.csv;
 
-
 import java.util.List;
 
 import org.apache.camel.EndpointInject;
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvUnmarshallBadIntegerTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvUnmarshallBadIntegerTest.java
index fa0b44e..77ee164 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvUnmarshallBadIntegerTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindySimpleCsvUnmarshallBadIntegerTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.dataformat.bindy.csv;
 
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Produce;
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindySimpleKeyValuePairFixTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindySimpleKeyValuePairFixTest.java
index aeca416..7280245 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindySimpleKeyValuePairFixTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindySimpleKeyValuePairFixTest.java
@@ -34,7 +34,6 @@
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 
-
 @ContextConfiguration
 public class BindySimpleKeyValuePairFixTest extends AbstractJUnit4SpringContextTests {
     private static final String[] FIX_REQUESTS = new String[] {
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindySimpleKeyValuePairWithoutSectionMarshallDslTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindySimpleKeyValuePairWithoutSectionMarshallDslTest.java
index 609a5fc..f698696 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindySimpleKeyValuePairWithoutSectionMarshallDslTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindySimpleKeyValuePairWithoutSectionMarshallDslTest.java
@@ -29,7 +29,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.dataformat.bindy.kvp.BindyKeyValuePairDataFormat;
 import org.apache.camel.dataformat.bindy.model.fix.withoutsection.Order;
-
 import org.junit.Test;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/converter/BindyConverterTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/converter/BindyConverterTest.java
index 835e275..4c6c3f6 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/converter/BindyConverterTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/converter/BindyConverterTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.dataformat.bindy.fixed.converter;
 
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Produce;
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/dynamic/BindyFixedLengthDynamicFieldTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/dynamic/BindyFixedLengthDynamicFieldTest.java
index bdb3f96..61c29e1 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/dynamic/BindyFixedLengthDynamicFieldTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/dynamic/BindyFixedLengthDynamicFieldTest.java
@@ -32,7 +32,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 /**
  * This test validates the marshalling / unmarshalling of a fixed-length data field for which the length of the
  * field is defined by the value of another field in the record.
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/implied/BindyImpliedTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/implied/BindyImpliedTest.java
index c1ec726..1663648 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/implied/BindyImpliedTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/implied/BindyImpliedTest.java
@@ -34,8 +34,6 @@
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 
-
-
 @ContextConfiguration
 public class BindyImpliedTest extends AbstractJUnit4SpringContextTests {
 
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/link/BindySimpleFixedLengthWithLinkTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/link/BindySimpleFixedLengthWithLinkTest.java
index 4cfa0b6..10350ea 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/link/BindySimpleFixedLengthWithLinkTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/link/BindySimpleFixedLengthWithLinkTest.java
@@ -178,4 +178,4 @@
 
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/marshall/simple/BindySimpleFixedLengthMarshallTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/marshall/simple/BindySimpleFixedLengthMarshallTest.java
index 8ae44c6..ac033a1 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/marshall/simple/BindySimpleFixedLengthMarshallTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/marshall/simple/BindySimpleFixedLengthMarshallTest.java
@@ -34,7 +34,6 @@
 import org.apache.camel.dataformat.bindy.annotation.FixedLengthRecord;
 import org.apache.camel.model.dataformat.BindyDataFormat;
 import org.apache.camel.model.dataformat.BindyType;
-
 import org.junit.Test;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/ordinal/BindySimpleFixedLengthOrdinalPosTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/ordinal/BindySimpleFixedLengthOrdinalPosTest.java
index 0c13370..6a68c22 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/ordinal/BindySimpleFixedLengthOrdinalPosTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/ordinal/BindySimpleFixedLengthOrdinalPosTest.java
@@ -32,7 +32,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 /**
  * This test validates that fixed length records can be defined and processed using ordinal 'pos' values, and 
  * lengths declared for each field.  Strict position calculations in FixedLength records is not necessary.  The
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/skipfields/BindySimpleSkipFieldsTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/skipfields/BindySimpleSkipFieldsTest.java
index aefe609..aa6e562 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/skipfields/BindySimpleSkipFieldsTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/skipfields/BindySimpleSkipFieldsTest.java
@@ -29,7 +29,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 /**
  * This test validates that bindy can skip values in the fixed-length record when absolute pos
  * values are provided
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/format/factories/BigDecimalFormatFactoryTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/format/factories/BigDecimalFormatFactoryTest.java
index 0e8f0da..230c46a 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/format/factories/BigDecimalFormatFactoryTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/format/factories/BigDecimalFormatFactoryTest.java
@@ -46,4 +46,4 @@
 
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/format/factories/DefaultFactoryRegistryTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/format/factories/DefaultFactoryRegistryTest.java
index 89897da..53d0ada 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/format/factories/DefaultFactoryRegistryTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/format/factories/DefaultFactoryRegistryTest.java
@@ -33,4 +33,4 @@
         reg.unregister(StringFormatFactory.class);        
         reg.findForFormattingOptions(formattingOptions);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/number/rounding/BindyBigDecimalRoundingUnmarshallTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/number/rounding/BindyBigDecimalRoundingUnmarshallTest.java
index 4af44a7..29736df 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/number/rounding/BindyBigDecimalRoundingUnmarshallTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/number/rounding/BindyBigDecimalRoundingUnmarshallTest.java
@@ -31,7 +31,6 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-
 public class BindyBigDecimalRoundingUnmarshallTest extends CamelTestSupport {
 
     private static final String URI_MOCK_RESULT = "mock:result";
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelConsumerTemplateFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelConsumerTemplateFactoryBean.java
index 9ae0231..2f8948a 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelConsumerTemplateFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelConsumerTemplateFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -61,4 +62,4 @@
         return null;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
index cc3092c..113721f 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
@@ -20,6 +20,7 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.Properties;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelEndpointFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelEndpointFactoryBean.java
index 0c36e41..d9710bd 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelEndpointFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelEndpointFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelErrorHandlerFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelErrorHandlerFactoryBean.java
index 3a9cd7a..fd6e7de 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelErrorHandlerFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelErrorHandlerFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelFluentProducerTemplateFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelFluentProducerTemplateFactoryBean.java
index 1c8e6818..74a6f9d 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelFluentProducerTemplateFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelFluentProducerTemplateFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProducerTemplateFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProducerTemplateFactoryBean.java
index f568407..0e37fc9 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProducerTemplateFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProducerTemplateFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProxyFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProxyFactoryBean.java
index 7d59e73..cd42c74d 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProxyFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelProxyFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRedeliveryPolicyFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRedeliveryPolicyFactoryBean.java
index b401067..39aa341 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRedeliveryPolicyFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRedeliveryPolicyFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRestContextFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRestContextFactoryBean.java
index 31bdfeb..452e715 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRestContextFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRestContextFactoryBean.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRouteContextFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRouteContextFactoryBean.java
index 1803f89..673de7b 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRouteContextFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelRouteContextFactoryBean.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelThreadPoolFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelThreadPoolFactoryBean.java
index defaf7b..f64efa2 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelThreadPoolFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelThreadPoolFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -60,4 +61,4 @@
         return null;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
index 38ed198..c2e7076 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/handler/CamelNamespaceHandler.java
@@ -29,6 +29,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Callable;
+
 import javax.xml.bind.Binder;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/KeyManagersParametersFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/KeyManagersParametersFactoryBean.java
index 27e1468..5df575b 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/KeyManagersParametersFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/KeyManagersParametersFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.util.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/KeyStoreParametersFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/KeyStoreParametersFactoryBean.java
index 355e234..41fb3db 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/KeyStoreParametersFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/KeyStoreParametersFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.util.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SSLContextClientParametersFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SSLContextClientParametersFactoryBean.java
index bb13b95..2d1deb5 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SSLContextClientParametersFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SSLContextClientParametersFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.util.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SSLContextParametersFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SSLContextParametersFactoryBean.java
index 5a8f53d..e02048b 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SSLContextParametersFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SSLContextParametersFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.util.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SSLContextServerParametersFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SSLContextServerParametersFactoryBean.java
index d0681d6..e544af8 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SSLContextServerParametersFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SSLContextServerParametersFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.util.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SecureRandomParametersFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SecureRandomParametersFactoryBean.java
index b4d4f28..a43515c 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SecureRandomParametersFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/SecureRandomParametersFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.util.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/TrustManagersParametersFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/TrustManagersParametersFactoryBean.java
index 3936d4e..f463988 100644
--- a/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/TrustManagersParametersFactoryBean.java
+++ b/components/camel-blueprint/src/main/java/org/apache/camel/util/blueprint/TrustManagersParametersFactoryBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.util.blueprint;
 
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/api/BonitaAPI.java b/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/api/BonitaAPI.java
index 34983b0..2003a109 100644
--- a/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/api/BonitaAPI.java
+++ b/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/api/BonitaAPI.java
@@ -24,15 +24,13 @@
 import javax.ws.rs.core.GenericType;
 import javax.ws.rs.core.MediaType;
 
-import static javax.ws.rs.client.Entity.entity;
-
 import org.apache.camel.component.bonita.api.model.CaseCreationResponse;
 import org.apache.camel.component.bonita.api.model.ProcessDefinitionResponse;
 import org.apache.camel.component.bonita.api.util.BonitaAPIConfig;
 import org.apache.camel.component.bonita.api.util.BonitaAPIUtil;
 import org.apache.camel.util.ObjectHelper;
 
-
+import static javax.ws.rs.client.Entity.entity;
 
 public class BonitaAPI {
 
diff --git a/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/api/BonitaAPIBuilder.java b/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/api/BonitaAPIBuilder.java
index 462d091..311d77c 100644
--- a/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/api/BonitaAPIBuilder.java
+++ b/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/api/BonitaAPIBuilder.java
@@ -21,7 +21,6 @@
 import javax.ws.rs.client.WebTarget;
 
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
-
 import org.apache.camel.component.bonita.api.filter.BonitaAuthFilter;
 import org.apache.camel.component.bonita.api.util.BonitaAPIConfig;
 
diff --git a/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/api/util/BonitaAPIUtil.java b/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/api/util/BonitaAPIUtil.java
index af8ab3b..db901d5 100644
--- a/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/api/util/BonitaAPIUtil.java
+++ b/components/camel-bonita/src/main/java/org/apache/camel/component/bonita/api/util/BonitaAPIUtil.java
@@ -30,10 +30,7 @@
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 
-import static javax.ws.rs.client.Entity.entity;
-
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
-
 import org.apache.camel.component.bonita.api.filter.BonitaAuthFilter;
 import org.apache.camel.component.bonita.api.filter.JsonClientFilter;
 import org.apache.camel.component.bonita.api.model.FileInput;
@@ -43,6 +40,8 @@
 import org.apache.cxf.jaxrs.ext.multipart.AttachmentBuilder;
 import org.apache.cxf.jaxrs.ext.multipart.ContentDisposition;
 
+import static javax.ws.rs.client.Entity.entity;
+
 public class BonitaAPIUtil {
 
     private static BonitaAPIUtil instance;
diff --git a/components/camel-bonita/src/test/java/org/apache/camel/component/bonita/api/BonitaAuthFilterConnectionTest.java b/components/camel-bonita/src/test/java/org/apache/camel/component/bonita/api/BonitaAuthFilterConnectionTest.java
index c9b4e5a..dc26992 100644
--- a/components/camel-bonita/src/test/java/org/apache/camel/component/bonita/api/BonitaAuthFilterConnectionTest.java
+++ b/components/camel-bonita/src/test/java/org/apache/camel/component/bonita/api/BonitaAuthFilterConnectionTest.java
@@ -23,7 +23,6 @@
 import javax.ws.rs.core.MultivaluedHashMap;
 
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
-
 import org.apache.camel.component.bonita.api.filter.BonitaAuthFilter;
 import org.apache.camel.component.bonita.api.util.BonitaAPIConfig;
 import org.junit.Before;
@@ -37,7 +36,6 @@
 import static com.github.tomakehurst.wiremock.client.WireMock.post;
 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
-
 import static org.junit.Assert.assertEquals;
 
 public class BonitaAuthFilterConnectionTest {
diff --git a/components/camel-bonita/src/test/java/org/apache/camel/component/bonita/api/util/BonitaAPIConfigTest.java b/components/camel-bonita/src/test/java/org/apache/camel/component/bonita/api/util/BonitaAPIConfigTest.java
index a557f75..6e82926 100644
--- a/components/camel-bonita/src/test/java/org/apache/camel/component/bonita/api/util/BonitaAPIConfigTest.java
+++ b/components/camel-bonita/src/test/java/org/apache/camel/component/bonita/api/util/BonitaAPIConfigTest.java
@@ -16,12 +16,10 @@
  */
 package org.apache.camel.component.bonita.api.util;
 
-
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
-
 public class BonitaAPIConfigTest {
 
     @Test
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxCollaborationsManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxCollaborationsManager.java
index e07460b..d076831 100644
--- a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxCollaborationsManager.java
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxCollaborationsManager.java
@@ -23,7 +23,6 @@
 import com.box.sdk.BoxCollaboration;
 import com.box.sdk.BoxCollaborator;
 import com.box.sdk.BoxFolder;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxCommentsManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxCommentsManager.java
index 553b985..a684508 100644
--- a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxCommentsManager.java
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxCommentsManager.java
@@ -22,7 +22,6 @@
 import com.box.sdk.BoxAPIException;
 import com.box.sdk.BoxComment;
 import com.box.sdk.BoxFile;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxEventLogsManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxEventLogsManager.java
index 236aded..9aa4025 100644
--- a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxEventLogsManager.java
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxEventLogsManager.java
@@ -25,7 +25,6 @@
 import com.box.sdk.BoxAPIException;
 import com.box.sdk.BoxEvent;
 import com.box.sdk.EventLog;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxEventsManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxEventsManager.java
index 84f19f6..b3ff85d 100644
--- a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxEventsManager.java
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxEventsManager.java
@@ -20,7 +20,6 @@
 import com.box.sdk.BoxAPIException;
 import com.box.sdk.EventListener;
 import com.box.sdk.EventStream;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxFoldersManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxFoldersManager.java
index cf99f8b..e916cfa 100644
--- a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxFoldersManager.java
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxFoldersManager.java
@@ -27,7 +27,6 @@
 import com.box.sdk.BoxFolder;
 import com.box.sdk.BoxItem;
 import com.box.sdk.BoxSharedLink;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxGroupsManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxGroupsManager.java
index dd983d9..c8d3b70 100644
--- a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxGroupsManager.java
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxGroupsManager.java
@@ -24,7 +24,6 @@
 import com.box.sdk.BoxGroup;
 import com.box.sdk.BoxGroupMembership;
 import com.box.sdk.BoxUser;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxSearchManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxSearchManager.java
index 944f2e3..4830f0b 100644
--- a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxSearchManager.java
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxSearchManager.java
@@ -23,7 +23,6 @@
 import com.box.sdk.BoxAPIConnection;
 import com.box.sdk.BoxAPIException;
 import com.box.sdk.BoxItem;
-
 import com.box.sdk.BoxSearch;
 import com.box.sdk.BoxSearchParameters;
 import com.box.sdk.PartialCollection;
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxTasksManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxTasksManager.java
index aa405fa..0d86e34 100644
--- a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxTasksManager.java
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxTasksManager.java
@@ -25,7 +25,6 @@
 import com.box.sdk.BoxTask;
 import com.box.sdk.BoxTaskAssignment;
 import com.box.sdk.BoxUser;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxUsersManager.java b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxUsersManager.java
index 0125822..6c3ff00 100644
--- a/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxUsersManager.java
+++ b/components/camel-box/camel-box-api/src/main/java/org/apache/camel/component/box/api/BoxUsersManager.java
@@ -26,7 +26,6 @@
 import com.box.sdk.BoxUser;
 import com.box.sdk.CreateUserParams;
 import com.box.sdk.EmailAlias;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/BoxConfiguration.java b/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/BoxConfiguration.java
index 4347cff..2bf73a5 100644
--- a/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/BoxConfiguration.java
+++ b/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/BoxConfiguration.java
@@ -20,7 +20,6 @@
 
 import com.box.sdk.EncryptionAlgorithm;
 import com.box.sdk.IAccessTokenCache;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.box.internal.BoxApiName;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/BoxConsumer.java b/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/BoxConsumer.java
index 1fee59e..2732e27 100644
--- a/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/BoxConsumer.java
+++ b/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/BoxConsumer.java
@@ -23,7 +23,6 @@
 import com.box.sdk.BoxAPIConnection;
 import com.box.sdk.BoxEvent;
 import com.box.sdk.EventListener;
-
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.box.api.BoxEventsManager;
diff --git a/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/BoxProducer.java b/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/BoxProducer.java
index 9402819..a6b56c9 100644
--- a/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/BoxProducer.java
+++ b/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/BoxProducer.java
@@ -18,7 +18,6 @@
 
 import org.apache.camel.component.box.internal.BoxApiName;
 import org.apache.camel.component.box.internal.BoxPropertiesHelper;
-
 import org.apache.camel.support.component.AbstractApiProducer;
 
 /**
diff --git a/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/internal/BoxConnectionHelper.java b/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/internal/BoxConnectionHelper.java
index 52c477e..f95813a 100644
--- a/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/internal/BoxConnectionHelper.java
+++ b/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/internal/BoxConnectionHelper.java
@@ -34,7 +34,6 @@
 import com.box.sdk.IAccessTokenCache;
 import com.box.sdk.InMemoryLRUAccessTokenCache;
 import com.box.sdk.JWTEncryptionPreferences;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.box.BoxConfiguration;
 import org.apache.http.HttpHost;
diff --git a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxCollaborationsManagerIntegrationTest.java b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxCollaborationsManagerIntegrationTest.java
index eb21b72..bdce999 100644
--- a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxCollaborationsManagerIntegrationTest.java
+++ b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxCollaborationsManagerIntegrationTest.java
@@ -26,7 +26,6 @@
 import com.box.sdk.BoxFolder;
 import com.box.sdk.BoxUser;
 import com.box.sdk.CreateUserParams;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.box.api.BoxCollaborationsManager;
 import org.apache.camel.component.box.internal.BoxApiCollection;
diff --git a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxCommentsManagerIntegrationTest.java b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxCommentsManagerIntegrationTest.java
index 7998480..67e8942 100644
--- a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxCommentsManagerIntegrationTest.java
+++ b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxCommentsManagerIntegrationTest.java
@@ -25,7 +25,6 @@
 import com.box.sdk.BoxAPIConnection;
 import com.box.sdk.BoxComment;
 import com.box.sdk.BoxFolder;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.box.api.BoxCommentsManager;
 import org.apache.camel.component.box.internal.BoxApiCollection;
diff --git a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxEventsManagerIntegrationTest.java b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxEventsManagerIntegrationTest.java
index ca88aef..cd05555 100644
--- a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxEventsManagerIntegrationTest.java
+++ b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxEventsManagerIntegrationTest.java
@@ -23,7 +23,6 @@
 
 import com.box.sdk.BoxAPIConnection;
 import com.box.sdk.BoxFolder;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.box.api.BoxEventsManager;
diff --git a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxFilesManagerIntegrationTest.java b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxFilesManagerIntegrationTest.java
index f371fb0..5293a10 100644
--- a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxFilesManagerIntegrationTest.java
+++ b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxFilesManagerIntegrationTest.java
@@ -31,7 +31,6 @@
 import com.box.sdk.BoxItem;
 import com.box.sdk.BoxSharedLink;
 import com.box.sdk.Metadata;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.box.api.BoxFilesManager;
 import org.apache.camel.component.box.internal.BoxApiCollection;
diff --git a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxFoldersManagerIntegrationTest.java b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxFoldersManagerIntegrationTest.java
index c5f0383..2cb03bc 100644
--- a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxFoldersManagerIntegrationTest.java
+++ b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxFoldersManagerIntegrationTest.java
@@ -24,7 +24,6 @@
 import com.box.sdk.BoxFolder;
 import com.box.sdk.BoxItem;
 import com.box.sdk.BoxSharedLink;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.box.api.BoxFoldersManager;
 import org.apache.camel.component.box.internal.BoxApiCollection;
diff --git a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxTasksManagerIntegrationTest.java b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxTasksManagerIntegrationTest.java
index 61026ac..64b5bdb 100644
--- a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxTasksManagerIntegrationTest.java
+++ b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxTasksManagerIntegrationTest.java
@@ -29,7 +29,6 @@
 import com.box.sdk.BoxTask.Action;
 import com.box.sdk.BoxTaskAssignment;
 import com.box.sdk.BoxUser;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.box.api.BoxTasksManager;
 import org.apache.camel.component.box.internal.BoxApiCollection;
diff --git a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxUsersManagerIntegrationTest.java b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxUsersManagerIntegrationTest.java
index 157b702..82727f4 100644
--- a/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxUsersManagerIntegrationTest.java
+++ b/components/camel-box/camel-box-component/src/test/java/org/apache/camel/component/box/BoxUsersManagerIntegrationTest.java
@@ -25,7 +25,6 @@
 import com.box.sdk.BoxUser;
 import com.box.sdk.CreateUserParams;
 import com.box.sdk.EmailAlias;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.box.api.BoxUsersManager;
 import org.apache.camel.component.box.internal.BoxApiCollection;
diff --git a/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/AddressGatewayIntegrationTest.java b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/AddressGatewayIntegrationTest.java
index 9eb6600..2d54a86 100644
--- a/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/AddressGatewayIntegrationTest.java
+++ b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/AddressGatewayIntegrationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.braintree;
+
 import java.util.LinkedList;
 import java.util.List;
 import java.util.UUID;
@@ -33,7 +34,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class AddressGatewayIntegrationTest extends AbstractBraintreeTestSupport {
     private static final Logger LOG = LoggerFactory.getLogger(AddressGatewayIntegrationTest.class);
     private static final String PATH_PREFIX = BraintreeApiCollection.getCollection().getApiName(AddressGatewayApiMethod.class).getName();
diff --git a/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/ClientTokenGatewayIntegrationTest.java b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/ClientTokenGatewayIntegrationTest.java
index a9f8fbb..3526252 100644
--- a/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/ClientTokenGatewayIntegrationTest.java
+++ b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/ClientTokenGatewayIntegrationTest.java
@@ -21,7 +21,6 @@
 import org.apache.camel.util.ObjectHelper;
 import org.junit.Test;
 
-
 public class ClientTokenGatewayIntegrationTest extends AbstractBraintreeTestSupport {
     private static final String PATH_PREFIX = getApiNameAsString(ClientTokenGatewayApiMethod.class);
 
diff --git a/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/CustomerGatewayIntegrationTest.java b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/CustomerGatewayIntegrationTest.java
index c7af158..9e81c1b 100644
--- a/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/CustomerGatewayIntegrationTest.java
+++ b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/CustomerGatewayIntegrationTest.java
@@ -35,7 +35,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class CustomerGatewayIntegrationTest extends AbstractBraintreeTestSupport {
 
     private static final String PATH_PREFIX = getApiNameAsString(CustomerGatewayApiMethod.class);
diff --git a/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/PaymentMethodGatewayIntegrationTest.java b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/PaymentMethodGatewayIntegrationTest.java
index 2ec8ca0..ee8012b 100644
--- a/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/PaymentMethodGatewayIntegrationTest.java
+++ b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/PaymentMethodGatewayIntegrationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.braintree;
+
 import java.util.LinkedList;
 import java.util.List;
 import java.util.UUID;
diff --git a/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/TransactionGatewayIntegrationTest.java b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/TransactionGatewayIntegrationTest.java
index 7f96114..1b8aed5 100644
--- a/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/TransactionGatewayIntegrationTest.java
+++ b/components/camel-braintree/src/test/java/org/apache/camel/component/braintree/TransactionGatewayIntegrationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.braintree;
+
 import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.LinkedList;
diff --git a/components/camel-caffeine/src/main/java/org/apache/camel/component/caffeine/processor/idempotent/CaffeineIdempotentRepository.java b/components/camel-caffeine/src/main/java/org/apache/camel/component/caffeine/processor/idempotent/CaffeineIdempotentRepository.java
index 736ce05..77adb4c 100644
--- a/components/camel-caffeine/src/main/java/org/apache/camel/component/caffeine/processor/idempotent/CaffeineIdempotentRepository.java
+++ b/components/camel-caffeine/src/main/java/org/apache/camel/component/caffeine/processor/idempotent/CaffeineIdempotentRepository.java
@@ -93,4 +93,4 @@
     @Override
     protected void doStop() throws Exception {
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/cache/CaffeineCacheFromScratchStatsCounterTest.java b/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/cache/CaffeineCacheFromScratchStatsCounterTest.java
index 3133322..2eb7d2a 100644
--- a/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/cache/CaffeineCacheFromScratchStatsCounterTest.java
+++ b/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/cache/CaffeineCacheFromScratchStatsCounterTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.caffeine.cache;
 
 import com.codahale.metrics.MetricRegistry;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.caffeine.CaffeineConstants;
diff --git a/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/cache/CaffeineCacheTestSupport.java b/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/cache/CaffeineCacheTestSupport.java
index e2c2aa4..e0559aa 100644
--- a/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/cache/CaffeineCacheTestSupport.java
+++ b/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/cache/CaffeineCacheTestSupport.java
@@ -29,7 +29,6 @@
 import com.github.benmanes.caffeine.cache.Caffeine;
 import com.github.benmanes.caffeine.cache.RemovalCause;
 import com.github.benmanes.caffeine.cache.RemovalListener;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.slf4j.Logger;
diff --git a/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/loadcache/CaffeineLoadCacheTestSupport.java b/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/loadcache/CaffeineLoadCacheTestSupport.java
index 58a783b..aab2a45 100644
--- a/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/loadcache/CaffeineLoadCacheTestSupport.java
+++ b/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/loadcache/CaffeineLoadCacheTestSupport.java
@@ -19,7 +19,6 @@
 import com.github.benmanes.caffeine.cache.Cache;
 import com.github.benmanes.caffeine.cache.CacheLoader;
 import com.github.benmanes.caffeine.cache.Caffeine;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.test.junit4.CamelTestSupport;
 
diff --git a/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/processor/aggregate/CaffeineAggregationRepositoryOperationTest.java b/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/processor/aggregate/CaffeineAggregationRepositoryOperationTest.java
index dde603f..debea95 100644
--- a/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/processor/aggregate/CaffeineAggregationRepositoryOperationTest.java
+++ b/components/camel-caffeine/src/test/java/org/apache/camel/component/caffeine/processor/aggregate/CaffeineAggregationRepositoryOperationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.caffeine.processor.aggregate;
+
 import java.util.Set;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-cassandraql/src/main/java/org/apache/camel/processor/aggregate/cassandra/NamedCassandraAggregationRepository.java b/components/camel-cassandraql/src/main/java/org/apache/camel/processor/aggregate/cassandra/NamedCassandraAggregationRepository.java
index 3d2a84e..3cdcc6a 100644
--- a/components/camel-cassandraql/src/main/java/org/apache/camel/processor/aggregate/cassandra/NamedCassandraAggregationRepository.java
+++ b/components/camel-cassandraql/src/main/java/org/apache/camel/processor/aggregate/cassandra/NamedCassandraAggregationRepository.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.processor.aggregate.cassandra;
 
-
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.Session;
 
diff --git a/components/camel-cassandraql/src/test/java/org/apache/camel/component/cassandra/BaseCassandraTest.java b/components/camel-cassandraql/src/test/java/org/apache/camel/component/cassandra/BaseCassandraTest.java
index bb5867f..5ddd074 100644
--- a/components/camel-cassandraql/src/test/java/org/apache/camel/component/cassandra/BaseCassandraTest.java
+++ b/components/camel-cassandraql/src/test/java/org/apache/camel/component/cassandra/BaseCassandraTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cassandra;
+
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/components/camel-cassandraql/src/test/java/org/apache/camel/processor/aggregate/cassandra/CassandraAggregationSerializedHeadersTest.java b/components/camel-cassandraql/src/test/java/org/apache/camel/processor/aggregate/cassandra/CassandraAggregationSerializedHeadersTest.java
index e20d7a6..73a7e8f 100644
--- a/components/camel-cassandraql/src/test/java/org/apache/camel/processor/aggregate/cassandra/CassandraAggregationSerializedHeadersTest.java
+++ b/components/camel-cassandraql/src/test/java/org/apache/camel/processor/aggregate/cassandra/CassandraAggregationSerializedHeadersTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.aggregate.cassandra;
+
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.Session;
 import org.apache.camel.AggregationStrategy;
diff --git a/components/camel-cassandraql/src/test/java/org/apache/camel/processor/aggregate/cassandra/CassandraAggregationTest.java b/components/camel-cassandraql/src/test/java/org/apache/camel/processor/aggregate/cassandra/CassandraAggregationTest.java
index 425755c..e4120fb 100644
--- a/components/camel-cassandraql/src/test/java/org/apache/camel/processor/aggregate/cassandra/CassandraAggregationTest.java
+++ b/components/camel-cassandraql/src/test/java/org/apache/camel/processor/aggregate/cassandra/CassandraAggregationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.aggregate.cassandra;
+
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.Session;
 import org.apache.camel.AggregationStrategy;
diff --git a/components/camel-cassandraql/src/test/java/org/apache/camel/processor/idempotent/cassandra/CassandraIdempotentTest.java b/components/camel-cassandraql/src/test/java/org/apache/camel/processor/idempotent/cassandra/CassandraIdempotentTest.java
index bb6a068..1ee69f6 100644
--- a/components/camel-cassandraql/src/test/java/org/apache/camel/processor/idempotent/cassandra/CassandraIdempotentTest.java
+++ b/components/camel-cassandraql/src/test/java/org/apache/camel/processor/idempotent/cassandra/CassandraIdempotentTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.idempotent.cassandra;
+
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.Session;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-cbor/src/main/java/org/apache/camel/component/cbor/CBORDataFormat.java b/components/camel-cbor/src/main/java/org/apache/camel/component/cbor/CBORDataFormat.java
index 27ec345..7b257ed 100644
--- a/components/camel-cbor/src/main/java/org/apache/camel/component/cbor/CBORDataFormat.java
+++ b/components/camel-cbor/src/main/java/org/apache/camel/component/cbor/CBORDataFormat.java
@@ -32,7 +32,6 @@
 import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.databind.type.CollectionType;
 import com.fasterxml.jackson.dataformat.cbor.CBORFactory;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
diff --git a/components/camel-cbor/src/test/java/org/apache/camel/component/cbor/CBORMarshalAllowJMSTypeTest.java b/components/camel-cbor/src/test/java/org/apache/camel/component/cbor/CBORMarshalAllowJMSTypeTest.java
index 02a3b105..ca701b0 100644
--- a/components/camel-cbor/src/test/java/org/apache/camel/component/cbor/CBORMarshalAllowJMSTypeTest.java
+++ b/components/camel-cbor/src/test/java/org/apache/camel/component/cbor/CBORMarshalAllowJMSTypeTest.java
@@ -18,7 +18,6 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.dataformat.cbor.CBORFactory;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-cbor/src/test/java/org/apache/camel/component/cbor/CBORObjectListSplitTest.java b/components/camel-cbor/src/test/java/org/apache/camel/component/cbor/CBORObjectListSplitTest.java
index 8bf7e30..122b2ce 100644
--- a/components/camel-cbor/src/test/java/org/apache/camel/component/cbor/CBORObjectListSplitTest.java
+++ b/components/camel-cbor/src/test/java/org/apache/camel/component/cbor/CBORObjectListSplitTest.java
@@ -22,7 +22,6 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.dataformat.cbor.CBORFactory;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedDelegate.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedDelegate.java
index 7be5cbe..52425a5 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedDelegate.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedDelegate.java
@@ -20,10 +20,10 @@
 import java.lang.reflect.Type;
 import java.util.HashSet;
 import java.util.Set;
-import static java.util.stream.Collectors.toSet;
 
 import javax.enterprise.inject.spi.Annotated;
 
+import static java.util.stream.Collectors.toSet;
 import static org.apache.camel.cdi.CdiSpiHelper.isAnnotationType;
 
 class AnnotatedDelegate implements Annotated {
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedMemberDelegate.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedMemberDelegate.java
index 6e63c50..cd85e6e 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedMemberDelegate.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedMemberDelegate.java
@@ -19,6 +19,7 @@
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Member;
 import java.util.Set;
+
 import javax.enterprise.inject.spi.AnnotatedMember;
 import javax.enterprise.inject.spi.AnnotatedType;
 
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedMethodDelegate.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedMethodDelegate.java
index eef33d2..96ef4f4 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedMethodDelegate.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedMethodDelegate.java
@@ -20,6 +20,7 @@
 import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Set;
+
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedParameter;
 
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedTypeDelegate.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedTypeDelegate.java
index 0a9aa50..e3adc00 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedTypeDelegate.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/AnnotatedTypeDelegate.java
@@ -18,6 +18,7 @@
 
 import java.util.HashSet;
 import java.util.Set;
+
 import javax.enterprise.inject.spi.AnnotatedConstructor;
 import javax.enterprise.inject.spi.AnnotatedField;
 import javax.enterprise.inject.spi.AnnotatedMethod;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanDelegate.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanDelegate.java
index e808ada..0b2a6ae 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanDelegate.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanDelegate.java
@@ -21,6 +21,7 @@
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InjectionPoint;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanManagerHelper.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanManagerHelper.java
index af000e5..8342401 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanManagerHelper.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/BeanManagerHelper.java
@@ -20,11 +20,11 @@
 import java.util.Optional;
 import java.util.Set;
 
-import static java.util.stream.Collectors.toSet;
-
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 
+import static java.util.stream.Collectors.toSet;
+
 @Vetoed
 final class BeanManagerHelper {
 
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java
index fa4ff51..be2a56a 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CamelContextProducer.java
@@ -19,9 +19,6 @@
 import java.lang.annotation.Annotation;
 import java.util.Set;
 
-import static java.beans.Introspector.decapitalize;
-import static java.util.stream.Collectors.toSet;
-
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.InjectionException;
 import javax.enterprise.inject.spi.Annotated;
@@ -40,6 +37,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.beans.Introspector.decapitalize;
+import static java.util.stream.Collectors.toSet;
 import static org.apache.camel.RuntimeCamelException.wrapRuntimeCamelException;
 import static org.apache.camel.cdi.AnyLiteral.ANY;
 import static org.apache.camel.cdi.CdiSpiHelper.createCamelContextWithTCCL;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanPostProcessor.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanPostProcessor.java
index 3e45bdf..2d5839a 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanPostProcessor.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanPostProcessor.java
@@ -1,39 +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.cdi;
-
-import javax.enterprise.inject.spi.BeanManager;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.impl.engine.DefaultCamelBeanPostProcessor;
-
-import static org.apache.camel.cdi.BeanManagerHelper.getReferenceByType;
-
-@Vetoed
-final class CdiCamelBeanPostProcessor extends DefaultCamelBeanPostProcessor {
-
-    private final BeanManager manager;
-
-    CdiCamelBeanPostProcessor(BeanManager manager) {
-        this.manager = manager;
-    }
-
-    @Override
-    public CamelContext getOrLookupCamelContext() {
-        return getReferenceByType(manager, CamelContext.class).orElse(null);
-    }
-}
+/*
+ * 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.cdi;
+
+import javax.enterprise.inject.spi.BeanManager;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.engine.DefaultCamelBeanPostProcessor;
+
+import static org.apache.camel.cdi.BeanManagerHelper.getReferenceByType;
+
+@Vetoed
+final class CdiCamelBeanPostProcessor extends DefaultCamelBeanPostProcessor {
+
+    private final BeanManager manager;
+
+    CdiCamelBeanPostProcessor(BeanManager manager) {
+        this.manager = manager;
+    }
+
+    @Override
+    public CamelContext getOrLookupCamelContext() {
+        return getReferenceByType(manager, CamelContext.class).orElse(null);
+    }
+}
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanRepository.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanRepository.java
index fd74333..8fcddf7 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanRepository.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelBeanRepository.java
@@ -19,8 +19,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import static java.util.stream.Collectors.toMap;
-
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 
@@ -29,6 +27,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.util.stream.Collectors.toMap;
 import static org.apache.camel.cdi.AnyLiteral.ANY;
 import static org.apache.camel.cdi.BeanManagerHelper.getReference;
 import static org.apache.camel.cdi.BeanManagerHelper.getReferenceByName;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
index d18ef64..4b4d7b2 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java
@@ -23,21 +23,11 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import static java.util.Collections.newSetFromMap;
-import static java.util.function.Predicate.isEqual;
-import static java.util.stream.Collectors.collectingAndThen;
-
-import static java.util.stream.Collectors.toSet;
-import static java.util.stream.Stream.concat;
-
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Default;
 import javax.enterprise.inject.InjectionException;
@@ -82,6 +72,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.util.Collections.newSetFromMap;
+import static java.util.function.Predicate.isEqual;
+import static java.util.stream.Collectors.collectingAndThen;
+import static java.util.stream.Collectors.toSet;
+import static java.util.stream.Stream.concat;
 import static org.apache.camel.cdi.AnyLiteral.ANY;
 import static org.apache.camel.cdi.ApplicationScopedLiteral.APPLICATION_SCOPED;
 import static org.apache.camel.cdi.BeanManagerHelper.getReference;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelInjector.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelInjector.java
index 3372793..d35d836 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelInjector.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiCamelInjector.java
@@ -18,6 +18,7 @@
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+
 import javax.enterprise.inject.spi.BeanManager;
 
 import org.apache.camel.RuntimeCamelException;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventComponent.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventComponent.java
index fdb1312..97e7a2a 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventComponent.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventComponent.java
@@ -17,6 +17,7 @@
 package org.apache.camel.cdi;
 
 import java.util.Map;
+
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Named;
 
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventConsumer.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventConsumer.java
index f33e6d8..fca2d6e 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventConsumer.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventConsumer.java
@@ -1,71 +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.cdi;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.RuntimeExchangeException;
-import org.apache.camel.spi.CamelEvent.ExchangeEvent;
-import org.apache.camel.support.DefaultConsumer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-final class CdiEventConsumer<T> extends DefaultConsumer {
-
-    private final Logger logger = LoggerFactory.getLogger(CdiEventConsumer.class);
-
-    private final CdiEventEndpoint<T> endpoint;
-
-    CdiEventConsumer(CdiEventEndpoint<T> endpoint, Processor processor) {
-        super(endpoint, processor);
-        this.endpoint = endpoint;
-    }
-
-    @Override
-    protected void doStart() throws Exception {
-        super.doStart();
-        endpoint.addConsumer(this);
-    }
-
-    @Override
-    protected void doStop() throws Exception {
-        endpoint.removeConsumer(this);
-        super.doStop();
-    }
-
-    void notify(T event) {
-        logger.debug("Consuming CDI event [{}] with {}", event, this);
-
-        Exchange exchange = getEndpoint().createExchange();
-        // TODO: would that be possible to propagate the event metadata?
-        exchange.getIn().setBody(event);
-
-        // Avoid infinite loop of exchange events
-        if (event instanceof ExchangeEvent) {
-            exchange.setProperty(Exchange.NOTIFY_EVENT, Boolean.TRUE);
-        }
-        try {
-            getProcessor().process(exchange);
-        } catch (Exception cause) {
-            throw new RuntimeExchangeException("Error while processing CDI event", exchange, cause);
-        } finally {
-            if (event instanceof ExchangeEvent) {
-                exchange.setProperty(Exchange.NOTIFY_EVENT, Boolean.FALSE);
-            }
-        }
-    }
-}
+/*
+ * 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.cdi;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.RuntimeExchangeException;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
+import org.apache.camel.support.DefaultConsumer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+final class CdiEventConsumer<T> extends DefaultConsumer {
+
+    private final Logger logger = LoggerFactory.getLogger(CdiEventConsumer.class);
+
+    private final CdiEventEndpoint<T> endpoint;
+
+    CdiEventConsumer(CdiEventEndpoint<T> endpoint, Processor processor) {
+        super(endpoint, processor);
+        this.endpoint = endpoint;
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        super.doStart();
+        endpoint.addConsumer(this);
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        endpoint.removeConsumer(this);
+        super.doStop();
+    }
+
+    void notify(T event) {
+        logger.debug("Consuming CDI event [{}] with {}", event, this);
+
+        Exchange exchange = getEndpoint().createExchange();
+        // TODO: would that be possible to propagate the event metadata?
+        exchange.getIn().setBody(event);
+
+        // Avoid infinite loop of exchange events
+        if (event instanceof ExchangeEvent) {
+            exchange.setProperty(Exchange.NOTIFY_EVENT, Boolean.TRUE);
+        }
+        try {
+            getProcessor().process(exchange);
+        } catch (Exception cause) {
+            throw new RuntimeExchangeException("Error while processing CDI event", exchange, cause);
+        } finally {
+            if (event instanceof ExchangeEvent) {
+                exchange.setProperty(Exchange.NOTIFY_EVENT, Boolean.FALSE);
+            }
+        }
+    }
+}
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventEndpoint.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventEndpoint.java
index ab9ad79..f5dc485 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventEndpoint.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventEndpoint.java
@@ -26,8 +26,6 @@
 import java.util.Set;
 import java.util.stream.Stream;
 
-import static java.util.stream.Collectors.joining;
-
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.event.Event;
 import javax.enterprise.inject.Any;
@@ -42,6 +40,8 @@
 import org.apache.camel.Producer;
 import org.apache.camel.support.DefaultEndpoint;
 
+import static java.util.stream.Collectors.joining;
+
 /**
  * A Camel {@link Endpoint} that bridges the CDI events facility with Camel routes so that CDI events
  * can be seamlessly observed / consumed (respectively produced / fired) from Camel consumers (respectively by Camel producers).<p>
@@ -175,4 +175,4 @@
             consumers.forEach(consumer -> consumer.notify(t));
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventNotifier.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventNotifier.java
index f874ed0..4d42fab 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventNotifier.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventNotifier.java
@@ -1,67 +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.cdi;
-
-import java.lang.annotation.Annotation;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import javax.enterprise.inject.spi.BeanManager;
-
-import org.apache.camel.spi.CamelEvent;
-import org.apache.camel.spi.CamelEvent.RouteEvent;
-import org.apache.camel.support.EventNotifierSupport;
-
-import static org.apache.camel.util.ObjectHelper.isNotEmpty;
-
-final class CdiEventNotifier extends EventNotifierSupport {
-
-    private final BeanManager manager;
-
-    private final Annotation[] qualifiers;
-
-    CdiEventNotifier(BeanManager manager, Collection<Annotation> qualifiers) {
-        this.manager = manager;
-        this.qualifiers = qualifiers.toArray(new Annotation[qualifiers.size()]);
-        // TODO: be more fine grained for the kind of events that are emitted depending on the observed event types
-    }
-
-    @Override
-    public void notify(CamelEvent event) {
-        String id = null;
-
-        if (event instanceof RouteEvent) {
-            id = ((RouteEvent) event).getRoute().getId();
-        }
-
-        if (isNotEmpty(id)) {
-            List<Annotation> annotations = new ArrayList<>();
-            Collections.addAll(annotations, qualifiers);
-            annotations.add(NamedLiteral.of(id));
-            manager.fireEvent(event, annotations.toArray(new Annotation[0]));
-        } else {
-            manager.fireEvent(event, qualifiers);
-        }
-    }
-
-    @Override
-    public boolean isEnabled(CamelEvent event) {
-        return true;
-    }
-}
+/*
+ * 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.cdi;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.enterprise.inject.spi.BeanManager;
+
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.RouteEvent;
+import org.apache.camel.support.EventNotifierSupport;
+
+import static org.apache.camel.util.ObjectHelper.isNotEmpty;
+
+final class CdiEventNotifier extends EventNotifierSupport {
+
+    private final BeanManager manager;
+
+    private final Annotation[] qualifiers;
+
+    CdiEventNotifier(BeanManager manager, Collection<Annotation> qualifiers) {
+        this.manager = manager;
+        this.qualifiers = qualifiers.toArray(new Annotation[qualifiers.size()]);
+        // TODO: be more fine grained for the kind of events that are emitted depending on the observed event types
+    }
+
+    @Override
+    public void notify(CamelEvent event) {
+        String id = null;
+
+        if (event instanceof RouteEvent) {
+            id = ((RouteEvent) event).getRoute().getId();
+        }
+
+        if (isNotEmpty(id)) {
+            List<Annotation> annotations = new ArrayList<>();
+            Collections.addAll(annotations, qualifiers);
+            annotations.add(NamedLiteral.of(id));
+            manager.fireEvent(event, annotations.toArray(new Annotation[0]));
+        } else {
+            manager.fireEvent(event, qualifiers);
+        }
+    }
+
+    @Override
+    public boolean isEnabled(CamelEvent event) {
+        return true;
+    }
+}
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventProducer.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventProducer.java
index 91d4540..19e17d1 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventProducer.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiEventProducer.java
@@ -1,47 +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.cdi;
-
-import javax.enterprise.event.Event;
-import org.apache.camel.Exchange;
-
-import org.apache.camel.support.DefaultProducer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-final class CdiEventProducer<T> extends DefaultProducer {
-
-    private final Logger logger = LoggerFactory.getLogger(CdiEventProducer.class);
-
-    private final Event<T> event;
-
-    CdiEventProducer(CdiEventEndpoint<T> endpoint, Event<T> event) {
-        super(endpoint);
-        this.event = event;
-    }
-
-    @Override
-    public void process(Exchange exchange) {
-        logger.debug("Firing CDI event [{}] with {}", event, this);
-        // TODO: leverage Camel type converter mechanism based on the endpoint type
-        // The EventMetadata injection point will be that of the event which is not very useful
-        // for the end user. Using BeanManager.fire would be a way to hide that internal though
-        // it will be necessary to check whether the exchange event type is assignable to the
-        // endpoint event type.
-        event.fire((T) exchange.getIn().getBody());
-    }
-}
+/*
+ * 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.cdi;
+
+import javax.enterprise.event.Event;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.support.DefaultProducer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+final class CdiEventProducer<T> extends DefaultProducer {
+
+    private final Logger logger = LoggerFactory.getLogger(CdiEventProducer.class);
+
+    private final Event<T> event;
+
+    CdiEventProducer(CdiEventEndpoint<T> endpoint, Event<T> event) {
+        super(endpoint);
+        this.event = event;
+    }
+
+    @Override
+    public void process(Exchange exchange) {
+        logger.debug("Firing CDI event [{}] with {}", event, this);
+        // TODO: leverage Camel type converter mechanism based on the endpoint type
+        // The EventMetadata injection point will be that of the event which is not very useful
+        // for the end user. Using BeanManager.fire would be a way to hide that internal though
+        // it will be necessary to check whether the exchange event type is assignable to the
+        // endpoint event type.
+        event.fire((T) exchange.getIn().getBody());
+    }
+}
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
index 1653e1b..75bed28 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/CdiSpiHelper.java
@@ -34,13 +34,6 @@
 import java.util.function.Supplier;
 import java.util.stream.Stream;
 
-import static java.security.AccessController.doPrivileged;
-import static java.util.Comparator.comparing;
-import static java.util.Objects.requireNonNull;
-import static java.util.stream.Collectors.collectingAndThen;
-import static java.util.stream.Collectors.joining;
-import static java.util.stream.Collectors.toSet;
-
 import javax.enterprise.inject.spi.Annotated;
 import javax.enterprise.inject.spi.AnnotatedConstructor;
 import javax.enterprise.inject.spi.AnnotatedField;
@@ -52,6 +45,13 @@
 import javax.enterprise.util.Nonbinding;
 
 import org.apache.camel.CamelContext;
+
+import static java.security.AccessController.doPrivileged;
+import static java.util.Comparator.comparing;
+import static java.util.Objects.requireNonNull;
+import static java.util.stream.Collectors.collectingAndThen;
+import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toSet;
 import static org.apache.camel.cdi.AnyLiteral.ANY;
 import static org.apache.camel.cdi.DefaultLiteral.DEFAULT;
 
@@ -271,4 +271,4 @@
         // If no TCCL is available, use the ClassLoader of this class
         return CdiSpiHelper.class.getClassLoader();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/DelegateProducer.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/DelegateProducer.java
index d9e4ab6..2d8168c 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/DelegateProducer.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/DelegateProducer.java
@@ -17,6 +17,7 @@
 package org.apache.camel.cdi;
 
 import java.util.Set;
+
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.Producer;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Excluded.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Excluded.java
index a6e2bc8..32a9e2b 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Excluded.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Excluded.java
@@ -19,13 +19,15 @@
 import java.lang.annotation.Documented;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
+
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Qualifier;
+
 import static java.lang.annotation.ElementType.FIELD;
 import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.ElementType.TYPE;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import javax.enterprise.util.AnnotationLiteral;
-import javax.inject.Qualifier;
 
 @Qualifier
 @Documented
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/ForwardingObserverMethod.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/ForwardingObserverMethod.java
index 76c02c1..8371c43 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/ForwardingObserverMethod.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/ForwardingObserverMethod.java
@@ -1,65 +1,66 @@
-/*
- * 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.cdi;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Set;
-import javax.enterprise.event.Reception;
-import javax.enterprise.event.TransactionPhase;
-import javax.enterprise.inject.spi.ObserverMethod;
-
-import org.apache.camel.CamelContext;
-
-final class ForwardingObserverMethod<T> implements ObserverMethod<T> {
-
-    private final CdiEventEndpoint<T> endpoint;
-
-    ForwardingObserverMethod(CdiEventEndpoint<T> endpoint) {
-        this.endpoint = endpoint;
-    }
-
-    @Override
-    public Class<?> getBeanClass() {
-        return CamelContext.class;
-    }
-
-    @Override
-    public Type getObservedType() {
-        return endpoint.getType();
-    }
-
-    @Override
-    public Set<Annotation> getObservedQualifiers() {
-        return endpoint.getQualifiers();
-    }
-
-    @Override
-    public Reception getReception() {
-        return Reception.ALWAYS;
-    }
-
-    @Override
-    public TransactionPhase getTransactionPhase() {
-        return TransactionPhase.IN_PROGRESS;
-    }
-
-    @Override
-    public void notify(T event) {
-        endpoint.notify(event);
-    }
-}
+/*
+ * 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.cdi;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Set;
+
+import javax.enterprise.event.Reception;
+import javax.enterprise.event.TransactionPhase;
+import javax.enterprise.inject.spi.ObserverMethod;
+
+import org.apache.camel.CamelContext;
+
+final class ForwardingObserverMethod<T> implements ObserverMethod<T> {
+
+    private final CdiEventEndpoint<T> endpoint;
+
+    ForwardingObserverMethod(CdiEventEndpoint<T> endpoint) {
+        this.endpoint = endpoint;
+    }
+
+    @Override
+    public Class<?> getBeanClass() {
+        return CamelContext.class;
+    }
+
+    @Override
+    public Type getObservedType() {
+        return endpoint.getType();
+    }
+
+    @Override
+    public Set<Annotation> getObservedQualifiers() {
+        return endpoint.getQualifiers();
+    }
+
+    @Override
+    public Reception getReception() {
+        return Reception.ALWAYS;
+    }
+
+    @Override
+    public TransactionPhase getTransactionPhase() {
+        return TransactionPhase.IN_PROGRESS;
+    }
+
+    @Override
+    public void notify(T event) {
+        endpoint.notify(event);
+    }
+}
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java
index 65372e5..25ed9e7 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Main.java
@@ -19,9 +19,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import static java.util.function.Function.identity;
-import static java.util.stream.Collectors.toMap;
-
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 
@@ -32,6 +29,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.util.function.Function.identity;
+import static java.util.stream.Collectors.toMap;
 import static org.apache.camel.cdi.AnyLiteral.ANY;
 import static org.apache.camel.cdi.BeanManagerHelper.getReference;
 import static org.apache.deltaspike.cdise.api.CdiContainerLoader.getCdiContainer;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Startup.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Startup.java
index 976c743..fa2bac8 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Startup.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Startup.java
@@ -20,6 +20,7 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
+
 import javax.enterprise.util.AnnotationLiteral;
 import javax.inject.Qualifier;
 
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java
index 3c1e1a6..425777e 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticAnnotated.java
@@ -22,12 +22,11 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.enterprise.inject.spi.Annotated;
+
 import static java.util.Arrays.asList;
 import static java.util.Collections.unmodifiableSet;
 import static java.util.stream.Collectors.toSet;
-
-import javax.enterprise.inject.spi.Annotated;
-
 import static org.apache.camel.cdi.CdiSpiHelper.isAnnotationType;
 
 @Vetoed
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBean.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBean.java
index 78de041..38c59be 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBean.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBean.java
@@ -20,6 +20,7 @@
 import java.util.Set;
 import java.util.StringJoiner;
 import java.util.function.Function;
+
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.CreationException;
 import javax.enterprise.inject.InjectionException;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java
index cc9b700..288fe3f 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticBeanAttributes.java
@@ -20,13 +20,12 @@
 import java.lang.reflect.Type;
 import java.util.Set;
 
-import static java.util.Collections.emptySet;
-import static java.util.stream.Collectors.toSet;
-
 import javax.enterprise.context.Dependent;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.inject.Named;
 
+import static java.util.Collections.emptySet;
+import static java.util.stream.Collectors.toSet;
 import static org.apache.camel.cdi.CdiSpiHelper.isAnnotationType;
 
 class SyntheticBeanAttributes<T> {
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticInjectionTarget.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticInjectionTarget.java
index fde620a..852c134 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticInjectionTarget.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/SyntheticInjectionTarget.java
@@ -20,6 +20,7 @@
 import java.util.Set;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
+
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.InjectionTarget;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Uri.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Uri.java
index 6774aa1..e9c1726 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Uri.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Uri.java
@@ -20,6 +20,7 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
+
 import javax.enterprise.util.AnnotationLiteral;
 import javax.enterprise.util.Nonbinding;
 import javax.inject.Qualifier;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Vetoed.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Vetoed.java
index c397a16..4a7f2bb 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/Vetoed.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/Vetoed.java
@@ -19,6 +19,7 @@
 import java.lang.annotation.Documented;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
+
 import static java.lang.annotation.ElementType.TYPE;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java
index b807f54..ef16ad0 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlCdiBeanFactory.java
@@ -27,13 +27,6 @@
 import java.util.Set;
 import java.util.stream.Stream;
 
-import static java.lang.String.format;
-import static java.util.Collections.addAll;
-import static java.util.Collections.emptySet;
-import static java.util.Collections.singleton;
-import static java.util.Objects.requireNonNull;
-import static java.util.stream.Collectors.toSet;
-
 import javax.enterprise.inject.CreationException;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Bean;
@@ -60,6 +53,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.lang.String.format;
+import static java.util.Collections.addAll;
+import static java.util.Collections.emptySet;
+import static java.util.Collections.singleton;
+import static java.util.Objects.requireNonNull;
+import static java.util.stream.Collectors.toSet;
 import static org.apache.camel.cdi.AnyLiteral.ANY;
 import static org.apache.camel.cdi.ApplicationScopedLiteral.APPLICATION_SCOPED;
 import static org.apache.camel.cdi.CdiSpiHelper.createCamelContextWithTCCL;
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java
index 32827c8..4b73881 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/XmlErrorHandlerFactoryBean.java
@@ -18,9 +18,6 @@
 
 import java.util.function.Function;
 
-import static java.lang.String.format;
-import static java.util.Objects.nonNull;
-
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.CreationException;
 import javax.enterprise.inject.UnsatisfiedResolutionException;
@@ -34,6 +31,8 @@
 import org.apache.camel.cdi.xml.RedeliveryPolicyFactoryBean;
 import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
 
+import static java.lang.String.format;
+import static java.util.Objects.nonNull;
 import static org.apache.camel.cdi.BeanManagerHelper.getReferenceByName;
 import static org.apache.camel.util.ObjectHelper.isNotEmpty;
 
@@ -132,4 +131,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ErrorHandlerType.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ErrorHandlerType.java
index 323804d..8716dd5 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ErrorHandlerType.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ErrorHandlerType.java
@@ -23,7 +23,6 @@
 import org.apache.camel.builder.DefaultErrorHandlerBuilder;
 import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.builder.NoErrorHandlerBuilder;
-
 import org.apache.camel.cdi.transaction.JtaTransactionErrorHandlerBuilder;
 
 /**
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ThreadPoolFactoryBean.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ThreadPoolFactoryBean.java
index c7501d3..2feac59 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ThreadPoolFactoryBean.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/xml/ThreadPoolFactoryBean.java
@@ -17,7 +17,6 @@
 package org.apache.camel.cdi.xml;
 
 import javax.enterprise.inject.spi.BeanManager;
-
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -50,4 +49,4 @@
     protected CamelContext discoverDefaultCamelContext() {
         return BeanManagerHelper.getDefaultCamelContext(manager);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/EventProducingRouteCdi10.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/EventProducingRouteCdi10.java
index 4b11c6e..0c21c26 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/EventProducingRouteCdi10.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/EventProducingRouteCdi10.java
@@ -17,8 +17,8 @@
 package org.apache.camel.cdi.bean;
 
 import javax.enterprise.context.ApplicationScoped;
-
 import javax.inject.Inject;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.cdi.CdiEventEndpoint;
 import org.apache.camel.cdi.pojo.EventPayloadInteger;
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/RecipientListMethodBean.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/RecipientListMethodBean.java
index 764ba3c..48ebaca 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/RecipientListMethodBean.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/bean/RecipientListMethodBean.java
@@ -18,6 +18,7 @@
 
 import java.util.Arrays;
 import java.util.List;
+
 import javax.enterprise.context.ApplicationScoped;
 
 import org.apache.camel.Consume;
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/qualifier/BarQualifier.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/qualifier/BarQualifier.java
index 22ad875..ff35f18 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/qualifier/BarQualifier.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/qualifier/BarQualifier.java
@@ -1,38 +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.cdi.qualifier;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import javax.enterprise.util.AnnotationLiteral;
-import javax.inject.Qualifier;
-
-@Qualifier
-@Documented
-@Retention(RUNTIME)
-@Target({ TYPE, METHOD, PARAMETER, FIELD })
-public @interface BarQualifier {
-
-    final class Literal extends AnnotationLiteral<BarQualifier> implements BarQualifier {
-    }
-}
+/*
+ * 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.cdi.qualifier;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Qualifier;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+public @interface BarQualifier {
+
+    final class Literal extends AnnotationLiteral<BarQualifier> implements BarQualifier {
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/qualifier/FooQualifier.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/qualifier/FooQualifier.java
index 374bd7d..5df8a80 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/qualifier/FooQualifier.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/qualifier/FooQualifier.java
@@ -1,38 +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.cdi.qualifier;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.TYPE;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import javax.enterprise.util.AnnotationLiteral;
-import javax.inject.Qualifier;
-
-@Qualifier
-@Documented
-@Retention(RUNTIME)
-@Target({ TYPE, METHOD, PARAMETER, FIELD })
-public @interface FooQualifier {
-
-    final class Literal extends AnnotationLiteral<FooQualifier> implements FooQualifier {
-    }
-}
+/*
+ * 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.cdi.qualifier;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import javax.enterprise.util.AnnotationLiteral;
+import javax.inject.Qualifier;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Qualifier
+@Documented
+@Retention(RUNTIME)
+@Target({ TYPE, METHOD, PARAMETER, FIELD })
+public @interface FooQualifier {
+
+    final class Literal extends AnnotationLiteral<FooQualifier> implements FooQualifier {
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/qualifier/Manual.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/qualifier/Manual.java
index 3c7831eb..adf176f 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/qualifier/Manual.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/qualifier/Manual.java
@@ -19,12 +19,14 @@
 import java.lang.annotation.Documented;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
+
+import javax.inject.Qualifier;
+
 import static java.lang.annotation.ElementType.FIELD;
 import static java.lang.annotation.ElementType.METHOD;
 import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.ElementType.TYPE;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
-import javax.inject.Qualifier;
 
 @Qualifier
 @Documented
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/rule/LogEventVerifier.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/rule/LogEventVerifier.java
index 3efc858..098ceef 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/rule/LogEventVerifier.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/rule/LogEventVerifier.java
@@ -20,7 +20,6 @@
 import java.util.Collections;
 import java.util.List;
 
-
 public class LogEventVerifier extends LogVerifier {
     private final List<LogEvent> events = new ArrayList<>();
 
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/AdvisedMockEndpointProducerTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/AdvisedMockEndpointProducerTest.java
index 83fc915..234f118 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/AdvisedMockEndpointProducerTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/AdvisedMockEndpointProducerTest.java
@@ -1,96 +1,97 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.ManualStartupCamelContext;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.arquillian.junit.InSequence;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class AdvisedMockEndpointProducerTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Inject
-    @Uri("mock:intercepted")
-    private MockEndpoint intercepted;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(ManualStartupCamelContext.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    @InSequence(1)
-    public void startCamelContext(CamelContext context) throws Exception {
-        context.addRoutes(new RouteBuilder() {
-            @Override
-            public void configure() {
-                interceptSendToEndpoint("mock:outbound")
-                    .skipSendToOriginalEndpoint()
-                    .log("Intercepting message [${body}] from mock endpoint")
-                    .to("mock:intercepted");
-
-                from("direct:inbound").to("mock:outbound");
-            }
-        });
-
-        context.getRouteController().startAllRoutes();
-    }
-
-    @Test
-    @InSequence(2)
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(0);
-        intercepted.expectedMessageCount(1);
-        intercepted.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound, intercepted);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.ManualStartupCamelContext;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class AdvisedMockEndpointProducerTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Inject
+    @Uri("mock:intercepted")
+    private MockEndpoint intercepted;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(ManualStartupCamelContext.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    @InSequence(1)
+    public void startCamelContext(CamelContext context) throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() {
+                interceptSendToEndpoint("mock:outbound")
+                    .skipSendToOriginalEndpoint()
+                    .log("Intercepting message [${body}] from mock endpoint")
+                    .to("mock:intercepted");
+
+                from("direct:inbound").to("mock:outbound");
+            }
+        });
+
+        context.getRouteController().startAllRoutes();
+    }
+
+    @Test
+    @InSequence(2)
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(0);
+        intercepted.expectedMessageCount(1);
+        intercepted.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound, intercepted);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/AdvisedRouteTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/AdvisedRouteTest.java
index 8c75824..620d96d 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/AdvisedRouteTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/AdvisedRouteTest.java
@@ -1,108 +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.cdi.test;
-
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.AdviceWithRouteBuilder;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.ManualStartupCamelContext;
-import org.apache.camel.cdi.bean.PropertyEndpointRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.component.properties.PropertiesComponent;
-import org.apache.camel.model.ModelCamelContext;
-import org.apache.camel.reifier.RouteReifier;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.arquillian.junit.InSequence;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-@Ignore
-public class AdvisedRouteTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Produces
-    @ApplicationScoped
-    @Named("properties")
-    private static PropertiesComponent configuration() {
-        Properties properties = new Properties();
-        properties.put("from", "inbound");
-        properties.put("to", "direct:outbound");
-        properties.put("header.message", "n/a");
-        PropertiesComponent component = new PropertiesComponent();
-        component.setInitialProperties(properties);
-        return component;
-    }
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test classes
-            .addClasses(ManualStartupCamelContext.class, PropertyEndpointRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    @InSequence(1)
-    public void adviseCamelContext(ModelCamelContext context) throws Exception {
-        RouteReifier.adviceWith(context.getRouteDefinition("route"), context, new AdviceWithRouteBuilder() {
-            @Override
-            public void configure() {
-                interceptSendToEndpoint("{{to}}").skipSendToOriginalEndpoint().to("mock:outbound");
-            }
-        });
-        context.getRouteController().startAllRoutes();
-    }
-
-    @Test
-    @InSequence(2)
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-        outbound.expectedHeaderReceived("header", "n/a");
-        
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.AdviceWithRouteBuilder;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.ManualStartupCamelContext;
+import org.apache.camel.cdi.bean.PropertyEndpointRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.reifier.RouteReifier;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+@Ignore
+public class AdvisedRouteTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Produces
+    @ApplicationScoped
+    @Named("properties")
+    private static PropertiesComponent configuration() {
+        Properties properties = new Properties();
+        properties.put("from", "inbound");
+        properties.put("to", "direct:outbound");
+        properties.put("header.message", "n/a");
+        PropertiesComponent component = new PropertiesComponent();
+        component.setInitialProperties(properties);
+        return component;
+    }
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test classes
+            .addClasses(ManualStartupCamelContext.class, PropertyEndpointRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    @InSequence(1)
+    public void adviseCamelContext(ModelCamelContext context) throws Exception {
+        RouteReifier.adviceWith(context.getRouteDefinition("route"), context, new AdviceWithRouteBuilder() {
+            @Override
+            public void configure() {
+                interceptSendToEndpoint("{{to}}").skipSendToOriginalEndpoint().to("mock:outbound");
+            }
+        });
+        context.getRouteController().startAllRoutes();
+    }
+
+    @Test
+    @InSequence(2)
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+        outbound.expectedHeaderReceived("header", "n/a");
+        
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/AmbiguousCamelContextTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/AmbiguousCamelContextTest.java
index e977f36..62650f8 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/AmbiguousCamelContextTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/AmbiguousCamelContextTest.java
@@ -1,55 +1,55 @@
-/*
- * 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.cdi.test;
-
-import org.apache.camel.ServiceStatus;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.bean.CustomPropertiesCamelContext;
-import org.apache.camel.cdi.bean.ManualStartupCamelContext;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class AmbiguousCamelContextTest {
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test classes
-            .addClasses(ManualStartupCamelContext.class, CustomPropertiesCamelContext.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void test(ManualStartupCamelContext lifecycleCamelContext, CustomPropertiesCamelContext propertiesCamelContext) {
-        assertThat(lifecycleCamelContext.getStatus(), is(equalTo(ServiceStatus.Started)));
-        assertThat(propertiesCamelContext.getStatus(), is(equalTo(ServiceStatus.Started)));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.bean.CustomPropertiesCamelContext;
+import org.apache.camel.cdi.bean.ManualStartupCamelContext;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class AmbiguousCamelContextTest {
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test classes
+            .addClasses(ManualStartupCamelContext.class, CustomPropertiesCamelContext.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void test(ManualStartupCamelContext lifecycleCamelContext, CustomPropertiesCamelContext propertiesCamelContext) {
+        assertThat(lifecycleCamelContext.getStatus(), is(equalTo(ServiceStatus.Started)));
+        assertThat(propertiesCamelContext.getStatus(), is(equalTo(ServiceStatus.Started)));
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/BeanInjectTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/BeanInjectTest.java
index bad8f04..609d19a 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/BeanInjectTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/BeanInjectTest.java
@@ -1,88 +1,89 @@
-/*
- * 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.cdi.test;
-
-import java.util.Properties;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.bean.BeanInjectBean;
-import org.apache.camel.cdi.bean.NamedCamelBean;
-import org.apache.camel.cdi.bean.PropertyInjectBean;
-import org.apache.camel.component.properties.PropertiesComponent;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class BeanInjectTest {
-
-    @Inject
-    private BeanInjectBean bean;
-
-    @Produces
-    @ApplicationScoped
-    @Named("properties")
-    private static PropertiesComponent configuration() {
-        Properties properties = new Properties();
-        properties.put("property", "value");
-        PropertiesComponent component = new PropertiesComponent();
-        component.setInitialProperties(properties);
-        return component;
-    }
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test classes
-            .addClasses(BeanInjectBean.class, PropertyInjectBean.class, NamedCamelBean.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void beanInjectField() {
-        assertThat(bean.getInjectBeanField(), is(notNullValue()));
-        assertThat(bean.getInjectBeanField().getProperty(), is(equalTo("value")));
-    }
-
-    @Test
-    public void beanInjectMethod() {
-        assertThat(bean.getInjectBeanMethod(), is(notNullValue()));
-        assertThat(bean.getInjectBeanMethod().getProperty(), is(equalTo("value")));
-    }
-
-    @Test
-    public void beanInjectNamed() {
-        assertThat(bean.getInjectBeanNamed(), is(notNullValue()));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.Properties;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.bean.BeanInjectBean;
+import org.apache.camel.cdi.bean.NamedCamelBean;
+import org.apache.camel.cdi.bean.PropertyInjectBean;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class BeanInjectTest {
+
+    @Inject
+    private BeanInjectBean bean;
+
+    @Produces
+    @ApplicationScoped
+    @Named("properties")
+    private static PropertiesComponent configuration() {
+        Properties properties = new Properties();
+        properties.put("property", "value");
+        PropertiesComponent component = new PropertiesComponent();
+        component.setInitialProperties(properties);
+        return component;
+    }
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test classes
+            .addClasses(BeanInjectBean.class, PropertyInjectBean.class, NamedCamelBean.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void beanInjectField() {
+        assertThat(bean.getInjectBeanField(), is(notNullValue()));
+        assertThat(bean.getInjectBeanField().getProperty(), is(equalTo("value")));
+    }
+
+    @Test
+    public void beanInjectMethod() {
+        assertThat(bean.getInjectBeanMethod(), is(notNullValue()));
+        assertThat(bean.getInjectBeanMethod().getProperty(), is(equalTo("value")));
+    }
+
+    @Test
+    public void beanInjectNamed() {
+        assertThat(bean.getInjectBeanNamed(), is(notNullValue()));
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/Camel9973Test.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/Camel9973Test.java
index e1db9ad9..1d71e0c 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/Camel9973Test.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/Camel9973Test.java
@@ -1,70 +1,70 @@
-/*
- * 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.cdi.test;
-
-import javax.enterprise.inject.Any;
-import javax.enterprise.inject.Instance;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class Camel9973Test {
-
-    @Produces
-    private int integer = 1;
-
-    @Any
-    @Inject
-    private Instance<CamelContext> contexts;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(PrimitiveInjectionPoint.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyDeployment() {
-        assertThat("Camel context beans are deployed!", contexts.isUnsatisfied(), is(equalTo(true)));
-    }
-}
-
-class PrimitiveInjectionPoint {
-
-    @Inject
-    int integer;
-}
\ No newline at end of file
+/*
+ * 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.cdi.test;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class Camel9973Test {
+
+    @Produces
+    private int integer = 1;
+
+    @Any
+    @Inject
+    private Instance<CamelContext> contexts;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(PrimitiveInjectionPoint.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyDeployment() {
+        assertThat("Camel context beans are deployed!", contexts.isUnsatisfied(), is(equalTo(true)));
+    }
+}
+
+class PrimitiveInjectionPoint {
+
+    @Inject
+    int integer;
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelContextAwareTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelContextAwareTest.java
index 26b6f7e..583f13e 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelContextAwareTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelContextAwareTest.java
@@ -1,57 +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.cdi.test;
-
-import javax.inject.Inject;
-
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.bean.CamelContextAwareBean;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class CamelContextAwareTest {
-
-    @Inject
-    private CamelContextAwareBean bean;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(CamelContextAwareBean.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void camelContextAware() {
-        assertThat(bean.getCamelContext(), is(notNullValue()));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import javax.inject.Inject;
+
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.bean.CamelContextAwareBean;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class CamelContextAwareTest {
+
+    @Inject
+    private CamelContextAwareBean bean;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(CamelContextAwareBean.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void camelContextAware() {
+        assertThat(bean.getCamelContext(), is(notNullValue()));
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelContextProducerFieldTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelContextProducerFieldTest.java
index 72bf844..6787e35 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelContextProducerFieldTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelContextProducerFieldTest.java
@@ -1,97 +1,98 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.ServiceStatus;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.NamedCamelBean;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class CamelContextProducerFieldTest {
-
-    @Named
-    @Produces
-    @ApplicationScoped
-    private static CamelContext context = new DefaultCamelContext();
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(NamedCamelBean.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyProducedCamelContext(CamelContext context) {
-        assertThat("The producer field sets the context name!", context.getName(), is(equalTo("context")));
-        assertThat("The producer field starts the Camel context!", context.getStatus(), is(equalTo(ServiceStatus.Started)));
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test-processed");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-
-    private static class NamedBeanRoute extends RouteBuilder {
-        @Override
-        public void configure() {
-            from("direct:inbound").bean("beanName").to("mock:outbound");
-        }
-    }
-}
\ No newline at end of file
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.NamedCamelBean;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class CamelContextProducerFieldTest {
+
+    @Named
+    @Produces
+    @ApplicationScoped
+    private static CamelContext context = new DefaultCamelContext();
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(NamedCamelBean.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyProducedCamelContext(CamelContext context) {
+        assertThat("The producer field sets the context name!", context.getName(), is(equalTo("context")));
+        assertThat("The producer field starts the Camel context!", context.getStatus(), is(equalTo(ServiceStatus.Started)));
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test-processed");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+
+    private static class NamedBeanRoute extends RouteBuilder {
+        @Override
+        public void configure() {
+            from("direct:inbound").bean("beanName").to("mock:outbound");
+        }
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelContextProducerMethodTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelContextProducerMethodTest.java
index 0ded542..056b417 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelContextProducerMethodTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelContextProducerMethodTest.java
@@ -1,89 +1,90 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.ServiceStatus;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.CamelContextProducerMethod;
-import org.apache.camel.cdi.bean.NamedCamelBean;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class CamelContextProducerMethodTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test classes
-            .addClasses(CamelContextProducerMethod.class, NamedCamelBean.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyProducedCamelContext(CamelContext context) {
-        assertThat("The producer method sets the context name!", context.getName(), is(equalTo("camel-producer-method")));
-        assertThat("The producer method starts the Camel context!", context.getStatus(), is(equalTo(ServiceStatus.Started)));
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test-processed");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-
-    private static class NamedBeanRoute extends RouteBuilder {
-        @Override
-        public void configure() {
-            from("direct:inbound").bean("beanName").to("mock:outbound");
-        }
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.CamelContextProducerMethod;
+import org.apache.camel.cdi.bean.NamedCamelBean;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class CamelContextProducerMethodTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test classes
+            .addClasses(CamelContextProducerMethod.class, NamedCamelBean.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyProducedCamelContext(CamelContext context) {
+        assertThat("The producer method sets the context name!", context.getName(), is(equalTo("camel-producer-method")));
+        assertThat("The producer method starts the Camel context!", context.getStatus(), is(equalTo(ServiceStatus.Started)));
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test-processed");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+
+    private static class NamedBeanRoute extends RouteBuilder {
+        @Override
+        public void configure() {
+            from("direct:inbound").bean("beanName").to("mock:outbound");
+        }
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventEndpointTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventEndpointTest.java
index 252e571..759edea 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventEndpointTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventEndpointTest.java
@@ -1,79 +1,80 @@
-/*
- * 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.cdi.test;
-
-import java.util.EventObject;
-import javax.inject.Inject;
-
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.CdiEventEndpoint;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.contains;
-import static org.hamcrest.Matchers.hasProperty;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class CamelEventEndpointTest {
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(CamelEventRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void camelStartedEvent(@Uri("mock:started") MockEndpoint started) {
-        assertThat("Event fired is incorrect!", started.getExchanges(),
-            contains(
-                hasProperty("in",
-                    hasProperty("body", instanceOf(CamelContextStartedEvent.class)))));
-    }
-
-}
-
-class CamelEventRoute extends RouteBuilder {
-
-    @Inject
-    private CdiEventEndpoint<CamelContextStartedEvent> started;
-
-    @Inject
-    private CdiEventEndpoint<EventObject> events;
-
-    @Override
-    public void configure() {
-        from(events).startupOrder(1).to("mock:events");
-        from(started).startupOrder(2).to("mock:started");
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.EventObject;
+
+import javax.inject.Inject;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.CdiEventEndpoint;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.hasProperty;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class CamelEventEndpointTest {
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(CamelEventRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void camelStartedEvent(@Uri("mock:started") MockEndpoint started) {
+        assertThat("Event fired is incorrect!", started.getExchanges(),
+            contains(
+                hasProperty("in",
+                    hasProperty("body", instanceOf(CamelContextStartedEvent.class)))));
+    }
+
+}
+
+class CamelEventRoute extends RouteBuilder {
+
+    @Inject
+    private CdiEventEndpoint<CamelContextStartedEvent> started;
+
+    @Inject
+    private CdiEventEndpoint<EventObject> events;
+
+    @Override
+    public void configure() {
+        from(events).startupOrder(1).to("mock:events");
+        from(started).startupOrder(2).to("mock:started");
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventNotifierTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventNotifierTest.java
index 4b9da2b..1577e63 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventNotifierTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelEventNotifierTest.java
@@ -1,151 +1,152 @@
-/*
- * 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.cdi.test;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.SimpleCamelRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
-import org.apache.camel.spi.CamelEvent.CamelContextStartingEvent;
-import org.apache.camel.spi.CamelEvent.CamelContextStoppedEvent;
-import org.apache.camel.spi.CamelEvent.CamelContextStoppingEvent;
-import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
-import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
-import org.apache.camel.spi.CamelEvent.ExchangeEvent;
-import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
-import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.arquillian.junit.InSequence;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.contains;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class CamelEventNotifierTest {
-
-    @Inject
-    @Uri("direct:start")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:result")
-    private MockEndpoint outbound;
-
-    @Produces
-    @ApplicationScoped
-    private List<Class> firedEvents = new ArrayList<>();
-
-    private void onCamelContextStartingEvent(@Observes CamelContextStartingEvent event, List<Class> events) {
-        events.add(CamelContextStartingEvent.class);
-    }
-
-    private void onCamelContextStartedEvent(@Observes CamelContextStartedEvent event, List<Class> events) {
-        events.add(CamelContextStartedEvent.class);
-    }
-
-    private void onExchangeEvent(@Observes ExchangeEvent event, List<Class> events) {
-        events.add(event.getClass().getInterfaces()[0]);
-    }
-
-    private void onCamelContextStoppingEvent(@Observes CamelContextStoppingEvent event, List<Class> events) {
-        events.add(CamelContextStoppingEvent.class);
-    }
-
-    private void onCamelContextStoppedEvent(@Observes CamelContextStoppedEvent event, List<Class> events) {
-        events.add(CamelContextStoppedEvent.class);
-    }
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(SimpleCamelRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    @InSequence(1)
-    public void startedCamelContext(List<Class> events) {
-        assertThat("Events fired are incorrect!", events,
-            contains(
-                CamelContextStartingEvent.class,
-                CamelContextStartedEvent.class));
-    }
-
-    @Test
-    @InSequence(2)
-    public void sendMessageToInbound(List<Class> events) throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-
-        assertThat("Events fired are incorrect!", events,
-            contains(
-                CamelContextStartingEvent.class,
-                CamelContextStartedEvent.class,
-                ExchangeSendingEvent.class,
-                ExchangeCreatedEvent.class,
-                ExchangeSendingEvent.class,
-                ExchangeSentEvent.class,
-                ExchangeCompletedEvent.class,
-                ExchangeSentEvent.class));
-    }
-
-    @Test
-    @InSequence(3)
-    public void stopCamelContext(CamelContext context, List<Class> events) throws Exception {
-        context.stop();
-
-        assertThat("Events fired are incorrect!", events,
-            contains(
-                CamelContextStartingEvent.class,
-                CamelContextStartedEvent.class,
-                ExchangeSendingEvent.class,
-                ExchangeCreatedEvent.class,
-                ExchangeSendingEvent.class,
-                ExchangeSentEvent.class,
-                ExchangeCompletedEvent.class,
-                ExchangeSentEvent.class,
-                CamelContextStoppingEvent.class,
-                CamelContextStoppedEvent.class));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.SimpleCamelRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStartingEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStoppedEvent;
+import org.apache.camel.spi.CamelEvent.CamelContextStoppingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCompletedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
+import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.contains;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class CamelEventNotifierTest {
+
+    @Inject
+    @Uri("direct:start")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:result")
+    private MockEndpoint outbound;
+
+    @Produces
+    @ApplicationScoped
+    private List<Class> firedEvents = new ArrayList<>();
+
+    private void onCamelContextStartingEvent(@Observes CamelContextStartingEvent event, List<Class> events) {
+        events.add(CamelContextStartingEvent.class);
+    }
+
+    private void onCamelContextStartedEvent(@Observes CamelContextStartedEvent event, List<Class> events) {
+        events.add(CamelContextStartedEvent.class);
+    }
+
+    private void onExchangeEvent(@Observes ExchangeEvent event, List<Class> events) {
+        events.add(event.getClass().getInterfaces()[0]);
+    }
+
+    private void onCamelContextStoppingEvent(@Observes CamelContextStoppingEvent event, List<Class> events) {
+        events.add(CamelContextStoppingEvent.class);
+    }
+
+    private void onCamelContextStoppedEvent(@Observes CamelContextStoppedEvent event, List<Class> events) {
+        events.add(CamelContextStoppedEvent.class);
+    }
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(SimpleCamelRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    @InSequence(1)
+    public void startedCamelContext(List<Class> events) {
+        assertThat("Events fired are incorrect!", events,
+            contains(
+                CamelContextStartingEvent.class,
+                CamelContextStartedEvent.class));
+    }
+
+    @Test
+    @InSequence(2)
+    public void sendMessageToInbound(List<Class> events) throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+
+        assertThat("Events fired are incorrect!", events,
+            contains(
+                CamelContextStartingEvent.class,
+                CamelContextStartedEvent.class,
+                ExchangeSendingEvent.class,
+                ExchangeCreatedEvent.class,
+                ExchangeSendingEvent.class,
+                ExchangeSentEvent.class,
+                ExchangeCompletedEvent.class,
+                ExchangeSentEvent.class));
+    }
+
+    @Test
+    @InSequence(3)
+    public void stopCamelContext(CamelContext context, List<Class> events) throws Exception {
+        context.stop();
+
+        assertThat("Events fired are incorrect!", events,
+            contains(
+                CamelContextStartingEvent.class,
+                CamelContextStartedEvent.class,
+                ExchangeSendingEvent.class,
+                ExchangeCreatedEvent.class,
+                ExchangeSendingEvent.class,
+                ExchangeSentEvent.class,
+                ExchangeCompletedEvent.class,
+                ExchangeSentEvent.class,
+                CamelContextStoppingEvent.class,
+                CamelContextStoppedEvent.class));
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelRouteEventNotifierTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelRouteEventNotifierTest.java
index 0d07281..b780f19 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelRouteEventNotifierTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CamelRouteEventNotifierTest.java
@@ -1,255 +1,255 @@
-/*
- * 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.cdi.test;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Produces;
-import javax.inject.Named;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.bean.OtherCamelRoute;
-import org.apache.camel.cdi.bean.SimpleCamelRoute;
-import org.apache.camel.spi.CamelEvent;
-import org.apache.camel.spi.CamelEvent.RouteAddedEvent;
-import org.apache.camel.spi.CamelEvent.RouteRemovedEvent;
-import org.apache.camel.spi.CamelEvent.RouteStartedEvent;
-import org.apache.camel.spi.CamelEvent.RouteStoppedEvent;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.arquillian.junit.InSequence;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.both;
-import static org.hamcrest.Matchers.contains;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasProperty;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class CamelRouteEventNotifierTest {
-
-    @Produces
-    @Named("all")
-    @ApplicationScoped
-    private List<CamelEvent> allFiredEvents = new ArrayList<>();
-
-    @Produces
-    @Named("simple")
-    @ApplicationScoped
-    private List<CamelEvent> simpleFiredEvents = new ArrayList<>();
-
-    @Produces
-    @Named("other")
-    @ApplicationScoped
-    private List<CamelEvent> otherFiredEvents = new ArrayList<>();
-
-    private void onRouteAddedEventEventAll(@Observes RouteAddedEvent event,
-                                           @Named("all") List<CamelEvent> events) {
-        events.add(event);
-    }
-
-    private void onRouteAddedEventEventSimple(@Observes @Named("simple") RouteAddedEvent event,
-                                              @Named("simple") List<CamelEvent> events) {
-        events.add(event);
-    }
-
-    private void onRouteAddedEventEventOther(@Observes @Named("other") RouteAddedEvent event,
-                                             @Named("other") List<CamelEvent> events) {
-        events.add(event);
-    }
-
-    private void onRouteStartedEventEventAll(@Observes RouteStartedEvent event,
-                                             @Named("all") List<CamelEvent> events) {
-        events.add(event);
-    }
-
-    private void onRouteStartedEventEventSimple(@Observes @Named("simple") RouteStartedEvent event,
-                                                @Named("simple") List<CamelEvent> events) {
-        events.add(event);
-    }
-
-    private void onRouteStartedEventEventOther(@Observes @Named("other") RouteStartedEvent event,
-                                               @Named("other") List<CamelEvent> events) {
-        events.add(event);
-    }
-
-    private void onRouteStoppedEventEventAll(@Observes RouteStoppedEvent event,
-                                             @Named("all") List<CamelEvent> events) {
-        events.add(event);
-    }
-
-    private void onRouteStoppedEventEventSimple(@Observes @Named("simple") RouteStoppedEvent event,
-                                                @Named("simple") List<CamelEvent> events) {
-        events.add(event);
-    }
-
-    private void onRouteStoppedEventEventOther(@Observes @Named("other") RouteStoppedEvent event,
-                                               @Named("other") List<CamelEvent> events) {
-        events.add(event);
-    }
-
-    private void onRouteRemovedEventEventAll(@Observes RouteRemovedEvent event,
-                                             @Named("all") List<CamelEvent> events) {
-        events.add(event);
-    }
-
-    private void onRouteRemovedEventEventSimple(@Observes @Named("simple") RouteRemovedEvent event,
-                                                @Named("simple") List<CamelEvent> events) {
-        events.add(event);
-    }
-
-    private void onRouteRemovedEventEventOther(@Observes @Named("other") RouteRemovedEvent event,
-                                               @Named("other") List<CamelEvent> events) {
-        events.add(event);
-    }
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test classes
-            .addClasses(SimpleCamelRoute.class, OtherCamelRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    @InSequence(1)
-    public void startedCamelContext(@Named("all") List<CamelEvent> all,
-                                    @Named("simple") List<CamelEvent> simple,
-                                    @Named("other") List<CamelEvent> other) {
-        assertThat("Events fired are incorrect!", all,
-            contains(
-                both(
-                    instanceOf(RouteAddedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
-                both(
-                    instanceOf(RouteAddedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
-                both(
-                    instanceOf(RouteStartedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
-                both(
-                    instanceOf(RouteStartedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("other")))))
-            )
-        );
-        assertThat("Events fired are incorrect!", simple,
-            contains(
-                both(
-                    instanceOf(RouteAddedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
-                both(
-                    instanceOf(RouteStartedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple")))))
-            )
-        );
-        assertThat("Events fired are incorrect!", other,
-            contains(
-                both(
-                    instanceOf(RouteAddedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
-                both(
-                    instanceOf(RouteStartedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("other")))))
-            )
-        );
-    }
-
-    @Test
-    @InSequence(3)
-    public void stopCamelContext(CamelContext context,
-                                 @Named("all") List<CamelEvent> all,
-                                 @Named("simple") List<CamelEvent> simple,
-                                 @Named("other") List<CamelEvent> other) throws Exception {
-        context.stop();
-
-        assertThat("Events fired are incorrect!", all,
-            contains(
-                both(
-                    instanceOf(RouteAddedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
-                both(
-                    instanceOf(RouteAddedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
-                both(
-                    instanceOf(RouteStartedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
-                both(
-                    instanceOf(RouteStartedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
-                both(
-                    instanceOf(RouteStoppedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
-                both(
-                    instanceOf(RouteRemovedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
-                both(
-                    instanceOf(RouteStoppedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
-                both(
-                    instanceOf(RouteRemovedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple")))))
-            )
-        );
-        assertThat("Events fired are incorrect!", simple,
-            contains(
-                both(
-                    instanceOf(RouteAddedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
-                both(
-                    instanceOf(RouteStartedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
-                both(
-                    instanceOf(RouteStoppedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
-                both(
-                    instanceOf(RouteRemovedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple")))))
-            )
-        );
-        assertThat("Events fired are incorrect!", other,
-            contains(
-                both(
-                    instanceOf(RouteAddedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
-                both(
-                    instanceOf(RouteStartedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
-                both(
-                    instanceOf(RouteStoppedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
-                both(
-                    instanceOf(RouteRemovedEvent.class))
-                    .and(hasProperty("route", hasProperty("id", is(equalTo("other")))))
-            )
-        );
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.Produces;
+import javax.inject.Named;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.bean.OtherCamelRoute;
+import org.apache.camel.cdi.bean.SimpleCamelRoute;
+import org.apache.camel.spi.CamelEvent;
+import org.apache.camel.spi.CamelEvent.RouteAddedEvent;
+import org.apache.camel.spi.CamelEvent.RouteRemovedEvent;
+import org.apache.camel.spi.CamelEvent.RouteStartedEvent;
+import org.apache.camel.spi.CamelEvent.RouteStoppedEvent;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.both;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasProperty;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class CamelRouteEventNotifierTest {
+
+    @Produces
+    @Named("all")
+    @ApplicationScoped
+    private List<CamelEvent> allFiredEvents = new ArrayList<>();
+
+    @Produces
+    @Named("simple")
+    @ApplicationScoped
+    private List<CamelEvent> simpleFiredEvents = new ArrayList<>();
+
+    @Produces
+    @Named("other")
+    @ApplicationScoped
+    private List<CamelEvent> otherFiredEvents = new ArrayList<>();
+
+    private void onRouteAddedEventEventAll(@Observes RouteAddedEvent event,
+                                           @Named("all") List<CamelEvent> events) {
+        events.add(event);
+    }
+
+    private void onRouteAddedEventEventSimple(@Observes @Named("simple") RouteAddedEvent event,
+                                              @Named("simple") List<CamelEvent> events) {
+        events.add(event);
+    }
+
+    private void onRouteAddedEventEventOther(@Observes @Named("other") RouteAddedEvent event,
+                                             @Named("other") List<CamelEvent> events) {
+        events.add(event);
+    }
+
+    private void onRouteStartedEventEventAll(@Observes RouteStartedEvent event,
+                                             @Named("all") List<CamelEvent> events) {
+        events.add(event);
+    }
+
+    private void onRouteStartedEventEventSimple(@Observes @Named("simple") RouteStartedEvent event,
+                                                @Named("simple") List<CamelEvent> events) {
+        events.add(event);
+    }
+
+    private void onRouteStartedEventEventOther(@Observes @Named("other") RouteStartedEvent event,
+                                               @Named("other") List<CamelEvent> events) {
+        events.add(event);
+    }
+
+    private void onRouteStoppedEventEventAll(@Observes RouteStoppedEvent event,
+                                             @Named("all") List<CamelEvent> events) {
+        events.add(event);
+    }
+
+    private void onRouteStoppedEventEventSimple(@Observes @Named("simple") RouteStoppedEvent event,
+                                                @Named("simple") List<CamelEvent> events) {
+        events.add(event);
+    }
+
+    private void onRouteStoppedEventEventOther(@Observes @Named("other") RouteStoppedEvent event,
+                                               @Named("other") List<CamelEvent> events) {
+        events.add(event);
+    }
+
+    private void onRouteRemovedEventEventAll(@Observes RouteRemovedEvent event,
+                                             @Named("all") List<CamelEvent> events) {
+        events.add(event);
+    }
+
+    private void onRouteRemovedEventEventSimple(@Observes @Named("simple") RouteRemovedEvent event,
+                                                @Named("simple") List<CamelEvent> events) {
+        events.add(event);
+    }
+
+    private void onRouteRemovedEventEventOther(@Observes @Named("other") RouteRemovedEvent event,
+                                               @Named("other") List<CamelEvent> events) {
+        events.add(event);
+    }
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test classes
+            .addClasses(SimpleCamelRoute.class, OtherCamelRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    @InSequence(1)
+    public void startedCamelContext(@Named("all") List<CamelEvent> all,
+                                    @Named("simple") List<CamelEvent> simple,
+                                    @Named("other") List<CamelEvent> other) {
+        assertThat("Events fired are incorrect!", all,
+            contains(
+                both(
+                    instanceOf(RouteAddedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
+                both(
+                    instanceOf(RouteAddedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
+                both(
+                    instanceOf(RouteStartedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
+                both(
+                    instanceOf(RouteStartedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("other")))))
+            )
+        );
+        assertThat("Events fired are incorrect!", simple,
+            contains(
+                both(
+                    instanceOf(RouteAddedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
+                both(
+                    instanceOf(RouteStartedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple")))))
+            )
+        );
+        assertThat("Events fired are incorrect!", other,
+            contains(
+                both(
+                    instanceOf(RouteAddedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
+                both(
+                    instanceOf(RouteStartedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("other")))))
+            )
+        );
+    }
+
+    @Test
+    @InSequence(3)
+    public void stopCamelContext(CamelContext context,
+                                 @Named("all") List<CamelEvent> all,
+                                 @Named("simple") List<CamelEvent> simple,
+                                 @Named("other") List<CamelEvent> other) throws Exception {
+        context.stop();
+
+        assertThat("Events fired are incorrect!", all,
+            contains(
+                both(
+                    instanceOf(RouteAddedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
+                both(
+                    instanceOf(RouteAddedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
+                both(
+                    instanceOf(RouteStartedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
+                both(
+                    instanceOf(RouteStartedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
+                both(
+                    instanceOf(RouteStoppedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
+                both(
+                    instanceOf(RouteRemovedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
+                both(
+                    instanceOf(RouteStoppedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
+                both(
+                    instanceOf(RouteRemovedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple")))))
+            )
+        );
+        assertThat("Events fired are incorrect!", simple,
+            contains(
+                both(
+                    instanceOf(RouteAddedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
+                both(
+                    instanceOf(RouteStartedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
+                both(
+                    instanceOf(RouteStoppedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple"))))),
+                both(
+                    instanceOf(RouteRemovedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("simple")))))
+            )
+        );
+        assertThat("Events fired are incorrect!", other,
+            contains(
+                both(
+                    instanceOf(RouteAddedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
+                both(
+                    instanceOf(RouteStartedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
+                both(
+                    instanceOf(RouteStoppedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("other"))))),
+                both(
+                    instanceOf(RouteRemovedEvent.class))
+                    .and(hasProperty("route", hasProperty("id", is(equalTo("other")))))
+            )
+        );
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CdiCamelConfigurationTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CdiCamelConfigurationTest.java
index 8e151b3..3c71468 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CdiCamelConfigurationTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CdiCamelConfigurationTest.java
@@ -68,4 +68,4 @@
     public void checkThatNoRouteBuildersAddedToContext() {
         assertTrue("There are RouteBuilder instances in context", camelContext.getRoutes().isEmpty());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ConsumeMethodTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ConsumeMethodTest.java
index ae1f377..004cfe9 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ConsumeMethodTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ConsumeMethodTest.java
@@ -1,69 +1,70 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.ConsumeMethodBean;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class ConsumeMethodTest {
-
-    @Inject
-    @Uri("seda:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(ConsumeMethodBean.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void consumeAnnotation() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.ConsumeMethodBean;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class ConsumeMethodTest {
+
+    @Inject
+    @Uri("seda:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(ConsumeMethodBean.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void consumeAnnotation() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ConsumerTemplateTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ConsumerTemplateTest.java
index b3b1170..2a35627 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ConsumerTemplateTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ConsumerTemplateTest.java
@@ -1,64 +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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.ConsumerTemplate;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class ConsumerTemplateTest {
-
-    @Inject
-    private ProducerTemplate producer;
-
-    @Inject
-    private ConsumerTemplate consumer;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendThenReceiveBody() {
-        producer.sendBody("seda:foo", "test");
-
-        String body = consumer.receiveBody("seda:foo", TimeUnit.SECONDS.toMillis(1L), String.class);
-
-        assertThat("Body is incorrect!", body, is(equalTo("test")));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ConsumerTemplate;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class ConsumerTemplateTest {
+
+    @Inject
+    private ProducerTemplate producer;
+
+    @Inject
+    private ConsumerTemplate consumer;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendThenReceiveBody() {
+        producer.sendBody("seda:foo", "test");
+
+        String body = consumer.receiveBody("seda:foo", TimeUnit.SECONDS.toMillis(1L), String.class);
+
+        assertThat("Body is incorrect!", body, is(equalTo("test")));
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ContextComponentTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ContextComponentTest.java
index fdffba9..39c417c 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ContextComponentTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ContextComponentTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.cdi.test;
 
 import java.util.concurrent.TimeUnit;
+
 import javax.inject.Inject;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CustomCamelContextTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CustomCamelContextTest.java
index 8f10940..9164583 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CustomCamelContextTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/CustomCamelContextTest.java
@@ -1,90 +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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.ServiceStatus;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.ManualStartupCamelContext;
-import org.apache.camel.cdi.bean.UriEndpointRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.arquillian.junit.InSequence;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class CustomCamelContextTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test classes
-            .addClasses(ManualStartupCamelContext.class, UriEndpointRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    @InSequence(1)
-    public void verifyCamelContext(CamelContext context) {
-        assertThat(context.getName(), is(equalTo("manual-startup")));
-
-        assertThat(inbound.getCamelContext().getName(), is(equalTo(context.getName())));
-        assertThat(outbound.getCamelContext().getName(), is(equalTo(context.getName())));
-
-        assertThat(context.getRouteController().getRouteStatus("uri-route"), is(equalTo(ServiceStatus.Stopped)));
-    }
-
-    @Test
-    @InSequence(2)
-    public void sendMessageToInbound(CamelContext context) throws Exception {
-        context.getRouteController().startAllRoutes();
-
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.ManualStartupCamelContext;
+import org.apache.camel.cdi.bean.UriEndpointRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class CustomCamelContextTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test classes
+            .addClasses(ManualStartupCamelContext.class, UriEndpointRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    @InSequence(1)
+    public void verifyCamelContext(CamelContext context) {
+        assertThat(context.getName(), is(equalTo("manual-startup")));
+
+        assertThat(inbound.getCamelContext().getName(), is(equalTo(context.getName())));
+        assertThat(outbound.getCamelContext().getName(), is(equalTo(context.getName())));
+
+        assertThat(context.getRouteController().getRouteStatus("uri-route"), is(equalTo(ServiceStatus.Stopped)));
+    }
+
+    @Test
+    @InSequence(2)
+    public void sendMessageToInbound(CamelContext context) throws Exception {
+        context.getRouteController().startAllRoutes();
+
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DefaultCamelContextTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DefaultCamelContextTest.java
index 2613d2f..55b282c 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DefaultCamelContextTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DefaultCamelContextTest.java
@@ -1,69 +1,70 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.SimpleCamelRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class DefaultCamelContextTest {
-
-    @Inject
-    @Uri("direct:start")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:result")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(SimpleCamelRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.SimpleCamelRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class DefaultCamelContextTest {
+
+    @Inject
+    @Uri("direct:start")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:result")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(SimpleCamelRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DefaultProducerTemplateTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DefaultProducerTemplateTest.java
index 251f2c1..c342626 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DefaultProducerTemplateTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DefaultProducerTemplateTest.java
@@ -1,68 +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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.UriEndpointRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class DefaultProducerTemplateTest {
-
-    @Inject
-    private ProducerTemplate producer;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint out;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(UriEndpointRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        out.expectedMessageCount(1);
-        out.expectedBodiesReceived("test");
-        
-        producer.sendBody("direct:inbound", "test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, out);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.UriEndpointRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class DefaultProducerTemplateTest {
+
+    @Inject
+    private ProducerTemplate producer;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint out;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(UriEndpointRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        out.expectedMessageCount(1);
+        out.expectedBodiesReceived("test");
+        
+        producer.sendBody("direct:inbound", "test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, out);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DeploymentDescriptorTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DeploymentDescriptorTest.java
index 55e6b4e..7050ac8 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DeploymentDescriptorTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/DeploymentDescriptorTest.java
@@ -1,68 +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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.EndpointInjectRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class DeploymentDescriptorTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackages(false, CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(EndpointInjectRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource("META-INF/beans.xml", "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-        
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.EndpointInjectRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class DeploymentDescriptorTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackages(false, CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(EndpointInjectRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource("META-INF/beans.xml", "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+        
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EndpointInjectTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EndpointInjectTest.java
index 36b9df5..0298439 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EndpointInjectTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EndpointInjectTest.java
@@ -1,69 +1,70 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.EndpointInjectRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class EndpointInjectTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(EndpointInjectRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-        
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.EndpointInjectRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class EndpointInjectTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(EndpointInjectRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+        
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EventComponentTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EventComponentTest.java
index ba766eb..caf27a2 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EventComponentTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EventComponentTest.java
@@ -1,91 +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.cdi.test;
-
-import javax.enterprise.context.ApplicationScoped;
-
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-
-@RunWith(Arquillian.class)
-public class EventComponentTest {
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    // We should ideally use an ExpectedException JUnit rule to assert the content of the exception
-    // thrown at deployment time. Unfortunately, OpenWebBeans does not enable access to the underlying
-    // cause added as deployment exception. To work-around that, we delay the start of the Camel context
-    // at runtime.
-
-    @Test
-    public void createEventEndpointByUri(NotStartedCamelContext context) {
-        try {
-            context.start(true);
-        } catch (Exception exception) {
-            Throwable cause = exception.getCause().getCause();
-            assertThat("Exception cause is not an UnsupportedOperationException!", cause, is(instanceOf(UnsupportedOperationException.class)));
-            assertThat("Incorrect exception message!", cause.getMessage(), is(equalTo("Creating CDI event endpoint isn't supported. Use @Inject CdiEventEndpoint instead")));
-            return;
-        }
-        fail("CDI event endpoint creation by URI should throw an exception!");
-    }
-
-    static class CdiEventComponentRoute extends RouteBuilder {
-
-        @Override
-        public void configure() {
-            from("cdi-event://Object").log("Unsupported operation!");
-        }
-    }
-
-    @ApplicationScoped
-    static class NotStartedCamelContext extends DefaultCamelContext {
-
-        @Override
-        public void start() {
-            start(false);
-        }
-
-        void start(boolean start) {
-            if (start) {
-                super.start();
-            }
-        }
-    }
-}
+/*
+ * 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.cdi.test;
+
+import javax.enterprise.context.ApplicationScoped;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+@RunWith(Arquillian.class)
+public class EventComponentTest {
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    // We should ideally use an ExpectedException JUnit rule to assert the content of the exception
+    // thrown at deployment time. Unfortunately, OpenWebBeans does not enable access to the underlying
+    // cause added as deployment exception. To work-around that, we delay the start of the Camel context
+    // at runtime.
+
+    @Test
+    public void createEventEndpointByUri(NotStartedCamelContext context) {
+        try {
+            context.start(true);
+        } catch (Exception exception) {
+            Throwable cause = exception.getCause().getCause();
+            assertThat("Exception cause is not an UnsupportedOperationException!", cause, is(instanceOf(UnsupportedOperationException.class)));
+            assertThat("Incorrect exception message!", cause.getMessage(), is(equalTo("Creating CDI event endpoint isn't supported. Use @Inject CdiEventEndpoint instead")));
+            return;
+        }
+        fail("CDI event endpoint creation by URI should throw an exception!");
+    }
+
+    static class CdiEventComponentRoute extends RouteBuilder {
+
+        @Override
+        public void configure() {
+            from("cdi-event://Object").log("Unsupported operation!");
+        }
+    }
+
+    @ApplicationScoped
+    static class NotStartedCamelContext extends DefaultCamelContext {
+
+        @Override
+        public void start() {
+            start(false);
+        }
+
+        void start(boolean start) {
+            if (start) {
+                super.start();
+            }
+        }
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EventEndpointCdi12Test.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EventEndpointCdi12Test.java
index 461e066..94668cf 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EventEndpointCdi12Test.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EventEndpointCdi12Test.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.event.Event;
 import javax.enterprise.event.Observes;
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EventEndpointTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EventEndpointTest.java
index 5e01e91..1932a7a 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EventEndpointTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/EventEndpointTest.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.event.Event;
 import javax.enterprise.event.Observes;
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedEndpointTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedEndpointTest.java
index 12238f4..ce42f40 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedEndpointTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedEndpointTest.java
@@ -1,68 +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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.InjectedEndpointRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class InjectedEndpointTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(InjectedEndpointRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-        
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.InjectedEndpointRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class InjectedEndpointTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(InjectedEndpointRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+        
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterTest.java
index ad71f31..5c37c9f 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterTest.java
@@ -1,103 +1,104 @@
-/*
- * 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.cdi.test;
-
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-import javax.inject.Named;
-
-import org.apache.camel.NoTypeConversionAvailableException;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.TypeConverter;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.InjectedTypeConverterRoute;
-import org.apache.camel.cdi.converter.InjectedTestTypeConverter;
-import org.apache.camel.cdi.pojo.TypeConverterInput;
-import org.apache.camel.cdi.pojo.TypeConverterOutput;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.component.properties.PropertiesComponent;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class InjectedTypeConverterTest {
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(InjectedTypeConverterRoute.class)
-            // Type converter
-            .addClass(InjectedTestTypeConverter.class)
-            // No need as Camel CDI automatically registers the type converter bean
-            //.addAsManifestResource(new StringAsset("org.apache.camel.cdi.se.converter"), ArchivePaths.create("services/org/apache/camel/TypeConverter"))
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Produces
-    @ApplicationScoped
-    @Named("properties")
-    private static PropertiesComponent configuration() {
-        Properties properties = new Properties();
-        properties.put("property1", "value 1");
-        properties.put("property2", "value 2");
-        PropertiesComponent component = new PropertiesComponent();
-        component.setInitialProperties(properties);
-        return component;
-    }
-
-    @Test
-    public void sendMessageToInbound(@Uri("direct:inbound") ProducerTemplate inbound,
-                                     @Uri("mock:outbound") MockEndpoint outbound) throws InterruptedException {
-        outbound.expectedMessageCount(1);
-
-        TypeConverterInput input = new TypeConverterInput();
-        input.setProperty("property value is [{{property1}}]");
-        
-        inbound.sendBody(input);
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-        assertThat(outbound.getExchanges().get(0).getIn().getBody(TypeConverterOutput.class).getProperty(), is(equalTo("property value is [value 1]")));
-    }
-
-    @Test
-    public void convertWithTypeConverter(TypeConverter converter) throws NoTypeConversionAvailableException {
-        TypeConverterInput input = new TypeConverterInput();
-        input.setProperty("property value is [{{property2}}]");
-
-        TypeConverterOutput output = converter.mandatoryConvertTo(TypeConverterOutput.class, input);
-
-        assertThat(output.getProperty(), is(equalTo("property value is [value 2]")));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Named;
+
+import org.apache.camel.NoTypeConversionAvailableException;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.TypeConverter;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.InjectedTypeConverterRoute;
+import org.apache.camel.cdi.converter.InjectedTestTypeConverter;
+import org.apache.camel.cdi.pojo.TypeConverterInput;
+import org.apache.camel.cdi.pojo.TypeConverterOutput;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class InjectedTypeConverterTest {
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(InjectedTypeConverterRoute.class)
+            // Type converter
+            .addClass(InjectedTestTypeConverter.class)
+            // No need as Camel CDI automatically registers the type converter bean
+            //.addAsManifestResource(new StringAsset("org.apache.camel.cdi.se.converter"), ArchivePaths.create("services/org/apache/camel/TypeConverter"))
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Produces
+    @ApplicationScoped
+    @Named("properties")
+    private static PropertiesComponent configuration() {
+        Properties properties = new Properties();
+        properties.put("property1", "value 1");
+        properties.put("property2", "value 2");
+        PropertiesComponent component = new PropertiesComponent();
+        component.setInitialProperties(properties);
+        return component;
+    }
+
+    @Test
+    public void sendMessageToInbound(@Uri("direct:inbound") ProducerTemplate inbound,
+                                     @Uri("mock:outbound") MockEndpoint outbound) throws InterruptedException {
+        outbound.expectedMessageCount(1);
+
+        TypeConverterInput input = new TypeConverterInput();
+        input.setProperty("property value is [{{property1}}]");
+        
+        inbound.sendBody(input);
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+        assertThat(outbound.getExchanges().get(0).getIn().getBody(TypeConverterOutput.class).getProperty(), is(equalTo("property value is [value 1]")));
+    }
+
+    @Test
+    public void convertWithTypeConverter(TypeConverter converter) throws NoTypeConversionAvailableException {
+        TypeConverterInput input = new TypeConverterInput();
+        input.setProperty("property value is [{{property2}}]");
+
+        TypeConverterOutput output = converter.mandatoryConvertTo(TypeConverterOutput.class, input);
+
+        assertThat(output.getProperty(), is(equalTo("property value is [value 2]")));
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ManualCamelContextTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ManualCamelContextTest.java
index 7272124..ba3a657 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ManualCamelContextTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ManualCamelContextTest.java
@@ -1,117 +1,118 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.ServiceStatus;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.ManualCamelRoute;
-import org.apache.camel.cdi.bean.SimpleCamelRoute;
-import org.apache.camel.cdi.qualifier.Manual;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.arquillian.junit.InSequence;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class ManualCamelContextTest {
-
-    @Inject
-    @Uri("direct:start")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:result")
-    private MockEndpoint outbound;
-
-    @Inject
-    @Uri("direct:manual")
-    private ProducerTemplate manual;
-
-    @Inject
-    @Uri("mock:manual")
-    private MockEndpoint mock;
-
-    @Inject
-    @Manual
-    private ManualCamelRoute builder;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test classes
-            .addClasses(SimpleCamelRoute.class, ManualCamelRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    @InSequence(1)
-    public void verifyContext(CamelContext context) {
-        assertThat("Number of routes is incorrect!", context.getRoutes().size(), is(equalTo(1)));
-        assertThat("Configured route is incorrect!", context.getRouteController().getRouteStatus("simple"), is(equalTo(ServiceStatus.Started)));
-    }
-
-    @Test
-    @InSequence(2)
-    public void addManualRoute(CamelContext context) throws Exception {
-        context.addRoutes(builder);
-
-        assertThat("Number of routes is incorrect!", context.getRoutes().size(), is(equalTo(2)));
-        assertThat("Configured route is incorrect!", context.getRouteController().getRouteStatus("manual"), is(equalTo(ServiceStatus.Started)));
-    }
-
-    @Test
-    @InSequence(3)
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-
-    @Test
-    @InSequence(4)
-    public void sendMessageToManual() throws InterruptedException {
-        mock.expectedMessageCount(1);
-        mock.expectedBodiesReceived("manual");
-
-        manual.sendBody("manual");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, mock);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.ManualCamelRoute;
+import org.apache.camel.cdi.bean.SimpleCamelRoute;
+import org.apache.camel.cdi.qualifier.Manual;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class ManualCamelContextTest {
+
+    @Inject
+    @Uri("direct:start")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:result")
+    private MockEndpoint outbound;
+
+    @Inject
+    @Uri("direct:manual")
+    private ProducerTemplate manual;
+
+    @Inject
+    @Uri("mock:manual")
+    private MockEndpoint mock;
+
+    @Inject
+    @Manual
+    private ManualCamelRoute builder;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test classes
+            .addClasses(SimpleCamelRoute.class, ManualCamelRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    @InSequence(1)
+    public void verifyContext(CamelContext context) {
+        assertThat("Number of routes is incorrect!", context.getRoutes().size(), is(equalTo(1)));
+        assertThat("Configured route is incorrect!", context.getRouteController().getRouteStatus("simple"), is(equalTo(ServiceStatus.Started)));
+    }
+
+    @Test
+    @InSequence(2)
+    public void addManualRoute(CamelContext context) throws Exception {
+        context.addRoutes(builder);
+
+        assertThat("Number of routes is incorrect!", context.getRoutes().size(), is(equalTo(2)));
+        assertThat("Configured route is incorrect!", context.getRouteController().getRouteStatus("manual"), is(equalTo(ServiceStatus.Started)));
+    }
+
+    @Test
+    @InSequence(3)
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+
+    @Test
+    @InSequence(4)
+    public void sendMessageToManual() throws InterruptedException {
+        mock.expectedMessageCount(1);
+        mock.expectedBodiesReceived("manual");
+
+        manual.sendBody("manual");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, mock);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MockEndpointTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MockEndpointTest.java
index 3585b3d..b73afce 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MockEndpointTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MockEndpointTest.java
@@ -1,83 +1,84 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.DefaultCamelContextBean;
-import org.apache.camel.cdi.bean.MockAnnotationRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class MockEndpointTest {
-
-    @Inject
-    private DefaultCamelContextBean defaultCamelContext;
-
-    @Inject
-    @Uri("direct:start")
-    private ProducerTemplate defaultInbound;
-
-    @Inject
-    @Uri("mock:result")
-    private MockEndpoint defaultOutbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test classes
-            .addClasses(DefaultCamelContextBean.class, MockAnnotationRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyCamelContext() {
-        assertThat(defaultCamelContext.getName(), is(equalTo("camel-cdi")));
-        assertThat(defaultOutbound.getCamelContext().getName(), is(equalTo(defaultCamelContext.getName())));
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        defaultOutbound.expectedMessageCount(1);
-        defaultOutbound.expectedBodiesReceived("test");
-        defaultOutbound.expectedHeaderReceived("foo", "bar");
-
-        defaultInbound.sendBodyAndHeader("test", "foo", "bar");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, defaultOutbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.DefaultCamelContextBean;
+import org.apache.camel.cdi.bean.MockAnnotationRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class MockEndpointTest {
+
+    @Inject
+    private DefaultCamelContextBean defaultCamelContext;
+
+    @Inject
+    @Uri("direct:start")
+    private ProducerTemplate defaultInbound;
+
+    @Inject
+    @Uri("mock:result")
+    private MockEndpoint defaultOutbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test classes
+            .addClasses(DefaultCamelContextBean.class, MockAnnotationRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyCamelContext() {
+        assertThat(defaultCamelContext.getName(), is(equalTo("camel-cdi")));
+        assertThat(defaultOutbound.getCamelContext().getName(), is(equalTo(defaultCamelContext.getName())));
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        defaultOutbound.expectedMessageCount(1);
+        defaultOutbound.expectedBodiesReceived("test");
+        defaultOutbound.expectedHeaderReceived("foo", "bar");
+
+        defaultInbound.sendBodyAndHeader("test", "foo", "bar");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, defaultOutbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NamedCamelBeanTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NamedCamelBeanTest.java
index c6e3ea3..4400a15 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NamedCamelBeanTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NamedCamelBeanTest.java
@@ -1,69 +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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.NamedCamelBean;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class NamedCamelBeanTest {
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(NamedCamelBean.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound(@Uri("direct:inbound") ProducerTemplate in,
-                                     @Uri("mock:outbound") MockEndpoint out) throws InterruptedException {
-        out.expectedMessageCount(1);
-        out.expectedBodiesReceived("test-processed");
-        
-        in.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, out);
-    }
-
-    private static class TestRoute extends RouteBuilder {
-        @Override
-        public void configure() {
-            from("direct:inbound").bean("beanName").to("mock:outbound");
-        }
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.NamedCamelBean;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class NamedCamelBeanTest {
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(NamedCamelBean.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound(@Uri("direct:inbound") ProducerTemplate in,
+                                     @Uri("mock:outbound") MockEndpoint out) throws InterruptedException {
+        out.expectedMessageCount(1);
+        out.expectedBodiesReceived("test-processed");
+        
+        in.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, out);
+    }
+
+    private static class TestRoute extends RouteBuilder {
+        @Override
+        public void configure() {
+            from("direct:inbound").bean("beanName").to("mock:outbound");
+        }
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NamedCamelContextTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NamedCamelContextTest.java
index 6c45152..745d945 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NamedCamelContextTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NamedCamelContextTest.java
@@ -1,114 +1,114 @@
-/*
- * 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.cdi.test;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Instance;
-import javax.enterprise.inject.Produces;
-import javax.inject.Named;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasProperty;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class NamedCamelContextTest {
-
-    @Named
-    @Produces
-    @ApplicationScoped
-    private CamelContext emptyNamedFieldContext = new DefaultCamelContext();
-
-    @Produces
-    @ApplicationScoped
-    @Named("named-field-context")
-    private CamelContext namedFieldContext = new DefaultCamelContext();
-
-    @Named
-    @Produces
-    @ApplicationScoped
-    private CamelContext getEmptyNamedGetterContext() {
-        return new DefaultCamelContext();
-    }
-
-    @Named
-    @Produces
-    @ApplicationScoped
-    private CamelContext getEmptyNamedMethodContext() {
-        return new DefaultCamelContext();
-    }
-
-    @Produces
-    @ApplicationScoped
-    @Named("named-getter-context")
-    private CamelContext getNamedGetterContext() {
-        return new DefaultCamelContext();
-    }
-
-    @Produces
-    @ApplicationScoped
-    @Named("named-method-context")
-    private CamelContext getNamedMethodContext() {
-        return new DefaultCamelContext();
-    }
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyCamelContexts(Instance<CamelContext> contexts) {
-        assertThat(contexts, containsInAnyOrder(
-            hasProperty("name", equalTo("emptyNamedFieldContext")),
-            hasProperty("name", equalTo("emptyNamedGetterContext")),
-            hasProperty("name", equalTo("emptyNamedMethodContext")),
-            hasProperty("name", equalTo("named-field-context")),
-            hasProperty("name", equalTo("named-getter-context")),
-            hasProperty("name", equalTo("named-method-context")),
-            hasProperty("name", equalTo("emptyNamedBeanContext")),
-            hasProperty("name", equalTo("named-bean-context"))
-        ));
-    }
-
-    @Named
-    @ApplicationScoped
-    static class EmptyNamedBeanContext extends DefaultCamelContext {
-    }
-
-    @ApplicationScoped
-    @Named("named-bean-context")
-    static class NamedBeanContext extends DefaultCamelContext {
-    }
-}
+/*
+ * 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.cdi.test;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.Produces;
+import javax.inject.Named;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasProperty;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class NamedCamelContextTest {
+
+    @Named
+    @Produces
+    @ApplicationScoped
+    private CamelContext emptyNamedFieldContext = new DefaultCamelContext();
+
+    @Produces
+    @ApplicationScoped
+    @Named("named-field-context")
+    private CamelContext namedFieldContext = new DefaultCamelContext();
+
+    @Named
+    @Produces
+    @ApplicationScoped
+    private CamelContext getEmptyNamedGetterContext() {
+        return new DefaultCamelContext();
+    }
+
+    @Named
+    @Produces
+    @ApplicationScoped
+    private CamelContext getEmptyNamedMethodContext() {
+        return new DefaultCamelContext();
+    }
+
+    @Produces
+    @ApplicationScoped
+    @Named("named-getter-context")
+    private CamelContext getNamedGetterContext() {
+        return new DefaultCamelContext();
+    }
+
+    @Produces
+    @ApplicationScoped
+    @Named("named-method-context")
+    private CamelContext getNamedMethodContext() {
+        return new DefaultCamelContext();
+    }
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyCamelContexts(Instance<CamelContext> contexts) {
+        assertThat(contexts, containsInAnyOrder(
+            hasProperty("name", equalTo("emptyNamedFieldContext")),
+            hasProperty("name", equalTo("emptyNamedGetterContext")),
+            hasProperty("name", equalTo("emptyNamedMethodContext")),
+            hasProperty("name", equalTo("named-field-context")),
+            hasProperty("name", equalTo("named-getter-context")),
+            hasProperty("name", equalTo("named-method-context")),
+            hasProperty("name", equalTo("emptyNamedBeanContext")),
+            hasProperty("name", equalTo("named-bean-context"))
+        ));
+    }
+
+    @Named
+    @ApplicationScoped
+    static class EmptyNamedBeanContext extends DefaultCamelContext {
+    }
+
+    @ApplicationScoped
+    @Named("named-bean-context")
+    static class NamedBeanContext extends DefaultCamelContext {
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NoCamelContextTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NoCamelContextTest.java
index 5a264fd..7810ead 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NoCamelContextTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NoCamelContextTest.java
@@ -1,59 +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.cdi.test;
-
-import javax.enterprise.inject.Any;
-import javax.enterprise.inject.Instance;
-import javax.inject.Inject;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-
-@RunWith(Arquillian.class)
-public class NoCamelContextTest {
-
-    @Any
-    @Inject
-    private Instance<CamelContext> contexts;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyDeployment() {
-        assertThat("Camel context beans are deployed!", contexts.isUnsatisfied(), is(equalTo(true)));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class NoCamelContextTest {
+
+    @Any
+    @Inject
+    private Instance<CamelContext> contexts;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyDeployment() {
+        assertThat("Camel context beans are deployed!", contexts.isUnsatisfied(), is(equalTo(true)));
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NoTCCLSetTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NoTCCLSetTest.java
index fd0f04c..b8648a8 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NoTCCLSetTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/NoTCCLSetTest.java
@@ -33,6 +33,7 @@
 import org.jboss.shrinkwrap.api.spec.JavaArchive;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.junit.Assert.assertThat;
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ProduceTemplateTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ProduceTemplateTest.java
index b969a8c..6b38260 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ProduceTemplateTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ProduceTemplateTest.java
@@ -1,76 +1,76 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.ProduceTemplateBean;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.arquillian.junit.InSequence;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class ProduceTemplateTest {
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(ProduceTemplateBean.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    @InSequence(1)
-    public void configureCamelContext(CamelContext context) throws Exception {
-        context.addRoutes(new RouteBuilder() {
-            @Override
-            public void configure() {
-                from("direct:inbound").bean(ProduceTemplateBean.class);
-            }
-        });
-    }
-
-    @Test
-    @InSequence(2)
-    public void sendMessageToInbound(@Uri("direct:inbound") ProducerTemplate in,
-                                     @Uri("mock:outbound") MockEndpoint out) throws InterruptedException {
-        out.expectedMessageCount(1);
-        out.expectedBodiesReceived("test-processed");
-        
-        in.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, out);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.ProduceTemplateBean;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class ProduceTemplateTest {
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(ProduceTemplateBean.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    @InSequence(1)
+    public void configureCamelContext(CamelContext context) throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:inbound").bean(ProduceTemplateBean.class);
+            }
+        });
+    }
+
+    @Test
+    @InSequence(2)
+    public void sendMessageToInbound(@Uri("direct:inbound") ProducerTemplate in,
+                                     @Uri("mock:outbound") MockEndpoint out) throws InterruptedException {
+        out.expectedMessageCount(1);
+        out.expectedBodiesReceived("test-processed");
+        
+        in.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, out);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ProgrammaticLookupTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ProgrammaticLookupTest.java
index fff9557..0cbf232 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ProgrammaticLookupTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/ProgrammaticLookupTest.java
@@ -1,89 +1,90 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.inject.Any;
-import javax.enterprise.inject.Instance;
-import javax.inject.Inject;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Endpoint;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.ServiceStatus;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.EndpointInjectRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class ProgrammaticLookupTest {
-
-    @Any
-    @Inject
-    Instance<CamelContext> contexts;
-
-    @Any
-    @Inject
-    private Instance<ProducerTemplate> producers;
-
-    @Any
-    @Inject
-    private Instance<Endpoint> endpoints;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(EndpointInjectRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyCamelContext() {
-        assertThat("Context instance status is incorrect!", contexts.get().getStatus(), is(equalTo(ServiceStatus.Started)));
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        ProducerTemplate inbound = producers.select(Uri.Literal.of("direct:inbound")).get();
-        MockEndpoint outbound = endpoints.select(MockEndpoint.class, Uri.Literal.of("mock:outbound")).get();
-
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Instance;
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.EndpointInjectRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class ProgrammaticLookupTest {
+
+    @Any
+    @Inject
+    Instance<CamelContext> contexts;
+
+    @Any
+    @Inject
+    private Instance<ProducerTemplate> producers;
+
+    @Any
+    @Inject
+    private Instance<Endpoint> endpoints;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(EndpointInjectRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyCamelContext() {
+        assertThat("Context instance status is incorrect!", contexts.get().getStatus(), is(equalTo(ServiceStatus.Started)));
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        ProducerTemplate inbound = producers.select(Uri.Literal.of("direct:inbound")).get();
+        MockEndpoint outbound = endpoints.select(MockEndpoint.class, Uri.Literal.of("mock:outbound")).get();
+
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/PropertiesLocationTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/PropertiesLocationTest.java
index 37acb89..266e8b5 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/PropertiesLocationTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/PropertiesLocationTest.java
@@ -1,102 +1,102 @@
-/*
- * 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.cdi.test;
-
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-import javax.inject.Named;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.component.properties.PropertiesComponent;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.container.test.api.OperateOnDeployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class PropertiesLocationTest {
-
-    @Deployment(name = "single-location")
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(SingleLocation.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    // TODO: reactivate when ARQ-1255 is fixed
-    /*
-    @Deployment(name = "multiple-locations")
-    public static Archive<?> multipleLocationsDeployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test classes
-            .addClass(MultipleLocations.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-    */
-
-    @Test
-    @OperateOnDeployment("single-location")
-    public void resolvePropertyFromLocation(CamelContext context) throws Exception {
-        assertThat("Property from classpath location does not resolve!", context.resolvePropertyPlaceholders("{{header.message}}"), is(equalTo("message from file")));
-    }
-
-    /*
-    @Test
-    @OperateOnDeployment("multiple-locations")
-    public void resolvePropertyFromLocations(CamelContext context) throws Exception {
-        assertThat("Property from classpath locations does not resolve!", context.resolvePropertyPlaceholders("{{foo.property}}"), is(equalTo("foo.value")));
-        assertThat("Property from classpath locations does not resolve!", context.resolvePropertyPlaceholders("{{bar.property}}"), is(equalTo("bar.value")));
-    }
-    */
-}
-
-class SingleLocation {
-
-    @Produces
-    @ApplicationScoped
-    @Named("properties")
-    private static PropertiesComponent configuration() {
-        return new PropertiesComponent("classpath:placeholder.properties");
-    }
-}
-
-class MultipleLocations {
-
-    @Produces
-    @ApplicationScoped
-    @Named("properties")
-    private static PropertiesComponent configuration() {
-        return new PropertiesComponent("classpath:foo.properties", "classpath:bar.properties");
-    }
-}
\ No newline at end of file
+/*
+ * 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.cdi.test;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Named;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OperateOnDeployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class PropertiesLocationTest {
+
+    @Deployment(name = "single-location")
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(SingleLocation.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    // TODO: reactivate when ARQ-1255 is fixed
+    /*
+    @Deployment(name = "multiple-locations")
+    public static Archive<?> multipleLocationsDeployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test classes
+            .addClass(MultipleLocations.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+    */
+
+    @Test
+    @OperateOnDeployment("single-location")
+    public void resolvePropertyFromLocation(CamelContext context) throws Exception {
+        assertThat("Property from classpath location does not resolve!", context.resolvePropertyPlaceholders("{{header.message}}"), is(equalTo("message from file")));
+    }
+
+    /*
+    @Test
+    @OperateOnDeployment("multiple-locations")
+    public void resolvePropertyFromLocations(CamelContext context) throws Exception {
+        assertThat("Property from classpath locations does not resolve!", context.resolvePropertyPlaceholders("{{foo.property}}"), is(equalTo("foo.value")));
+        assertThat("Property from classpath locations does not resolve!", context.resolvePropertyPlaceholders("{{bar.property}}"), is(equalTo("bar.value")));
+    }
+    */
+}
+
+class SingleLocation {
+
+    @Produces
+    @ApplicationScoped
+    @Named("properties")
+    private static PropertiesComponent configuration() {
+        return new PropertiesComponent("classpath:placeholder.properties");
+    }
+}
+
+class MultipleLocations {
+
+    @Produces
+    @ApplicationScoped
+    @Named("properties")
+    private static PropertiesComponent configuration() {
+        return new PropertiesComponent("classpath:foo.properties", "classpath:bar.properties");
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/PropertyEndpointTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/PropertyEndpointTest.java
index 6b3725b..0371483 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/PropertyEndpointTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/PropertyEndpointTest.java
@@ -1,90 +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.cdi.test;
-
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.CustomPropertiesCamelContext;
-import org.apache.camel.cdi.bean.PropertyEndpointRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.component.properties.PropertiesComponent;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-@Ignore
-public class PropertyEndpointTest {
-
-    @Inject
-    @Uri("direct:{{from}}")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Produces
-    @ApplicationScoped
-    @Named("properties")
-    private static PropertiesComponent configuration() {
-        Properties properties = new Properties();
-        properties.put("from", "inbound");
-        properties.put("to", "mock:outbound");
-        PropertiesComponent component = new PropertiesComponent();
-        component.setInitialProperties(properties);
-        return component;
-    }
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test classes
-            .addClasses(CustomPropertiesCamelContext.class, PropertyEndpointRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-        outbound.expectedHeaderReceived("header", "message from file");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.CustomPropertiesCamelContext;
+import org.apache.camel.cdi.bean.PropertyEndpointRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+@Ignore
+public class PropertyEndpointTest {
+
+    @Inject
+    @Uri("direct:{{from}}")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Produces
+    @ApplicationScoped
+    @Named("properties")
+    private static PropertiesComponent configuration() {
+        Properties properties = new Properties();
+        properties.put("from", "inbound");
+        properties.put("to", "mock:outbound");
+        PropertiesComponent component = new PropertiesComponent();
+        component.setInitialProperties(properties);
+        return component;
+    }
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test classes
+            .addClasses(CustomPropertiesCamelContext.class, PropertyEndpointRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+        outbound.expectedHeaderReceived("header", "message from file");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/PropertyInjectTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/PropertyInjectTest.java
index 159b7a9..797c674 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/PropertyInjectTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/PropertyInjectTest.java
@@ -1,101 +1,102 @@
-/*
- * 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.cdi.test;
-
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-import javax.inject.Named;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.PropertyInjectBean;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.component.properties.PropertiesComponent;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.arquillian.junit.InSequence;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class PropertyInjectTest {
-
-    @Produces
-    @ApplicationScoped
-    @Named("properties")
-    private static PropertiesComponent configuration() {
-        Properties properties = new Properties();
-        properties.put("property", "value");
-        PropertiesComponent component = new PropertiesComponent();
-        component.setInitialProperties(properties);
-        return component;
-    }
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(PropertyInjectBean.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    @InSequence(1)
-    public void configureCamelContext(CamelContext context) throws Exception {
-        context.addRoutes(new RouteBuilder() {
-            @Override
-            public void configure() {
-                from("direct:in").bean(PropertyInjectBean.class).to("mock:out");
-            }
-        });
-    }
-
-    @Test
-    @InSequence(2)
-    public void sendMessageToInbound(@Uri("direct:in") ProducerTemplate in, @Uri("mock:out") MockEndpoint out) throws InterruptedException {
-        out.expectedMessageCount(1);
-        out.expectedBodiesReceived("test");
-        out.expectedHeaderReceived("header", "value");
-        
-        in.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, out);
-    }
-
-    @Test
-    @InSequence(3)
-    public void retrieveContextualReference(PropertyInjectBean bean) {
-        assertThat(bean.getProperty(), is(equalTo("value")));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Named;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.PropertyInjectBean;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class PropertyInjectTest {
+
+    @Produces
+    @ApplicationScoped
+    @Named("properties")
+    private static PropertiesComponent configuration() {
+        Properties properties = new Properties();
+        properties.put("property", "value");
+        PropertiesComponent component = new PropertiesComponent();
+        component.setInitialProperties(properties);
+        return component;
+    }
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(PropertyInjectBean.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    @InSequence(1)
+    public void configureCamelContext(CamelContext context) throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:in").bean(PropertyInjectBean.class).to("mock:out");
+            }
+        });
+    }
+
+    @Test
+    @InSequence(2)
+    public void sendMessageToInbound(@Uri("direct:in") ProducerTemplate in, @Uri("mock:out") MockEndpoint out) throws InterruptedException {
+        out.expectedMessageCount(1);
+        out.expectedBodiesReceived("test");
+        out.expectedHeaderReceived("header", "value");
+        
+        in.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, out);
+    }
+
+    @Test
+    @InSequence(3)
+    public void retrieveContextualReference(PropertyInjectBean bean) {
+        assertThat(bean.getProperty(), is(equalTo("value")));
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/QualifiedCamelContextTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/QualifiedCamelContextTest.java
index a39f22b..9f72d88 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/QualifiedCamelContextTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/QualifiedCamelContextTest.java
@@ -1,100 +1,101 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-
-import org.apache.camel.Endpoint;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.qualifier.BarQualifier;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class QualifiedCamelContextTest {
-
-    @Inject
-    @BarQualifier
-    @Uri("direct:start")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @BarQualifier
-    @Uri("mock:result")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(QualifiedCamelContext.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-
-    @BarQualifier
-    public static class CamelRoute extends RouteBuilder {
-
-        @Inject
-        @BarQualifier
-        @Uri("direct:start")
-        private Endpoint directEP;
-
-        @Inject
-        @BarQualifier
-        @Uri("mock:result")
-        private MockEndpoint mockEP;
-
-        @Override
-        public void configure() {
-            from(directEP).to(mockEP);
-        }
-    }
-}
-
-@BarQualifier
-@ApplicationScoped
-class QualifiedCamelContext extends DefaultCamelContext {
-
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.qualifier.BarQualifier;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class QualifiedCamelContextTest {
+
+    @Inject
+    @BarQualifier
+    @Uri("direct:start")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @BarQualifier
+    @Uri("mock:result")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(QualifiedCamelContext.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+
+    @BarQualifier
+    public static class CamelRoute extends RouteBuilder {
+
+        @Inject
+        @BarQualifier
+        @Uri("direct:start")
+        private Endpoint directEP;
+
+        @Inject
+        @BarQualifier
+        @Uri("mock:result")
+        private MockEndpoint mockEP;
+
+        @Override
+        public void configure() {
+            from(directEP).to(mockEP);
+        }
+    }
+}
+
+@BarQualifier
+@ApplicationScoped
+class QualifiedCamelContext extends DefaultCamelContext {
+
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RawEventEndpointCdi12Test.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RawEventEndpointCdi12Test.java
index bc03802..f2c5e80 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RawEventEndpointCdi12Test.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RawEventEndpointCdi12Test.java
@@ -1,110 +1,111 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.event.Event;
-import javax.enterprise.event.Observes;
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.CdiEventEndpoint;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class RawEventEndpointCdi12Test {
-
-    @Inject
-    private MockEndpoint consumed;
-
-    @Inject
-    private MockEndpoint produced;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test classes
-            .addClasses(RawEventRoute.class, RawEventObserver.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Before
-    public void resetMock() {
-        consumed.reset();
-    }
-
-    @Test
-    public void sendEventToConsumer(Event<Object> event) throws InterruptedException {
-        consumed.expectedMessageCount(1);
-        consumed.expectedBodiesReceived("test");
-
-        event.select(String.class).fire("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, consumed);
-    }
-
-    @Test
-    public void sendMessageToProducer(@Uri("direct:produce") ProducerTemplate producer) throws InterruptedException {
-        long random =  Math.round(Math.random() * Long.MAX_VALUE);
-        produced.expectedMessageCount(1);
-        produced.expectedBodiesReceived(random);
-        consumed.expectedMessageCount(1);
-        consumed.expectedBodiesReceived(random);
-
-        producer.sendBody(random);
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, consumed, produced);
-    }
-}
-
-class RawEventRoute extends RouteBuilder {
-
-    @Inject
-    private CdiEventEndpoint rawEventEndpoint;
-
-    @Override
-    public void configure() {
-        from(rawEventEndpoint).to("mock:consumed");
-        from("direct:produce").to(rawEventEndpoint);
-    }
-}
-
-@ApplicationScoped
-class RawEventObserver {
-
-    void collectEvents(@Observes long event, @Uri("mock:produced") ProducerTemplate producer) {
-        producer.sendBody(event);
-    }
-}
\ No newline at end of file
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Event;
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.CdiEventEndpoint;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class RawEventEndpointCdi12Test {
+
+    @Inject
+    private MockEndpoint consumed;
+
+    @Inject
+    private MockEndpoint produced;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test classes
+            .addClasses(RawEventRoute.class, RawEventObserver.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Before
+    public void resetMock() {
+        consumed.reset();
+    }
+
+    @Test
+    public void sendEventToConsumer(Event<Object> event) throws InterruptedException {
+        consumed.expectedMessageCount(1);
+        consumed.expectedBodiesReceived("test");
+
+        event.select(String.class).fire("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, consumed);
+    }
+
+    @Test
+    public void sendMessageToProducer(@Uri("direct:produce") ProducerTemplate producer) throws InterruptedException {
+        long random =  Math.round(Math.random() * Long.MAX_VALUE);
+        produced.expectedMessageCount(1);
+        produced.expectedBodiesReceived(random);
+        consumed.expectedMessageCount(1);
+        consumed.expectedBodiesReceived(random);
+
+        producer.sendBody(random);
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, consumed, produced);
+    }
+}
+
+class RawEventRoute extends RouteBuilder {
+
+    @Inject
+    private CdiEventEndpoint rawEventEndpoint;
+
+    @Override
+    public void configure() {
+        from(rawEventEndpoint).to("mock:consumed");
+        from("direct:produce").to(rawEventEndpoint);
+    }
+}
+
+@ApplicationScoped
+class RawEventObserver {
+
+    void collectEvents(@Observes long event, @Uri("mock:produced") ProducerTemplate producer) {
+        producer.sendBody(event);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RecipientListMethodTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RecipientListMethodTest.java
index 1c0407f..7346b25 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RecipientListMethodTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RecipientListMethodTest.java
@@ -1,77 +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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.RecipientListMethodBean;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class RecipientListMethodTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound1")
-    private MockEndpoint outbound1;
-
-    @Inject
-    @Uri("mock:outbound2")
-    private MockEndpoint outbound2;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(RecipientListMethodBean.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void consumeAnnotation() throws InterruptedException {
-        outbound1.expectedMessageCount(1);
-        outbound1.expectedBodiesReceived("test");
-
-        outbound2.expectedMessageCount(1);
-        outbound2.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound1);
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound2);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.RecipientListMethodBean;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class RecipientListMethodTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound1")
+    private MockEndpoint outbound1;
+
+    @Inject
+    @Uri("mock:outbound2")
+    private MockEndpoint outbound2;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(RecipientListMethodBean.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void consumeAnnotation() throws InterruptedException {
+        outbound1.expectedMessageCount(1);
+        outbound1.expectedBodiesReceived("test");
+
+        outbound2.expectedMessageCount(1);
+        outbound2.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound1);
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound2);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RouteDefinitionsFromXmlTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RouteDefinitionsFromXmlTest.java
index f9dc744..02a9b0e 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RouteDefinitionsFromXmlTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/RouteDefinitionsFromXmlTest.java
@@ -1,78 +1,79 @@
-/*
- * 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.cdi.test;
-
-import java.io.InputStream;
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.model.ModelHelper;
-import org.apache.camel.model.RoutesDefinition;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class RouteDefinitionsFromXmlTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Produces
-    private RoutesDefinition routes(CamelContext context) throws Exception {
-        try (InputStream routes = getClass().getResourceAsStream("/camel-context-routes.xml")) {
-            return ModelHelper.createModelFromXml(context, routes, RoutesDefinition.class);
-        }
-    }
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.io.InputStream;
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.model.ModelHelper;
+import org.apache.camel.model.RoutesDefinition;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class RouteDefinitionsFromXmlTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Produces
+    private RoutesDefinition routes(CamelContext context) throws Exception {
+        try (InputStream routes = getClass().getResourceAsStream("/camel-context-routes.xml")) {
+            return ModelHelper.createModelFromXml(context, routes, RoutesDefinition.class);
+        }
+    }
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UndefinedPropertyTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UndefinedPropertyTest.java
index 4e259c9..fca3a92 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UndefinedPropertyTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UndefinedPropertyTest.java
@@ -1,86 +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.cdi.test;
-
-import java.util.Properties;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-import javax.inject.Named;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.component.properties.PropertiesComponent;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-
-@RunWith(Arquillian.class)
-public class UndefinedPropertyTest {
-
-    @Produces
-    @ApplicationScoped
-    @Named("properties")
-    private static PropertiesComponent configuration() {
-        Properties properties = new Properties();
-        properties.put("from", "inbound");
-        // Do not add the looked up property for test purpose
-        //properties.put("to", "mock:outbound");
-        PropertiesComponent component = new PropertiesComponent();
-        component.setInitialProperties(properties);
-        return component;
-    }
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void lookupDefinedProperty(CamelContext context) throws Exception {
-        assertThat("Resolved property value is incorrect",
-            context.resolvePropertyPlaceholders("{{from}}"), is(equalTo("inbound")));
-    }
-
-    @Test
-    public void lookupUndefinedProperty(CamelContext context) {
-        try {
-            context.resolvePropertyPlaceholders("{{to}}");
-            fail("No exception is thrown!");
-        } catch (Exception cause) {
-            assertThat("Exception thrown is incorrect", cause,
-                is(instanceOf(IllegalArgumentException.class)));
-            assertThat("Exception message is incorrect", cause.getMessage(),
-                is(equalTo("Property with key [to] not found in properties from text: {{to}}")));
-        }
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.Properties;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Named;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.component.properties.PropertiesComponent;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+@RunWith(Arquillian.class)
+public class UndefinedPropertyTest {
+
+    @Produces
+    @ApplicationScoped
+    @Named("properties")
+    private static PropertiesComponent configuration() {
+        Properties properties = new Properties();
+        properties.put("from", "inbound");
+        // Do not add the looked up property for test purpose
+        //properties.put("to", "mock:outbound");
+        PropertiesComponent component = new PropertiesComponent();
+        component.setInitialProperties(properties);
+        return component;
+    }
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void lookupDefinedProperty(CamelContext context) throws Exception {
+        assertThat("Resolved property value is incorrect",
+            context.resolvePropertyPlaceholders("{{from}}"), is(equalTo("inbound")));
+    }
+
+    @Test
+    public void lookupUndefinedProperty(CamelContext context) {
+        try {
+            context.resolvePropertyPlaceholders("{{to}}");
+            fail("No exception is thrown!");
+        } catch (Exception cause) {
+            assertThat("Exception thrown is incorrect", cause,
+                is(instanceOf(IllegalArgumentException.class)));
+            assertThat("Exception message is incorrect", cause.getMessage(),
+                is(equalTo("Property with key [to] not found in properties from text: {{to}}")));
+        }
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnstoppedCamelContextBeanTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnstoppedCamelContextBeanTest.java
index d0ac9248..7a955d4 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnstoppedCamelContextBeanTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnstoppedCamelContextBeanTest.java
@@ -1,87 +1,88 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.SimpleCamelRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.junit.rules.Verifier;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class UnstoppedCamelContextBeanTest {
-
-    @ClassRule
-    public static Verifier verifier = new Verifier() {
-        @Override
-        protected void verify() {
-            assertThat("Camel CDI hasn't stopped Camel context!", UnstoppedCamelContext.isStopCalled, is(equalTo(true)));
-        }
-    };
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClasses(UnstoppedCamelContext.class, SimpleCamelRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound(@Uri("direct:start") ProducerTemplate inbound, @Uri("mock:result") MockEndpoint outbound) throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
-
-@ApplicationScoped
-class UnstoppedCamelContext extends DefaultCamelContext {
-
-    static boolean isStopCalled;
-
-    @Override
-    public void stop() {
-        super.stop();
-        isStopCalled = true;
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.context.ApplicationScoped;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.SimpleCamelRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.junit.rules.Verifier;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class UnstoppedCamelContextBeanTest {
+
+    @ClassRule
+    public static Verifier verifier = new Verifier() {
+        @Override
+        protected void verify() {
+            assertThat("Camel CDI hasn't stopped Camel context!", UnstoppedCamelContext.isStopCalled, is(equalTo(true)));
+        }
+    };
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClasses(UnstoppedCamelContext.class, SimpleCamelRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound(@Uri("direct:start") ProducerTemplate inbound, @Uri("mock:result") MockEndpoint outbound) throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
+
+@ApplicationScoped
+class UnstoppedCamelContext extends DefaultCamelContext {
+
+    static boolean isStopCalled;
+
+    @Override
+    public void stop() {
+        super.stop();
+        isStopCalled = true;
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnstoppedCamelContextProducerFieldTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnstoppedCamelContextProducerFieldTest.java
index bc4bead..90ea360 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnstoppedCamelContextProducerFieldTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnstoppedCamelContextProducerFieldTest.java
@@ -1,82 +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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.ServiceStatus;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.SimpleCamelRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.junit.rules.Verifier;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class UnstoppedCamelContextProducerFieldTest {
-
-    @ClassRule
-    public static Verifier verifier = new Verifier() {
-        @Override
-        protected void verify() {
-            assertThat("Camel CDI hasn't stopped Camel context!", context.getStatus(), is(equalTo(ServiceStatus.Stopped)));
-        }
-    };
-
-    @Produces
-    @ApplicationScoped
-    private static CamelContext context = new DefaultCamelContext();
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(SimpleCamelRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound(@Uri("direct:start") ProducerTemplate inbound, @Uri("mock:result") MockEndpoint outbound) throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.SimpleCamelRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.junit.rules.Verifier;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class UnstoppedCamelContextProducerFieldTest {
+
+    @ClassRule
+    public static Verifier verifier = new Verifier() {
+        @Override
+        protected void verify() {
+            assertThat("Camel CDI hasn't stopped Camel context!", context.getStatus(), is(equalTo(ServiceStatus.Stopped)));
+        }
+    };
+
+    @Produces
+    @ApplicationScoped
+    private static CamelContext context = new DefaultCamelContext();
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(SimpleCamelRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound(@Uri("direct:start") ProducerTemplate inbound, @Uri("mock:result") MockEndpoint outbound) throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnstoppedCamelContextProducerMethodTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnstoppedCamelContextProducerMethodTest.java
index 5b46ffe..7b63fb7 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnstoppedCamelContextProducerMethodTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UnstoppedCamelContextProducerMethodTest.java
@@ -1,88 +1,89 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Produces;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.ServiceStatus;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.SimpleCamelRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.junit.rules.Verifier;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-public class UnstoppedCamelContextProducerMethodTest {
-
-    @ClassRule
-    public static Verifier verifier = new Verifier() {
-        @Override
-        protected void verify() {
-            assertThat("Camel CDI hasn't stopped Camel context!", context.getStatus(), is(equalTo(ServiceStatus.Stopped)));
-        }
-    };
-
-    private static DefaultCamelContext context = new DefaultCamelContext();
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(SimpleCamelRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound(@Uri("direct:start") ProducerTemplate inbound,
-                                     @Uri("mock:result") MockEndpoint outbound) throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-
-    @Produces
-    @ApplicationScoped
-    private CamelContext produceAndStartContext() {
-        context.setName("unstopped-context");
-        return context;
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.SimpleCamelRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.junit.rules.Verifier;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+public class UnstoppedCamelContextProducerMethodTest {
+
+    @ClassRule
+    public static Verifier verifier = new Verifier() {
+        @Override
+        protected void verify() {
+            assertThat("Camel CDI hasn't stopped Camel context!", context.getStatus(), is(equalTo(ServiceStatus.Stopped)));
+        }
+    };
+
+    private static DefaultCamelContext context = new DefaultCamelContext();
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(SimpleCamelRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound(@Uri("direct:start") ProducerTemplate inbound,
+                                     @Uri("mock:result") MockEndpoint outbound) throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+
+    @Produces
+    @ApplicationScoped
+    private CamelContext produceAndStartContext() {
+        context.setName("unstopped-context");
+        return context;
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UriEndpointTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UriEndpointTest.java
index 3ab7665..0dc0044 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UriEndpointTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UriEndpointTest.java
@@ -1,69 +1,70 @@
-/*
- * 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.cdi.test;
-
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.bean.UriEndpointRoute;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-public class UriEndpointTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test class
-            .addClass(UriEndpointRoute.class)
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("test");
-
-        inbound.sendBody("test");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.bean.UriEndpointRoute;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+public class UriEndpointTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test class
+            .addClass(UriEndpointRoute.class)
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("test");
+
+        inbound.sendBody("test");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UriQualifierWithContextTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UriQualifierWithContextTest.java
index 772e9c8..008ed0e 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UriQualifierWithContextTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/UriQualifierWithContextTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.cdi.test;
 
 import java.util.concurrent.TimeUnit;
+
 import javax.inject.Inject;
 import javax.inject.Named;
 
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlBeansTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlBeansTest.java
index 8081cfe..ad2510b 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlBeansTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlBeansTest.java
@@ -1,78 +1,76 @@
-/*
- * 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.cdi.test;
-
-import java.nio.file.Paths;
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.component.mock.MockEndpoint;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-routes.xml")
-@Ignore
-public class XmlBeansTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-beans.xml").toFile(),
-                "imported-routes.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("message");
-
-        inbound.sendBody("message");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-routes.xml")
+@Ignore
+public class XmlBeansTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-beans.xml").toFile(),
+                "imported-routes.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("message");
+
+        inbound.sendBody("message");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlConsumerTemplateTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlConsumerTemplateTest.java
index f0e8572..8ad8520 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlConsumerTemplateTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlConsumerTemplateTest.java
@@ -1,89 +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.cdi.test;
-
-import java.nio.file.Paths;
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.ConsumerTemplate;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.Uri;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-context.xml")
-public class XmlConsumerTemplateTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Named
-    @Inject
-    private ConsumerTemplate consumer;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-consumer.xml").toFile(),
-                "imported-context.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyConsumerTemplate() {
-        assertThat("Consumer template Camel context is incorrect!",
-            consumer.getCamelContext().getName(),
-            is(equalTo("test")));
-
-        assertThat("Consumer template cache size is incorrect!",
-            consumer.getMaximumCacheSize(),
-            is(equalTo(100)));
-    }
-
-    @Test
-    public void sendMessageToInbound() {
-        inbound.sendBody("seda:foo", "message");
-
-        String body = consumer.receiveBody("seda:foo", TimeUnit.SECONDS.toMillis(1L), String.class);
-
-        assertThat("Body is incorrect!", body, is(equalTo("message")));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.ConsumerTemplate;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.Uri;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-context.xml")
+public class XmlConsumerTemplateTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Named
+    @Inject
+    private ConsumerTemplate consumer;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-consumer.xml").toFile(),
+                "imported-context.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyConsumerTemplate() {
+        assertThat("Consumer template Camel context is incorrect!",
+            consumer.getCamelContext().getName(),
+            is(equalTo("test")));
+
+        assertThat("Consumer template cache size is incorrect!",
+            consumer.getMaximumCacheSize(),
+            is(equalTo(100)));
+    }
+
+    @Test
+    public void sendMessageToInbound() {
+        inbound.sendBody("seda:foo", "message");
+
+        String body = consumer.receiveBody("seda:foo", TimeUnit.SECONDS.toMillis(1L), String.class);
+
+        assertThat("Body is incorrect!", body, is(equalTo("message")));
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlEndpointTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlEndpointTest.java
index dbfaea8..32c7460 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlEndpointTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlEndpointTest.java
@@ -1,111 +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.cdi.test;
-
-import java.nio.file.Paths;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.Endpoint;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.component.seda.SedaEndpoint;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-context.xml")
-public class XmlEndpointTest {
-
-    @Inject
-    @Uri("seda:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Inject
-    @Named("bar")
-    private Endpoint endpoint;
-
-    @Produces
-    @Named("queue")
-    private static <T> BlockingQueue<T> queue() {
-        return new MyBlockingQueue<>();
-    }
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-endpoint.xml").toFile(),
-                "imported-context.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    @Ignore("@ApplicationScoped bean proxy cannot be casted to endpoint implementation")
-    public void verifyXmlEndpoint() {
-        assertThat("Endpoint type is incorrect!", endpoint, is(instanceOf(SedaEndpoint.class)));
-        SedaEndpoint seda = (SedaEndpoint) endpoint;
-        assertThat("Endpoint queue is incorrect!",
-            seda.getQueue(), is(instanceOf(MyBlockingQueue.class)));
-        assertThat("Endpoint concurrent consumers count is incorrect!",
-            seda.getConcurrentConsumers(), is(equalTo(10)));
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("message");
-
-        inbound.sendBody("message");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
-
-class MyBlockingQueue<E> extends LinkedBlockingQueue<E> {
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.seda.SedaEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-context.xml")
+public class XmlEndpointTest {
+
+    @Inject
+    @Uri("seda:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Inject
+    @Named("bar")
+    private Endpoint endpoint;
+
+    @Produces
+    @Named("queue")
+    private static <T> BlockingQueue<T> queue() {
+        return new MyBlockingQueue<>();
+    }
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-endpoint.xml").toFile(),
+                "imported-context.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    @Ignore("@ApplicationScoped bean proxy cannot be casted to endpoint implementation")
+    public void verifyXmlEndpoint() {
+        assertThat("Endpoint type is incorrect!", endpoint, is(instanceOf(SedaEndpoint.class)));
+        SedaEndpoint seda = (SedaEndpoint) endpoint;
+        assertThat("Endpoint queue is incorrect!",
+            seda.getQueue(), is(instanceOf(MyBlockingQueue.class)));
+        assertThat("Endpoint concurrent consumers count is incorrect!",
+            seda.getConcurrentConsumers(), is(equalTo(10)));
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("message");
+
+        inbound.sendBody("message");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
+
+class MyBlockingQueue<E> extends LinkedBlockingQueue<E> {
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlErrorHandlerPolicyTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlErrorHandlerPolicyTest.java
index 3ba88b9..aed5b73 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlErrorHandlerPolicyTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlErrorHandlerPolicyTest.java
@@ -1,138 +1,139 @@
-/*
- * 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.cdi.test;
-
-import java.nio.file.Paths;
-import java.util.concurrent.TimeUnit;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.CamelException;
-import org.apache.camel.CamelExecutionException;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.rule.LogEventVerifier;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.junit.rules.TestRule;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.cdi.rule.LogEventMatcher.logEvent;
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.containsInRelativeOrder;
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.matchesPattern;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-context.xml")
-public class XmlErrorHandlerPolicyTest {
-
-    @ClassRule
-    public static TestRule verifier = new LogEventVerifier() {
-        @Override
-        protected void verify() {
-            assertThat("Log messages not found!", getEvents(),
-                containsInRelativeOrder(
-                    logEvent()
-                        .withLevel("INFO")
-                        .withMessage(containsString("Camel CDI is starting Camel context [test]")),
-                    logEvent()
-                        .withLevel("WARN")
-                        .withMessage(matchesPattern(
-                            "Failed delivery for \\(MessageId: .+\\). "
-                                + "On delivery attempt: 3 "
-                                + "caught: org.apache.camel.CamelException: failure message!")),
-                    logEvent()
-                        .withLevel("ERROR")
-                        .withMessage(matchesPattern(
-                            "(?s)Failed delivery for \\(MessageId: .+\\). "
-                                + "Exhausted after delivery attempt: 4 "
-                                + "caught: org.apache.camel.CamelException: failure message!.*")),
-                    logEvent()
-                        .withLevel("INFO")
-                        .withMessage(containsString("Camel CDI is stopping Camel context [test]"))
-                )
-            );
-        }
-    };
-
-    @Named
-    @Produces
-    private Exception failure = new CamelException("failure message!");
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-errorHandler-policy.xml").toFile(),
-                "imported-context.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("Response to message");
-
-        inbound.sendBody("message");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-
-    @Test
-    public void sendExceptionToInbound() {
-        try {
-            inbound.sendBody("exception");
-        } catch (Exception exception) {
-            assertThat("Exception is incorrect!",
-                exception, is(instanceOf(CamelExecutionException.class)));
-            assertThat("Exception cause is incorrect!",
-                exception.getCause(), is(instanceOf(CamelException.class)));
-            assertThat("Exception message is incorrect!",
-                exception.getCause().getMessage(), is(equalTo("failure message!")));
-            return;
-        }
-        fail("No exception thrown!");
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.CamelException;
+import org.apache.camel.CamelExecutionException;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.rule.LogEventVerifier;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.junit.rules.TestRule;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.cdi.rule.LogEventMatcher.logEvent;
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.containsInRelativeOrder;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.matchesPattern;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-context.xml")
+public class XmlErrorHandlerPolicyTest {
+
+    @ClassRule
+    public static TestRule verifier = new LogEventVerifier() {
+        @Override
+        protected void verify() {
+            assertThat("Log messages not found!", getEvents(),
+                containsInRelativeOrder(
+                    logEvent()
+                        .withLevel("INFO")
+                        .withMessage(containsString("Camel CDI is starting Camel context [test]")),
+                    logEvent()
+                        .withLevel("WARN")
+                        .withMessage(matchesPattern(
+                            "Failed delivery for \\(MessageId: .+\\). "
+                                + "On delivery attempt: 3 "
+                                + "caught: org.apache.camel.CamelException: failure message!")),
+                    logEvent()
+                        .withLevel("ERROR")
+                        .withMessage(matchesPattern(
+                            "(?s)Failed delivery for \\(MessageId: .+\\). "
+                                + "Exhausted after delivery attempt: 4 "
+                                + "caught: org.apache.camel.CamelException: failure message!.*")),
+                    logEvent()
+                        .withLevel("INFO")
+                        .withMessage(containsString("Camel CDI is stopping Camel context [test]"))
+                )
+            );
+        }
+    };
+
+    @Named
+    @Produces
+    private Exception failure = new CamelException("failure message!");
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-errorHandler-policy.xml").toFile(),
+                "imported-context.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("Response to message");
+
+        inbound.sendBody("message");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+
+    @Test
+    public void sendExceptionToInbound() {
+        try {
+            inbound.sendBody("exception");
+        } catch (Exception exception) {
+            assertThat("Exception is incorrect!",
+                exception, is(instanceOf(CamelExecutionException.class)));
+            assertThat("Exception cause is incorrect!",
+                exception.getCause(), is(instanceOf(CamelException.class)));
+            assertThat("Exception message is incorrect!",
+                exception.getCause().getMessage(), is(equalTo("failure message!")));
+            return;
+        }
+        fail("No exception thrown!");
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlErrorHandlerTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlErrorHandlerTest.java
index 725a98b..aa142bf 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlErrorHandlerTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlErrorHandlerTest.java
@@ -1,105 +1,103 @@
-/*
- * 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.cdi.test;
-
-import java.nio.file.Paths;
-import java.util.concurrent.TimeUnit;
-
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.component.mock.MockEndpoint;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-context.xml")
-public class XmlErrorHandlerTest {
-
-    @Named
-    @Produces
-    private Processor processor = exchange -> exchange.getIn()
-        .setHeader("header",
-            exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class).getMessage());
-
-    @Named
-    @Produces
-    private Exception failure = new Exception("failure message!");
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:exception")
-    private MockEndpoint exception;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-errorHandler.xml").toFile(),
-                "imported-context.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("Response to message");
-
-        inbound.sendBody("message");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-
-    @Test
-    public void sendExceptionToInbound() throws InterruptedException {
-        exception.expectedMessageCount(1);
-        exception.expectedBodiesReceived("exception");
-        exception.expectedHeaderReceived("header", "failure message!");
-
-        inbound.sendBody("exception");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, exception);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-context.xml")
+public class XmlErrorHandlerTest {
+
+    @Named
+    @Produces
+    private Processor processor = exchange -> exchange.getIn()
+        .setHeader("header",
+            exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class).getMessage());
+
+    @Named
+    @Produces
+    private Exception failure = new Exception("failure message!");
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:exception")
+    private MockEndpoint exception;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-errorHandler.xml").toFile(),
+                "imported-context.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("Response to message");
+
+        inbound.sendBody("message");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+
+    @Test
+    public void sendExceptionToInbound() throws InterruptedException {
+        exception.expectedMessageCount(1);
+        exception.expectedBodiesReceived("exception");
+        exception.expectedHeaderReceived("header", "failure message!");
+
+        inbound.sendBody("exception");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, exception);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlProducerTemplateTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlProducerTemplateTest.java
index a1a19ef..a2f15a5 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlProducerTemplateTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlProducerTemplateTest.java
@@ -1,95 +1,93 @@
-/*
- * 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.cdi.test;
-
-import java.nio.file.Paths;
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.component.mock.MockEndpoint;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-context.xml")
-public class XmlProducerTemplateTest {
-
-    @Named
-    @Inject
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-producer.xml").toFile(),
-                "imported-context.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyProducerTemplate() {
-        assertThat("Producer template Camel context is incorrect!",
-            inbound.getCamelContext().getName(),
-            is(equalTo("test")));
-
-        assertThat("Producer template cache size is incorrect!",
-            inbound.getMaximumCacheSize(),
-            is(equalTo(100)));
-
-        assertThat("Producer template default endpoint is incorrect!",
-            inbound.getDefaultEndpoint().getEndpointUri(),
-            is(equalTo("direct://inbound")));
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("message");
-
-        inbound.sendBody("message");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-context.xml")
+public class XmlProducerTemplateTest {
+
+    @Named
+    @Inject
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-producer.xml").toFile(),
+                "imported-context.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyProducerTemplate() {
+        assertThat("Producer template Camel context is incorrect!",
+            inbound.getCamelContext().getName(),
+            is(equalTo("test")));
+
+        assertThat("Producer template cache size is incorrect!",
+            inbound.getMaximumCacheSize(),
+            is(equalTo(100)));
+
+        assertThat("Producer template default endpoint is incorrect!",
+            inbound.getDefaultEndpoint().getEndpointUri(),
+            is(equalTo("direct://inbound")));
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("message");
+
+        inbound.sendBody("message");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlPropertyPlaceholderTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlPropertyPlaceholderTest.java
index 2cce8f6..efc5f1e 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlPropertyPlaceholderTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlPropertyPlaceholderTest.java
@@ -1,62 +1,60 @@
-/*
- * 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.cdi.test;
-
-import java.nio.file.Paths;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-context.xml")
-public class XmlPropertyPlaceholderTest {
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-properties.xml").toFile(),
-                "imported-context.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void resolvePropertyFromLocation(CamelContext context) throws Exception {
-        assertThat("Property from classpath location does not resolve!",
-            context.resolvePropertyPlaceholders("{{header.message}}"),
-            is(equalTo("message from file")));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-context.xml")
+public class XmlPropertyPlaceholderTest {
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-properties.xml").toFile(),
+                "imported-context.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void resolvePropertyFromLocation(CamelContext context) throws Exception {
+        assertThat("Property from classpath location does not resolve!",
+            context.resolvePropertyPlaceholders("{{header.message}}"),
+            is(equalTo("message from file")));
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlProxyFactoryTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlProxyFactoryTest.java
index 475e888..6ebc4a3 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlProxyFactoryTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlProxyFactoryTest.java
@@ -1,70 +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.cdi.test;
-
-import java.nio.file.Paths;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.bean.Service;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-context.xml")
-public class XmlProxyFactoryTest {
-
-    @Named
-    @Inject
-    private Service proxy;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-proxy.xml").toFile(),
-                "imported-context.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToProxy() {
-        String response = proxy.service("request");
-
-        assertThat("Proxy response is incorrect!",
-            response, is(equalTo("Service called with: [request]")));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.bean.Service;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-context.xml")
+public class XmlProxyFactoryTest {
+
+    @Named
+    @Inject
+    private Service proxy;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-proxy.xml").toFile(),
+                "imported-context.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToProxy() {
+        String response = proxy.service("request");
+
+        assertThat("Proxy response is incorrect!",
+            response, is(equalTo("Service called with: [request]")));
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRestContextTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRestContextTest.java
index c1296fd..76e6035 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRestContextTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRestContextTest.java
@@ -1,105 +1,103 @@
-/*
- * 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.cdi.test;
-
-import java.nio.file.Paths;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.cdi.mock.DummyRestConsumerFactory;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.model.rest.RestDefinition;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasSize;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-@ImportResource({
-    "imported-context-restContext.xml",
-    "imported-context-restContextRef.xml"
-})
-public class XmlRestContextTest {
-
-    @Produces
-    private static DummyRestConsumerFactory rest = new DummyRestConsumerFactory();
-
-    @Inject
-    @Uri("seda:get-inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Inject
-    @Named("rest")
-    private List<RestDefinition> rests;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-restContext.xml").toFile(),
-                "imported-context-restContext.xml")
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-restContextRef.xml").toFile(),
-                "imported-context-restContextRef.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyRestContext() {
-        assertThat("Rest context is incorrect!", rests, hasSize(1));
-        RestDefinition rest = rests.get(0);
-        assertThat("Rest path is incorrect!", rest.getPath(), is(equalTo("/inbound")));
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("Response to request");
-
-        inbound.sendBody("request");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.cdi.mock.DummyRestConsumerFactory;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.model.rest.RestDefinition;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+@ImportResource({
+    "imported-context-restContext.xml",
+    "imported-context-restContextRef.xml"
+})
+public class XmlRestContextTest {
+
+    @Produces
+    private static DummyRestConsumerFactory rest = new DummyRestConsumerFactory();
+
+    @Inject
+    @Uri("seda:get-inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Inject
+    @Named("rest")
+    private List<RestDefinition> rests;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-restContext.xml").toFile(),
+                "imported-context-restContext.xml")
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-restContextRef.xml").toFile(),
+                "imported-context-restContextRef.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyRestContext() {
+        assertThat("Rest context is incorrect!", rests, hasSize(1));
+        RestDefinition rest = rests.get(0);
+        assertThat("Rest path is incorrect!", rest.getPath(), is(equalTo("/inbound")));
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("Response to request");
+
+        inbound.sendBody("request");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRouteContextImportTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRouteContextImportTest.java
index a8d8cf9..74e788e 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRouteContextImportTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRouteContextImportTest.java
@@ -1,99 +1,97 @@
-/*
- * 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.cdi.test;
-
-import java.nio.file.Paths;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.model.RouteDefinition;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasSize;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-context.xml")
-public class XmlRouteContextImportTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Inject
-    @Named("import")
-    private List<RouteDefinition> routes;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-routeContextRef-import.xml").toFile(),
-                "imported-context.xml")
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-routeContext.xml").toFile(),
-                "imported-route-context.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyRouteContext() {
-        assertThat("Route context is incorrect!", routes, hasSize(1));
-        RouteDefinition route = routes.get(0);
-
-        assertThat("Route is incorrect!",
-            route.getInput().getEndpointUri(), is(equalTo("direct:inbound")));
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("Response to message");
-
-        inbound.sendBody("message");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.model.RouteDefinition;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-context.xml")
+public class XmlRouteContextImportTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Inject
+    @Named("import")
+    private List<RouteDefinition> routes;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-routeContextRef-import.xml").toFile(),
+                "imported-context.xml")
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-routeContext.xml").toFile(),
+                "imported-route-context.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyRouteContext() {
+        assertThat("Route context is incorrect!", routes, hasSize(1));
+        RouteDefinition route = routes.get(0);
+
+        assertThat("Route is incorrect!",
+            route.getInput().getEndpointUri(), is(equalTo("direct:inbound")));
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("Response to message");
+
+        inbound.sendBody("message");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRouteContextResourceTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRouteContextResourceTest.java
index 15712db..829393d 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRouteContextResourceTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRouteContextResourceTest.java
@@ -1,80 +1,80 @@
-/*
- * 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.cdi.test;
-
-import java.nio.file.Paths;
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-@ImportResource({
-    "imported-context.xml",
-    "imported-route-context.xml"
-})
-public class XmlRouteContextResourceTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-routeContextRef.xml").toFile(),
-                "imported-context.xml")
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-routeContext.xml").toFile(),
-                "imported-route-context.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("Response to message");
-
-        inbound.sendBody("message");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+@ImportResource({
+    "imported-context.xml",
+    "imported-route-context.xml"
+})
+public class XmlRouteContextResourceTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-routeContextRef.xml").toFile(),
+                "imported-context.xml")
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-routeContext.xml").toFile(),
+                "imported-route-context.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("Response to message");
+
+        inbound.sendBody("message");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRoutesDefinitionTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRoutesDefinitionTest.java
index 732d76e..bdd4f06 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRoutesDefinitionTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlRoutesDefinitionTest.java
@@ -1,74 +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.cdi.test;
-
-import java.nio.file.Paths;
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Inject;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-routes.xml")
-public class XmlRoutesDefinitionTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Inject
-    @Uri("mock:outbound")
-    private MockEndpoint outbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-routes.xml").toFile(),
-                "imported-routes.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToInbound() throws InterruptedException {
-        outbound.expectedMessageCount(1);
-        outbound.expectedBodiesReceived("message");
-
-        inbound.sendBody("message");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Inject;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-routes.xml")
+public class XmlRoutesDefinitionTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Inject
+    @Uri("mock:outbound")
+    private MockEndpoint outbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-routes.xml").toFile(),
+                "imported-routes.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToInbound() throws InterruptedException {
+        outbound.expectedMessageCount(1);
+        outbound.expectedBodiesReceived("message");
+
+        inbound.sendBody("message");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, outbound);
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceCallConfigurationTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceCallConfigurationTest.java
index 423f8da..e3c1c4c 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceCallConfigurationTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceCallConfigurationTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.cdi.test;
 
 import java.nio.file.Paths;
+
 import javax.inject.Inject;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceExporterTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceExporterTest.java
index 508ff95..94fa4d1 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceExporterTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlServiceExporterTest.java
@@ -1,81 +1,79 @@
-/*
- * 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.cdi.test;
-
-import java.nio.file.Paths;
-
-import javax.inject.Named;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.bean.Service;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-context.xml")
-public class XmlServiceExporterTest {
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-export.xml").toFile(),
-                "imported-context.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void sendMessageToService(ProducerTemplate service) {
-        String response = service.requestBody("direct:service", "request", String.class);
-        assertThat("Response is incorrect!", response,
-            is(equalTo("test response to [request]")));
-    }
-
-    @Test
-    public void invokeService(@Named("service") Service service) {
-        String response = service.service("request");
-        assertThat("Response is incorrect!", response,
-            is(equalTo("test response to [request]")));
-    }
-
-    @Named("implementation")
-    static class TestService implements Service {
-
-        @Override
-        public String service(String request) {
-            return "test response to [" + request + "]";
-        }
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+
+import javax.inject.Named;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.bean.Service;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-context.xml")
+public class XmlServiceExporterTest {
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-export.xml").toFile(),
+                "imported-context.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void sendMessageToService(ProducerTemplate service) {
+        String response = service.requestBody("direct:service", "request", String.class);
+        assertThat("Response is incorrect!", response,
+            is(equalTo("test response to [request]")));
+    }
+
+    @Test
+    public void invokeService(@Named("service") Service service) {
+        String response = service.service("request");
+        assertThat("Response is incorrect!", response,
+            is(equalTo("test response to [request]")));
+    }
+
+    @Named("implementation")
+    static class TestService implements Service {
+
+        @Override
+        public String service(String request) {
+            return "test response to [" + request + "]";
+        }
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlThreadPoolProfileTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlThreadPoolProfileTest.java
index 9fe6609..c4fa0db 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlThreadPoolProfileTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlThreadPoolProfileTest.java
@@ -1,81 +1,79 @@
-/*
- * 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.cdi.test;
-
-import java.nio.file.Paths;
-
-import javax.inject.Inject;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.spi.ThreadPoolProfile;
-
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.matchesPattern;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-context.xml")
-public class XmlThreadPoolProfileTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-threadPoolProfile.xml").toFile(),
-                "imported-context.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyThreadProfile(CamelContext context) {
-        ThreadPoolProfile profile = context.getExecutorServiceManager().getThreadPoolProfile("thread-pool-profile");
-        assertThat("Thread pool profile is null!", profile, is(notNullValue()));
-        assertThat("Thread pool profile is incorrect!", profile.getPoolSize(), is(equalTo(5)));
-    }
-
-    @Test
-    public void sendMessageToInbound() {
-        String body = inbound.requestBody((Object) "message", String.class);
-
-        assertThat("Body is incorrect!", body,
-            matchesPattern("^Processed \\[message] with \\[Camel \\(test\\) thread #\\d+ - Profile Threads]$"));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.spi.ThreadPoolProfile;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.matchesPattern;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-context.xml")
+public class XmlThreadPoolProfileTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-threadPoolProfile.xml").toFile(),
+                "imported-context.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyThreadProfile(CamelContext context) {
+        ThreadPoolProfile profile = context.getExecutorServiceManager().getThreadPoolProfile("thread-pool-profile");
+        assertThat("Thread pool profile is null!", profile, is(notNullValue()));
+        assertThat("Thread pool profile is incorrect!", profile.getPoolSize(), is(equalTo(5)));
+    }
+
+    @Test
+    public void sendMessageToInbound() {
+        String body = inbound.requestBody((Object) "message", String.class);
+
+        assertThat("Body is incorrect!", body,
+            matchesPattern("^Processed \\[message] with \\[Camel \\(test\\) thread #\\d+ - Profile Threads]$"));
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlThreadPoolTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlThreadPoolTest.java
index 510fbd1..673bcde 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlThreadPoolTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/XmlThreadPoolTest.java
@@ -1,77 +1,76 @@
-/*
- * 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.cdi.test;
-
-import java.nio.file.Paths;
-import java.util.concurrent.ExecutorService;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.cdi.CdiCamelExtension;
-import org.apache.camel.cdi.ImportResource;
-import org.apache.camel.cdi.Uri;
-import org.jboss.arquillian.container.test.api.Deployment;
-import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.EmptyAsset;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.matchesPattern;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
-@RunWith(Arquillian.class)
-@ImportResource("imported-context.xml")
-public class XmlThreadPoolTest {
-
-    @Inject
-    @Uri("direct:inbound")
-    private ProducerTemplate inbound;
-
-    @Deployment
-    public static Archive<?> deployment() {
-        return ShrinkWrap.create(JavaArchive.class)
-            // Camel CDI
-            .addPackage(CdiCamelExtension.class.getPackage())
-            // Test Camel XML
-            .addAsResource(
-                Paths.get("src/test/resources/camel-context-threadPool.xml").toFile(),
-                "imported-context.xml")
-            // Bean archive deployment descriptor
-            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
-    }
-
-    @Test
-    public void verifyThreadPool(@Named("thread-pool") ExecutorService executor) {
-        assertThat("Thread pool is incorrect!", executor, is(notNullValue()));
-    }
-
-    @Test
-    public void sendMessageToInbound() {
-        String body = inbound.requestBody((Object) "message", String.class);
-
-        assertThat("Body is incorrect!", body,
-            matchesPattern("^Processed \\[message] with \\[Camel \\(test\\) thread #\\d+ - Thread Name]$"));
-    }
-}
+/*
+ * 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.cdi.test;
+
+import java.nio.file.Paths;
+import java.util.concurrent.ExecutorService;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.cdi.CdiCamelExtension;
+import org.apache.camel.cdi.ImportResource;
+import org.apache.camel.cdi.Uri;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.matchesPattern;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+@RunWith(Arquillian.class)
+@ImportResource("imported-context.xml")
+public class XmlThreadPoolTest {
+
+    @Inject
+    @Uri("direct:inbound")
+    private ProducerTemplate inbound;
+
+    @Deployment
+    public static Archive<?> deployment() {
+        return ShrinkWrap.create(JavaArchive.class)
+            // Camel CDI
+            .addPackage(CdiCamelExtension.class.getPackage())
+            // Test Camel XML
+            .addAsResource(
+                Paths.get("src/test/resources/camel-context-threadPool.xml").toFile(),
+                "imported-context.xml")
+            // Bean archive deployment descriptor
+            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
+    }
+
+    @Test
+    public void verifyThreadPool(@Named("thread-pool") ExecutorService executor) {
+        assertThat("Thread pool is incorrect!", executor, is(notNullValue()));
+    }
+
+    @Test
+    public void sendMessageToInbound() {
+        String body = inbound.requestBody((Object) "message", String.class);
+
+        assertThat("Body is incorrect!", body,
+            matchesPattern("^Processed \\[message] with \\[Camel \\(test\\) thread #\\d+ - Thread Name]$"));
+    }
+}
diff --git a/components/camel-chatscript/src/main/java/org/apache/camel/component/chatscript/ChatScriptBot.java b/components/camel-chatscript/src/main/java/org/apache/camel/component/chatscript/ChatScriptBot.java
index e4aaa88..4aba154 100644
--- a/components/camel-chatscript/src/main/java/org/apache/camel/component/chatscript/ChatScriptBot.java
+++ b/components/camel-chatscript/src/main/java/org/apache/camel/component/chatscript/ChatScriptBot.java
@@ -21,6 +21,7 @@
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.net.Socket;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-chatscript/src/main/java/org/apache/camel/component/chatscript/ChatScriptEndpoint.java b/components/camel-chatscript/src/main/java/org/apache/camel/component/chatscript/ChatScriptEndpoint.java
index 0db76ad..aa32058 100644
--- a/components/camel-chatscript/src/main/java/org/apache/camel/component/chatscript/ChatScriptEndpoint.java
+++ b/components/camel-chatscript/src/main/java/org/apache/camel/component/chatscript/ChatScriptEndpoint.java
@@ -16,9 +16,6 @@
  */
 package org.apache.camel.component.chatscript;
 
-
-
-
 import java.net.URI;
 import java.net.URISyntaxException;
 
@@ -32,7 +29,9 @@
 import org.apache.camel.spi.UriPath;
 import org.apache.camel.support.DefaultEndpoint;
 import org.apache.camel.util.ObjectHelper;
+
 import static org.apache.camel.component.chatscript.utils.ChatScriptConstants.DEFAULT_PORT;
+
 /**
  * Represents a ChatScript endpoint.
  */
diff --git a/components/camel-cm-sms/src/main/java/org/apache/camel/component/cm/CMComponent.java b/components/camel-cm-sms/src/main/java/org/apache/camel/component/cm/CMComponent.java
index e435dfb..179d6a9 100644
--- a/components/camel-cm-sms/src/main/java/org/apache/camel/component/cm/CMComponent.java
+++ b/components/camel-cm-sms/src/main/java/org/apache/camel/component/cm/CMComponent.java
@@ -1,85 +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.component.cm;
-
-import java.util.Map;
-import java.util.Set;
-import javax.validation.ConstraintViolation;
-import javax.validation.Validation;
-import javax.validation.Validator;
-import javax.validation.ValidatorFactory;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Endpoint;
-import org.apache.camel.ResolveEndpointFailedException;
-import org.apache.camel.spi.annotations.Component;
-import org.apache.camel.support.DefaultComponent;
-
-/**
- * Represents the component that manages {@link CMEndpoint}s.
- */
-@Component("cm-sms")
-public class CMComponent extends DefaultComponent {
-
-    private Validator validator;
-
-    public CMComponent() {
-    }
-
-    public CMComponent(final CamelContext context) {
-        super(context);
-    }
-
-    @Override
-    protected Endpoint createEndpoint(final String uri, final String remaining, final Map<String, Object> parameters) throws Exception {
-
-        // Set configuration based on uri parameters
-        final CMConfiguration config = new CMConfiguration();
-        setProperties(config, parameters);
-
-        // Validate configuration
-        log.debug("Validating uri based configuration");
-        final Set<ConstraintViolation<CMConfiguration>> constraintViolations = getValidator().validate(config);
-        if (constraintViolations.size() > 0) {
-            final StringBuffer msg = new StringBuffer();
-            for (final ConstraintViolation<CMConfiguration> cv : constraintViolations) {
-                msg.append(String.format("- Invalid value for %s: %s",
-                        cv.getPropertyPath().toString(),
-                        cv.getMessage()));
-            }
-            throw new ResolveEndpointFailedException(uri, msg.toString());
-        }
-
-        // Component is an Endpoint factory. So far, just one Endpoint type.
-        // Endpoint construction and configuration.
-
-        final CMEndpoint endpoint = new CMEndpoint(uri, this);
-        endpoint.setConfiguration(config);
-        endpoint.setHost(remaining);
-
-        return endpoint;
-    }
-
-    public Validator getValidator() {
-        if (validator == null) {
-            ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
-            validator = factory.getValidator();
-        }
-        return validator;
-    }
-
-}
+/*
+ * 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.component.cm;
+
+import java.util.Map;
+import java.util.Set;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.ResolveEndpointFailedException;
+import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.DefaultComponent;
+
+/**
+ * Represents the component that manages {@link CMEndpoint}s.
+ */
+@Component("cm-sms")
+public class CMComponent extends DefaultComponent {
+
+    private Validator validator;
+
+    public CMComponent() {
+    }
+
+    public CMComponent(final CamelContext context) {
+        super(context);
+    }
+
+    @Override
+    protected Endpoint createEndpoint(final String uri, final String remaining, final Map<String, Object> parameters) throws Exception {
+
+        // Set configuration based on uri parameters
+        final CMConfiguration config = new CMConfiguration();
+        setProperties(config, parameters);
+
+        // Validate configuration
+        log.debug("Validating uri based configuration");
+        final Set<ConstraintViolation<CMConfiguration>> constraintViolations = getValidator().validate(config);
+        if (constraintViolations.size() > 0) {
+            final StringBuffer msg = new StringBuffer();
+            for (final ConstraintViolation<CMConfiguration> cv : constraintViolations) {
+                msg.append(String.format("- Invalid value for %s: %s",
+                        cv.getPropertyPath().toString(),
+                        cv.getMessage()));
+            }
+            throw new ResolveEndpointFailedException(uri, msg.toString());
+        }
+
+        // Component is an Endpoint factory. So far, just one Endpoint type.
+        // Endpoint construction and configuration.
+
+        final CMEndpoint endpoint = new CMEndpoint(uri, this);
+        endpoint.setConfiguration(config);
+        endpoint.setHost(remaining);
+
+        return endpoint;
+    }
+
+    public Validator getValidator() {
+        if (validator == null) {
+            ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
+            validator = factory.getValidator();
+        }
+        return validator;
+    }
+
+}
diff --git a/components/camel-cm-sms/src/main/java/org/apache/camel/component/cm/CMSenderOneMessageImpl.java b/components/camel-cm-sms/src/main/java/org/apache/camel/component/cm/CMSenderOneMessageImpl.java
index c42254d..820fa7c 100644
--- a/components/camel-cm-sms/src/main/java/org/apache/camel/component/cm/CMSenderOneMessageImpl.java
+++ b/components/camel-cm-sms/src/main/java/org/apache/camel/component/cm/CMSenderOneMessageImpl.java
@@ -1,259 +1,259 @@
-/*
- * 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.component.cm;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.nio.charset.Charset;
-import java.util.UUID;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Text;
-
-import org.apache.camel.component.cm.exceptions.CMDirectException;
-import org.apache.camel.component.cm.exceptions.XMLConstructionException;
-import org.apache.camel.component.cm.exceptions.cmresponse.CMResponseException;
-import org.apache.camel.component.cm.exceptions.cmresponse.InsufficientBalanceException;
-import org.apache.camel.component.cm.exceptions.cmresponse.InvalidProductTokenException;
-import org.apache.camel.component.cm.exceptions.cmresponse.NoAccountFoundForProductTokenException;
-import org.apache.camel.component.cm.exceptions.cmresponse.UnknownErrorException;
-import org.apache.camel.component.cm.exceptions.cmresponse.UnroutableMessageException;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class CMSenderOneMessageImpl implements CMSender {
-
-    private static final Logger LOG = LoggerFactory.getLogger(CMSenderOneMessageImpl.class);
-
-    private final String url;
-    private final UUID productToken;
-
-    public CMSenderOneMessageImpl(final String url, final UUID productToken) {
-
-        this.url = url;
-        this.productToken = productToken;
-    }
-
-    /**
-     * Sends a message to CM endpoints. 1. CMMessage instance is going to be marshalled to xml. 2. Post request xml string to CMEndpoint.
-     */
-    @Override
-    public void send(final CMMessage cmMessage) {
-
-        // See: Check https://dashboard.onlinesmsgateway.com/docs for responses
-
-        // 1.Construct XML. Throws XMLConstructionException
-        final String xml = createXml(cmMessage);
-
-        // 2. Try to send to CM SMS Provider ...Throws CMResponseException
-        doHttpPost(url, xml);
-    }
-
-    private String createXml(final CMMessage message) {
-
-        try {
-
-            final ByteArrayOutputStream xml = new ByteArrayOutputStream();
-            final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-            factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
-            factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
-            factory.setNamespaceAware(true);
-
-            // Get the DocumentBuilder
-            final DocumentBuilder docBuilder = factory.newDocumentBuilder();
-
-            // Create blank DOM Document
-            final DOMImplementation impl = docBuilder.getDOMImplementation();
-            final Document doc = impl.createDocument(null, "MESSAGES", null);
-
-            // ROOT Element es MESSAGES
-            final Element root = doc.getDocumentElement();
-
-            // AUTHENTICATION element
-            final Element authenticationElement = doc.createElement("AUTHENTICATION");
-            final Element productTokenElement = doc.createElement("PRODUCTTOKEN");
-            authenticationElement.appendChild(productTokenElement);
-            final Text productTokenValue = doc.createTextNode("" + productToken);
-            productTokenElement.appendChild(productTokenValue);
-            root.appendChild(authenticationElement);
-
-            // MSG Element
-            final Element msgElement = doc.createElement("MSG");
-            root.appendChild(msgElement);
-
-            // <FROM>VALUE</FROM>
-            final Element fromElement = doc.createElement("FROM");
-            fromElement.appendChild(doc.createTextNode(message.getSender()));
-            msgElement.appendChild(fromElement);
-
-            // <BODY>VALUE</BODY>
-            final Element bodyElement = doc.createElement("BODY");
-            bodyElement.appendChild(doc.createTextNode(message.getMessage()));
-            msgElement.appendChild(bodyElement);
-
-            // <TO>VALUE</TO>
-            final Element toElement = doc.createElement("TO");
-            toElement.appendChild(doc.createTextNode(message.getPhoneNumber()));
-            msgElement.appendChild(toElement);
-
-            // <DCS>VALUE</DCS> - if UNICODE - messageOut.isGSM338Enc
-            // false
-            if (message.isUnicode()) {
-                final Element dcsElement = doc.createElement("DCS");
-                dcsElement.appendChild(doc.createTextNode("8"));
-                msgElement.appendChild(dcsElement);
-            }
-
-            // <REFERENCE>VALUE</REFERENCE> -Alfanum
-            final String id = message.getIdAsString();
-            if (id != null && !id.isEmpty()) {
-                final Element refElement = doc.createElement("REFERENCE");
-                refElement.appendChild(doc.createTextNode("" + message.getIdAsString()));
-                msgElement.appendChild(refElement);
-            }
-
-            // <MINIMUMNUMBEROFMESSAGEPARTS>1</MINIMUMNUMBEROFMESSAGEPARTS>
-            // <MAXIMUMNUMBEROFMESSAGEPARTS>8</MAXIMUMNUMBEROFMESSAGEPARTS>
-            if (message.isMultipart()) {
-                final Element minMessagePartsElement = doc.createElement("MINIMUMNUMBEROFMESSAGEPARTS");
-                minMessagePartsElement.appendChild(doc.createTextNode("1"));
-                msgElement.appendChild(minMessagePartsElement);
-
-                final Element maxMessagePartsElement = doc.createElement("MAXIMUMNUMBEROFMESSAGEPARTS");
-                maxMessagePartsElement.appendChild(doc.createTextNode(Integer.toString(message.getMultiparts())));
-                msgElement.appendChild(maxMessagePartsElement);
-            }
-
-            // Creatate XML as String
-            TransformerFactory transformerFactory = TransformerFactory.newInstance();
-            transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
-            final Transformer aTransformer = transformerFactory.newTransformer();
-            aTransformer.setOutputProperty(OutputKeys.INDENT, "yes");
-            final Source src = new DOMSource(doc);
-            final Result dest = new StreamResult(xml);
-            aTransformer.transform(src, dest);
-            return xml.toString();
-        } catch (final TransformerException e) {
-            throw new XMLConstructionException(String.format("Cant serialize CMMessage %s", message), e);
-        } catch (final ParserConfigurationException e) {
-            throw new XMLConstructionException(String.format("Cant serialize CMMessage %s", message), e);
-        }
-    }
-
-    private void doHttpPost(final String urlString, final String requestString) {
-
-        final HttpClient client = HttpClientBuilder.create().build();
-        final HttpPost post = new HttpPost(urlString);
-        post.setEntity(new StringEntity(requestString, Charset.forName("UTF-8")));
-
-        try {
-
-            final HttpResponse response = client.execute(post);
-
-            final int statusCode = response.getStatusLine().getStatusCode();
-
-            LOG.debug("Response Code : {}", statusCode);
-
-            if (statusCode == 400) {
-                throw new CMDirectException("CM Component and CM API show some kind of inconsistency. "
-                                            + "CM is complaining about not using a post method for the request. And this component only uses POST requests. What happens?");
-            }
-
-            if (statusCode != 200) {
-                throw new CMDirectException("CM Component and CM API show some kind of inconsistency. The component expects the status code to be 200 or 400. New api released? ");
-            }
-
-            // So we have 200 status code...
-
-            // The response type is 'text/plain' and contains the actual
-            // result of the request processing.
-
-            // We obtaing the result text
-            final BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
-
-            final StringBuffer result = new StringBuffer();
-            String line = null;
-            while ((line = rd.readLine()) != null) {
-                result.append(line);
-            }
-
-            // ... and process it
-
-            line = result.toString();
-            if (!line.isEmpty()) {
-
-                // Line is not empty = error
-                LOG.debug("Result of the request processing: FAILED\n{}", line);
-
-                // The response text contains the error description. We will
-                // throw a custom exception for each.
-
-                if (line.contains(CMConstants.ERROR_UNKNOWN)) {
-                    throw new UnknownErrorException();
-                } else if (line.contains(CMConstants.ERROR_NO_ACCOUNT)) {
-                    throw new NoAccountFoundForProductTokenException();
-                } else if (line.contains(CMConstants.ERROR_INSUFICIENT_BALANCE)) {
-                    throw new InsufficientBalanceException();
-                } else if (line.contains(CMConstants.ERROR_UNROUTABLE_MESSAGE)) {
-                    throw new UnroutableMessageException();
-                } else if (line.contains(CMConstants.ERROR_INVALID_PRODUCT_TOKEN)) {
-                    throw new InvalidProductTokenException();
-                } else {
-
-                    // SO FAR i would expect other kind of ERROR.
-
-                    // MSISDN correctness and message validity is client
-                    // responsibility
-                    throw new CMResponseException("CHECK ME. I am not expecting this. ");
-                }
-            }
-
-            // Ok. Line is EMPTY - successfully submitted
-            LOG.debug("Result of the request processing: Successfully submited");
-        } catch (final IOException io) {
-            throw new CMDirectException(io);
-        } catch (Throwable t) {
-            if (!(t instanceof CMDirectException)) {
-                // Chain it
-                t = new CMDirectException(t);
-            }
-            throw (CMDirectException) t;
-        }
-    }
-}
+/*
+ * 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.component.cm;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+import java.util.UUID;
+
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+
+import org.apache.camel.component.cm.exceptions.CMDirectException;
+import org.apache.camel.component.cm.exceptions.XMLConstructionException;
+import org.apache.camel.component.cm.exceptions.cmresponse.CMResponseException;
+import org.apache.camel.component.cm.exceptions.cmresponse.InsufficientBalanceException;
+import org.apache.camel.component.cm.exceptions.cmresponse.InvalidProductTokenException;
+import org.apache.camel.component.cm.exceptions.cmresponse.NoAccountFoundForProductTokenException;
+import org.apache.camel.component.cm.exceptions.cmresponse.UnknownErrorException;
+import org.apache.camel.component.cm.exceptions.cmresponse.UnroutableMessageException;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CMSenderOneMessageImpl implements CMSender {
+
+    private static final Logger LOG = LoggerFactory.getLogger(CMSenderOneMessageImpl.class);
+
+    private final String url;
+    private final UUID productToken;
+
+    public CMSenderOneMessageImpl(final String url, final UUID productToken) {
+
+        this.url = url;
+        this.productToken = productToken;
+    }
+
+    /**
+     * Sends a message to CM endpoints. 1. CMMessage instance is going to be marshalled to xml. 2. Post request xml string to CMEndpoint.
+     */
+    @Override
+    public void send(final CMMessage cmMessage) {
+
+        // See: Check https://dashboard.onlinesmsgateway.com/docs for responses
+
+        // 1.Construct XML. Throws XMLConstructionException
+        final String xml = createXml(cmMessage);
+
+        // 2. Try to send to CM SMS Provider ...Throws CMResponseException
+        doHttpPost(url, xml);
+    }
+
+    private String createXml(final CMMessage message) {
+
+        try {
+
+            final ByteArrayOutputStream xml = new ByteArrayOutputStream();
+            final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+            factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
+            factory.setNamespaceAware(true);
+
+            // Get the DocumentBuilder
+            final DocumentBuilder docBuilder = factory.newDocumentBuilder();
+
+            // Create blank DOM Document
+            final DOMImplementation impl = docBuilder.getDOMImplementation();
+            final Document doc = impl.createDocument(null, "MESSAGES", null);
+
+            // ROOT Element es MESSAGES
+            final Element root = doc.getDocumentElement();
+
+            // AUTHENTICATION element
+            final Element authenticationElement = doc.createElement("AUTHENTICATION");
+            final Element productTokenElement = doc.createElement("PRODUCTTOKEN");
+            authenticationElement.appendChild(productTokenElement);
+            final Text productTokenValue = doc.createTextNode("" + productToken);
+            productTokenElement.appendChild(productTokenValue);
+            root.appendChild(authenticationElement);
+
+            // MSG Element
+            final Element msgElement = doc.createElement("MSG");
+            root.appendChild(msgElement);
+
+            // <FROM>VALUE</FROM>
+            final Element fromElement = doc.createElement("FROM");
+            fromElement.appendChild(doc.createTextNode(message.getSender()));
+            msgElement.appendChild(fromElement);
+
+            // <BODY>VALUE</BODY>
+            final Element bodyElement = doc.createElement("BODY");
+            bodyElement.appendChild(doc.createTextNode(message.getMessage()));
+            msgElement.appendChild(bodyElement);
+
+            // <TO>VALUE</TO>
+            final Element toElement = doc.createElement("TO");
+            toElement.appendChild(doc.createTextNode(message.getPhoneNumber()));
+            msgElement.appendChild(toElement);
+
+            // <DCS>VALUE</DCS> - if UNICODE - messageOut.isGSM338Enc
+            // false
+            if (message.isUnicode()) {
+                final Element dcsElement = doc.createElement("DCS");
+                dcsElement.appendChild(doc.createTextNode("8"));
+                msgElement.appendChild(dcsElement);
+            }
+
+            // <REFERENCE>VALUE</REFERENCE> -Alfanum
+            final String id = message.getIdAsString();
+            if (id != null && !id.isEmpty()) {
+                final Element refElement = doc.createElement("REFERENCE");
+                refElement.appendChild(doc.createTextNode("" + message.getIdAsString()));
+                msgElement.appendChild(refElement);
+            }
+
+            // <MINIMUMNUMBEROFMESSAGEPARTS>1</MINIMUMNUMBEROFMESSAGEPARTS>
+            // <MAXIMUMNUMBEROFMESSAGEPARTS>8</MAXIMUMNUMBEROFMESSAGEPARTS>
+            if (message.isMultipart()) {
+                final Element minMessagePartsElement = doc.createElement("MINIMUMNUMBEROFMESSAGEPARTS");
+                minMessagePartsElement.appendChild(doc.createTextNode("1"));
+                msgElement.appendChild(minMessagePartsElement);
+
+                final Element maxMessagePartsElement = doc.createElement("MAXIMUMNUMBEROFMESSAGEPARTS");
+                maxMessagePartsElement.appendChild(doc.createTextNode(Integer.toString(message.getMultiparts())));
+                msgElement.appendChild(maxMessagePartsElement);
+            }
+
+            // Creatate XML as String
+            TransformerFactory transformerFactory = TransformerFactory.newInstance();
+            transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
+            final Transformer aTransformer = transformerFactory.newTransformer();
+            aTransformer.setOutputProperty(OutputKeys.INDENT, "yes");
+            final Source src = new DOMSource(doc);
+            final Result dest = new StreamResult(xml);
+            aTransformer.transform(src, dest);
+            return xml.toString();
+        } catch (final TransformerException e) {
+            throw new XMLConstructionException(String.format("Cant serialize CMMessage %s", message), e);
+        } catch (final ParserConfigurationException e) {
+            throw new XMLConstructionException(String.format("Cant serialize CMMessage %s", message), e);
+        }
+    }
+
+    private void doHttpPost(final String urlString, final String requestString) {
+
+        final HttpClient client = HttpClientBuilder.create().build();
+        final HttpPost post = new HttpPost(urlString);
+        post.setEntity(new StringEntity(requestString, Charset.forName("UTF-8")));
+
+        try {
+
+            final HttpResponse response = client.execute(post);
+
+            final int statusCode = response.getStatusLine().getStatusCode();
+
+            LOG.debug("Response Code : {}", statusCode);
+
+            if (statusCode == 400) {
+                throw new CMDirectException("CM Component and CM API show some kind of inconsistency. "
+                                            + "CM is complaining about not using a post method for the request. And this component only uses POST requests. What happens?");
+            }
+
+            if (statusCode != 200) {
+                throw new CMDirectException("CM Component and CM API show some kind of inconsistency. The component expects the status code to be 200 or 400. New api released? ");
+            }
+
+            // So we have 200 status code...
+
+            // The response type is 'text/plain' and contains the actual
+            // result of the request processing.
+
+            // We obtaing the result text
+            final BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
+
+            final StringBuffer result = new StringBuffer();
+            String line = null;
+            while ((line = rd.readLine()) != null) {
+                result.append(line);
+            }
+
+            // ... and process it
+
+            line = result.toString();
+            if (!line.isEmpty()) {
+
+                // Line is not empty = error
+                LOG.debug("Result of the request processing: FAILED\n{}", line);
+
+                // The response text contains the error description. We will
+                // throw a custom exception for each.
+
+                if (line.contains(CMConstants.ERROR_UNKNOWN)) {
+                    throw new UnknownErrorException();
+                } else if (line.contains(CMConstants.ERROR_NO_ACCOUNT)) {
+                    throw new NoAccountFoundForProductTokenException();
+                } else if (line.contains(CMConstants.ERROR_INSUFICIENT_BALANCE)) {
+                    throw new InsufficientBalanceException();
+                } else if (line.contains(CMConstants.ERROR_UNROUTABLE_MESSAGE)) {
+                    throw new UnroutableMessageException();
+                } else if (line.contains(CMConstants.ERROR_INVALID_PRODUCT_TOKEN)) {
+                    throw new InvalidProductTokenException();
+                } else {
+
+                    // SO FAR i would expect other kind of ERROR.
+
+                    // MSISDN correctness and message validity is client
+                    // responsibility
+                    throw new CMResponseException("CHECK ME. I am not expecting this. ");
+                }
+            }
+
+            // Ok. Line is EMPTY - successfully submitted
+            LOG.debug("Result of the request processing: Successfully submited");
+        } catch (final IOException io) {
+            throw new CMDirectException(io);
+        } catch (Throwable t) {
+            if (!(t instanceof CMDirectException)) {
+                // Chain it
+                t = new CMDirectException(t);
+            }
+            throw (CMDirectException) t;
+        }
+    }
+}
diff --git a/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMConfigurationTest.java b/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMConfigurationTest.java
index e641721..dbdaf745 100644
--- a/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMConfigurationTest.java
+++ b/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMConfigurationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cm.test;
+
 import java.util.Set;
 import java.util.UUID;
 
diff --git a/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMMessageTest.java b/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMMessageTest.java
index 5bf44fd..cad4551 100644
--- a/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMMessageTest.java
+++ b/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMMessageTest.java
@@ -1,322 +1,323 @@
-/*
- * 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.
- */
+/*
+ * 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.component.cm.test;
-import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
-import org.apache.camel.component.cm.CMConstants;
-import org.apache.camel.component.cm.CMMessage;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.util.Assert;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = { ValidatorConfiguration.class })
-// @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
-// @DisableJmx(false)
-// @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class CMMessageTest extends AbstractJUnit4SpringContextTests {
-
-    private final PhoneNumberUtil pnu = PhoneNumberUtil.getInstance();
-    private String validNumber;
-
-    @Before
-    public void beforeTest() throws Exception {
-        validNumber = pnu.format(pnu.getExampleNumber("ES"), PhoneNumberFormat.E164);
-    }
-
-    // @After
-    // public void afterTest() {
-
-    /*
-     * GSM0338
-     */
-
-    @Test
-    public void testGSM338AndLTMAXGSMMESSAGELENGTH() throws Exception {
-
-        // 0338 and less than 160 char -> 1 part
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < CMConstants.MAX_GSM_MESSAGE_LENGTH; index++) {
-            message.append("a");
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 1);
-        Assert.isTrue(!cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testGSM338AndEQMAXGSMMESSAGELENGTH() throws Exception {
-        // 0338 and length is exactly 160 -> 1 part
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < CMConstants.MAX_GSM_MESSAGE_LENGTH; index++) {
-            message.append("a");
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 1);
-        Assert.isTrue(!cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testGSM338AndGTMAXGSMMESSAGELENGTH() throws Exception {
-
-        // 0338 and length is exactly 161 -> 2 part
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < CMConstants.MAX_GSM_MESSAGE_LENGTH + 1; index++) {
-            message.append("a");
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 2);
-        Assert.isTrue(!cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testGSM338AndLT2MAXGSMMESSAGELENGTH() throws Exception {
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < (2 * CMConstants.MAX_GSM_MESSAGE_LENGTH_PER_PART_IF_MULTIPART - 1); index++) {
-            message.append("a");
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 2);
-        Assert.isTrue(!cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testGSM338AndEQ2MAXGSMMESSAGELENGTH() throws Exception {
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < (2 * CMConstants.MAX_GSM_MESSAGE_LENGTH_PER_PART_IF_MULTIPART); index++) {
-            message.append("a");
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 2);
-        Assert.isTrue(!cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testGSM338AndGT2MAXGSMMESSAGELENGTH() throws Exception {
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < (2 * CMConstants.MAX_GSM_MESSAGE_LENGTH_PER_PART_IF_MULTIPART + 1); index++) {
-            message.append("a");
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 3);
-        Assert.isTrue(!cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testGSM338AndEQ8MAXGSMMESSAGELENGTH() throws Exception {
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < (8 * CMConstants.MAX_GSM_MESSAGE_LENGTH_PER_PART_IF_MULTIPART); index++) {
-            message.append("a");
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 8);
-        Assert.isTrue(!cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testGSM338AndGT8MAXGSMMESSAGELENGTH() throws Exception {
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < (8 * CMConstants.MAX_GSM_MESSAGE_LENGTH_PER_PART_IF_MULTIPART + 1); index++) {
-            message.append("a");
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 8);
-        Assert.isTrue(!cmMessage.isUnicode());
-    }
-
-    /*
-     * Unicode Messages
-     */
-
-    @Test
-    public void testUnicodeAndLTMAXGSMMESSAGELENGTH() throws Exception {
-
-        String ch = "\uF400";
-
-        // 0338 and less than 160 char -> 1 part
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < CMConstants.MAX_UNICODE_MESSAGE_LENGTH; index++) {
-            message.append(ch);
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 1);
-        Assert.isTrue(cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testUnicodeAndEQMAXGSMMESSAGELENGTH() throws Exception {
-        // 0338 and length is exactly 160 -> 1 part
-
-        String ch = "\uF400";
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < CMConstants.MAX_UNICODE_MESSAGE_LENGTH; index++) {
-            message.append(ch);
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 1);
-        Assert.isTrue(cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testUnicodeAndGTMAXGSMMESSAGELENGTH() throws Exception {
-
-        // 0338 and length is exactly 161 -> 2 part
-
-        String ch = "\uF400";
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < CMConstants.MAX_UNICODE_MESSAGE_LENGTH + 1; index++) {
-            message.append(ch);
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 2);
-        Assert.isTrue(cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testUnicodeAndLT2MAXGSMMESSAGELENGTH() throws Exception {
-
-        String ch = "\uF400";
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < (2 * CMConstants.MAX_UNICODE_MESSAGE_LENGTH_PER_PART_IF_MULTIPART - 1); index++) {
-            message.append(ch);
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 2);
-        Assert.isTrue(cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testUnicodeAndEQ2MAXGSMMESSAGELENGTH() throws Exception {
-
-        String ch = "\uF400";
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < (2 * CMConstants.MAX_UNICODE_MESSAGE_LENGTH_PER_PART_IF_MULTIPART); index++) {
-            message.append(ch);
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 2);
-        Assert.isTrue(cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testUnicodeAndGT2MAXGSMMESSAGELENGTH() throws Exception {
-
-        String ch = "\uF400";
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < (2 * CMConstants.MAX_UNICODE_MESSAGE_LENGTH_PER_PART_IF_MULTIPART + 1); index++) {
-            message.append(ch);
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 3);
-        Assert.isTrue(cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testUnicodeAndEQ8MAXGSMMESSAGELENGTH() throws Exception {
-
-        String ch = "\uF400";
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < (8 * CMConstants.MAX_UNICODE_MESSAGE_LENGTH_PER_PART_IF_MULTIPART); index++) {
-            message.append(ch);
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 8);
-        Assert.isTrue(cmMessage.isUnicode());
-    }
-
-    @Test
-    public void testUnicodeAndGT8MAXGSMMESSAGELENGTH() throws Exception {
-
-        String ch = "\uF400";
-
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < (8 * CMConstants.MAX_GSM_MESSAGE_LENGTH_PER_PART_IF_MULTIPART + 1); index++) {
-            message.append(ch);
-        }
-
-        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
-        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
-
-        Assert.isTrue(cmMessage.getMultiparts() == 8);
-        Assert.isTrue(cmMessage.isUnicode());
-    }
-
-}
+
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
+import org.apache.camel.component.cm.CMConstants;
+import org.apache.camel.component.cm.CMMessage;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.util.Assert;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = { ValidatorConfiguration.class })
+// @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
+// @DisableJmx(false)
+// @FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class CMMessageTest extends AbstractJUnit4SpringContextTests {
+
+    private final PhoneNumberUtil pnu = PhoneNumberUtil.getInstance();
+    private String validNumber;
+
+    @Before
+    public void beforeTest() throws Exception {
+        validNumber = pnu.format(pnu.getExampleNumber("ES"), PhoneNumberFormat.E164);
+    }
+
+    // @After
+    // public void afterTest() {
+
+    /*
+     * GSM0338
+     */
+
+    @Test
+    public void testGSM338AndLTMAXGSMMESSAGELENGTH() throws Exception {
+
+        // 0338 and less than 160 char -> 1 part
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < CMConstants.MAX_GSM_MESSAGE_LENGTH; index++) {
+            message.append("a");
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 1);
+        Assert.isTrue(!cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testGSM338AndEQMAXGSMMESSAGELENGTH() throws Exception {
+        // 0338 and length is exactly 160 -> 1 part
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < CMConstants.MAX_GSM_MESSAGE_LENGTH; index++) {
+            message.append("a");
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 1);
+        Assert.isTrue(!cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testGSM338AndGTMAXGSMMESSAGELENGTH() throws Exception {
+
+        // 0338 and length is exactly 161 -> 2 part
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < CMConstants.MAX_GSM_MESSAGE_LENGTH + 1; index++) {
+            message.append("a");
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 2);
+        Assert.isTrue(!cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testGSM338AndLT2MAXGSMMESSAGELENGTH() throws Exception {
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < (2 * CMConstants.MAX_GSM_MESSAGE_LENGTH_PER_PART_IF_MULTIPART - 1); index++) {
+            message.append("a");
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 2);
+        Assert.isTrue(!cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testGSM338AndEQ2MAXGSMMESSAGELENGTH() throws Exception {
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < (2 * CMConstants.MAX_GSM_MESSAGE_LENGTH_PER_PART_IF_MULTIPART); index++) {
+            message.append("a");
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 2);
+        Assert.isTrue(!cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testGSM338AndGT2MAXGSMMESSAGELENGTH() throws Exception {
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < (2 * CMConstants.MAX_GSM_MESSAGE_LENGTH_PER_PART_IF_MULTIPART + 1); index++) {
+            message.append("a");
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 3);
+        Assert.isTrue(!cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testGSM338AndEQ8MAXGSMMESSAGELENGTH() throws Exception {
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < (8 * CMConstants.MAX_GSM_MESSAGE_LENGTH_PER_PART_IF_MULTIPART); index++) {
+            message.append("a");
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 8);
+        Assert.isTrue(!cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testGSM338AndGT8MAXGSMMESSAGELENGTH() throws Exception {
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < (8 * CMConstants.MAX_GSM_MESSAGE_LENGTH_PER_PART_IF_MULTIPART + 1); index++) {
+            message.append("a");
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 8);
+        Assert.isTrue(!cmMessage.isUnicode());
+    }
+
+    /*
+     * Unicode Messages
+     */
+
+    @Test
+    public void testUnicodeAndLTMAXGSMMESSAGELENGTH() throws Exception {
+
+        String ch = "\uF400";
+
+        // 0338 and less than 160 char -> 1 part
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < CMConstants.MAX_UNICODE_MESSAGE_LENGTH; index++) {
+            message.append(ch);
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 1);
+        Assert.isTrue(cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testUnicodeAndEQMAXGSMMESSAGELENGTH() throws Exception {
+        // 0338 and length is exactly 160 -> 1 part
+
+        String ch = "\uF400";
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < CMConstants.MAX_UNICODE_MESSAGE_LENGTH; index++) {
+            message.append(ch);
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 1);
+        Assert.isTrue(cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testUnicodeAndGTMAXGSMMESSAGELENGTH() throws Exception {
+
+        // 0338 and length is exactly 161 -> 2 part
+
+        String ch = "\uF400";
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < CMConstants.MAX_UNICODE_MESSAGE_LENGTH + 1; index++) {
+            message.append(ch);
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 2);
+        Assert.isTrue(cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testUnicodeAndLT2MAXGSMMESSAGELENGTH() throws Exception {
+
+        String ch = "\uF400";
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < (2 * CMConstants.MAX_UNICODE_MESSAGE_LENGTH_PER_PART_IF_MULTIPART - 1); index++) {
+            message.append(ch);
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 2);
+        Assert.isTrue(cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testUnicodeAndEQ2MAXGSMMESSAGELENGTH() throws Exception {
+
+        String ch = "\uF400";
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < (2 * CMConstants.MAX_UNICODE_MESSAGE_LENGTH_PER_PART_IF_MULTIPART); index++) {
+            message.append(ch);
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 2);
+        Assert.isTrue(cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testUnicodeAndGT2MAXGSMMESSAGELENGTH() throws Exception {
+
+        String ch = "\uF400";
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < (2 * CMConstants.MAX_UNICODE_MESSAGE_LENGTH_PER_PART_IF_MULTIPART + 1); index++) {
+            message.append(ch);
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 3);
+        Assert.isTrue(cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testUnicodeAndEQ8MAXGSMMESSAGELENGTH() throws Exception {
+
+        String ch = "\uF400";
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < (8 * CMConstants.MAX_UNICODE_MESSAGE_LENGTH_PER_PART_IF_MULTIPART); index++) {
+            message.append(ch);
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 8);
+        Assert.isTrue(cmMessage.isUnicode());
+    }
+
+    @Test
+    public void testUnicodeAndGT8MAXGSMMESSAGELENGTH() throws Exception {
+
+        String ch = "\uF400";
+
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < (8 * CMConstants.MAX_GSM_MESSAGE_LENGTH_PER_PART_IF_MULTIPART + 1); index++) {
+            message.append(ch);
+        }
+
+        final CMMessage cmMessage = new CMMessage(validNumber, message.toString());
+        cmMessage.setUnicodeAndMultipart(CMConstants.DEFAULT_MULTIPARTS);
+
+        Assert.isTrue(cmMessage.getMultiparts() == 8);
+        Assert.isTrue(cmMessage.isUnicode());
+    }
+
+}
diff --git a/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMTest.java b/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMTest.java
index 19f31df..1207ea1 100644
--- a/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMTest.java
+++ b/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMTest.java
@@ -1,367 +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.component.cm.test;
-
-import java.math.BigInteger;
-import java.security.SecureRandom;
-
-import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
-import org.apache.camel.CamelContext;
-import org.apache.camel.EndpointInject;
-import org.apache.camel.Exchange;
-import org.apache.camel.InvalidPayloadRuntimeException;
-import org.apache.camel.Produce;
-import org.apache.camel.ResolveEndpointFailedException;
-import org.apache.camel.Service;
-import org.apache.camel.component.cm.CMEndpoint;
-import org.apache.camel.component.cm.CMProducer;
-import org.apache.camel.component.cm.client.SMSMessage;
-import org.apache.camel.component.cm.exceptions.HostUnavailableException;
-import org.apache.camel.component.cm.exceptions.cmresponse.CMResponseException;
-import org.apache.camel.component.cm.exceptions.cmresponse.InsufficientBalanceException;
-import org.apache.camel.component.cm.exceptions.cmresponse.InvalidMSISDNException;
-import org.apache.camel.component.cm.exceptions.cmresponse.InvalidProductTokenException;
-import org.apache.camel.component.cm.exceptions.cmresponse.NoAccountFoundForProductTokenException;
-import org.apache.camel.component.cm.exceptions.cmresponse.NoMessageException;
-import org.apache.camel.component.cm.exceptions.cmresponse.NotPhoneNumberFoundException;
-import org.apache.camel.component.cm.exceptions.cmresponse.UnknownErrorException;
-import org.apache.camel.component.cm.exceptions.cmresponse.UnroutableMessageException;
-import org.apache.camel.component.cm.test.mocks.cmsender.CMResponseExceptionSender;
-import org.apache.camel.component.cm.test.mocks.cmsender.InsufficientBalanceExceptionSender;
-import org.apache.camel.component.cm.test.mocks.cmsender.InvalidMSISDNExceptionSender;
-import org.apache.camel.component.cm.test.mocks.cmsender.InvalidProductTokenExceptionSender;
-import org.apache.camel.component.cm.test.mocks.cmsender.NoAccountFoundForProductTokenExceptionSender;
-import org.apache.camel.component.cm.test.mocks.cmsender.NoMessageExceptionSender;
-import org.apache.camel.component.cm.test.mocks.cmsender.NotPhoneNumberFoundExceptionSender;
-import org.apache.camel.component.cm.test.mocks.cmsender.UnknownErrorExceptionSender;
-import org.apache.camel.component.cm.test.mocks.cmsender.UnroutableMessageExceptionSender;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.CamelSpringRunner;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
-import org.springframework.util.Assert;
-
-@RunWith(CamelSpringRunner.class)
-@ContextConfiguration(classes = {CamelTestConfiguration.class })
-public class CMTest extends AbstractJUnit4SpringContextTests {
-
-    // dependency: camel-spring-javaconfig
-
-    @Autowired
-    private CamelContext camelContext;
-
-    private SecureRandom random = new SecureRandom();
-
-    private final PhoneNumberUtil pnu = PhoneNumberUtil.getInstance();
-    private String validNumber;
-
-    @Produce("direct:sms")
-    private CMProxy cmProxy;
-
-    @EndpointInject("mock:test")
-    private MockEndpoint mock;
-
-    // private StopWatch stopWatch = new StopWatch(getClass().getSimpleName());
-
-    @Before
-    public void beforeTest() throws Exception {
-        mock.reset();
-        camelContext.getRouteController().startRoute(CamelTestConfiguration.SIMPLE_ROUTE_ID);
-        validNumber = pnu.format(pnu.getExampleNumber("ES"), PhoneNumberFormat.E164);
-    }
-
-    @After
-    public void afterTest() {
-
-        try {
-            camelContext.getRouteController().stopRoute(CamelTestConfiguration.SIMPLE_ROUTE_ID);
-        } catch (Exception e) {
-            logger.error("Exception trying to stop de routes", e);
-        }
-
-        // Stop all routes
-        // for (Route route : camelContext.getRoutes()) {
-        // try {
-        // camelContext.getRouteController().stopRoute(route.getId());
-        // } catch (Exception e) {
-        // logger.error("Exception trying to stop de routes", e);
-        // }
-        // }
-    }
-
-    /*
-     * 1. Invalid URI
-     */
-
-    @Test(expected = ResolveEndpointFailedException.class)
-    public void testNotRequiredProductToken() throws Throwable {
-        try {
-            String schemedUri = "cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&testConnectionOnStartup=true";
-            camelContext.getEndpoint(schemedUri).start();
-        } catch (Throwable t) {
-            throw t.getCause();
-        }
-
-    }
-
-    @Test(expected = ResolveEndpointFailedException.class)
-    public void testNotRequiredDefaultFrom() throws Throwable {
-        try {
-            String schemedUri = "cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&testConnectionOnStartup=true";
-            camelContext.getEndpoint(schemedUri).start();
-        } catch (Throwable t) {
-            throw t.getCause();
-        }
-
-    }
-
-    @Test(expected = HostUnavailableException.class)
-    public void testHostUnavailableException() throws Throwable {
-        // cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&productToken=ea723fd7-da81-4826-89bc-fa7144e71c40&testConnectionOnStartup=true
-        String schemedUri = "cm-sms://dummy.sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&productToken=ea723fd7-da81-4826-89bc-fa7144e71c40&testConnectionOnStartup=true";
-        Service service = camelContext.getEndpoint(schemedUri).createProducer();
-        service.start();
-    }
-
-    @Test(expected = ResolveEndpointFailedException.class)
-    public void testInvalidHostDuplicateScheme() throws Throwable {
-        // cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&productToken=ea723fd7-da81-4826-89bc-fa7144e71c40&testConnectionOnStartup=true
-        try {
-            String schemedUri = "cm-sms://https://demo.com";
-            camelContext.getEndpoint(schemedUri);
-        } catch (Throwable t) {
-            throw t.getCause();
-        }
-    }
-
-    /*
-     * 2. Invalid Payload
-     */
-
-    @Test(expected = RuntimeException.class)
-    public void testNullPayload() throws Throwable {
-        cmProxy.send(null);
-    }
-
-    // @DirtiesContext
-    @Test(expected = NoAccountFoundForProductTokenException.class)
-    public void testAsPartOfARoute() throws Exception {
-
-        // Body
-        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateUnicodeMessage(), validNumber, null);
-        cmProxy.send(smsMessage);
-    }
-
-    @Test(expected = NoAccountFoundForProductTokenException.class)
-    public void testNoAccountFoundForProductTokenException() throws Exception {
-
-        // Change sending strategy
-        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
-        CMProducer producer = endpoint.createProducer();
-        producer.setSender(new NoAccountFoundForProductTokenExceptionSender());
-
-        // Body
-        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateGSM0338Message(), validNumber, null);
-        send(producer, smsMessage);
-    }
-
-    /*
-     * 3. CM Responses (Faking Exceptions)
-     */
-
-    @Test(expected = CMResponseException.class)
-    public void testCMResponseException() throws Exception {
-
-        // Change sending strategy
-        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
-        CMProducer producer = endpoint.createProducer();
-        producer.setSender(new CMResponseExceptionSender());
-
-        // Body
-        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateUnicodeMessage(), validNumber, null);
-        send(producer, smsMessage);
-    }
-
-    @Test(expected = InsufficientBalanceException.class)
-    public void testInsufficientBalanceException() throws Exception {
-
-        // Change sending strategy
-        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
-        CMProducer producer = endpoint.createProducer();
-        producer.setSender(new InsufficientBalanceExceptionSender());
-
-        // Body
-        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateGSM0338Message(), validNumber, null);
-        send(producer, smsMessage);
-    }
-
-    @Test(expected = InvalidMSISDNException.class)
-    public void testInvalidMSISDNException() throws Exception {
-
-        // Change sending strategy
-        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
-        CMProducer producer = endpoint.createProducer();
-        producer.setSender(new InvalidMSISDNExceptionSender());
-
-        // Body
-        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateUnicodeMessage(), validNumber, null);
-        send(producer, smsMessage);
-    }
-
-    @Test(expected = InvalidProductTokenException.class)
-    public void testInvalidProductTokenException() throws Exception {
-
-        // Change sending strategy
-        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
-        CMProducer producer = endpoint.createProducer();
-        producer.setSender(new InvalidProductTokenExceptionSender());
-
-        // Body
-        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateUnicodeMessage(), validNumber, null);
-        send(producer, smsMessage);
-    }
-
-    @Test(expected = NoMessageException.class)
-    public void testNoMessageException() throws Exception {
-
-        // Change sending strategy
-        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
-        CMProducer producer = endpoint.createProducer();
-        producer.setSender(new NoMessageExceptionSender());
-
-        // Body
-        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateGSM0338Message(), validNumber, null);
-        send(producer, smsMessage);
-    }
-
-    @Test(expected = NotPhoneNumberFoundException.class)
-    public void testNotPhoneNumberFoundException() throws Exception {
-
-        // Change sending strategy
-        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
-        CMProducer producer = endpoint.createProducer();
-        producer.setSender(new NotPhoneNumberFoundExceptionSender());
-
-        // Body
-        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateUnicodeMessage(), validNumber, null);
-        send(producer, smsMessage);
-    }
-
-    @Test(expected = UnknownErrorException.class)
-    public void testUnknownErrorException() throws Exception {
-
-        // Change sending strategy
-        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
-        CMProducer producer = endpoint.createProducer();
-        producer.setSender(new UnknownErrorExceptionSender());
-
-        // Body
-        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateGSM0338Message(), validNumber, null);
-        send(producer, smsMessage);
-    }
-
-    @Test(expected = UnroutableMessageException.class)
-    public void testUnroutableMessageException() throws Exception {
-
-        // Change sending strategy
-        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
-        CMProducer producer = endpoint.createProducer();
-        producer.setSender(new UnroutableMessageExceptionSender());
-
-        // Body
-        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateUnicodeMessage(), validNumber, null);
-        send(producer, smsMessage);
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void testCMEndpointIsForProducing() throws Exception {
-
-        // Change sending strategy
-        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
-        endpoint.createConsumer(null);
-    }
-
-    @Test
-    public void testCMEndpointGetHost() throws Exception {
-
-        // Change sending strategy
-        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
-        Assert.isTrue(endpoint.getHost().equals(applicationContext.getEnvironment().getRequiredProperty("cm.url")));
-    }
-
-    @Test(expected = InvalidPayloadRuntimeException.class)
-    public void testSendInvalidPayload() throws Exception {
-
-        // Body
-        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateGSM0338Message(), null, null);
-        cmProxy.send(smsMessage);
-    }
-
-    /*
-     * CMMessages
-     */
-
-    // @Test(expected = RuntimeException.class)
-    // public void testSkel() throws Exception {
-
-    // mock.expectedMessageCount(1);
-    //
-    // // Body
-    // final SMSMessage smsMessage = new SMSMessage("Hello CM", validNumber);
-    // cmProxy.send(smsMessage);
-    //
-    // mock.assertIsSatisfied();
-    // }
-
-    private String generateUnicodeMessage() {
-        String ch = "\uF400";
-        return generateRandomLengthMessageByChar(ch);
-    }
-
-    private String generateGSM0338Message() {
-        String ch = "a";
-        return generateRandomLengthMessageByChar(ch);
-    }
-
-    private String generateRandomLengthMessageByChar(String ch) {
-        // random Length
-        int msgLength = (int) (Math.random() * 2000);
-        StringBuffer message = new StringBuffer();
-        for (int index = 0; index < msgLength; index++) {
-            message.append(ch);
-        }
-        return message.toString();
-    }
-
-    //
-    private String generateIdAsString() {
-        return new BigInteger(130, random).toString(32);
-    }
-
-    private static void send(CMProducer producer, SMSMessage smsMessage) throws Exception {
-        Exchange exchange = producer.getEndpoint().createExchange();
-        exchange.getIn().setBody(smsMessage);
-        producer.process(exchange);
-    }
-
-}
+/*
+ * 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.component.cm.test;
+
+import java.math.BigInteger;
+import java.security.SecureRandom;
+
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
+import org.apache.camel.CamelContext;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.InvalidPayloadRuntimeException;
+import org.apache.camel.Produce;
+import org.apache.camel.ResolveEndpointFailedException;
+import org.apache.camel.Service;
+import org.apache.camel.component.cm.CMEndpoint;
+import org.apache.camel.component.cm.CMProducer;
+import org.apache.camel.component.cm.client.SMSMessage;
+import org.apache.camel.component.cm.exceptions.HostUnavailableException;
+import org.apache.camel.component.cm.exceptions.cmresponse.CMResponseException;
+import org.apache.camel.component.cm.exceptions.cmresponse.InsufficientBalanceException;
+import org.apache.camel.component.cm.exceptions.cmresponse.InvalidMSISDNException;
+import org.apache.camel.component.cm.exceptions.cmresponse.InvalidProductTokenException;
+import org.apache.camel.component.cm.exceptions.cmresponse.NoAccountFoundForProductTokenException;
+import org.apache.camel.component.cm.exceptions.cmresponse.NoMessageException;
+import org.apache.camel.component.cm.exceptions.cmresponse.NotPhoneNumberFoundException;
+import org.apache.camel.component.cm.exceptions.cmresponse.UnknownErrorException;
+import org.apache.camel.component.cm.exceptions.cmresponse.UnroutableMessageException;
+import org.apache.camel.component.cm.test.mocks.cmsender.CMResponseExceptionSender;
+import org.apache.camel.component.cm.test.mocks.cmsender.InsufficientBalanceExceptionSender;
+import org.apache.camel.component.cm.test.mocks.cmsender.InvalidMSISDNExceptionSender;
+import org.apache.camel.component.cm.test.mocks.cmsender.InvalidProductTokenExceptionSender;
+import org.apache.camel.component.cm.test.mocks.cmsender.NoAccountFoundForProductTokenExceptionSender;
+import org.apache.camel.component.cm.test.mocks.cmsender.NoMessageExceptionSender;
+import org.apache.camel.component.cm.test.mocks.cmsender.NotPhoneNumberFoundExceptionSender;
+import org.apache.camel.component.cm.test.mocks.cmsender.UnknownErrorExceptionSender;
+import org.apache.camel.component.cm.test.mocks.cmsender.UnroutableMessageExceptionSender;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.spring.CamelSpringRunner;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+import org.springframework.util.Assert;
+
+@RunWith(CamelSpringRunner.class)
+@ContextConfiguration(classes = {CamelTestConfiguration.class })
+public class CMTest extends AbstractJUnit4SpringContextTests {
+
+    // dependency: camel-spring-javaconfig
+
+    @Autowired
+    private CamelContext camelContext;
+
+    private SecureRandom random = new SecureRandom();
+
+    private final PhoneNumberUtil pnu = PhoneNumberUtil.getInstance();
+    private String validNumber;
+
+    @Produce("direct:sms")
+    private CMProxy cmProxy;
+
+    @EndpointInject("mock:test")
+    private MockEndpoint mock;
+
+    // private StopWatch stopWatch = new StopWatch(getClass().getSimpleName());
+
+    @Before
+    public void beforeTest() throws Exception {
+        mock.reset();
+        camelContext.getRouteController().startRoute(CamelTestConfiguration.SIMPLE_ROUTE_ID);
+        validNumber = pnu.format(pnu.getExampleNumber("ES"), PhoneNumberFormat.E164);
+    }
+
+    @After
+    public void afterTest() {
+
+        try {
+            camelContext.getRouteController().stopRoute(CamelTestConfiguration.SIMPLE_ROUTE_ID);
+        } catch (Exception e) {
+            logger.error("Exception trying to stop de routes", e);
+        }
+
+        // Stop all routes
+        // for (Route route : camelContext.getRoutes()) {
+        // try {
+        // camelContext.getRouteController().stopRoute(route.getId());
+        // } catch (Exception e) {
+        // logger.error("Exception trying to stop de routes", e);
+        // }
+        // }
+    }
+
+    /*
+     * 1. Invalid URI
+     */
+
+    @Test(expected = ResolveEndpointFailedException.class)
+    public void testNotRequiredProductToken() throws Throwable {
+        try {
+            String schemedUri = "cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&testConnectionOnStartup=true";
+            camelContext.getEndpoint(schemedUri).start();
+        } catch (Throwable t) {
+            throw t.getCause();
+        }
+
+    }
+
+    @Test(expected = ResolveEndpointFailedException.class)
+    public void testNotRequiredDefaultFrom() throws Throwable {
+        try {
+            String schemedUri = "cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&testConnectionOnStartup=true";
+            camelContext.getEndpoint(schemedUri).start();
+        } catch (Throwable t) {
+            throw t.getCause();
+        }
+
+    }
+
+    @Test(expected = HostUnavailableException.class)
+    public void testHostUnavailableException() throws Throwable {
+        // cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&productToken=ea723fd7-da81-4826-89bc-fa7144e71c40&testConnectionOnStartup=true
+        String schemedUri = "cm-sms://dummy.sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&productToken=ea723fd7-da81-4826-89bc-fa7144e71c40&testConnectionOnStartup=true";
+        Service service = camelContext.getEndpoint(schemedUri).createProducer();
+        service.start();
+    }
+
+    @Test(expected = ResolveEndpointFailedException.class)
+    public void testInvalidHostDuplicateScheme() throws Throwable {
+        // cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&productToken=ea723fd7-da81-4826-89bc-fa7144e71c40&testConnectionOnStartup=true
+        try {
+            String schemedUri = "cm-sms://https://demo.com";
+            camelContext.getEndpoint(schemedUri);
+        } catch (Throwable t) {
+            throw t.getCause();
+        }
+    }
+
+    /*
+     * 2. Invalid Payload
+     */
+
+    @Test(expected = RuntimeException.class)
+    public void testNullPayload() throws Throwable {
+        cmProxy.send(null);
+    }
+
+    // @DirtiesContext
+    @Test(expected = NoAccountFoundForProductTokenException.class)
+    public void testAsPartOfARoute() throws Exception {
+
+        // Body
+        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateUnicodeMessage(), validNumber, null);
+        cmProxy.send(smsMessage);
+    }
+
+    @Test(expected = NoAccountFoundForProductTokenException.class)
+    public void testNoAccountFoundForProductTokenException() throws Exception {
+
+        // Change sending strategy
+        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMProducer producer = endpoint.createProducer();
+        producer.setSender(new NoAccountFoundForProductTokenExceptionSender());
+
+        // Body
+        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateGSM0338Message(), validNumber, null);
+        send(producer, smsMessage);
+    }
+
+    /*
+     * 3. CM Responses (Faking Exceptions)
+     */
+
+    @Test(expected = CMResponseException.class)
+    public void testCMResponseException() throws Exception {
+
+        // Change sending strategy
+        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMProducer producer = endpoint.createProducer();
+        producer.setSender(new CMResponseExceptionSender());
+
+        // Body
+        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateUnicodeMessage(), validNumber, null);
+        send(producer, smsMessage);
+    }
+
+    @Test(expected = InsufficientBalanceException.class)
+    public void testInsufficientBalanceException() throws Exception {
+
+        // Change sending strategy
+        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMProducer producer = endpoint.createProducer();
+        producer.setSender(new InsufficientBalanceExceptionSender());
+
+        // Body
+        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateGSM0338Message(), validNumber, null);
+        send(producer, smsMessage);
+    }
+
+    @Test(expected = InvalidMSISDNException.class)
+    public void testInvalidMSISDNException() throws Exception {
+
+        // Change sending strategy
+        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMProducer producer = endpoint.createProducer();
+        producer.setSender(new InvalidMSISDNExceptionSender());
+
+        // Body
+        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateUnicodeMessage(), validNumber, null);
+        send(producer, smsMessage);
+    }
+
+    @Test(expected = InvalidProductTokenException.class)
+    public void testInvalidProductTokenException() throws Exception {
+
+        // Change sending strategy
+        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMProducer producer = endpoint.createProducer();
+        producer.setSender(new InvalidProductTokenExceptionSender());
+
+        // Body
+        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateUnicodeMessage(), validNumber, null);
+        send(producer, smsMessage);
+    }
+
+    @Test(expected = NoMessageException.class)
+    public void testNoMessageException() throws Exception {
+
+        // Change sending strategy
+        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMProducer producer = endpoint.createProducer();
+        producer.setSender(new NoMessageExceptionSender());
+
+        // Body
+        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateGSM0338Message(), validNumber, null);
+        send(producer, smsMessage);
+    }
+
+    @Test(expected = NotPhoneNumberFoundException.class)
+    public void testNotPhoneNumberFoundException() throws Exception {
+
+        // Change sending strategy
+        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMProducer producer = endpoint.createProducer();
+        producer.setSender(new NotPhoneNumberFoundExceptionSender());
+
+        // Body
+        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateUnicodeMessage(), validNumber, null);
+        send(producer, smsMessage);
+    }
+
+    @Test(expected = UnknownErrorException.class)
+    public void testUnknownErrorException() throws Exception {
+
+        // Change sending strategy
+        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMProducer producer = endpoint.createProducer();
+        producer.setSender(new UnknownErrorExceptionSender());
+
+        // Body
+        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateGSM0338Message(), validNumber, null);
+        send(producer, smsMessage);
+    }
+
+    @Test(expected = UnroutableMessageException.class)
+    public void testUnroutableMessageException() throws Exception {
+
+        // Change sending strategy
+        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMProducer producer = endpoint.createProducer();
+        producer.setSender(new UnroutableMessageExceptionSender());
+
+        // Body
+        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateUnicodeMessage(), validNumber, null);
+        send(producer, smsMessage);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testCMEndpointIsForProducing() throws Exception {
+
+        // Change sending strategy
+        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        endpoint.createConsumer(null);
+    }
+
+    @Test
+    public void testCMEndpointGetHost() throws Exception {
+
+        // Change sending strategy
+        CMEndpoint endpoint = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        Assert.isTrue(endpoint.getHost().equals(applicationContext.getEnvironment().getRequiredProperty("cm.url")));
+    }
+
+    @Test(expected = InvalidPayloadRuntimeException.class)
+    public void testSendInvalidPayload() throws Exception {
+
+        // Body
+        final SMSMessage smsMessage = new SMSMessage(generateIdAsString(), generateGSM0338Message(), null, null);
+        cmProxy.send(smsMessage);
+    }
+
+    /*
+     * CMMessages
+     */
+
+    // @Test(expected = RuntimeException.class)
+    // public void testSkel() throws Exception {
+
+    // mock.expectedMessageCount(1);
+    //
+    // // Body
+    // final SMSMessage smsMessage = new SMSMessage("Hello CM", validNumber);
+    // cmProxy.send(smsMessage);
+    //
+    // mock.assertIsSatisfied();
+    // }
+
+    private String generateUnicodeMessage() {
+        String ch = "\uF400";
+        return generateRandomLengthMessageByChar(ch);
+    }
+
+    private String generateGSM0338Message() {
+        String ch = "a";
+        return generateRandomLengthMessageByChar(ch);
+    }
+
+    private String generateRandomLengthMessageByChar(String ch) {
+        // random Length
+        int msgLength = (int) (Math.random() * 2000);
+        StringBuffer message = new StringBuffer();
+        for (int index = 0; index < msgLength; index++) {
+            message.append(ch);
+        }
+        return message.toString();
+    }
+
+    //
+    private String generateIdAsString() {
+        return new BigInteger(130, random).toString(32);
+    }
+
+    private static void send(CMProducer producer, SMSMessage smsMessage) throws Exception {
+        Exchange exchange = producer.getEndpoint().createExchange();
+        exchange.getIn().setBody(smsMessage);
+        producer.process(exchange);
+    }
+
+}
diff --git a/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/SMSMessageTest.java b/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/SMSMessageTest.java
index 14fe047..cf72e43 100644
--- a/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/SMSMessageTest.java
+++ b/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/SMSMessageTest.java
@@ -1,182 +1,183 @@
-/*
- * 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.
- */
+/*
+ * 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.component.cm.test;
-import java.util.Set;
-
-import javax.validation.ConstraintViolation;
-import javax.validation.Validator;
-
-import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
-import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
-import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource;
-import org.apache.camel.component.cm.client.SMSMessage;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.util.Assert;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = {ValidatorConfiguration.class })
-// @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
-// @DisableJmx(false)
-// @FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class SMSMessageTest extends AbstractJUnit4SpringContextTests {
-
-    @Autowired
-    private Validator validator;
-
-    private final PhoneNumberUtil pnu = PhoneNumberUtil.getInstance();
-    private String validNumber;
-
-    @Before
-    public void beforeTest() throws Exception {
-
-        validNumber = pnu.format(pnu.getExampleNumber("ES"), PhoneNumberFormat.E164);
-    }
-
-    // @After
-    // public void afterTest() {
-
-    @Test
-    public void testSMSMessageConstructor() throws Throwable {
-
-        // Coverage ;)
-        SMSMessage message = new SMSMessage(null, null);
-        Assert.isNull(message.getMessage());
-        Assert.isNull(message.getPhoneNumber());
-
-        message = new SMSMessage("idAsString", null, null, "MySelf");
-        Assert.isTrue(message.getId().equals("idAsString"));
-        Assert.isTrue(message.getFrom().equals("MySelf"));
-    }
-
-    @Test
-    public void testNullMessageField() throws Exception {
-
-        final SMSMessage m = new SMSMessage(null, validNumber);
-
-        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
-        Assert.isTrue(1 == constraintViolations.size());
-    }
-
-    @Test
-    public void testNullPhoneNumber() throws Exception {
-
-        final SMSMessage m = new SMSMessage("Hello world!", null);
-
-        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
-        Assert.isTrue(1 == constraintViolations.size());
-    }
-
-    @Test
-    public void testDynamicFromFieldMaxLength() throws Exception {
-
-        String dynamicFrom = "messagelengthgreaterthan12";
-
-        final SMSMessage m = new SMSMessage("idAsString", "Hello World", validNumber, dynamicFrom);
-
-        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
-        Assert.isTrue(1 == constraintViolations.size());
-    }
-
-    @Test
-    public void testDynamicFromFieldZeroLength() throws Exception {
-
-        String zeroLengthDynamicFrom = "";
-
-        final SMSMessage m = new SMSMessage("idAsString", "Hello World", validNumber, zeroLengthDynamicFrom);
-
-        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
-        Assert.isTrue(1 == constraintViolations.size());
-    }
-
-    @Test
-    public void testIdAsStringMaxLength() throws Exception {
-
-        String idAsString = "thisistheidastringlengthgreaterthan32";
-
-        final SMSMessage m = new SMSMessage(idAsString, "Hello World", validNumber, "MySelf");
-
-        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
-        Assert.isTrue(1 == constraintViolations.size());
-    }
-
-    @Test
-    public void testIdAsStringFieldZeroLength() throws Exception {
-
-        String zeroLengthIdAsString = "";
-
-        final SMSMessage m = new SMSMessage(zeroLengthIdAsString, "Hello World", validNumber, "MySelf");
-
-        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
-        Assert.isTrue(1 == constraintViolations.size());
-    }
-
-    @Test
-    public void testE164NullNumberIsInValid() throws Exception {
-
-        final String phoneNumber = null;
-        final SMSMessage m = new SMSMessage("Hello world!", phoneNumber);
-
-        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
-        Assert.isTrue(1 == constraintViolations.size());
-    }
-
-    @Test
-    public void testE164IsValid() throws Exception {
-
-        final SMSMessage m = new SMSMessage("Hello world!", validNumber);
-
-        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
-        Assert.isTrue(0 == constraintViolations.size());
-    }
-
-    @Test
-    public void testE164NoPlusSignedNumberIsInvalid() throws Exception {
-
-        final String phoneNumber = "34600000000";
-        final SMSMessage m = new SMSMessage("Hello world!", phoneNumber);
-
-        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
-        Assert.isTrue(1 == constraintViolations.size());
-    }
-
-    @Test
-    public void testE164NoPlusSignedNumberBut00IsInvalid() throws Exception {
-
-        final String phoneNumber = new PhoneNumber().setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN).setNationalNumber(0034600000000).toString();
-        final SMSMessage m = new SMSMessage("Hello world!", phoneNumber);
-
-        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
-        Assert.isTrue(1 == constraintViolations.size());
-    }
-
-    @Test
-    public void testE164NumberWithPlusSignIsInvalid() throws Exception {
-
-        final String phoneNumber = "+34 600 00 00 00";
-        final SMSMessage m = new SMSMessage("Hello world!", phoneNumber);
-
-        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
-        Assert.isTrue(1 == constraintViolations.size());
-    }
-}
+
+import java.util.Set;
+
+import javax.validation.ConstraintViolation;
+import javax.validation.Validator;
+
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
+import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource;
+import org.apache.camel.component.cm.client.SMSMessage;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.util.Assert;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = {ValidatorConfiguration.class })
+// @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
+// @DisableJmx(false)
+// @FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class SMSMessageTest extends AbstractJUnit4SpringContextTests {
+
+    @Autowired
+    private Validator validator;
+
+    private final PhoneNumberUtil pnu = PhoneNumberUtil.getInstance();
+    private String validNumber;
+
+    @Before
+    public void beforeTest() throws Exception {
+
+        validNumber = pnu.format(pnu.getExampleNumber("ES"), PhoneNumberFormat.E164);
+    }
+
+    // @After
+    // public void afterTest() {
+
+    @Test
+    public void testSMSMessageConstructor() throws Throwable {
+
+        // Coverage ;)
+        SMSMessage message = new SMSMessage(null, null);
+        Assert.isNull(message.getMessage());
+        Assert.isNull(message.getPhoneNumber());
+
+        message = new SMSMessage("idAsString", null, null, "MySelf");
+        Assert.isTrue(message.getId().equals("idAsString"));
+        Assert.isTrue(message.getFrom().equals("MySelf"));
+    }
+
+    @Test
+    public void testNullMessageField() throws Exception {
+
+        final SMSMessage m = new SMSMessage(null, validNumber);
+
+        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
+        Assert.isTrue(1 == constraintViolations.size());
+    }
+
+    @Test
+    public void testNullPhoneNumber() throws Exception {
+
+        final SMSMessage m = new SMSMessage("Hello world!", null);
+
+        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
+        Assert.isTrue(1 == constraintViolations.size());
+    }
+
+    @Test
+    public void testDynamicFromFieldMaxLength() throws Exception {
+
+        String dynamicFrom = "messagelengthgreaterthan12";
+
+        final SMSMessage m = new SMSMessage("idAsString", "Hello World", validNumber, dynamicFrom);
+
+        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
+        Assert.isTrue(1 == constraintViolations.size());
+    }
+
+    @Test
+    public void testDynamicFromFieldZeroLength() throws Exception {
+
+        String zeroLengthDynamicFrom = "";
+
+        final SMSMessage m = new SMSMessage("idAsString", "Hello World", validNumber, zeroLengthDynamicFrom);
+
+        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
+        Assert.isTrue(1 == constraintViolations.size());
+    }
+
+    @Test
+    public void testIdAsStringMaxLength() throws Exception {
+
+        String idAsString = "thisistheidastringlengthgreaterthan32";
+
+        final SMSMessage m = new SMSMessage(idAsString, "Hello World", validNumber, "MySelf");
+
+        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
+        Assert.isTrue(1 == constraintViolations.size());
+    }
+
+    @Test
+    public void testIdAsStringFieldZeroLength() throws Exception {
+
+        String zeroLengthIdAsString = "";
+
+        final SMSMessage m = new SMSMessage(zeroLengthIdAsString, "Hello World", validNumber, "MySelf");
+
+        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
+        Assert.isTrue(1 == constraintViolations.size());
+    }
+
+    @Test
+    public void testE164NullNumberIsInValid() throws Exception {
+
+        final String phoneNumber = null;
+        final SMSMessage m = new SMSMessage("Hello world!", phoneNumber);
+
+        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
+        Assert.isTrue(1 == constraintViolations.size());
+    }
+
+    @Test
+    public void testE164IsValid() throws Exception {
+
+        final SMSMessage m = new SMSMessage("Hello world!", validNumber);
+
+        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
+        Assert.isTrue(0 == constraintViolations.size());
+    }
+
+    @Test
+    public void testE164NoPlusSignedNumberIsInvalid() throws Exception {
+
+        final String phoneNumber = "34600000000";
+        final SMSMessage m = new SMSMessage("Hello world!", phoneNumber);
+
+        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
+        Assert.isTrue(1 == constraintViolations.size());
+    }
+
+    @Test
+    public void testE164NoPlusSignedNumberBut00IsInvalid() throws Exception {
+
+        final String phoneNumber = new PhoneNumber().setCountryCodeSource(CountryCodeSource.FROM_NUMBER_WITHOUT_PLUS_SIGN).setNationalNumber(0034600000000).toString();
+        final SMSMessage m = new SMSMessage("Hello world!", phoneNumber);
+
+        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
+        Assert.isTrue(1 == constraintViolations.size());
+    }
+
+    @Test
+    public void testE164NumberWithPlusSignIsInvalid() throws Exception {
+
+        final String phoneNumber = "+34 600 00 00 00";
+        final SMSMessage m = new SMSMessage("Hello world!", phoneNumber);
+
+        final Set<ConstraintViolation<SMSMessage>> constraintViolations = validator.validate(m);
+        Assert.isTrue(1 == constraintViolations.size());
+    }
+}
diff --git a/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPConsumer.java b/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPConsumer.java
index 19014da..b5639de 100644
--- a/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPConsumer.java
+++ b/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPConsumer.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.coap;
 
-
 import java.util.LinkedList;
 import java.util.List;
 
diff --git a/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java b/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java
index 53871b3..f8dc3cd 100644
--- a/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java
+++ b/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdComponent.java
@@ -22,6 +22,7 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.servlet.DispatcherType;
 
 import org.apache.camel.Endpoint;
diff --git a/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducerConsumer.java b/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducerConsumer.java
index 2dc355f..a3bbf84 100644
--- a/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducerConsumer.java
+++ b/components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdProducerConsumer.java
@@ -18,7 +18,6 @@
 
 import org.cometd.server.BayeuxServerImpl;
 
-
 public interface CometdProducerConsumer {
 
     /**
@@ -31,4 +30,4 @@
      */
     void setBayeux(BayeuxServerImpl bayeux);
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdCrossOriginConsumerTest.java b/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdCrossOriginConsumerTest.java
index 340d94b..a65c80a 100644
--- a/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdCrossOriginConsumerTest.java
+++ b/components/camel-cometd/src/test/java/org/apache/camel/component/cometd/CometdCrossOriginConsumerTest.java
@@ -31,7 +31,6 @@
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
-
 import static org.mockito.Mockito.when;
 
 /**
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 ad4cf3b..33ab0f3 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
@@ -19,7 +19,6 @@
 import java.util.Optional;
 
 import com.orbitz.consul.Consul;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.consul.endpoint.ConsulKeyValueActions;
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 a6fa6a7..aedab30 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
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.consul;
+
 import java.io.Serializable;
 import java.util.HashMap;
 import java.util.HashSet;
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 4bb9627..d5be8d1 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
@@ -22,7 +22,6 @@
 
 import com.orbitz.consul.Consul;
 import com.orbitz.consul.KeyValueClient;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.test.testcontainers.junit5.ContainerAwareTestSupport;
 import org.apache.camel.test.testcontainers.junit5.Wait;
diff --git a/components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaComponent.java b/components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaComponent.java
index 13d5767..b27eb6b 100644
--- a/components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaComponent.java
+++ b/components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaComponent.java
@@ -17,9 +17,9 @@
 package org.apache.camel.component.corda;
 
 import java.util.Map;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
diff --git a/components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaConsumer.java b/components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaConsumer.java
index d5f45b6..f0069ef 100644
--- a/components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaConsumer.java
+++ b/components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaConsumer.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.corda;
 
 import java.util.List;
+
 import net.corda.core.contracts.ContractState;
 import net.corda.core.messaging.CordaRPCOps;
 import net.corda.core.messaging.DataFeed;
diff --git a/components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaEndpoint.java b/components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaEndpoint.java
index 99c7e58..4e5d3a9 100644
--- a/components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaEndpoint.java
+++ b/components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaEndpoint.java
@@ -18,6 +18,7 @@
 
 import java.net.URI;
 import java.net.URISyntaxException;
+
 import net.corda.client.rpc.CordaRPCClient;
 import net.corda.client.rpc.CordaRPCConnection;
 import net.corda.core.messaging.CordaRPCOps;
@@ -25,7 +26,6 @@
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriPath;
diff --git a/components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerTestSupport.java b/components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerTestSupport.java
index 3d642a1..7a9d811 100644
--- a/components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerTestSupport.java
+++ b/components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerTestSupport.java
@@ -23,7 +23,6 @@
 import net.corda.core.node.services.vault.QueryCriteria;
 import net.corda.core.node.services.vault.Sort;
 import net.corda.core.node.services.vault.SortAttribute;
-
 import org.apache.camel.BindToRegistry;
 import org.junit.Ignore;
 
diff --git a/components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaProducerTest.java b/components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaProducerTest.java
index 115e66c..50f09e6 100644
--- a/components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaProducerTest.java
+++ b/components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaProducerTest.java
@@ -26,6 +26,7 @@
 import java.security.PublicKey;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
+
 import com.google.common.collect.ImmutableSet;
 import net.corda.core.contracts.OwnableState;
 import net.corda.core.crypto.SecureHash;
diff --git a/components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaTestSupport.java b/components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaTestSupport.java
index efc1a9e..fe59207 100755
--- a/components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaTestSupport.java
+++ b/components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaTestSupport.java
@@ -19,7 +19,6 @@
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.mock.MockEndpoint;
-
 import org.apache.camel.support.DefaultExchange;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.AfterClass;
diff --git a/components/camel-corda/src/test/java/org/apache/camel/component/corda/IntegrationWhiteList.java b/components/camel-corda/src/test/java/org/apache/camel/component/corda/IntegrationWhiteList.java
index 2ba9ec9..e75276e 100644
--- a/components/camel-corda/src/test/java/org/apache/camel/component/corda/IntegrationWhiteList.java
+++ b/components/camel-corda/src/test/java/org/apache/camel/component/corda/IntegrationWhiteList.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import net.corda.core.serialization.SerializationWhitelist;
 
 public class IntegrationWhiteList implements SerializationWhitelist {
diff --git a/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseConsumer.java b/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseConsumer.java
index 85f8eda..6db26ea 100644
--- a/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseConsumer.java
+++ b/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseConsumer.java
@@ -21,7 +21,6 @@
 import com.couchbase.client.protocol.views.View;
 import com.couchbase.client.protocol.views.ViewResponse;
 import com.couchbase.client.protocol.views.ViewRow;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.support.DefaultScheduledPollConsumer;
diff --git a/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseEndpoint.java b/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseEndpoint.java
index e54ddbd..8f3faea 100644
--- a/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseEndpoint.java
+++ b/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseEndpoint.java
@@ -27,7 +27,6 @@
 
 import com.couchbase.client.CouchbaseClient;
 import com.couchbase.client.CouchbaseConnectionFactoryBuilder;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseProducer.java b/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseProducer.java
index f4247aa..cffb3aa 100644
--- a/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseProducer.java
+++ b/components/camel-couchbase/src/main/java/org/apache/camel/component/couchbase/CouchbaseProducer.java
@@ -20,11 +20,9 @@
 import java.util.concurrent.Future;
 
 import com.couchbase.client.CouchbaseClientIF;
-
 import net.spy.memcached.PersistTo;
 import net.spy.memcached.ReplicateTo;
 import net.spy.memcached.internal.OperationFuture;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.support.DefaultProducer;
 
diff --git a/components/camel-couchbase/src/test/java/org/apache/camel/component/couchbase/CouchbaseEndpointTest.java b/components/camel-couchbase/src/test/java/org/apache/camel/component/couchbase/CouchbaseEndpointTest.java
index 98c3f51..90294a3 100644
--- a/components/camel-couchbase/src/test/java/org/apache/camel/component/couchbase/CouchbaseEndpointTest.java
+++ b/components/camel-couchbase/src/test/java/org/apache/camel/component/couchbase/CouchbaseEndpointTest.java
@@ -24,7 +24,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-
 public class CouchbaseEndpointTest {
 
     @Test
diff --git a/components/camel-couchbase/src/test/java/org/apache/camel/component/couchbase/CouchbaseProducerTest.java b/components/camel-couchbase/src/test/java/org/apache/camel/component/couchbase/CouchbaseProducerTest.java
index b399b18..6dbeb72 100644
--- a/components/camel-couchbase/src/test/java/org/apache/camel/component/couchbase/CouchbaseProducerTest.java
+++ b/components/camel-couchbase/src/test/java/org/apache/camel/component/couchbase/CouchbaseProducerTest.java
@@ -20,9 +20,7 @@
 import java.util.Map;
 
 import com.couchbase.client.CouchbaseClient;
-
 import net.spy.memcached.internal.OperationFuture;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.junit.Assert;
diff --git a/components/camel-crypto-cms/src/test/java/org/apache/camel/component/crypto/cms/EnvelopedDataTest.java b/components/camel-crypto-cms/src/test/java/org/apache/camel/component/crypto/cms/EnvelopedDataTest.java
index a874169..73413de 100644
--- a/components/camel-crypto-cms/src/test/java/org/apache/camel/component/crypto/cms/EnvelopedDataTest.java
+++ b/components/camel-crypto-cms/src/test/java/org/apache/camel/component/crypto/cms/EnvelopedDataTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.crypto.cms;
+
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
diff --git a/components/camel-crypto-cms/src/test/java/org/apache/camel/component/crypto/cms/ProcessorsTest.java b/components/camel-crypto-cms/src/test/java/org/apache/camel/component/crypto/cms/ProcessorsTest.java
index c50e13b..c5213f7 100644
--- a/components/camel-crypto-cms/src/test/java/org/apache/camel/component/crypto/cms/ProcessorsTest.java
+++ b/components/camel-crypto-cms/src/test/java/org/apache/camel/component/crypto/cms/ProcessorsTest.java
@@ -1,120 +1,121 @@
-/*
- * 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.component.crypto.cms;
-import java.security.Security;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.crypto.cms.crypt.DefaultEnvelopedDataDecryptorConfiguration;
-import org.apache.camel.component.crypto.cms.crypt.DefaultKeyTransRecipientInfo;
-import org.apache.camel.component.crypto.cms.crypt.EnvelopedDataDecryptor;
-import org.apache.camel.component.crypto.cms.crypt.EnvelopedDataEncryptor;
-import org.apache.camel.component.crypto.cms.crypt.EnvelopedDataEncryptorConfiguration;
-import org.apache.camel.component.crypto.cms.sig.DefaultSignedDataVerifierConfiguration;
-import org.apache.camel.component.crypto.cms.sig.DefaultSignerInfo;
-import org.apache.camel.component.crypto.cms.sig.SignedDataCreator;
-import org.apache.camel.component.crypto.cms.sig.SignedDataCreatorConfiguration;
-import org.apache.camel.component.crypto.cms.sig.SignedDataVerifier;
-import org.apache.camel.component.crypto.cms.util.KeystoreUtil;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.support.SimpleRegistry;
-import org.apache.camel.support.jsse.KeyStoreParameters;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.bouncycastle.jce.provider.BouncyCastleProvider;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public class ProcessorsTest extends CamelTestSupport {
-
-    private SimpleRegistry simpleReg;
-
-    @BeforeClass
-    public static void setUpProvider() {
-        Security.addProvider(new BouncyCastleProvider());
-    }
-
-    @Test
-    public void execute() throws Exception {
-
-        String message = "Testmessage";
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedBodiesReceived(message);
-        sendBody("direct:start", message);
-
-        assertMockEndpointsSatisfied();
-    }
-
-    @Override
-    protected CamelContext createCamelContext() throws Exception {
-        simpleReg = new SimpleRegistry();
-        CamelContext context = new DefaultCamelContext(simpleReg);
-        return context;
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                context.setTracing(true);
-
-                String keystoreName = "system.jks";
-                KeyStoreParameters keystore = KeystoreUtil.getKeyStoreParameters(keystoreName);
-
-                DefaultKeyTransRecipientInfo recipient = new DefaultKeyTransRecipientInfo();
-                recipient.setCertificateAlias("rsa");
-                recipient.setKeyStoreParameters(keystore);
-
-                EnvelopedDataEncryptorConfiguration enConf = new EnvelopedDataEncryptorConfiguration(context);
-                enConf.setContentEncryptionAlgorithm("DESede/CBC/PKCS5Padding");
-                enConf.setRecipient(recipient);
-                enConf.setSecretKeyLength(192); // mandatory
-                enConf.init();
-                EnvelopedDataEncryptor encryptor = new EnvelopedDataEncryptor(enConf);
-
-                DefaultEnvelopedDataDecryptorConfiguration conf = new DefaultEnvelopedDataDecryptorConfiguration();
-                conf.setKeyStoreParameters(keystore);
-                EnvelopedDataDecryptor decryptor = new EnvelopedDataDecryptor(conf);
-
-                DefaultSignerInfo signerInfo = new DefaultSignerInfo();
-
-                signerInfo.setIncludeCertificates(true); // optional default
-                                                         // value is true
-                signerInfo.setSignatureAlgorithm("SHA256withRSA"); // mandatory
-                signerInfo.setPrivateKeyAlias("rsa");
-                signerInfo.setKeyStoreParameters(keystore);
-
-                SignedDataCreatorConfiguration config = new SignedDataCreatorConfiguration(new DefaultCamelContext());
-                config.addSigner(signerInfo);
-                config.setIncludeContent(true); // optional default value is
-                                                // true
-                config.init();
-                SignedDataCreator signer = new SignedDataCreator(config);
-
-                DefaultSignedDataVerifierConfiguration verifierConf = new DefaultSignedDataVerifierConfiguration();
-                verifierConf.setKeyStoreParameters(keystore);
-
-                SignedDataVerifier verifier = new SignedDataVerifier(verifierConf);
-
-                from("direct:start").to("log:before").process(signer).process(encryptor).to("log:signed_encrypted").process(decryptor).process(verifier).convertBodyTo(String.class)
-                    .to("log:after").to("mock:result");
-
-            }
-        };
-    }
-}
+/*
+ * 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.component.crypto.cms;
+
+import java.security.Security;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.crypto.cms.crypt.DefaultEnvelopedDataDecryptorConfiguration;
+import org.apache.camel.component.crypto.cms.crypt.DefaultKeyTransRecipientInfo;
+import org.apache.camel.component.crypto.cms.crypt.EnvelopedDataDecryptor;
+import org.apache.camel.component.crypto.cms.crypt.EnvelopedDataEncryptor;
+import org.apache.camel.component.crypto.cms.crypt.EnvelopedDataEncryptorConfiguration;
+import org.apache.camel.component.crypto.cms.sig.DefaultSignedDataVerifierConfiguration;
+import org.apache.camel.component.crypto.cms.sig.DefaultSignerInfo;
+import org.apache.camel.component.crypto.cms.sig.SignedDataCreator;
+import org.apache.camel.component.crypto.cms.sig.SignedDataCreatorConfiguration;
+import org.apache.camel.component.crypto.cms.sig.SignedDataVerifier;
+import org.apache.camel.component.crypto.cms.util.KeystoreUtil;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.support.SimpleRegistry;
+import org.apache.camel.support.jsse.KeyStoreParameters;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class ProcessorsTest extends CamelTestSupport {
+
+    private SimpleRegistry simpleReg;
+
+    @BeforeClass
+    public static void setUpProvider() {
+        Security.addProvider(new BouncyCastleProvider());
+    }
+
+    @Test
+    public void execute() throws Exception {
+
+        String message = "Testmessage";
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedBodiesReceived(message);
+        sendBody("direct:start", message);
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        simpleReg = new SimpleRegistry();
+        CamelContext context = new DefaultCamelContext(simpleReg);
+        return context;
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                context.setTracing(true);
+
+                String keystoreName = "system.jks";
+                KeyStoreParameters keystore = KeystoreUtil.getKeyStoreParameters(keystoreName);
+
+                DefaultKeyTransRecipientInfo recipient = new DefaultKeyTransRecipientInfo();
+                recipient.setCertificateAlias("rsa");
+                recipient.setKeyStoreParameters(keystore);
+
+                EnvelopedDataEncryptorConfiguration enConf = new EnvelopedDataEncryptorConfiguration(context);
+                enConf.setContentEncryptionAlgorithm("DESede/CBC/PKCS5Padding");
+                enConf.setRecipient(recipient);
+                enConf.setSecretKeyLength(192); // mandatory
+                enConf.init();
+                EnvelopedDataEncryptor encryptor = new EnvelopedDataEncryptor(enConf);
+
+                DefaultEnvelopedDataDecryptorConfiguration conf = new DefaultEnvelopedDataDecryptorConfiguration();
+                conf.setKeyStoreParameters(keystore);
+                EnvelopedDataDecryptor decryptor = new EnvelopedDataDecryptor(conf);
+
+                DefaultSignerInfo signerInfo = new DefaultSignerInfo();
+
+                signerInfo.setIncludeCertificates(true); // optional default
+                                                         // value is true
+                signerInfo.setSignatureAlgorithm("SHA256withRSA"); // mandatory
+                signerInfo.setPrivateKeyAlias("rsa");
+                signerInfo.setKeyStoreParameters(keystore);
+
+                SignedDataCreatorConfiguration config = new SignedDataCreatorConfiguration(new DefaultCamelContext());
+                config.addSigner(signerInfo);
+                config.setIncludeContent(true); // optional default value is
+                                                // true
+                config.init();
+                SignedDataCreator signer = new SignedDataCreator(config);
+
+                DefaultSignedDataVerifierConfiguration verifierConf = new DefaultSignedDataVerifierConfiguration();
+                verifierConf.setKeyStoreParameters(keystore);
+
+                SignedDataVerifier verifier = new SignedDataVerifier(verifierConf);
+
+                from("direct:start").to("log:before").process(signer).process(encryptor).to("log:signed_encrypted").process(decryptor).process(verifier).convertBodyTo(String.class)
+                    .to("log:after").to("mock:result");
+
+            }
+        };
+    }
+}
diff --git a/components/camel-crypto-cms/src/test/java/org/apache/camel/component/crypto/cms/SignedDataTest.java b/components/camel-crypto-cms/src/test/java/org/apache/camel/component/crypto/cms/SignedDataTest.java
index 55100ca..e51ac73 100644
--- a/components/camel-crypto-cms/src/test/java/org/apache/camel/component/crypto/cms/SignedDataTest.java
+++ b/components/camel-crypto-cms/src/test/java/org/apache/camel/component/crypto/cms/SignedDataTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.crypto.cms;
+
 import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureProducer.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureProducer.java
index 0a429ed..69116b8 100644
--- a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureProducer.java
+++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/DigitalSignatureProducer.java
@@ -19,6 +19,7 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.component.crypto.processor.DigitalSignatureProcessor;
 import org.apache.camel.support.DefaultProducer;
+
 /**
  * <code>DigitalSignatureProducer</code>
  */
diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java
index 59dd0a6..01a91ea 100644
--- a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java
+++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/DigitalSignatureProcessor.java
@@ -33,7 +33,6 @@
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
 
-
 public abstract class DigitalSignatureProcessor implements Processor {
 
     protected DigitalSignatureConfiguration config;
diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java
index dbbc43e..26d65b3 100644
--- a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java
+++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/SigningProcessor.java
@@ -20,7 +20,6 @@
 import java.security.PrivateKey;
 import java.security.SecureRandom;
 import java.security.Signature;
-import static java.lang.String.format;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -28,6 +27,7 @@
 import org.apache.camel.component.crypto.DigitalSignatureConstants;
 import org.apache.commons.codec.binary.Base64;
 
+import static java.lang.String.format;
 
 public class SigningProcessor extends DigitalSignatureProcessor {
 
diff --git a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java
index daec8f4..f31550c 100644
--- a/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java
+++ b/components/camel-crypto/src/main/java/org/apache/camel/component/crypto/processor/VerifyingProcessor.java
@@ -27,7 +27,6 @@
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.commons.codec.binary.Base64;
 
-
 /**
  * <code>VerifyingProcessor</code>
  */
diff --git a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/CryptoDataFormat.java b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/CryptoDataFormat.java
index abd6dca..d80f626 100644
--- a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/CryptoDataFormat.java
+++ b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/CryptoDataFormat.java
@@ -23,14 +23,12 @@
 import java.io.OutputStream;
 import java.security.Key;
 import java.security.spec.AlgorithmParameterSpec;
+
 import javax.crypto.Cipher;
 import javax.crypto.CipherInputStream;
 import javax.crypto.CipherOutputStream;
 import javax.crypto.spec.IvParameterSpec;
 
-import static javax.crypto.Cipher.DECRYPT_MODE;
-import static javax.crypto.Cipher.ENCRYPT_MODE;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataFormatName;
@@ -42,6 +40,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static javax.crypto.Cipher.DECRYPT_MODE;
+import static javax.crypto.Cipher.ENCRYPT_MODE;
+
 /**
  * <code>CryptoDataFormat</code> uses a specified key and algorithm to encrypt,
  * decrypt and verify exchange payloads. The Data format allows an
diff --git a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/DefaultPGPPublicKeyAccessor.java b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/DefaultPGPPublicKeyAccessor.java
index 6958c07..96f8520 100644
--- a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/DefaultPGPPublicKeyAccessor.java
+++ b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/DefaultPGPPublicKeyAccessor.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.converter.crypto;
 
-
-
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.util.List;
diff --git a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/HMACAccumulator.java b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/HMACAccumulator.java
index 658bee4..ee48569 100644
--- a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/HMACAccumulator.java
+++ b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/HMACAccumulator.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.security.Key;
+
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
 
diff --git a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java
index dd9b2b0..a861b9c 100644
--- a/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java
+++ b/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPDataFormatUtil.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.converter.crypto;
 
-
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -52,7 +51,6 @@
 import static org.bouncycastle.bcpg.PublicKeyAlgorithmTags.RSA_GENERAL;
 import static org.bouncycastle.bcpg.PublicKeyAlgorithmTags.RSA_SIGN;
 
-
 public final class PGPDataFormatUtil {
 
     private static final Logger LOG = LoggerFactory.getLogger(PGPDataFormatUtil.class);
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..9231f1f 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
@@ -1,521 +1,521 @@
-/*
- * 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.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;
-
-/**
- * This class tests the creation of the proper {@link org.apache.commons.csv.CSVFormat} based on the properties of
- * {@link org.apache.camel.dataformat.csv.CsvDataFormat}.
- * It doesn't test the marshalling and unmarshalling based on the CSV format.
- */
-public class CsvDataFormatTest {
-    @Test
-    public void shouldUseDefaultFormat() {
-        CsvDataFormat dataFormat = new CsvDataFormat();
-
-        // Properly initialized
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-
-        // Properly used
-        assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
-    }
-
-    @Test
-    public void shouldUseFormatFromConstructor() {
-        CsvDataFormat dataFormat = new CsvDataFormat(CSVFormat.EXCEL);
-
-        // Properly initialized
-        assertSame(CSVFormat.EXCEL, dataFormat.getFormat());
-
-        // Properly used
-        assertEquals(CSVFormat.EXCEL, dataFormat.getActiveFormat());
-    }
-
-    @Test
-    public void shouldUseSpecifiedFormat() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setFormat(CSVFormat.MYSQL);
-
-        // Properly saved
-        assertSame(CSVFormat.MYSQL, dataFormat.getFormat());
-
-        // Properly used
-        assertEquals(CSVFormat.MYSQL, dataFormat.getActiveFormat());
-    }
-
-    @Test
-    public void shouldFallbackToDefaultFormat() {
-        CsvDataFormat dataFormat = new CsvDataFormat(CSVFormat.EXCEL)
-                .setFormat(null);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-
-        // Properly used
-        assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
-    }
-
-    @Test
-    public void shouldDefineFormatByName() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setFormatName("EXCEL");
-
-        // Properly saved
-        assertSame(CSVFormat.EXCEL, dataFormat.getFormat());
-
-        // Properly used
-        assertEquals(CSVFormat.EXCEL, dataFormat.getActiveFormat());
-    }
-
-    @Test
-    public void shouldDisableCommentMarker() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setCommentMarkerDisabled(true)
-                .setCommentMarker('c');
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertTrue(dataFormat.isCommentMarkerDisabled());
-        assertEquals(Character.valueOf('c'), dataFormat.getCommentMarker());
-
-        // Properly used
-        assertNull(dataFormat.getActiveFormat().getCommentMarker());
-    }
-
-    @Test
-    public void shouldOverrideCommentMarker() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setCommentMarker('c');
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Character.valueOf('c'), dataFormat.getCommentMarker());
-
-        // Properly used
-        assertEquals(Character.valueOf('c'), dataFormat.getActiveFormat().getCommentMarker());
-    }
-
-    @Test
-    public void shouldOverrideDelimiter() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setDelimiter('d');
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Character.valueOf('d'), dataFormat.getDelimiter());
-
-        // Properly used
-        assertEquals('d', dataFormat.getActiveFormat().getDelimiter());
-    }
-
-    @Test
-    public void shouldDisableEscape() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setEscapeDisabled(true)
-                .setEscape('e');
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertTrue(dataFormat.isEscapeDisabled());
-        assertEquals(Character.valueOf('e'), dataFormat.getEscape());
-
-        // Properly used
-        assertNull(dataFormat.getActiveFormat().getEscapeCharacter());
-    }
-
-    @Test
-    public void shouldOverrideEscape() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setEscape('e');
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Character.valueOf('e'), dataFormat.getEscape());
-
-        // Properly used
-        assertEquals(Character.valueOf('e'), dataFormat.getActiveFormat().getEscapeCharacter());
-    }
-
-    @Test
-    public void shouldDisableHeader() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setHeaderDisabled(true)
-                .setHeader(new String[]{"a", "b", "c"});
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertTrue(dataFormat.isHeaderDisabled());
-        assertArrayEquals(new String[]{"a", "b", "c"}, dataFormat.getHeader());
-
-        // Properly used
-        assertNull(dataFormat.getActiveFormat().getHeader());
-    }
-
-    @Test
-    public void shouldOverrideHeader() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setHeader(new String[]{"a", "b", "c"});
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertArrayEquals(new String[]{"a", "b", "c"}, dataFormat.getHeader());
-
-        // Properly used
-        assertArrayEquals(new String[]{"a", "b", "c"}, dataFormat.getActiveFormat().getHeader());
-    }
-
-    @Test
-    public void shouldAllowMissingColumnNames() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setAllowMissingColumnNames(true);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.TRUE, dataFormat.getAllowMissingColumnNames());
-
-        // Properly used
-        assertTrue(dataFormat.getActiveFormat().getAllowMissingColumnNames());
-    }
-
-    @Test
-    public void shouldNotAllowMissingColumnNames() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setAllowMissingColumnNames(false);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.FALSE, dataFormat.getAllowMissingColumnNames());
-
-        // Properly used
-        assertFalse(dataFormat.getActiveFormat().getAllowMissingColumnNames());
-    }
-
-    @Test
-    public void shouldIgnoreEmptyLines() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setIgnoreEmptyLines(true);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.TRUE, dataFormat.getIgnoreEmptyLines());
-
-        // Properly used
-        assertTrue(dataFormat.getActiveFormat().getIgnoreEmptyLines());
-    }
-
-    @Test
-    public void shouldNotIgnoreEmptyLines() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setIgnoreEmptyLines(false);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.FALSE, dataFormat.getIgnoreEmptyLines());
-
-        // Properly used
-        assertFalse(dataFormat.getActiveFormat().getIgnoreEmptyLines());
-    }
-
-    @Test
-    public void shouldIgnoreSurroundingSpaces() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setIgnoreSurroundingSpaces(true);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.TRUE, dataFormat.getIgnoreSurroundingSpaces());
-
-        // Properly used
-        assertTrue(dataFormat.getActiveFormat().getIgnoreSurroundingSpaces());
-    }
-
-    @Test
-    public void shouldNotIgnoreSurroundingSpaces() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setIgnoreSurroundingSpaces(false);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.FALSE, dataFormat.getIgnoreSurroundingSpaces());
-
-        // Properly used
-        assertFalse(dataFormat.getActiveFormat().getIgnoreSurroundingSpaces());
-    }
-
-    @Test
-    public void shouldDisableNullString() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setNullStringDisabled(true)
-                .setNullString("****");
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertTrue(dataFormat.isNullStringDisabled());
-        assertEquals("****", dataFormat.getNullString());
-
-        // Properly used
-        assertNull(dataFormat.getActiveFormat().getNullString());
-    }
-
-    @Test
-    public void shouldOverrideNullString() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setNullString("****");
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals("****", dataFormat.getNullString());
-
-        // Properly used
-        assertEquals("****", dataFormat.getActiveFormat().getNullString());
-    }
-
-    @Test
-    public void shouldDisableQuote() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setQuoteDisabled(true)
-                .setQuote('q');
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertTrue(dataFormat.isQuoteDisabled());
-        assertEquals(Character.valueOf('q'), dataFormat.getQuote());
-
-        // Properly used
-        assertNull(dataFormat.getActiveFormat().getQuoteCharacter());
-    }
-
-    @Test
-    public void shouldOverrideQuote() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setQuote('q');
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Character.valueOf('q'), dataFormat.getQuote());
-
-        // Properly used
-        assertEquals(Character.valueOf('q'), dataFormat.getActiveFormat().getQuoteCharacter());
-    }
-
-    @Test
-    public void shouldOverrideQuoteMode() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setQuoteMode(QuoteMode.ALL);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(QuoteMode.ALL, dataFormat.getQuoteMode());
-
-        // Properly used
-        assertEquals(QuoteMode.ALL, dataFormat.getActiveFormat().getQuoteMode());
-    }
-
-    @Test
-    public void shouldDisableRecordSeparator() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setRecordSeparatorDisabled(true)
-                .setRecordSeparator("separator");
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertTrue(dataFormat.isRecordSeparatorDisabled());
-        assertEquals("separator", dataFormat.getRecordSeparator());
-
-        // Properly used
-        assertNull(dataFormat.getActiveFormat().getRecordSeparator());
-    }
-
-    @Test
-    public void shouldOverrideRecordSeparator() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setRecordSeparator("separator");
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals("separator", dataFormat.getRecordSeparator());
-
-        // Properly used
-        assertEquals("separator", dataFormat.getActiveFormat().getRecordSeparator());
-    }
-
-    @Test
-    public void shouldSkipHeaderRecord() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setSkipHeaderRecord(true);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.TRUE, dataFormat.getSkipHeaderRecord());
-
-        // Properly used
-        assertTrue(dataFormat.getActiveFormat().getSkipHeaderRecord());
-    }
-
-    @Test
-    public void shouldNotSkipHeaderRecord() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setSkipHeaderRecord(false);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.FALSE, dataFormat.getSkipHeaderRecord());
-
-        // Properly used
-        assertFalse(dataFormat.getActiveFormat().getSkipHeaderRecord());
-    }
-
-    @Test
-    public void shouldHandleLazyLoad() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setLazyLoad(true);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertTrue(dataFormat.isLazyLoad());
-
-        // Properly used (it doesn't modify the format)
-        assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
-    }
-
-    @Test
-    public void shouldHandleUseMaps() {
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setUseMaps(true);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertTrue(dataFormat.isUseMaps());
-
-        // Properly used (it doesn't modify the format)
-        assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
-    }
-
-    @Test
-    public void shouldHandleRecordConverter() {
-        CsvRecordConverter<String> converter = new CsvRecordConverter<String>() {
-            @Override
-            public String convertRecord(CSVRecord record) {
-                return record.toString();
-            }
-        };
-
-        CsvDataFormat dataFormat = new CsvDataFormat()
-                .setRecordConverter(converter);
-
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertSame(converter, dataFormat.getRecordConverter());
-
-        // Properly used (it doesn't modify the format)
-        assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
-    }
-
-    @Test
-    public void testTrim() {
-        // Set to TRUE
-        CsvDataFormat dataFormat = new CsvDataFormat().setTrim(true);
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.TRUE, dataFormat.getTrim());
-        // Properly used
-        assertTrue(dataFormat.getActiveFormat().getTrim());
-        
-        // NOT set
-        dataFormat = new CsvDataFormat();
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(null, dataFormat.getTrim());
-        // Properly used
-        assertFalse(dataFormat.getActiveFormat().getTrim());
-
-        // Set to false
-        dataFormat = new CsvDataFormat().setTrim(false);
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.FALSE, dataFormat.getTrim());
-        // Properly used
-        assertFalse(dataFormat.getActiveFormat().getTrim());
-
-    }
-
-    @Test
-    public void testIgnoreHeaderCase() {
-        // Set to TRUE
-        CsvDataFormat dataFormat = new CsvDataFormat().setIgnoreHeaderCase(true);
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.TRUE, dataFormat.getIgnoreHeaderCase());
-        // Properly used
-        assertTrue(dataFormat.getActiveFormat().getIgnoreHeaderCase());
-        
-        // NOT set
-        dataFormat = new CsvDataFormat();
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(null, dataFormat.getIgnoreHeaderCase());
-        // Properly used
-        assertFalse(dataFormat.getActiveFormat().getIgnoreHeaderCase());
-
-        // Set to false
-        dataFormat = new CsvDataFormat().setIgnoreHeaderCase(false);
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.FALSE, dataFormat.getIgnoreHeaderCase());
-        // Properly used
-        assertFalse(dataFormat.getActiveFormat().getIgnoreHeaderCase());
-    }
-
-    @Test
-    public void testTrailingDelimiter() {
-        // Set to TRUE
-        CsvDataFormat dataFormat = new CsvDataFormat().setTrailingDelimiter(true);
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.TRUE, dataFormat.getTrailingDelimiter());
-        // Properly used
-        assertTrue(dataFormat.getActiveFormat().getTrailingDelimiter());
-        
-        // NOT set
-        dataFormat = new CsvDataFormat();
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(null, dataFormat.getTrailingDelimiter());
-        // Properly used
-        assertFalse(dataFormat.getActiveFormat().getTrailingDelimiter());
-
-        // Set to false
-        dataFormat = new CsvDataFormat().setTrailingDelimiter(false);
-        // Properly saved
-        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
-        assertEquals(Boolean.FALSE, dataFormat.getTrailingDelimiter());
-        // Properly used
-        assertFalse(dataFormat.getActiveFormat().getTrailingDelimiter());
-    }
-    
-}
+/*
+ * 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.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;
+
+/**
+ * This class tests the creation of the proper {@link org.apache.commons.csv.CSVFormat} based on the properties of
+ * {@link org.apache.camel.dataformat.csv.CsvDataFormat}.
+ * It doesn't test the marshalling and unmarshalling based on the CSV format.
+ */
+public class CsvDataFormatTest {
+    @Test
+    public void shouldUseDefaultFormat() {
+        CsvDataFormat dataFormat = new CsvDataFormat();
+
+        // Properly initialized
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+
+        // Properly used
+        assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
+    }
+
+    @Test
+    public void shouldUseFormatFromConstructor() {
+        CsvDataFormat dataFormat = new CsvDataFormat(CSVFormat.EXCEL);
+
+        // Properly initialized
+        assertSame(CSVFormat.EXCEL, dataFormat.getFormat());
+
+        // Properly used
+        assertEquals(CSVFormat.EXCEL, dataFormat.getActiveFormat());
+    }
+
+    @Test
+    public void shouldUseSpecifiedFormat() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setFormat(CSVFormat.MYSQL);
+
+        // Properly saved
+        assertSame(CSVFormat.MYSQL, dataFormat.getFormat());
+
+        // Properly used
+        assertEquals(CSVFormat.MYSQL, dataFormat.getActiveFormat());
+    }
+
+    @Test
+    public void shouldFallbackToDefaultFormat() {
+        CsvDataFormat dataFormat = new CsvDataFormat(CSVFormat.EXCEL)
+                .setFormat(null);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+
+        // Properly used
+        assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
+    }
+
+    @Test
+    public void shouldDefineFormatByName() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setFormatName("EXCEL");
+
+        // Properly saved
+        assertSame(CSVFormat.EXCEL, dataFormat.getFormat());
+
+        // Properly used
+        assertEquals(CSVFormat.EXCEL, dataFormat.getActiveFormat());
+    }
+
+    @Test
+    public void shouldDisableCommentMarker() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setCommentMarkerDisabled(true)
+                .setCommentMarker('c');
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertTrue(dataFormat.isCommentMarkerDisabled());
+        assertEquals(Character.valueOf('c'), dataFormat.getCommentMarker());
+
+        // Properly used
+        assertNull(dataFormat.getActiveFormat().getCommentMarker());
+    }
+
+    @Test
+    public void shouldOverrideCommentMarker() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setCommentMarker('c');
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Character.valueOf('c'), dataFormat.getCommentMarker());
+
+        // Properly used
+        assertEquals(Character.valueOf('c'), dataFormat.getActiveFormat().getCommentMarker());
+    }
+
+    @Test
+    public void shouldOverrideDelimiter() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setDelimiter('d');
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Character.valueOf('d'), dataFormat.getDelimiter());
+
+        // Properly used
+        assertEquals('d', dataFormat.getActiveFormat().getDelimiter());
+    }
+
+    @Test
+    public void shouldDisableEscape() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setEscapeDisabled(true)
+                .setEscape('e');
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertTrue(dataFormat.isEscapeDisabled());
+        assertEquals(Character.valueOf('e'), dataFormat.getEscape());
+
+        // Properly used
+        assertNull(dataFormat.getActiveFormat().getEscapeCharacter());
+    }
+
+    @Test
+    public void shouldOverrideEscape() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setEscape('e');
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Character.valueOf('e'), dataFormat.getEscape());
+
+        // Properly used
+        assertEquals(Character.valueOf('e'), dataFormat.getActiveFormat().getEscapeCharacter());
+    }
+
+    @Test
+    public void shouldDisableHeader() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setHeaderDisabled(true)
+                .setHeader(new String[]{"a", "b", "c"});
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertTrue(dataFormat.isHeaderDisabled());
+        assertArrayEquals(new String[]{"a", "b", "c"}, dataFormat.getHeader());
+
+        // Properly used
+        assertNull(dataFormat.getActiveFormat().getHeader());
+    }
+
+    @Test
+    public void shouldOverrideHeader() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setHeader(new String[]{"a", "b", "c"});
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertArrayEquals(new String[]{"a", "b", "c"}, dataFormat.getHeader());
+
+        // Properly used
+        assertArrayEquals(new String[]{"a", "b", "c"}, dataFormat.getActiveFormat().getHeader());
+    }
+
+    @Test
+    public void shouldAllowMissingColumnNames() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setAllowMissingColumnNames(true);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.TRUE, dataFormat.getAllowMissingColumnNames());
+
+        // Properly used
+        assertTrue(dataFormat.getActiveFormat().getAllowMissingColumnNames());
+    }
+
+    @Test
+    public void shouldNotAllowMissingColumnNames() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setAllowMissingColumnNames(false);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.FALSE, dataFormat.getAllowMissingColumnNames());
+
+        // Properly used
+        assertFalse(dataFormat.getActiveFormat().getAllowMissingColumnNames());
+    }
+
+    @Test
+    public void shouldIgnoreEmptyLines() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setIgnoreEmptyLines(true);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.TRUE, dataFormat.getIgnoreEmptyLines());
+
+        // Properly used
+        assertTrue(dataFormat.getActiveFormat().getIgnoreEmptyLines());
+    }
+
+    @Test
+    public void shouldNotIgnoreEmptyLines() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setIgnoreEmptyLines(false);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.FALSE, dataFormat.getIgnoreEmptyLines());
+
+        // Properly used
+        assertFalse(dataFormat.getActiveFormat().getIgnoreEmptyLines());
+    }
+
+    @Test
+    public void shouldIgnoreSurroundingSpaces() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setIgnoreSurroundingSpaces(true);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.TRUE, dataFormat.getIgnoreSurroundingSpaces());
+
+        // Properly used
+        assertTrue(dataFormat.getActiveFormat().getIgnoreSurroundingSpaces());
+    }
+
+    @Test
+    public void shouldNotIgnoreSurroundingSpaces() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setIgnoreSurroundingSpaces(false);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.FALSE, dataFormat.getIgnoreSurroundingSpaces());
+
+        // Properly used
+        assertFalse(dataFormat.getActiveFormat().getIgnoreSurroundingSpaces());
+    }
+
+    @Test
+    public void shouldDisableNullString() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setNullStringDisabled(true)
+                .setNullString("****");
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertTrue(dataFormat.isNullStringDisabled());
+        assertEquals("****", dataFormat.getNullString());
+
+        // Properly used
+        assertNull(dataFormat.getActiveFormat().getNullString());
+    }
+
+    @Test
+    public void shouldOverrideNullString() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setNullString("****");
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals("****", dataFormat.getNullString());
+
+        // Properly used
+        assertEquals("****", dataFormat.getActiveFormat().getNullString());
+    }
+
+    @Test
+    public void shouldDisableQuote() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setQuoteDisabled(true)
+                .setQuote('q');
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertTrue(dataFormat.isQuoteDisabled());
+        assertEquals(Character.valueOf('q'), dataFormat.getQuote());
+
+        // Properly used
+        assertNull(dataFormat.getActiveFormat().getQuoteCharacter());
+    }
+
+    @Test
+    public void shouldOverrideQuote() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setQuote('q');
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Character.valueOf('q'), dataFormat.getQuote());
+
+        // Properly used
+        assertEquals(Character.valueOf('q'), dataFormat.getActiveFormat().getQuoteCharacter());
+    }
+
+    @Test
+    public void shouldOverrideQuoteMode() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setQuoteMode(QuoteMode.ALL);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(QuoteMode.ALL, dataFormat.getQuoteMode());
+
+        // Properly used
+        assertEquals(QuoteMode.ALL, dataFormat.getActiveFormat().getQuoteMode());
+    }
+
+    @Test
+    public void shouldDisableRecordSeparator() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setRecordSeparatorDisabled(true)
+                .setRecordSeparator("separator");
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertTrue(dataFormat.isRecordSeparatorDisabled());
+        assertEquals("separator", dataFormat.getRecordSeparator());
+
+        // Properly used
+        assertNull(dataFormat.getActiveFormat().getRecordSeparator());
+    }
+
+    @Test
+    public void shouldOverrideRecordSeparator() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setRecordSeparator("separator");
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals("separator", dataFormat.getRecordSeparator());
+
+        // Properly used
+        assertEquals("separator", dataFormat.getActiveFormat().getRecordSeparator());
+    }
+
+    @Test
+    public void shouldSkipHeaderRecord() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setSkipHeaderRecord(true);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.TRUE, dataFormat.getSkipHeaderRecord());
+
+        // Properly used
+        assertTrue(dataFormat.getActiveFormat().getSkipHeaderRecord());
+    }
+
+    @Test
+    public void shouldNotSkipHeaderRecord() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setSkipHeaderRecord(false);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.FALSE, dataFormat.getSkipHeaderRecord());
+
+        // Properly used
+        assertFalse(dataFormat.getActiveFormat().getSkipHeaderRecord());
+    }
+
+    @Test
+    public void shouldHandleLazyLoad() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setLazyLoad(true);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertTrue(dataFormat.isLazyLoad());
+
+        // Properly used (it doesn't modify the format)
+        assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
+    }
+
+    @Test
+    public void shouldHandleUseMaps() {
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setUseMaps(true);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertTrue(dataFormat.isUseMaps());
+
+        // Properly used (it doesn't modify the format)
+        assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
+    }
+
+    @Test
+    public void shouldHandleRecordConverter() {
+        CsvRecordConverter<String> converter = new CsvRecordConverter<String>() {
+            @Override
+            public String convertRecord(CSVRecord record) {
+                return record.toString();
+            }
+        };
+
+        CsvDataFormat dataFormat = new CsvDataFormat()
+                .setRecordConverter(converter);
+
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertSame(converter, dataFormat.getRecordConverter());
+
+        // Properly used (it doesn't modify the format)
+        assertEquals(CSVFormat.DEFAULT, dataFormat.getActiveFormat());
+    }
+
+    @Test
+    public void testTrim() {
+        // Set to TRUE
+        CsvDataFormat dataFormat = new CsvDataFormat().setTrim(true);
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.TRUE, dataFormat.getTrim());
+        // Properly used
+        assertTrue(dataFormat.getActiveFormat().getTrim());
+        
+        // NOT set
+        dataFormat = new CsvDataFormat();
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(null, dataFormat.getTrim());
+        // Properly used
+        assertFalse(dataFormat.getActiveFormat().getTrim());
+
+        // Set to false
+        dataFormat = new CsvDataFormat().setTrim(false);
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.FALSE, dataFormat.getTrim());
+        // Properly used
+        assertFalse(dataFormat.getActiveFormat().getTrim());
+
+    }
+
+    @Test
+    public void testIgnoreHeaderCase() {
+        // Set to TRUE
+        CsvDataFormat dataFormat = new CsvDataFormat().setIgnoreHeaderCase(true);
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.TRUE, dataFormat.getIgnoreHeaderCase());
+        // Properly used
+        assertTrue(dataFormat.getActiveFormat().getIgnoreHeaderCase());
+        
+        // NOT set
+        dataFormat = new CsvDataFormat();
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(null, dataFormat.getIgnoreHeaderCase());
+        // Properly used
+        assertFalse(dataFormat.getActiveFormat().getIgnoreHeaderCase());
+
+        // Set to false
+        dataFormat = new CsvDataFormat().setIgnoreHeaderCase(false);
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.FALSE, dataFormat.getIgnoreHeaderCase());
+        // Properly used
+        assertFalse(dataFormat.getActiveFormat().getIgnoreHeaderCase());
+    }
+
+    @Test
+    public void testTrailingDelimiter() {
+        // Set to TRUE
+        CsvDataFormat dataFormat = new CsvDataFormat().setTrailingDelimiter(true);
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.TRUE, dataFormat.getTrailingDelimiter());
+        // Properly used
+        assertTrue(dataFormat.getActiveFormat().getTrailingDelimiter());
+        
+        // NOT set
+        dataFormat = new CsvDataFormat();
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(null, dataFormat.getTrailingDelimiter());
+        // Properly used
+        assertFalse(dataFormat.getActiveFormat().getTrailingDelimiter());
+
+        // Set to false
+        dataFormat = new CsvDataFormat().setTrailingDelimiter(false);
+        // Properly saved
+        assertSame(CSVFormat.DEFAULT, dataFormat.getFormat());
+        assertEquals(Boolean.FALSE, dataFormat.getTrailingDelimiter());
+        // Properly used
+        assertFalse(dataFormat.getActiveFormat().getTrailingDelimiter());
+    }
+    
+}
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..60af592 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
@@ -1,59 +1,59 @@
-/*
- * 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.dataformat.csv;
-
-import java.util.ArrayList;
-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 static org.hamcrest.core.StringStartsWith.startsWith;
-
-public class CsvMarshalCharsetTest extends CamelTestSupport {
-
-    @Test
-    public void testMarshal() throws Exception {
-        MockEndpoint endpoint = getMockEndpoint("mock:daltons");
-        endpoint.expectedMessageCount(1);
-
-        List<List<String>> data = new ArrayList<>();
-        data.add(0, new ArrayList<String>());
-        data.get(0).add(0, "L\u00fccky Luke");
-        Exchange in = createExchangeWithBody(data);
-        in.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1");
-        template.send("direct:start", in);
-
-        endpoint.assertIsSatisfied();
-
-        Exchange exchange = endpoint.getExchanges().get(0);
-        String body = exchange.getIn().getBody(String.class);
-        assertThat(body, startsWith("L\u00fccky Luke"));
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() {
-        return new RouteBuilder() {
-            public void configure() {
-                from("direct:start").marshal().csv().to("mock:daltons");
-            }
-        };
-    }
-}
+/*
+ * 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.dataformat.csv;
+
+import java.util.ArrayList;
+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 static org.hamcrest.core.StringStartsWith.startsWith;
+
+public class CsvMarshalCharsetTest extends CamelTestSupport {
+
+    @Test
+    public void testMarshal() throws Exception {
+        MockEndpoint endpoint = getMockEndpoint("mock:daltons");
+        endpoint.expectedMessageCount(1);
+
+        List<List<String>> data = new ArrayList<>();
+        data.add(0, new ArrayList<String>());
+        data.get(0).add(0, "L\u00fccky Luke");
+        Exchange in = createExchangeWithBody(data);
+        in.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1");
+        template.send("direct:start", in);
+
+        endpoint.assertIsSatisfied();
+
+        Exchange exchange = endpoint.getExchanges().get(0);
+        String body = exchange.getIn().getBody(String.class);
+        assertThat(body, startsWith("L\u00fccky Luke"));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                from("direct:start").marshal().csv().to("mock:daltons");
+            }
+        };
+    }
+}
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..71da7ad 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
@@ -1,68 +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.dataformat.csv;
-
-import java.io.StringReader;
-import java.util.List;
-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 static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-/**
- * This class tests the common {@link CsvRecordConverter} implementations of
- * {@link org.apache.camel.dataformat.csv.CsvRecordConverters}.
- */
-public class CsvRecordConvertersTest {
-    private CSVRecord record;
-
-    @Before
-    public void setUp() throws Exception {
-        CSVFormat format = CSVFormat.DEFAULT.withHeader("A", "B", "C");
-        CSVParser parser = new CSVParser(new StringReader("1,2,3"), format);
-        List<CSVRecord> records = parser.getRecords();
-        record = records.get(0);
-    }
-
-    @Test
-    public void shouldConvertAsList() {
-        List<String> list = CsvRecordConverters.listConverter().convertRecord(record);
-
-        assertNotNull(list);
-        assertEquals(3, list.size());
-        assertEquals("1", list.get(0));
-        assertEquals("2", list.get(1));
-        assertEquals("3", list.get(2));
-    }
-
-    @Test
-    public void shouldConvertAsMap() {
-        Map<String, String> map = CsvRecordConverters.mapConverter().convertRecord(record);
-
-        assertNotNull(map);
-        assertEquals(3, map.size());
-        assertEquals("1", map.get("A"));
-        assertEquals("2", map.get("B"));
-        assertEquals("3", map.get("C"));
-    }
-}
+/*
+ * 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.dataformat.csv;
+
+import java.io.StringReader;
+import java.util.List;
+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 static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * This class tests the common {@link CsvRecordConverter} implementations of
+ * {@link org.apache.camel.dataformat.csv.CsvRecordConverters}.
+ */
+public class CsvRecordConvertersTest {
+    private CSVRecord record;
+
+    @Before
+    public void setUp() throws Exception {
+        CSVFormat format = CSVFormat.DEFAULT.withHeader("A", "B", "C");
+        CSVParser parser = new CSVParser(new StringReader("1,2,3"), format);
+        List<CSVRecord> records = parser.getRecords();
+        record = records.get(0);
+    }
+
+    @Test
+    public void shouldConvertAsList() {
+        List<String> list = CsvRecordConverters.listConverter().convertRecord(record);
+
+        assertNotNull(list);
+        assertEquals(3, list.size());
+        assertEquals("1", list.get(0));
+        assertEquals("2", list.get(1));
+        assertEquals("3", list.get(2));
+    }
+
+    @Test
+    public void shouldConvertAsMap() {
+        Map<String, String> map = CsvRecordConverters.mapConverter().convertRecord(record);
+
+        assertNotNull(map);
+        assertEquals(3, map.size());
+        assertEquals("1", map.get("A"));
+        assertEquals("2", map.get("B"));
+        assertEquals("3", map.get("C"));
+    }
+}
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..7206a4a 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
@@ -1,187 +1,187 @@
-/*
- * 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.dataformat.csv;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-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.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class CsvRouteTest extends CamelTestSupport {
-    private static final Logger LOG = LoggerFactory.getLogger(CsvRouteTest.class);
-
-    @Test
-    public void testSendMessage() throws Exception {
-        MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
-        resultEndpoint.expectedMessageCount(1);
-
-        // START SNIPPET: marshalInput
-        Map<String, Object> body = new LinkedHashMap<>();
-        body.put("foo", "abc");
-        body.put("bar", 123);
-        // END SNIPPET: marshalInput
-        template.sendBody("direct:start", body);
-
-        resultEndpoint.assertIsSatisfied();
-        List<Exchange> list = resultEndpoint.getReceivedExchanges();
-        for (Exchange exchange : list) {
-            Message in = exchange.getIn();
-            String text = in.getBody(String.class);
-
-            log.debug("Received " + text);
-            assertNotNull("Should be able to convert received body to a string", text);
-
-            // 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()));
-        }
-    }
-
-    @Test
-    public void testMultipleMessages() throws Exception {
-        MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:resultMulti",
-                MockEndpoint.class);
-        resultEndpoint.expectedMessageCount(2);
-        Map<String, Object> body1 = new LinkedHashMap<>();
-        body1.put("foo", "abc");
-        body1.put("bar", 123);
-
-        Map<String, Object> body2 = new LinkedHashMap<>();
-        body2.put("foo", "def");
-        body2.put("bar", 456);
-        body2.put("baz", 789);
-
-        template.sendBody("direct:startMulti", body1);
-        template.sendBody("direct:startMulti", body2);
-
-        resultEndpoint.assertIsSatisfied();
-        List<Exchange> list = resultEndpoint.getReceivedExchanges();
-        Message in1 = list.get(0).getIn();
-        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()));
-
-        Message in2 = list.get(1).getIn();
-        String text2 = in2.getBody(String.class);
-
-        log.debug("Received " + text2);
-
-        // 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());
-        } else {
-            assertEquals("Second CSV body has wrong value",
-                    "456,def,789", text2.trim());
-        }
-    }
-
-    @Test
-    public void testPresetConfig() throws Exception {
-        MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:resultMultiCustom",
-                MockEndpoint.class);
-        resultEndpoint.expectedMessageCount(2);
-        Map<String, Object> body1 = new LinkedHashMap<>();
-        body1.put("foo", "abc");
-        body1.put("bar", 123);
-
-        Map<String, Object> body2 = new LinkedHashMap<>();
-        body2.put("foo", "def");
-        body2.put("bar", 456);
-        body2.put("baz", 789);
-        body2.put("buz", "000");
-
-        template.sendBody("direct:startMultiCustom", body1);
-        template.sendBody("direct:startMultiCustom", body2);
-
-        List<Exchange> list = resultEndpoint.getReceivedExchanges();
-        Message in1 = list.get(0).getIn();
-        String text1 = in1.getBody(String.class);
-
-        log.debug("Received " + text1);
-        assertEquals("First CSV body has wrong value",
-                "abc;;123", text1.trim());
-
-        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());
-
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void testUnMarshal() throws Exception {
-        MockEndpoint endpoint = getMockEndpoint("mock:daltons");
-        endpoint.expectedMessageCount(1);
-        endpoint.assertIsSatisfied();
-        Exchange exchange = endpoint.getExchanges().get(0);
-        // START SNIPPET : unmarshalResult
-        List<List<String>> data = (List<List<String>>) exchange.getIn().getBody();
-        for (List<String> line : data) {
-            LOG.debug(String.format("%s has an IQ of %s and is currently %s",
-                    line.get(0), line.get(1), line.get(2)));
-        }
-        // END SNIPPET : unmarshalResult
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() {
-        return new RouteBuilder() {
-            public void configure() {
-                // START SNIPPET: marshalRoute
-                from("direct:start").
-                        marshal().csv().
-                        to("mock:result");
-                // END SNIPPET: marshalRoute
-
-                from("direct:startMulti").
-                        marshal().csv().
-                        to("mock:resultMulti");
-
-                CsvDataFormat customCsv = new CsvDataFormat()
-                        .setDelimiter(';')
-                        .setHeader(new String[]{"foo", "baz", "bar"})
-                        .setSkipHeaderRecord(true);
-
-                from("direct:startMultiCustom").
-                        marshal(customCsv).
-                        to("mock:resultMultiCustom");
-
-                // START SNIPPET: unmarshalRoute
-                from("file:src/test/resources/?fileName=daltons.csv&noop=true").
-                        unmarshal().csv().
-                        to("mock:daltons");
-                // END SNIPPET: unmarshalRoute
-            }
-        };
-    }
-}
+/*
+ * 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.dataformat.csv;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CsvRouteTest extends CamelTestSupport {
+    private static final Logger LOG = LoggerFactory.getLogger(CsvRouteTest.class);
+
+    @Test
+    public void testSendMessage() throws Exception {
+        MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
+        resultEndpoint.expectedMessageCount(1);
+
+        // START SNIPPET: marshalInput
+        Map<String, Object> body = new LinkedHashMap<>();
+        body.put("foo", "abc");
+        body.put("bar", 123);
+        // END SNIPPET: marshalInput
+        template.sendBody("direct:start", body);
+
+        resultEndpoint.assertIsSatisfied();
+        List<Exchange> list = resultEndpoint.getReceivedExchanges();
+        for (Exchange exchange : list) {
+            Message in = exchange.getIn();
+            String text = in.getBody(String.class);
+
+            log.debug("Received " + text);
+            assertNotNull("Should be able to convert received body to a string", text);
+
+            // 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()));
+        }
+    }
+
+    @Test
+    public void testMultipleMessages() throws Exception {
+        MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:resultMulti",
+                MockEndpoint.class);
+        resultEndpoint.expectedMessageCount(2);
+        Map<String, Object> body1 = new LinkedHashMap<>();
+        body1.put("foo", "abc");
+        body1.put("bar", 123);
+
+        Map<String, Object> body2 = new LinkedHashMap<>();
+        body2.put("foo", "def");
+        body2.put("bar", 456);
+        body2.put("baz", 789);
+
+        template.sendBody("direct:startMulti", body1);
+        template.sendBody("direct:startMulti", body2);
+
+        resultEndpoint.assertIsSatisfied();
+        List<Exchange> list = resultEndpoint.getReceivedExchanges();
+        Message in1 = list.get(0).getIn();
+        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()));
+
+        Message in2 = list.get(1).getIn();
+        String text2 = in2.getBody(String.class);
+
+        log.debug("Received " + text2);
+
+        // 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());
+        } else {
+            assertEquals("Second CSV body has wrong value",
+                    "456,def,789", text2.trim());
+        }
+    }
+
+    @Test
+    public void testPresetConfig() throws Exception {
+        MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:resultMultiCustom",
+                MockEndpoint.class);
+        resultEndpoint.expectedMessageCount(2);
+        Map<String, Object> body1 = new LinkedHashMap<>();
+        body1.put("foo", "abc");
+        body1.put("bar", 123);
+
+        Map<String, Object> body2 = new LinkedHashMap<>();
+        body2.put("foo", "def");
+        body2.put("bar", 456);
+        body2.put("baz", 789);
+        body2.put("buz", "000");
+
+        template.sendBody("direct:startMultiCustom", body1);
+        template.sendBody("direct:startMultiCustom", body2);
+
+        List<Exchange> list = resultEndpoint.getReceivedExchanges();
+        Message in1 = list.get(0).getIn();
+        String text1 = in1.getBody(String.class);
+
+        log.debug("Received " + text1);
+        assertEquals("First CSV body has wrong value",
+                "abc;;123", text1.trim());
+
+        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());
+
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testUnMarshal() throws Exception {
+        MockEndpoint endpoint = getMockEndpoint("mock:daltons");
+        endpoint.expectedMessageCount(1);
+        endpoint.assertIsSatisfied();
+        Exchange exchange = endpoint.getExchanges().get(0);
+        // START SNIPPET : unmarshalResult
+        List<List<String>> data = (List<List<String>>) exchange.getIn().getBody();
+        for (List<String> line : data) {
+            LOG.debug(String.format("%s has an IQ of %s and is currently %s",
+                    line.get(0), line.get(1), line.get(2)));
+        }
+        // END SNIPPET : unmarshalResult
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            public void configure() {
+                // START SNIPPET: marshalRoute
+                from("direct:start").
+                        marshal().csv().
+                        to("mock:result");
+                // END SNIPPET: marshalRoute
+
+                from("direct:startMulti").
+                        marshal().csv().
+                        to("mock:resultMulti");
+
+                CsvDataFormat customCsv = new CsvDataFormat()
+                        .setDelimiter(';')
+                        .setHeader(new String[]{"foo", "baz", "bar"})
+                        .setSkipHeaderRecord(true);
+
+                from("direct:startMultiCustom").
+                        marshal(customCsv).
+                        to("mock:resultMultiCustom");
+
+                // START SNIPPET: unmarshalRoute
+                from("file:src/test/resources/?fileName=daltons.csv&noop=true").
+                        unmarshal().csv().
+                        to("mock:daltons");
+                // END SNIPPET: unmarshalRoute
+            }
+        };
+    }
+}
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..dd7442c 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
@@ -1,199 +1,199 @@
-/*
- * 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.dataformat.csv;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-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 static org.apache.camel.dataformat.csv.TestUtils.asMap;
-
-/**
- * This class tests standard unmarshalling
- */
-public class CsvUnmarshalTest extends CamelTestSupport {
-    private static final String CSV_SAMPLE = "A,B,C\r1,2,3\rone,two,three";
-
-    @EndpointInject("mock:output")
-    MockEndpoint output;
-
-    @EndpointInject("mock:line")
-    MockEndpoint line;
-
-    @Test
-    public void shouldUseDefaultFormat() throws Exception {
-        output.expectedMessageCount(1);
-
-        template.sendBody("direct:default", CSV_SAMPLE);
-        output.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, output.getExchanges().get(0).getIn().getBody());
-        assertEquals(3, body.size());
-        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
-        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
-        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
-    }
-
-    @Test
-    public void shouldUseDelimiter() throws Exception {
-        output.expectedMessageCount(1);
-
-        template.sendBody("direct:delimiter", CSV_SAMPLE.replace(',', '_'));
-        output.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, output.getExchanges().get(0).getIn().getBody());
-        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
-        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
-        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
-    }
-
-    @Test
-    public void shouldUseLazyLoading() throws Exception {
-        line.expectedMessageCount(3);
-        template.sendBody("direct:lazy", CSV_SAMPLE);
-        line.assertIsSatisfied();
-
-        List body1 = line.getExchanges().get(0).getIn().getBody(List.class);
-        List body2 = line.getExchanges().get(1).getIn().getBody(List.class);
-        List body3 = line.getExchanges().get(2).getIn().getBody(List.class);
-        assertEquals(Arrays.asList("A", "B", "C"), body1);
-        assertEquals(Arrays.asList("1", "2", "3"), body2);
-        assertEquals(Arrays.asList("one", "two", "three"), body3);
-    }
-
-    @Test
-    public void shouldUseMaps() throws Exception {
-        output.expectedMessageCount(1);
-
-        template.sendBody("direct:map", CSV_SAMPLE);
-        output.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, output.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-        // should be unordered map
-        Map map = (Map) body.get(0);
-        assertIsInstanceOf(HashMap.class, map);
-    }
-
-    @Test
-    public void shouldUseOrderedMaps() throws Exception {
-        output.expectedMessageCount(1);
-
-        template.sendBody("direct:orderedmap", CSV_SAMPLE);
-        output.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, output.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-
-        Map map = (Map) body.get(0);
-        assertIsInstanceOf(LinkedHashMap.class, map);
-        Iterator<Map.Entry> it = map.entrySet().iterator();
-        Map.Entry e = it.next();
-        assertEquals("A", e.getKey());
-        assertEquals("1", e.getValue());
-        e = it.next();
-        assertEquals("B", e.getKey());
-        assertEquals("2", e.getValue());
-        e = it.next();
-        assertEquals("C", e.getKey());
-        assertEquals("3", e.getValue());
-    }
-
-    @Test
-    public void shouldUseLazyLoadingAndMaps() throws Exception {
-        line.expectedMessageCount(2);
-        template.sendBody("direct:lazy_map", CSV_SAMPLE);
-        line.assertIsSatisfied();
-
-        Map map1 = line.getExchanges().get(0).getIn().getBody(Map.class);
-        Map map2 = line.getExchanges().get(1).getIn().getBody(Map.class);
-
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), map1);
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), map2);
-    }
-
-    @Test
-    public void shouldUseMapsAndHeaders() throws Exception {
-        output.expectedMessageCount(1);
-
-        template.sendBody("direct:map_headers", CSV_SAMPLE);
-        output.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, output.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("AA", "1", "BB", "2", "CC", "3"), body.get(0));
-        assertEquals(asMap("AA", "one", "BB", "two", "CC", "three"), body.get(1));
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                // Default format
-                from("direct:default")
-                        .unmarshal(new CsvDataFormat())
-                        .to("mock:output");
-
-                // Format with special delimiter
-                from("direct:delimiter")
-                        .unmarshal(new CsvDataFormat().setDelimiter('_'))
-                        .to("mock:output");
-
-                // Lazy load
-                from("direct:lazy")
-                        .unmarshal(new CsvDataFormat().setLazyLoad(true))
-                        .split().body()
-                            .to("mock:line");
-
-                // Use maps
-                from("direct:map")
-                        .unmarshal(new CsvDataFormat().setUseMaps(true))
-                        .to("mock:output");
-
-                // Use ordered maps
-                from("direct:orderedmap")
-                        .unmarshal(new CsvDataFormat().setUseOrderedMaps(true))
-                        .to("mock:output");
-
-                // Use lazy load and maps
-                from("direct:lazy_map")
-                        .unmarshal(new CsvDataFormat().setLazyLoad(true).setUseMaps(true))
-                        .split().body()
-                            .to("mock:line");
-
-                // Use map without first line and headers
-                from("direct:map_headers")
-                        .unmarshal(new CsvDataFormat().setUseMaps(true).setSkipHeaderRecord(true).setHeader(new String[]{"AA", "BB", "CC"}))
-                        .to("mock:output");
-            }
-        };
-    }
-}
+/*
+ * 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.dataformat.csv;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+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 static org.apache.camel.dataformat.csv.TestUtils.asMap;
+
+/**
+ * This class tests standard unmarshalling
+ */
+public class CsvUnmarshalTest extends CamelTestSupport {
+    private static final String CSV_SAMPLE = "A,B,C\r1,2,3\rone,two,three";
+
+    @EndpointInject("mock:output")
+    MockEndpoint output;
+
+    @EndpointInject("mock:line")
+    MockEndpoint line;
+
+    @Test
+    public void shouldUseDefaultFormat() throws Exception {
+        output.expectedMessageCount(1);
+
+        template.sendBody("direct:default", CSV_SAMPLE);
+        output.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, output.getExchanges().get(0).getIn().getBody());
+        assertEquals(3, body.size());
+        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
+        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
+        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
+    }
+
+    @Test
+    public void shouldUseDelimiter() throws Exception {
+        output.expectedMessageCount(1);
+
+        template.sendBody("direct:delimiter", CSV_SAMPLE.replace(',', '_'));
+        output.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, output.getExchanges().get(0).getIn().getBody());
+        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
+        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
+        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
+    }
+
+    @Test
+    public void shouldUseLazyLoading() throws Exception {
+        line.expectedMessageCount(3);
+        template.sendBody("direct:lazy", CSV_SAMPLE);
+        line.assertIsSatisfied();
+
+        List body1 = line.getExchanges().get(0).getIn().getBody(List.class);
+        List body2 = line.getExchanges().get(1).getIn().getBody(List.class);
+        List body3 = line.getExchanges().get(2).getIn().getBody(List.class);
+        assertEquals(Arrays.asList("A", "B", "C"), body1);
+        assertEquals(Arrays.asList("1", "2", "3"), body2);
+        assertEquals(Arrays.asList("one", "two", "three"), body3);
+    }
+
+    @Test
+    public void shouldUseMaps() throws Exception {
+        output.expectedMessageCount(1);
+
+        template.sendBody("direct:map", CSV_SAMPLE);
+        output.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, output.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+        // should be unordered map
+        Map map = (Map) body.get(0);
+        assertIsInstanceOf(HashMap.class, map);
+    }
+
+    @Test
+    public void shouldUseOrderedMaps() throws Exception {
+        output.expectedMessageCount(1);
+
+        template.sendBody("direct:orderedmap", CSV_SAMPLE);
+        output.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, output.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+
+        Map map = (Map) body.get(0);
+        assertIsInstanceOf(LinkedHashMap.class, map);
+        Iterator<Map.Entry> it = map.entrySet().iterator();
+        Map.Entry e = it.next();
+        assertEquals("A", e.getKey());
+        assertEquals("1", e.getValue());
+        e = it.next();
+        assertEquals("B", e.getKey());
+        assertEquals("2", e.getValue());
+        e = it.next();
+        assertEquals("C", e.getKey());
+        assertEquals("3", e.getValue());
+    }
+
+    @Test
+    public void shouldUseLazyLoadingAndMaps() throws Exception {
+        line.expectedMessageCount(2);
+        template.sendBody("direct:lazy_map", CSV_SAMPLE);
+        line.assertIsSatisfied();
+
+        Map map1 = line.getExchanges().get(0).getIn().getBody(Map.class);
+        Map map2 = line.getExchanges().get(1).getIn().getBody(Map.class);
+
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), map1);
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), map2);
+    }
+
+    @Test
+    public void shouldUseMapsAndHeaders() throws Exception {
+        output.expectedMessageCount(1);
+
+        template.sendBody("direct:map_headers", CSV_SAMPLE);
+        output.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, output.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("AA", "1", "BB", "2", "CC", "3"), body.get(0));
+        assertEquals(asMap("AA", "one", "BB", "two", "CC", "three"), body.get(1));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                // Default format
+                from("direct:default")
+                        .unmarshal(new CsvDataFormat())
+                        .to("mock:output");
+
+                // Format with special delimiter
+                from("direct:delimiter")
+                        .unmarshal(new CsvDataFormat().setDelimiter('_'))
+                        .to("mock:output");
+
+                // Lazy load
+                from("direct:lazy")
+                        .unmarshal(new CsvDataFormat().setLazyLoad(true))
+                        .split().body()
+                            .to("mock:line");
+
+                // Use maps
+                from("direct:map")
+                        .unmarshal(new CsvDataFormat().setUseMaps(true))
+                        .to("mock:output");
+
+                // Use ordered maps
+                from("direct:orderedmap")
+                        .unmarshal(new CsvDataFormat().setUseOrderedMaps(true))
+                        .to("mock:output");
+
+                // Use lazy load and maps
+                from("direct:lazy_map")
+                        .unmarshal(new CsvDataFormat().setLazyLoad(true).setUseMaps(true))
+                        .split().body()
+                            .to("mock:line");
+
+                // Use map without first line and headers
+                from("direct:map_headers")
+                        .unmarshal(new CsvDataFormat().setUseMaps(true).setSkipHeaderRecord(true).setHeader(new String[]{"AA", "BB", "CC"}))
+                        .to("mock:output");
+            }
+        };
+    }
+}
diff --git a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/AbstractBeanDefinitionParser.java b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/AbstractBeanDefinitionParser.java
index 33bb731..ef76e53 100644
--- a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/AbstractBeanDefinitionParser.java
+++ b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/AbstractBeanDefinitionParser.java
@@ -18,7 +18,6 @@
 
 import java.util.StringTokenizer;
 
-
 import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
@@ -30,8 +29,6 @@
 import org.osgi.service.blueprint.reflect.BeanMetadata;
 import org.osgi.service.blueprint.reflect.Metadata;
 
-
-
 public class AbstractBeanDefinitionParser extends AbstractBPBeanDefinitionParser {
     
     public static String getIdOrName(Element elem) {
diff --git a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/CamelConduitDefinitionParser.java b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/CamelConduitDefinitionParser.java
index 04bfce2..cd34e64 100644
--- a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/CamelConduitDefinitionParser.java
+++ b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/CamelConduitDefinitionParser.java
@@ -22,8 +22,6 @@
 import org.apache.camel.component.cxf.transport.CamelConduit;
 import org.osgi.service.blueprint.reflect.Metadata;
 
-
-
 public class CamelConduitDefinitionParser extends AbstractBeanDefinitionParser {
     public Metadata parse(Element element, ParserContext context) {
         return parse(element, context, CamelConduit.class);
diff --git a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/CamelDestinationDefinitionParser.java b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/CamelDestinationDefinitionParser.java
index caf3630..6278687 100644
--- a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/CamelDestinationDefinitionParser.java
+++ b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/CamelDestinationDefinitionParser.java
@@ -22,7 +22,6 @@
 import org.apache.camel.component.cxf.transport.CamelDestination;
 import org.osgi.service.blueprint.reflect.Metadata;
 
-
 public class CamelDestinationDefinitionParser extends AbstractBeanDefinitionParser {
     public Metadata parse(Element element, ParserContext context) {
         return parse(element, context, CamelDestination.class);
diff --git a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/CamelTransportNameSpaceHandler.java b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/CamelTransportNameSpaceHandler.java
index 06c57ed..a9482ad 100644
--- a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/CamelTransportNameSpaceHandler.java
+++ b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/blueprint/CamelTransportNameSpaceHandler.java
@@ -28,11 +28,9 @@
 import org.apache.cxf.helpers.BaseNamespaceHandler;
 import org.osgi.service.blueprint.reflect.ComponentMetadata;
 import org.osgi.service.blueprint.reflect.Metadata;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class CamelTransportNameSpaceHandler extends BaseNamespaceHandler {
     private static final Logger LOG = LoggerFactory.getLogger(CamelTransportNameSpaceHandler.class);
 
diff --git a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/spring/AbstractCamelContextBeanDefinitionParser.java b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/spring/AbstractCamelContextBeanDefinitionParser.java
index 7f57e27..525ceed 100644
--- a/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/spring/AbstractCamelContextBeanDefinitionParser.java
+++ b/components/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/spring/AbstractCamelContextBeanDefinitionParser.java
@@ -15,9 +15,11 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf.transport.spring;
+
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+
 import org.apache.camel.util.ObjectHelper;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.configuration.spring.AbstractBeanDefinitionParser;
@@ -25,7 +27,6 @@
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.ParserContext;
 
-
 public class AbstractCamelContextBeanDefinitionParser extends AbstractBeanDefinitionParser {
     private static final String DEFAULT_CAMEL_CONTEXT_NAME = "camelContext";
 
diff --git a/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/JaxWSCamelDestinationTest.java b/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/JaxWSCamelDestinationTest.java
index cf2f797..a2fc518 100644
--- a/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/JaxWSCamelDestinationTest.java
+++ b/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/JaxWSCamelDestinationTest.java
@@ -21,7 +21,6 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-
 import org.junit.After;
 import org.junit.Test;
 
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java
index 4bbd7f2..bb37fd7 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfComponent.java
@@ -27,7 +27,6 @@
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.HeaderFilterStrategyComponent;
 import org.apache.camel.util.PropertiesHelper;
-import org.apache.cxf.message.Message;
 
 /**
  * Defines the <a href="http://camel.apache.org/cxf.html">CXF Component</a>
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
index f101040..e73156b 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
@@ -26,6 +26,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
+
 import javax.net.ssl.HostnameVerifier;
 import javax.wsdl.Definition;
 import javax.wsdl.WSDLException;
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfPayload.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfPayload.java
index f856ce6..e7491c9 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfPayload.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfPayload.java
@@ -32,7 +32,6 @@
 import org.apache.camel.util.ObjectHelper;
 import org.apache.cxf.staxutils.StaxUtils;
 
-
 /**
  * CxfMessage body type when {@link DataFormat#PAYLOAD} is used.
  */
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
index 1c7983d..1fcd2f9 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
@@ -85,8 +85,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
-
 /**
  * The Default CXF binding implementation.
  */
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/HybridSourceDataBinding.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/HybridSourceDataBinding.java
index 02f346f..2ecbc31 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/HybridSourceDataBinding.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/HybridSourceDataBinding.java
@@ -34,7 +34,6 @@
 import org.apache.cxf.jaxb.JAXBDataBinding;
 import org.apache.cxf.service.model.MessagePartInfo;
 
-
 /**
  * This is a hybrid DataBinding of {@link JAXBDataBinding} and {@link org.apache.cxf.databinding.source.SourceDataBinding}.
  * Like the SourceDataBinding, this DataBinding de/serializes parameters as DOMSource objects.  And like the JAXBDataBinding, the 
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/AbstractBeanDefinitionParser.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/AbstractBeanDefinitionParser.java
index fd38c1f..84c857b 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/AbstractBeanDefinitionParser.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/AbstractBeanDefinitionParser.java
@@ -26,8 +26,6 @@
 import org.apache.cxf.configuration.blueprint.AbstractBPBeanDefinitionParser;
 import org.osgi.service.blueprint.reflect.BeanMetadata;
 
-
-
 public class AbstractBeanDefinitionParser extends AbstractBPBeanDefinitionParser {
     public static String getIdOrName(Element elem) {
         String id = elem.getAttribute("id");
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/EndpointDefinitionParser.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/EndpointDefinitionParser.java
index 1d04e1c..5370a40 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/EndpointDefinitionParser.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/EndpointDefinitionParser.java
@@ -30,7 +30,6 @@
 import org.osgi.framework.BundleContext;
 import org.osgi.service.blueprint.reflect.Metadata;
 
-
 public class EndpointDefinitionParser extends AbstractBeanDefinitionParser {
     
     public Metadata parse(Element element, ParserContext context) {
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientDefinitionParser.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientDefinitionParser.java
index 0fb1079..52351bc 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientDefinitionParser.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/blueprint/RsClientDefinitionParser.java
@@ -32,7 +32,6 @@
 import org.apache.cxf.jaxrs.utils.ResourceUtils;
 import org.osgi.service.blueprint.reflect.Metadata;
 
-
 public class RsClientDefinitionParser extends AbstractBeanDefinitionParser {
 
     public Metadata parse(Element element, ParserContext context) {
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/CxfMessageSoapHeaderOutInterceptor.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/CxfMessageSoapHeaderOutInterceptor.java
index eccacde..39a8aff 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/CxfMessageSoapHeaderOutInterceptor.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/CxfMessageSoapHeaderOutInterceptor.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.cxf.interceptors;
 
-
 import javax.xml.soap.SOAPMessage;
 
 import org.apache.cxf.binding.soap.SoapMessage;
@@ -41,4 +40,4 @@
         }
 
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/OneWayOutgoingChainInterceptor.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/OneWayOutgoingChainInterceptor.java
index ce4d179..a699467 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/OneWayOutgoingChainInterceptor.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/OneWayOutgoingChainInterceptor.java
@@ -24,7 +24,6 @@
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
 
-
 public class OneWayOutgoingChainInterceptor extends AbstractPhaseInterceptor<Message> {
     
     public OneWayOutgoingChainInterceptor() {
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageWSDLGetInterceptor.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageWSDLGetInterceptor.java
index cb98f95..74fc27a 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageWSDLGetInterceptor.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageWSDLGetInterceptor.java
@@ -35,7 +35,6 @@
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.model.EndpointInfo;
 
-
 /**
  * Just copy the from WSDLGetInterceptor to provide backward compatible support for 2.7.x
  */
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageWSDLGetOutInterceptor.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageWSDLGetOutInterceptor.java
index cc006c8..93ca396 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageWSDLGetOutInterceptor.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageWSDLGetOutInterceptor.java
@@ -29,7 +29,6 @@
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.staxutils.StaxUtils;
 
-
 public class RawMessageWSDLGetOutInterceptor extends AbstractPhaseInterceptor<Message> {
     public static final RawMessageWSDLGetOutInterceptor INSTANCE = new RawMessageWSDLGetOutInterceptor();
 
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java
index 84f1331..f45d6df 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java
@@ -23,6 +23,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+
 import javax.net.ssl.HostnameVerifier;
 
 import org.apache.camel.Component;
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultModelResource.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultModelResource.java
index 524a5df..4387c96 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultModelResource.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultModelResource.java
@@ -20,6 +20,7 @@
 import javax.ws.rs.core.Response;
 
 import org.apache.cxf.jaxrs.ext.DefaultMethod;
+
 /**
  * Default JAX-RS resource that may be used 
  * to support document-only CXFRS consumers  
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/SubResourceClassInvocationHandler.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/SubResourceClassInvocationHandler.java
index da604e8..2835e9a 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/SubResourceClassInvocationHandler.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/SubResourceClassInvocationHandler.java
@@ -22,6 +22,7 @@
 import java.lang.reflect.Proxy;
 
 import org.apache.cxf.jaxrs.utils.ResourceUtils;
+
 // This class only return the sub class instance
 public class SubResourceClassInvocationHandler implements InvocationHandler {
 
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/AbstractCxfBeanDefinitionParser.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/AbstractCxfBeanDefinitionParser.java
index 1368ab5..d81d07e 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/AbstractCxfBeanDefinitionParser.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/AbstractCxfBeanDefinitionParser.java
@@ -30,7 +30,6 @@
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.ParserContext;
 
-
 public abstract class AbstractCxfBeanDefinitionParser extends AbstractBeanDefinitionParser {
     
     /**
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java
index 10415fd..29a7716 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanDefinitionParser.java
@@ -29,7 +29,6 @@
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.ParserContext;
 
-
 public class CxfEndpointBeanDefinitionParser extends AbstractCxfBeanDefinitionParser {
 
     @Override
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfRsClientFactoryBeanDefinitionParser.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfRsClientFactoryBeanDefinitionParser.java
index 378af13..205c424 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfRsClientFactoryBeanDefinitionParser.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfRsClientFactoryBeanDefinitionParser.java
@@ -26,7 +26,6 @@
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.ParserContext;
 
-
 public class CxfRsClientFactoryBeanDefinitionParser extends AbstractCxfBeanDefinitionParser {
 
     public CxfRsClientFactoryBeanDefinitionParser() {
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfRsServerFactoryBeanDefinitionParser.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfRsServerFactoryBeanDefinitionParser.java
index 5b1487f..866551a 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfRsServerFactoryBeanDefinitionParser.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/spring/CxfRsServerFactoryBeanDefinitionParser.java
@@ -26,7 +26,6 @@
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.ParserContext;
 
-
 public class CxfRsServerFactoryBeanDefinitionParser extends AbstractCxfBeanDefinitionParser  {
 
     public CxfRsServerFactoryBeanDefinitionParser() {
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/DataInInterceptor.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/DataInInterceptor.java
index a94342a..bd8b0e1 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/DataInInterceptor.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/DataInInterceptor.java
@@ -32,7 +32,6 @@
 import org.apache.cxf.staxutils.DepthXMLStreamReader;
 import org.apache.cxf.staxutils.StaxUtils;
 
-
 public class DataInInterceptor extends AbstractInDatabindingInterceptor {
     // CXF requires JUL for Message
     private static final Logger JUL_LOG = LogUtils.getL7dLogger(DataInInterceptor.class);
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/ReaderInputStream.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/ReaderInputStream.java
index 4086339..c2890df 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/ReaderInputStream.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/util/ReaderInputStream.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf.util;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterEnrichTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterEnrichTest.java
index 46bd78f..48399ff 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterEnrichTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterEnrichTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.hello_world_soap_http.GreeterImpl;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterRouterTest.java
index 9f4b1ed..3b8746d 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFGreeterRouterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.hello_world_soap_http.GreeterImpl;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyTest.java
index 39f93bd..c4b4bd7 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import java.net.URL;
 
 import javax.xml.namespace.QName;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerFaultTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerFaultTest.java
index 652b01b..9518f8a 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerFaultTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerFaultTest.java
@@ -21,7 +21,6 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.wsdl_first.UnknownPersonFault;
 
-
 // SET the fault message directly on the out message
 public class CxfConsumerFaultTest extends CxfConsumerPayloadFaultTest {
     
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerMessageTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerMessageTest.java
index e5919e6..6bb36e1 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerMessageTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerMessageTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.cxf;
 
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayLoadConvertorTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayLoadConvertorTest.java
index 4aa2bad..3a1a23d 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayLoadConvertorTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayLoadConvertorTest.java
@@ -28,8 +28,6 @@
 import org.apache.camel.converter.jaxp.XmlConverter;
 import org.apache.cxf.binding.soap.SoapHeader;
 
-
-
 public class CxfConsumerPayLoadConvertorTest extends CxfConsumerPayloadTest {
     
     @Override
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayLoadMarshalFaultTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayLoadMarshalFaultTest.java
index 477e401..403a067 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayLoadMarshalFaultTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayLoadMarshalFaultTest.java
@@ -30,8 +30,6 @@
 import org.apache.cxf.binding.soap.SoapFault;
 import org.apache.cxf.staxutils.StaxUtils;
 
-
-
 public class CxfConsumerPayLoadMarshalFaultTest extends CxfConsumerPayloadFaultTest {
     
     protected static final String DETAILS = "<detail></detail>";
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadFaultCauseEnabledTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadFaultCauseEnabledTest.java
index b18dbd8..62108a5 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadFaultCauseEnabledTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadFaultCauseEnabledTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.cxf;
 
-
 import java.net.URL;
 import java.util.ResourceBundle;
 
@@ -44,8 +43,6 @@
 import org.springframework.context.support.AbstractXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
-
 /**
  * Unit test to verify CxfConsumer to generate SOAP fault in PAYLOAD mode with the exception cause returned
  */
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadFaultTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadFaultTest.java
index 0820ba8..31aca67 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadFaultTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadFaultTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.cxf;
 
-
 import java.io.StringReader;
 import java.net.URL;
 
@@ -41,8 +40,6 @@
 import org.apache.cxf.staxutils.StaxUtils;
 import org.junit.Test;
 
-
-
 /**
  * Unit test to verify CxfConsumer to generate SOAP fault in PAYLOAD mode
  */
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadTest.java
index 6c4e9f7..7110c71 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadTest.java
@@ -31,7 +31,6 @@
 import org.apache.camel.converter.jaxp.XmlConverter;
 import org.apache.cxf.binding.soap.SoapHeader;
 
-
 public class CxfConsumerPayloadTest extends CxfConsumerMessageTest {
         
     protected static final String ECHO_RESPONSE = "<ns1:echoResponse xmlns:ns1=\"http://cxf.component.camel.apache.org/\">"
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadXPathClientServerTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadXPathClientServerTest.java
index 14488f6..cae2977 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadXPathClientServerTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadXPathClientServerTest.java
@@ -39,8 +39,6 @@
 import org.apache.cxf.frontend.ClientProxyFactoryBean;
 import org.junit.Test;
 
-
-
 public class CxfConsumerPayloadXPathClientServerTest extends CamelTestSupport {
     private static final String ECHO_RESPONSE = "<ns1:echoResponse xmlns:ns1=\"http://cxf.component.camel.apache.org/\">"
         + "<return xmlns=\"http://cxf.component.camel.apache.org/\">echo Hello World!</return>"
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerProviderTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerProviderTest.java
index b1bb6b3..9f3d83f 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerProviderTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerProviderTest.java
@@ -26,7 +26,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 public class CxfConsumerProviderTest extends CamelTestSupport {
     
     
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerStreamCacheTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerStreamCacheTest.java
index 0a6244f..38fc677 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerStreamCacheTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerStreamCacheTest.java
@@ -28,7 +28,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 //Modified from https://issues.apache.org/jira/secure/attachment/12730161/0001-CAMEL-8419-Camel-StreamCache-does-not-work-with-CXF-.patch
 public class CxfConsumerStreamCacheTest extends CamelTestSupport {
     
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerTest.java
index e520e11..bfd5893 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerTest.java
@@ -34,7 +34,6 @@
 import org.apache.cxf.frontend.ClientProxyFactoryBean;
 import org.junit.Test;
 
-
 public class CxfConsumerTest extends CamelTestSupport {
     protected static final String SIMPLE_ENDPOINT_ADDRESS = "http://localhost:"
         + CXFTestSupport.getPort1() + "/CxfConsumerTest/test";
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerWithTryCatchTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerWithTryCatchTest.java
index 46771c4..b214d2b 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerWithTryCatchTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerWithTryCatchTest.java
@@ -25,7 +25,6 @@
 import org.apache.camel.component.cxf.common.message.CxfConstants;
 import org.junit.Test;
 
-
 public class CxfConsumerWithTryCatchTest extends CxfConsumerTest {
    
     private static final String ECHO_OPERATION = "echo";
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfCustomerStartStopTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfCustomerStartStopTest.java
index 4135101..58b6738 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfCustomerStartStopTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfCustomerStartStopTest.java
@@ -27,6 +27,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
+
 @org.junit.Ignore
 public class CxfCustomerStartStopTest extends Assert {
     static final int PORT1 = CXFTestSupport.getPort1();  
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfDispatchMessageTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfDispatchMessageTest.java
index 8e64660..0b4c3b1 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfDispatchMessageTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfDispatchMessageTest.java
@@ -28,9 +28,6 @@
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
-
-
 /**
  * Unit test for setting arbitrary payload in MESSAGE mode
  */
@@ -102,4 +99,4 @@
         }
         return value;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfDispatchTestSupport.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfDispatchTestSupport.java
index cc85e17..5d427a5 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfDispatchTestSupport.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfDispatchTestSupport.java
@@ -28,7 +28,6 @@
 import org.junit.After;
 import org.junit.Before;
 
-
 /**
  * Base class for testing arbitrary payload
  */
@@ -90,4 +89,4 @@
         return documentBuilderFactory;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterCXFMessageWithoutSEIRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterCXFMessageWithoutSEIRouterTest.java
index ab8976b..2698e9d 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterCXFMessageWithoutSEIRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterCXFMessageWithoutSEIRouterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.hello_world_soap_http.GreeterImpl;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterConverterRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterConverterRouterTest.java
index 77916ee..32d362f 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterConverterRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterConverterRouterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.hello_world_soap_http.GreeterImpl;
@@ -22,7 +23,6 @@
 import org.junit.BeforeClass;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class CxfGreeterConverterRouterTest extends AbstractCXFGreeterRouterTest {
     protected static Endpoint endpoint;
     @AfterClass
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterMessageCamelHttpRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterMessageCamelHttpRouterTest.java
index 6ab4e14..eb443cb 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterMessageCamelHttpRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterMessageCamelHttpRouterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterMessageRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterMessageRouterTest.java
index 6033575..6e1eeeb 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterMessageRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterMessageRouterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterPayLoadRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterPayLoadRouterTest.java
index 2bc7546..457d3b9 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterPayLoadRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterPayLoadRouterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterPayLoadWithFeatureRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterPayLoadWithFeatureRouterTest.java
index 8f9d3e8..56e617d91 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterPayLoadWithFeatureRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterPayLoadWithFeatureRouterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.hello_world_soap_http.GreeterImpl;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterWSDLOnlyRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterWSDLOnlyRouterTest.java
index a602964..66ea8e2 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterWSDLOnlyRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfGreeterWSDLOnlyRouterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfJavaOnlyCamelContextAwareTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfJavaOnlyCamelContextAwareTest.java
index 57b7d5c..4e38bce 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfJavaOnlyCamelContextAwareTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfJavaOnlyCamelContextAwareTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 /**
  * A unit test for java only CXF in payload mode
  */
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfJavaOnlyPayloadModeTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfJavaOnlyPayloadModeTest.java
index 13af072..7c137f5 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfJavaOnlyPayloadModeTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfJavaOnlyPayloadModeTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import org.w3c.dom.Document;
 
 import org.apache.camel.Exchange;
@@ -23,7 +24,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 /**
  * A unit test for java only CXF in payload mode
  */
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfMessageHeaderTimeoutTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfMessageHeaderTimeoutTest.java
index 231a4b4..9fb7eeb 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfMessageHeaderTimeoutTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfMessageHeaderTimeoutTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import java.net.SocketTimeoutException;
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfMixedModeRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfMixedModeRouterTest.java
index 3d71ea2..9b8b87f 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfMixedModeRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfMixedModeRouterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
@@ -40,7 +41,6 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-
 public class CxfMixedModeRouterTest extends CamelTestSupport {
     protected static int port1 = CXFTestSupport.getPort1(); 
     protected static int port2 = CXFTestSupport.getPort2(); 
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfOneWayRouteTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfOneWayRouteTest.java
index 788eaf0..4bb9649 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfOneWayRouteTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfOneWayRouteTest.java
@@ -33,7 +33,6 @@
 import org.springframework.context.support.AbstractXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 /**
  * Tests a cxf routing scenario from an oneway cxf EP to a file EP to not forward the old input
  * back to the oneway cxf EP.
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadBareSoapTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadBareSoapTest.java
index ed1d828..206713e 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadBareSoapTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadBareSoapTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.jws.WebService;
@@ -29,7 +30,6 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-
 public class CxfPayLoadBareSoapTest extends CamelTestSupport {
 
     private static final int PORT = AvailablePortFinder.getNextAvailable();
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageRouterAddressOverrideTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageRouterAddressOverrideTest.java
index 2459a48..7819138 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageRouterAddressOverrideTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageRouterAddressOverrideTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.converter.jaxp.XmlConverter;
 
-
 /**
  * A unit test for testing reading SOAP body with address override in PAYLOAD mode.
  */
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageRouterTest.java
index 1e7bf58..14df552 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageRouterTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.converter.jaxp.XmlConverter;
 
-
 /**
  * A unit test for testing reading SOAP body in PAYLOAD mode.
  */
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageXmlBindingRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageXmlBindingRouterTest.java
index 1f6e656..330f5cb 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageXmlBindingRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadMessageXmlBindingRouterTest.java
@@ -41,7 +41,6 @@
 import org.springframework.context.support.AbstractXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class CxfPayLoadMessageXmlBindingRouterTest extends CamelTestSupport {
     
     protected static final String ROUTER_ADDRESS = "http://localhost:" 
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadSoapHeaderTestAbstract.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadSoapHeaderTestAbstract.java
index ad6aadd..f936140 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadSoapHeaderTestAbstract.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadSoapHeaderTestAbstract.java
@@ -21,7 +21,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
 
-
 public class CxfPayLoadSoapHeaderTestAbstract extends CamelTestSupport {
     static int port1 = CXFTestSupport.getPort1(); 
     static int port2 = CXFTestSupport.getPort2(); 
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayloadProviderRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayloadProviderRouterTest.java
index fe132a6..f6f8edb 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayloadProviderRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayloadProviderRouterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.namespace.QName;
 import javax.xml.ws.Endpoint;
 import javax.xml.ws.Service;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayloadWsdlWithoutSEITest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayloadWsdlWithoutSEITest.java
index b046f87..2a9d927 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayloadWsdlWithoutSEITest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayloadWsdlWithoutSEITest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerRouterTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerRouterTest.java
index b106545..584fec79 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerRouterTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerRouterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerSynchronousFalseTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerSynchronousFalseTest.java
index 95eec6c..4a0fab2 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerSynchronousFalseTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerSynchronousFalseTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerSynchronousTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerSynchronousTest.java
index c4b994c..159238a 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerSynchronousTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerSynchronousTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfRawMessageRouterAddressOverrideTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfRawMessageRouterAddressOverrideTest.java
index 1110467..78b2de1 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfRawMessageRouterAddressOverrideTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfRawMessageRouterAddressOverrideTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.cxf;
 
-
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfSoapMessageProviderTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfSoapMessageProviderTest.java
index d10b620..0d22e90 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfSoapMessageProviderTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfSoapMessageProviderTest.java
@@ -29,7 +29,6 @@
 import org.junit.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class CxfSoapMessageProviderTest extends CamelSpringTestSupport {
 
     static int port = CXFTestSupport.getPort1();
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfSpringCustomizedExceptionTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfSpringCustomizedExceptionTest.java
index 5816945..13807d5 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfSpringCustomizedExceptionTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfSpringCustomizedExceptionTest.java
@@ -36,7 +36,6 @@
 import org.springframework.context.support.AbstractXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class CxfSpringCustomizedExceptionTest extends CamelTestSupport  {
     private static final String EXCEPTION_MESSAGE = "This is an exception test message";
     private static final String DETAIL_TEXT = "This is a detail text node";
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfTimeoutTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfTimeoutTest.java
index 9670b36..b8b0d9e 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfTimeoutTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfTimeoutTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import java.net.SocketTimeoutException;
 import java.util.ArrayList;
 import java.util.List;
@@ -137,4 +138,4 @@
         
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfWsdlFirstPayloadModeTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfWsdlFirstPayloadModeTest.java
index b72a79e..ed3993e 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfWsdlFirstPayloadModeTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfWsdlFirstPayloadModeTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.camel.wsdl_first.JaxwsTestHandler;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfWsdlFirstProcessorTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfWsdlFirstProcessorTest.java
index 92700fb..8c01ffc 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfWsdlFirstProcessorTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfWsdlFirstProcessorTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.camel.wsdl_first.JaxwsTestHandler;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfWsdlFirstTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfWsdlFirstTest.java
index 83b08c6..860aa6b 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfWsdlFirstTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfWsdlFirstTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import javax.xml.ws.Endpoint;
 
 import org.apache.camel.wsdl_first.PersonImpl;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java
index a610123..45ac8ea 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java
@@ -24,6 +24,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
+
 import javax.activation.DataHandler;
 import javax.activation.FileDataSource;
 import javax.xml.parsers.DocumentBuilder;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/FailOverFeatureTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/FailOverFeatureTest.java
index 43c4e19..5e62133 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/FailOverFeatureTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/FailOverFeatureTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/HelloServiceImpl.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/HelloServiceImpl.java
index 1357cad..f6ff857 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/HelloServiceImpl.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/HelloServiceImpl.java
@@ -21,7 +21,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class HelloServiceImpl implements HelloService {
     private static final Logger LOG = LoggerFactory.getLogger(HelloServiceImpl.class);
     private int invocationCount;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/LoadDistributorFeatureTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/LoadDistributorFeatureTest.java
index b7fb1fa..382ebbd 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/LoadDistributorFeatureTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/LoadDistributorFeatureTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/LoggingInterceptorInMessageModeTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/LoggingInterceptorInMessageModeTest.java
index ed19b1f..e1ebc03 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/LoggingInterceptorInMessageModeTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/LoggingInterceptorInMessageModeTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf;
+
 import java.io.PrintWriter;
 import java.io.StringWriter;
 
@@ -35,8 +36,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-
-
 @ContextConfiguration
 public class LoggingInterceptorInMessageModeTest extends AbstractJUnit4SpringContextTests {
     protected static int port1 = CXFTestSupport.getPort1(); 
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/RouteBuilderCxfTracer.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/RouteBuilderCxfTracer.java
index 404bb01..715ec36 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/RouteBuilderCxfTracer.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/RouteBuilderCxfTracer.java
@@ -23,7 +23,6 @@
 import org.apache.camel.non_wrapper.types.GetPersonResponse;
 import org.apache.cxf.message.MessageContentsList;
 
-
 public class RouteBuilderCxfTracer extends RouteBuilder {
     @Override
     public void configure() throws Exception {        
@@ -74,4 +73,4 @@
             e.getOut().setBody(mclOut, MessageContentsList.class);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/SoapTargetBean.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/SoapTargetBean.java
index 0a76b37..fe72f06 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/SoapTargetBean.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/SoapTargetBean.java
@@ -28,7 +28,6 @@
 
 import org.apache.cxf.staxutils.StaxUtils;
 
-
 public class SoapTargetBean {
     private static QName sayHi = new QName("http://apache.org/hello_world_soap_http/types", "sayHi");
     private static QName greetMe = new QName("http://apache.org/hello_world_soap_http/types", "greetMe");
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/MyCxfCustomerConverter.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/MyCxfCustomerConverter.java
index f0324c3..6b35a21 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/MyCxfCustomerConverter.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/converter/MyCxfCustomerConverter.java
@@ -24,7 +24,6 @@
 import org.apache.camel.component.cxf.CxfPayload;
 import org.apache.camel.converter.jaxp.XmlConverter;
 
-
 // This converter is used to show how to override the CxfPayload default toString converter
 @Converter 
 public final class MyCxfCustomerConverter {
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java
index 9d876c3..78154ca 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java
@@ -20,6 +20,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+
 import javax.servlet.ServletRequest;
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.WebApplicationException;
@@ -53,7 +54,6 @@
 import org.apache.http.util.EntityUtils;
 import org.junit.Test;
 
-
 public class CxfRsConsumerTest extends CamelTestSupport {
     private static final String PUT_REQUEST = "<Customer><name>Mary</name><id>123</id></Customer>";
     private static final String CXT = CXFTestSupport.getPort1() + "/CxfRsConsumerTest";
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSslAsyncProducerTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSslAsyncProducerTest.java
index cbbcefc..5ce0fc5 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSslAsyncProducerTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSslAsyncProducerTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.cxf.jaxrs;
 
-
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Message;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsStreamCacheTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsStreamCacheTest.java
index 567e655..7b78d84 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsStreamCacheTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsStreamCacheTest.java
@@ -32,7 +32,6 @@
 import org.apache.http.util.EntityUtils;
 import org.junit.Test;
 
-
 public class CxfRsStreamCacheTest extends CamelTestSupport {
     private static final String PUT_REQUEST = "<Customer><name>Mary</name><id>123</id></Customer>";
     private static final String CONTEXT = "/CxfRsStreamCacheTest";
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/simplebinding/CxfRsConsumerSimpleBindingTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/simplebinding/CxfRsConsumerSimpleBindingTest.java
index 48172d3..35388d0 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/simplebinding/CxfRsConsumerSimpleBindingTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/simplebinding/CxfRsConsumerSimpleBindingTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf.jaxrs.simplebinding;
+
 import java.io.File;
 import java.io.InputStream;
 import java.io.StringReader;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceResource.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceResource.java
index 1381fb1..8950f21 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceResource.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceResource.java
@@ -24,7 +24,6 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.Response;
 
-
 // START SNIPPET: example
 @Path("/customerservice/")
 public interface CustomerServiceResource {
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerPayloadModeTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerPayloadModeTest.java
index 62a1226..2e02472 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerPayloadModeTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerPayloadModeTest.java
@@ -49,7 +49,6 @@
 
 import static org.junit.Assert.assertEquals;
 
-
 /**
  * Unit test for exercising MTOM feature of a CxfConsumer in PAYLOAD mode
  */
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerTest.java
index dc72a58..621a8de 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerTest.java
@@ -36,7 +36,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 public class CxfMtomConsumerTest extends CamelTestSupport {
     protected static final String MTOM_ENDPOINT_ADDRESS = "http://localhost:"
         + CXFTestSupport.getPort1() + "/CxfMtomConsumerTest/jaxws-mtom/hello";
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomDisabledProducerPayloadModeTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomDisabledProducerPayloadModeTest.java
index d2671e5..c581299 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomDisabledProducerPayloadModeTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomDisabledProducerPayloadModeTest.java
@@ -51,7 +51,6 @@
 import org.junit.Test;
 import org.springframework.test.context.ContextConfiguration;
 
-
 /**
  * 
  * Unit test for exercising SOAP with Attachment (SwA) feature of a CxfProducer in PAYLOAD mode.  
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomProducerPayloadModeTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomProducerPayloadModeTest.java
index d451aed..e2709cf 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomProducerPayloadModeTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomProducerPayloadModeTest.java
@@ -55,7 +55,6 @@
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 
-
 /**
  * Unit test for exercising MTOM feature of a CxfProducer in PAYLOAD mode
  */
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomRouterCxfMessageModeTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomRouterCxfMessageModeTest.java
index 46c62ac..f100f0e 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomRouterCxfMessageModeTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomRouterCxfMessageModeTest.java
@@ -26,7 +26,6 @@
 
 import static org.junit.Assert.assertNotNull;
 
-
 @ContextConfiguration
 public class CxfMtomRouterCxfMessageModeTest extends CxfMtomRouterPayloadModeTest {
     @Override
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomRouterRawModeTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomRouterRawModeTest.java
index ffc25fa..b2fa27e 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomRouterRawModeTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomRouterRawModeTest.java
@@ -26,7 +26,6 @@
 
 import static org.junit.Assert.assertNotNull;
 
-
 @ContextConfiguration
 public class CxfMtomRouterRawModeTest extends CxfMtomRouterPayloadModeTest {
     @Override
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/noparam/NoParamTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/noparam/NoParamTest.java
index 94c61fd..96b9d3e6 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/noparam/NoParamTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/noparam/NoParamTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf.noparam;
+
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.component.cxf.CXFTestSupport;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/HeaderTesterImpl.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/HeaderTesterImpl.java
index 43ae69b..de90b05 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/HeaderTesterImpl.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/HeaderTesterImpl.java
@@ -35,8 +35,6 @@
 import org.apache.cxf.jaxb.JAXBDataBinding;
 import org.apache.cxf.outofband.header.OutofBandHeader;
 
-
-
 @javax.jws.WebService(serviceName = "HeaderService",
                       targetNamespace = "http://apache.org/camel/cxf/soap/headers",
                       endpointInterface = "org.apache.camel.component.cxf.soap.headers.HeaderTester")
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/HeaderTesterWithInsertionImpl.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/HeaderTesterWithInsertionImpl.java
index 411c5bd..63825fc 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/HeaderTesterWithInsertionImpl.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/HeaderTesterWithInsertionImpl.java
@@ -29,7 +29,6 @@
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.outofband.header.OutofBandHeader;
 
-
 public class HeaderTesterWithInsertionImpl extends HeaderTesterImpl {
     
     @Override
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/FileToCxfMessageDataFormatTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/FileToCxfMessageDataFormatTest.java
index 8bebdf3..f958b5f 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/FileToCxfMessageDataFormatTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/FileToCxfMessageDataFormatTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf.spring;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.component.cxf.CXFTestSupport;
 import org.apache.camel.component.cxf.HelloService;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/ssl/SslTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/ssl/SslTest.java
index 675d592..ed08554 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/ssl/SslTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/ssl/SslTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf.ssl;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -95,4 +96,4 @@
         return new ClassPathXmlApplicationContext("org/apache/camel/component/cxf/CxfSslContext.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfUtilsTestHelper.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfUtilsTestHelper.java
index 42f3ea0..c9c49ce 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfUtilsTestHelper.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/util/CxfUtilsTestHelper.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsa/WSAddressingTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsa/WSAddressingTest.java
index ac85342..35f5d5b 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsa/WSAddressingTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsa/WSAddressingTest.java
@@ -42,6 +42,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+
 @ContextConfiguration
 public class WSAddressingTest extends AbstractJUnit4SpringContextTests {
     protected static int port0 = CXFTestSupport.getPort1(); 
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsdl/OrderTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsdl/OrderTest.java
index ef377ca..1dd454b 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsdl/OrderTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsdl/OrderTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf.wsdl;
+
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.LineNumberReader;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsrm/WSRMTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsrm/WSRMTest.java
index db20302..4d2509b 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsrm/WSRMTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wsrm/WSRMTest.java
@@ -30,6 +30,7 @@
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 
 import static org.junit.Assert.assertEquals;
+
 @ContextConfiguration
 public class WSRMTest extends AbstractJUnit4SpringContextTests {
     
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/camel/WSSecurityRouteTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/camel/WSSecurityRouteTest.java
index 7d36242..5f456c5 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/camel/WSSecurityRouteTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/camel/WSSecurityRouteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.cxf.wssecurity.camel;
+
 import java.net.URL;
 
 import javax.xml.ws.BindingProvider;
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/Client.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/Client.java
index f8ed03d..b8303ed 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/Client.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/Client.java
@@ -24,7 +24,6 @@
 import org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor;
 import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
 
-
 public final class Client {
 
     //private static final String WSU_NS
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/UTPasswordCallback.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/UTPasswordCallback.java
index 422bf19..8955b14 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/UTPasswordCallback.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/client/UTPasswordCallback.java
@@ -24,8 +24,6 @@
 import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.callback.UnsupportedCallbackException;
 
-
-
 public class UTPasswordCallback implements CallbackHandler {
 
     private Map<String, String> passwords =
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/server/UTPasswordCallback.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/server/UTPasswordCallback.java
index c00c018..26a1f64 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/server/UTPasswordCallback.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/wssecurity/server/UTPasswordCallback.java
@@ -24,8 +24,6 @@
 import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.callback.UnsupportedCallbackException;
 
-
-
 public class UTPasswordCallback implements CallbackHandler {
 
     private Map<String, String> passwords =
diff --git a/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/DebeziumConstants.java b/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/DebeziumConstants.java
index 15df7a2..718866c 100644
--- a/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/DebeziumConstants.java
+++ b/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/DebeziumConstants.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.debezium;
 
 import io.debezium.relational.history.FileDatabaseHistory;
-
 import org.apache.kafka.connect.storage.FileOffsetBackingStore;
 
 public final class DebeziumConstants {
diff --git a/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/DebeziumConsumer.java b/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/DebeziumConsumer.java
index 31a2d43..b971dab 100644
--- a/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/DebeziumConsumer.java
+++ b/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/DebeziumConsumer.java
@@ -19,7 +19,6 @@
 import java.util.concurrent.ExecutorService;
 
 import io.debezium.embedded.EmbeddedEngine;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.debezium.configuration.EmbeddedDebeziumConfiguration;
diff --git a/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/DebeziumEndpoint.java b/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/DebeziumEndpoint.java
index f5ccabb..cb468e4 100644
--- a/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/DebeziumEndpoint.java
+++ b/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/DebeziumEndpoint.java
@@ -20,7 +20,6 @@
 import java.util.concurrent.ExecutorService;
 
 import io.debezium.data.Envelope;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -137,4 +136,4 @@
     private boolean isSchemaAStructSchema(final Schema schema) {
         return schema != null && schema.type().equals(Schema.Type.STRUCT);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/configuration/EmbeddedDebeziumConfiguration.java b/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/configuration/EmbeddedDebeziumConfiguration.java
index f9fa0bd..9ea17c5 100644
--- a/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/configuration/EmbeddedDebeziumConfiguration.java
+++ b/components/camel-debezium-common/camel-debezium-common-component/src/main/java/org/apache/camel/component/debezium/configuration/EmbeddedDebeziumConfiguration.java
@@ -19,7 +19,6 @@
 import io.debezium.config.Configuration;
 import io.debezium.config.Field;
 import io.debezium.embedded.EmbeddedEngine;
-
 import io.debezium.embedded.spi.OffsetCommitPolicy;
 import org.apache.camel.component.debezium.DebeziumConstants;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/DebeziumConsumerTest.java b/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/DebeziumConsumerTest.java
index 54bd047..246a93b 100644
--- a/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/DebeziumConsumerTest.java
+++ b/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/DebeziumConsumerTest.java
@@ -25,7 +25,6 @@
 
 import io.debezium.util.Collect;
 import io.debezium.util.IoUtil;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.RoutesBuilder;
@@ -197,4 +196,4 @@
     private String generateLine(int lineNumber) {
         return "message-" + lineNumber;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/DebeziumEndpointTest.java b/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/DebeziumEndpointTest.java
index bbdaf9f..19b5613 100644
--- a/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/DebeziumEndpointTest.java
+++ b/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/DebeziumEndpointTest.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import io.debezium.data.Envelope;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -289,4 +288,4 @@
         assertNotNull(schema);
         assertFalse(schema.fields().isEmpty());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/DebeziumTypeConverterTest.java b/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/DebeziumTypeConverterTest.java
index e5ea86a..cae63be 100644
--- a/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/DebeziumTypeConverterTest.java
+++ b/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/DebeziumTypeConverterTest.java
@@ -60,4 +60,4 @@
 
         return value;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/configuration/EmbeddedDebeziumConfigurationTest.java b/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/configuration/EmbeddedDebeziumConfigurationTest.java
index 867842f..30d061d 100644
--- a/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/configuration/EmbeddedDebeziumConfigurationTest.java
+++ b/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/configuration/EmbeddedDebeziumConfigurationTest.java
@@ -60,4 +60,4 @@
         assertTrue(configuration.validateConfiguration().isValid());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/configuration/FileConnectorEmbeddedDebeziumConfiguration.java b/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/configuration/FileConnectorEmbeddedDebeziumConfiguration.java
index f69c269..c3ef848 100644
--- a/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/configuration/FileConnectorEmbeddedDebeziumConfiguration.java
+++ b/components/camel-debezium-common/camel-debezium-common-component/src/test/java/org/apache/camel/component/debezium/configuration/FileConnectorEmbeddedDebeziumConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.debezium.configuration;
 
 import java.nio.file.Path;
+
 import io.debezium.config.Configuration;
 import org.apache.kafka.connect.file.FileStreamSourceConnector;
 
diff --git a/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/GenerateConnectorConfigMojoTest.java b/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/GenerateConnectorConfigMojoTest.java
index 9683644..d3f816c 100644
--- a/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/GenerateConnectorConfigMojoTest.java
+++ b/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/GenerateConnectorConfigMojoTest.java
@@ -58,4 +58,4 @@
         assertTrue(connectorConfigFileAsText.contains("MySqlConnectorEmbeddedDebeziumConfiguration"));
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/config/ConnectorConfigFieldTest.java b/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/config/ConnectorConfigFieldTest.java
index c4ba340..b46f79f 100644
--- a/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/config/ConnectorConfigFieldTest.java
+++ b/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/config/ConnectorConfigFieldTest.java
@@ -60,4 +60,4 @@
         assertFalse(connectorConfigField.isDeprecated());
         assertTrue(connectorConfigField.isRequired());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/config/ConnectorConfigFieldsFactoryTest.java b/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/config/ConnectorConfigFieldsFactoryTest.java
index 1d757ba..675dba8 100644
--- a/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/config/ConnectorConfigFieldsFactoryTest.java
+++ b/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/config/ConnectorConfigFieldsFactoryTest.java
@@ -28,7 +28,6 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-
 public class ConnectorConfigFieldsFactoryTest {
 
     @Test
@@ -60,4 +59,4 @@
         assertTrue(connectorConfigField2.isDeprecated());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/config/ConnectorConfigGeneratorTest.java b/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/config/ConnectorConfigGeneratorTest.java
index 858e8c3..cb87ae1 100644
--- a/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/config/ConnectorConfigGeneratorTest.java
+++ b/components/camel-debezium-common/camel-debezium-maven-plugin/src/test/java/org/apache/camel/maven/config/ConnectorConfigGeneratorTest.java
@@ -74,4 +74,4 @@
             }
         });
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-mongodb/src/test/java/org/apache/camel/component/debezium/DebeziumMongodbComponentTest.java b/components/camel-debezium-mongodb/src/test/java/org/apache/camel/component/debezium/DebeziumMongodbComponentTest.java
index bdc498b..1ad1805 100644
--- a/components/camel-debezium-mongodb/src/test/java/org/apache/camel/component/debezium/DebeziumMongodbComponentTest.java
+++ b/components/camel-debezium-mongodb/src/test/java/org/apache/camel/component/debezium/DebeziumMongodbComponentTest.java
@@ -116,4 +116,4 @@
         final DebeziumEndpoint debeziumEndpoint = debeziumComponent.createEndpoint(uri, remaining,
                 Collections.emptyMap());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-mongodb/src/test/java/org/apache/camel/component/debezium/configuration/MongodbConnectorEmbeddedDebeziumConfigurationTest.java b/components/camel-debezium-mongodb/src/test/java/org/apache/camel/component/debezium/configuration/MongodbConnectorEmbeddedDebeziumConfigurationTest.java
index 394fd96..ac8136e 100644
--- a/components/camel-debezium-mongodb/src/test/java/org/apache/camel/component/debezium/configuration/MongodbConnectorEmbeddedDebeziumConfigurationTest.java
+++ b/components/camel-debezium-mongodb/src/test/java/org/apache/camel/component/debezium/configuration/MongodbConnectorEmbeddedDebeziumConfigurationTest.java
@@ -86,4 +86,4 @@
         assertEquals("/database_history/file", configuration.getDatabaseHistoryFileFilename());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-mysql/src/test/java/org/apache/camel/component/debezium/DebeziumMySqlComponentTest.java b/components/camel-debezium-mysql/src/test/java/org/apache/camel/component/debezium/DebeziumMySqlComponentTest.java
index 3f6b87f..65b1951 100644
--- a/components/camel-debezium-mysql/src/test/java/org/apache/camel/component/debezium/DebeziumMySqlComponentTest.java
+++ b/components/camel-debezium-mysql/src/test/java/org/apache/camel/component/debezium/DebeziumMySqlComponentTest.java
@@ -118,4 +118,4 @@
         final DebeziumEndpoint debeziumEndpoint = debeziumComponent.createEndpoint(uri, remaining,
                 Collections.emptyMap());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-mysql/src/test/java/org/apache/camel/component/debezium/configuration/MySqlConnectorEmbeddedDebeziumConfigurationTest.java b/components/camel-debezium-mysql/src/test/java/org/apache/camel/component/debezium/configuration/MySqlConnectorEmbeddedDebeziumConfigurationTest.java
index 9b86e18..9c387f0 100644
--- a/components/camel-debezium-mysql/src/test/java/org/apache/camel/component/debezium/configuration/MySqlConnectorEmbeddedDebeziumConfigurationTest.java
+++ b/components/camel-debezium-mysql/src/test/java/org/apache/camel/component/debezium/configuration/MySqlConnectorEmbeddedDebeziumConfigurationTest.java
@@ -96,4 +96,4 @@
         assertEquals("/database_history/file", configuration.getDatabaseHistoryFileFilename());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-postgres/src/test/java/org/apache/camel/component/debezium/DebeziumPostgresComponentTest.java b/components/camel-debezium-postgres/src/test/java/org/apache/camel/component/debezium/DebeziumPostgresComponentTest.java
index b68c490..76878ce 100644
--- a/components/camel-debezium-postgres/src/test/java/org/apache/camel/component/debezium/DebeziumPostgresComponentTest.java
+++ b/components/camel-debezium-postgres/src/test/java/org/apache/camel/component/debezium/DebeziumPostgresComponentTest.java
@@ -117,4 +117,4 @@
         final DebeziumEndpoint debeziumEndpoint = debeziumComponent.createEndpoint(uri, remaining,
                 Collections.emptyMap());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-postgres/src/test/java/org/apache/camel/component/debezium/configuration/PostgresConnectorEmbeddedDebeziumConfigurationTest.java b/components/camel-debezium-postgres/src/test/java/org/apache/camel/component/debezium/configuration/PostgresConnectorEmbeddedDebeziumConfigurationTest.java
index 35b2ba8..b1a3051 100644
--- a/components/camel-debezium-postgres/src/test/java/org/apache/camel/component/debezium/configuration/PostgresConnectorEmbeddedDebeziumConfigurationTest.java
+++ b/components/camel-debezium-postgres/src/test/java/org/apache/camel/component/debezium/configuration/PostgresConnectorEmbeddedDebeziumConfigurationTest.java
@@ -86,4 +86,4 @@
         assertEquals("/database_history/file", configuration.getDatabaseHistoryFileFilename());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-sqlserver/src/test/java/org/apache/camel/component/debezium/DebeziumSqlserverComponentTest.java b/components/camel-debezium-sqlserver/src/test/java/org/apache/camel/component/debezium/DebeziumSqlserverComponentTest.java
index 5d2c869..ccd5d1a 100644
--- a/components/camel-debezium-sqlserver/src/test/java/org/apache/camel/component/debezium/DebeziumSqlserverComponentTest.java
+++ b/components/camel-debezium-sqlserver/src/test/java/org/apache/camel/component/debezium/DebeziumSqlserverComponentTest.java
@@ -117,4 +117,4 @@
         final DebeziumEndpoint debeziumEndpoint = debeziumComponent.createEndpoint(uri, remaining,
                 Collections.emptyMap());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-debezium-sqlserver/src/test/java/org/apache/camel/component/debezium/configuration/SqlserverConnectorEmbeddedDebeziumConfigurationTest.java b/components/camel-debezium-sqlserver/src/test/java/org/apache/camel/component/debezium/configuration/SqlserverConnectorEmbeddedDebeziumConfigurationTest.java
index e18a54f..ca34efd 100644
--- a/components/camel-debezium-sqlserver/src/test/java/org/apache/camel/component/debezium/configuration/SqlserverConnectorEmbeddedDebeziumConfigurationTest.java
+++ b/components/camel-debezium-sqlserver/src/test/java/org/apache/camel/component/debezium/configuration/SqlserverConnectorEmbeddedDebeziumConfigurationTest.java
@@ -87,4 +87,4 @@
         assertEquals("/database_history/file", configuration.getDatabaseHistoryFileFilename());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-digitalocean/src/main/java/org/apache/camel/component/digitalocean/DigitalOceanConfiguration.java b/components/camel-digitalocean/src/main/java/org/apache/camel/component/digitalocean/DigitalOceanConfiguration.java
index 51d4acb..da8231b 100644
--- a/components/camel-digitalocean/src/main/java/org/apache/camel/component/digitalocean/DigitalOceanConfiguration.java
+++ b/components/camel-digitalocean/src/main/java/org/apache/camel/component/digitalocean/DigitalOceanConfiguration.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.digitalocean;
 
-
 import com.myjeeva.digitalocean.impl.DigitalOceanClient;
 import org.apache.camel.component.digitalocean.constants.DigitalOceanOperations;
 import org.apache.camel.component.digitalocean.constants.DigitalOceanResources;
diff --git a/components/camel-digitalocean/src/test/java/org/apache/camel/component/digitalocean/DigitalOceanComponentTest.java b/components/camel-digitalocean/src/test/java/org/apache/camel/component/digitalocean/DigitalOceanComponentTest.java
index cf5bc7a..7f03ddf 100644
--- a/components/camel-digitalocean/src/test/java/org/apache/camel/component/digitalocean/DigitalOceanComponentTest.java
+++ b/components/camel-digitalocean/src/test/java/org/apache/camel/component/digitalocean/DigitalOceanComponentTest.java
@@ -18,7 +18,6 @@
 
 import com.myjeeva.digitalocean.impl.DigitalOceanClient;
 import com.myjeeva.digitalocean.pojo.Account;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/AbstractSynchronizedExchange.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/AbstractSynchronizedExchange.java
index e3c7be2..8069970 100644
--- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/AbstractSynchronizedExchange.java
+++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/AbstractSynchronizedExchange.java
@@ -55,4 +55,4 @@
         UnitOfWorkHelper.doneSynchronizations(getExchange(),
                 synchronizations, AbstractSynchronizedExchange.LOG);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/LifecycleAwareExchangeEventHandler.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/LifecycleAwareExchangeEventHandler.java
index c63a6c1..e75838a 100644
--- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/LifecycleAwareExchangeEventHandler.java
+++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/LifecycleAwareExchangeEventHandler.java
@@ -15,13 +15,12 @@
  * limitations under the License.
  */
 package org.apache.camel.component.disruptor;
+
 import java.util.concurrent.TimeUnit;
 
 import com.lmax.disruptor.EventHandler;
 import com.lmax.disruptor.LifecycleAware;
 
-
-
 /**
  * This interface fuses the EventHandler and LifecycleAware interfaces.
  * It also provides a handle to await the termination of this EventHandler.
diff --git a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorWaitForTaskIfReplyExpectedTest.java b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorWaitForTaskIfReplyExpectedTest.java
index c3c26be..ef08b73 100644
--- a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorWaitForTaskIfReplyExpectedTest.java
+++ b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/DisruptorWaitForTaskIfReplyExpectedTest.java
@@ -23,7 +23,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 public class DisruptorWaitForTaskIfReplyExpectedTest extends CamelTestSupport {
 
     @Test
diff --git a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/FileDisruptorShutdownCompleteAllTasksTest.java b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/FileDisruptorShutdownCompleteAllTasksTest.java
index 94500e7..3d9e8cb 100644
--- a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/FileDisruptorShutdownCompleteAllTasksTest.java
+++ b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/FileDisruptorShutdownCompleteAllTasksTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.disruptor;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.ShutdownRunningTask;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/SedaDisruptorCompareTest.java b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/SedaDisruptorCompareTest.java
index 3622873..8c5137d 100644
--- a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/SedaDisruptorCompareTest.java
+++ b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/SedaDisruptorCompareTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.disruptor;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
diff --git a/components/camel-dns/src/main/java/org/apache/camel/component/dns/DnsConfiguration.java b/components/camel-dns/src/main/java/org/apache/camel/component/dns/DnsConfiguration.java
index a2121ec..da16c45 100644
--- a/components/camel-dns/src/main/java/org/apache/camel/component/dns/DnsConfiguration.java
+++ b/components/camel-dns/src/main/java/org/apache/camel/component/dns/DnsConfiguration.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.dns;
 
-
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
 
diff --git a/components/camel-dns/src/main/java/org/apache/camel/component/dns/cloud/DnsServiceDiscovery.java b/components/camel-dns/src/main/java/org/apache/camel/component/dns/cloud/DnsServiceDiscovery.java
index 61db9ea..63a7c4a 100644
--- a/components/camel-dns/src/main/java/org/apache/camel/component/dns/cloud/DnsServiceDiscovery.java
+++ b/components/camel-dns/src/main/java/org/apache/camel/component/dns/cloud/DnsServiceDiscovery.java
@@ -38,7 +38,6 @@
 import org.xbill.DNS.TextParseException;
 import org.xbill.DNS.Type;
 
-
 public final class DnsServiceDiscovery extends DefaultServiceDiscovery {
     private static final Comparator<SRVRecord> COMPARATOR = comparator();
     private final DnsConfiguration configuration;
diff --git a/components/camel-dns/src/main/java/org/apache/camel/component/dns/policy/DnsActivation.java b/components/camel-dns/src/main/java/org/apache/camel/component/dns/policy/DnsActivation.java
index 983d446..8e6f80a 100644
--- a/components/camel-dns/src/main/java/org/apache/camel/component/dns/policy/DnsActivation.java
+++ b/components/camel-dns/src/main/java/org/apache/camel/component/dns/policy/DnsActivation.java
@@ -18,13 +18,11 @@
 
 import java.net.InetAddress;
 import java.net.NetworkInterface;
-
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.List;
 
 import javax.naming.NamingEnumeration;
-
 import javax.naming.directory.Attribute;
 import javax.naming.directory.Attributes;
 import javax.naming.directory.InitialDirContext;
diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java
index 92cab1f..97df4b1 100644
--- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java
+++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerClientFactory.java
@@ -24,7 +24,6 @@
 import com.github.dockerjava.core.SSLConfig;
 import com.github.dockerjava.jaxrs.JerseyDockerCmdExecFactory;
 import com.github.dockerjava.netty.NettyDockerCmdExecFactory;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Message;
 import org.apache.camel.component.docker.exception.DockerException;
diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java
index 4ab0f61..532a4bd 100644
--- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java
+++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerOperation.java
@@ -19,7 +19,6 @@
 import java.util.HashMap;
 import java.util.Map;
 
-
 /**
  * Operations the Docker Component supports
  */
diff --git a/components/camel-docker/src/main/java/org/apache/camel/component/docker/ssl/NoImplSslConfig.java b/components/camel-docker/src/main/java/org/apache/camel/component/docker/ssl/NoImplSslConfig.java
index 8e9a843..f824edd 100644
--- a/components/camel-docker/src/main/java/org/apache/camel/component/docker/ssl/NoImplSslConfig.java
+++ b/components/camel-docker/src/main/java/org/apache/camel/component/docker/ssl/NoImplSslConfig.java
@@ -20,6 +20,7 @@
 import java.security.KeyStoreException;
 import java.security.NoSuchAlgorithmException;
 import java.security.UnrecoverableKeyException;
+
 import javax.net.ssl.SSLContext;
 
 import com.github.dockerjava.core.SSLConfig;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/RemoveImageCmdUriTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/RemoveImageCmdUriTest.java
index 4a6748b..fa84395 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/RemoveImageCmdUriTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/RemoveImageCmdUriTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.RemoveImageCmd;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.docker.headers.BaseDockerHeaderTest;
 import org.junit.Ignore;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/AuthCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/AuthCmdHeaderTest.java
index 43577a8..15e712f 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/AuthCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/AuthCmdHeaderTest.java
@@ -20,7 +20,6 @@
 
 import com.github.dockerjava.api.command.AuthCmd;
 import com.github.dockerjava.api.model.AuthConfig;
-
 import org.apache.camel.component.docker.DockerClientProfile;
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/BaseDockerHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/BaseDockerHeaderTest.java
index 575af86..58114f5 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/BaseDockerHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/BaseDockerHeaderTest.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.DockerClient;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.docker.DockerClientProfile;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/BuildImageCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/BuildImageCmdHeaderTest.java
index c4d257f..939806b 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/BuildImageCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/BuildImageCmdHeaderTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.docker.headers;
 
-
 import java.io.File;
 import java.io.InputStream;
 import java.util.Map;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CommitContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CommitContainerCmdHeaderTest.java
index ee4f8f9..f9b34f9 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CommitContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CommitContainerCmdHeaderTest.java
@@ -23,7 +23,6 @@
 import com.github.dockerjava.api.model.ExposedPorts;
 import com.github.dockerjava.api.model.Volume;
 import com.github.dockerjava.api.model.Volumes;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CopyFileContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CopyFileContainerCmdHeaderTest.java
index 7cd70c0..7f63ef5 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CopyFileContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CopyFileContainerCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateContainerCmdHeaderTest.java
index ff781fd..d351ac0 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateContainerCmdHeaderTest.java
@@ -24,7 +24,6 @@
 import com.github.dockerjava.api.model.HostConfig;
 import com.github.dockerjava.api.model.Volume;
 import com.github.dockerjava.api.model.VolumesFrom;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateImageCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateImageCmdHeaderTest.java
index 7ef8cf8..1951d8f 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateImageCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/CreateImageCmdHeaderTest.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.CreateImageCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/DiffContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/DiffContainerCmdHeaderTest.java
index 081d31c..48e84ac 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/DiffContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/DiffContainerCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.ContainerDiffCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
@@ -63,4 +62,4 @@
         return DockerOperation.DIFF_CONTAINER;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ExecCreateCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ExecCreateCmdHeaderTest.java
index 62e95cf..89ed78e 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ExecCreateCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ExecCreateCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.ExecCreateCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/InfoCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/InfoCmdHeaderTest.java
index 5a81ced..e242ef2 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/InfoCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/InfoCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.InfoCmd;
-
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
 import org.mockito.Mock;
@@ -54,4 +53,4 @@
         return DockerOperation.INFO;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/InspectContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/InspectContainerCmdHeaderTest.java
index 56066f7..2f46457 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/InspectContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/InspectContainerCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.InspectContainerCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/InspectImageCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/InspectImageCmdHeaderTest.java
index ee6522b..73b0aa1 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/InspectImageCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/InspectImageCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.InspectImageCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/KillContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/KillContainerCmdHeaderTest.java
index 093b7ac..88ada27 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/KillContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/KillContainerCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.KillContainerCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ListContainersCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ListContainersCmdHeaderTest.java
index f9028b5..afe7b7a 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ListContainersCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ListContainersCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.ListContainersCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ListImagesCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ListImagesCmdHeaderTest.java
index 3b1d719..a5615e0 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ListImagesCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/ListImagesCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.ListImagesCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/PauseContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/PauseContainerCmdHeaderTest.java
index 3f69384..060cadf 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/PauseContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/PauseContainerCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.PauseContainerCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/PingCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/PingCmdHeaderTest.java
index 4289980..44df77f 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/PingCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/PingCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.PingCmd;
-
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
 import org.mockito.Mock;
@@ -53,4 +52,4 @@
         return DockerOperation.PING;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RemoveContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RemoveContainerCmdHeaderTest.java
index d3ff724..51d54a8 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RemoveContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RemoveContainerCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.RemoveContainerCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RemoveImageCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RemoveImageCmdHeaderTest.java
index f574edb..0b1ce50 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RemoveImageCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RemoveImageCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.RemoveImageCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RestartContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RestartContainerCmdHeaderTest.java
index e341ece..5aa3c2b 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RestartContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/RestartContainerCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.RestartContainerCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/SearchImagesCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/SearchImagesCmdHeaderTest.java
index f8373cc..84f88de 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/SearchImagesCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/SearchImagesCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.SearchImagesCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/StartContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/StartContainerCmdHeaderTest.java
index 2ca1610..159537e 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/StartContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/StartContainerCmdHeaderTest.java
@@ -20,7 +20,6 @@
 
 import com.github.dockerjava.api.command.StartContainerCmd;
 import com.github.dockerjava.api.model.ExposedPort;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/StopContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/StopContainerCmdHeaderTest.java
index ac320cd..4262777 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/StopContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/StopContainerCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.StopContainerCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/TagImageCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/TagImageCmdHeaderTest.java
index 71e225a..1df8327 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/TagImageCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/TagImageCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.TagImageCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/TopContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/TopContainerCmdHeaderTest.java
index c2e767c..2d87096 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/TopContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/TopContainerCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.TopContainerCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/UnpauseContainerCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/UnpauseContainerCmdHeaderTest.java
index ad396ac..b8411ed 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/UnpauseContainerCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/UnpauseContainerCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.UnpauseContainerCmd;
-
 import org.apache.camel.component.docker.DockerConstants;
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/VersionCmdHeaderTest.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/VersionCmdHeaderTest.java
index 8610c84..34ff37e 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/VersionCmdHeaderTest.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/headers/VersionCmdHeaderTest.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.github.dockerjava.api.command.VersionCmd;
-
 import org.apache.camel.component.docker.DockerOperation;
 import org.junit.Test;
 import org.mockito.Mock;
@@ -54,4 +53,4 @@
         return DockerOperation.VERSION;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/it/DockerCustomCmdExecFactoryTestIT.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/it/DockerCustomCmdExecFactoryTestIT.java
index bf4d620..c2382db 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/it/DockerCustomCmdExecFactoryTestIT.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/it/DockerCustomCmdExecFactoryTestIT.java
@@ -19,7 +19,6 @@
 import java.util.concurrent.TimeUnit;
 
 import com.github.dockerjava.api.model.Version;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/it/DockerITTestSupport.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/it/DockerITTestSupport.java
index 6e03d43..1cda11f 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/it/DockerITTestSupport.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/it/DockerITTestSupport.java
@@ -39,7 +39,7 @@
         properties.load(getClass().getResourceAsStream(TEST_OPTIONS_PROPERTIES));
 
         Map<String, Object> options = new HashMap<>();
-        properties.entrySet().forEach((e) -> options.put(e.getKey().toString(), e.getValue()));
+        properties.entrySet().forEach(e -> options.put(e.getKey().toString(), e.getValue()));
 
         DockerConfiguration configuration = new DockerConfiguration();
         PropertyBindingSupport.bindProperties(context, configuration, options);
diff --git a/components/camel-docker/src/test/java/org/apache/camel/component/docker/it/DockerNettyCmdExecFactoryTestIT.java b/components/camel-docker/src/test/java/org/apache/camel/component/docker/it/DockerNettyCmdExecFactoryTestIT.java
index 6f4a94b..f3e8bfb 100644
--- a/components/camel-docker/src/test/java/org/apache/camel/component/docker/it/DockerNettyCmdExecFactoryTestIT.java
+++ b/components/camel-docker/src/test/java/org/apache/camel/component/docker/it/DockerNettyCmdExecFactoryTestIT.java
@@ -19,7 +19,6 @@
 import java.util.concurrent.TimeUnit;
 
 import com.github.dockerjava.netty.NettyDockerCmdExecFactory;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
diff --git a/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/abc/ABCOrder.java b/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/abc/ABCOrder.java
index 496848e..1e18f2c 100644
--- a/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/abc/ABCOrder.java
+++ b/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/abc/ABCOrder.java
@@ -26,7 +26,6 @@
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
  * <p>Java class for anonymous complex type.
  * 
diff --git a/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/abc/ObjectFactory.java b/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/abc/ObjectFactory.java
index f8bd30c..ae803c3 100644
--- a/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/abc/ObjectFactory.java
+++ b/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/abc/ObjectFactory.java
@@ -18,7 +18,6 @@
 
 import javax.xml.bind.annotation.XmlRegistry;
 
-
 /**
  * This object contains factory methods for each 
  * Java content interface and Java element interface 
diff --git a/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/xyz/LineItem.java b/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/xyz/LineItem.java
index 6949711..2b42b0f 100644
--- a/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/xyz/LineItem.java
+++ b/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/xyz/LineItem.java
@@ -22,7 +22,6 @@
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 
-
 /**
  * LineItem
  * <p>
diff --git a/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/xyz/XYZOrder.java b/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/xyz/XYZOrder.java
index 18048f6..001e10f8 100644
--- a/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/xyz/XYZOrder.java
+++ b/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/example/xyz/XYZOrder.java
@@ -25,7 +25,6 @@
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 
-
 /**
  * XYZOrder
  * <p>
diff --git a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterDTOTest.java b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterDTOTest.java
index 4a3d73f..c44b137 100644
--- a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterDTOTest.java
+++ b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterDTOTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.converter.dozer;
+
 import java.util.Arrays;
 
 import com.github.dozermapper.core.loader.api.BeanMappingBuilder;
diff --git a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java
index ce0b86f..baf1077 100644
--- a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java
+++ b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/DozerTypeConverterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.converter.dozer;
+
 import java.util.Arrays;
 
 import com.github.dozermapper.core.Mapper;
diff --git a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/dto/CustomerDTO.java b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/dto/CustomerDTO.java
index a1a47ee..1a8db7f 100644
--- a/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/dto/CustomerDTO.java
+++ b/components/camel-dozer/src/test/java/org/apache/camel/converter/dozer/dto/CustomerDTO.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.converter.dozer.dto;
 
-
 import java.io.Serializable;
 
 public class CustomerDTO implements Serializable {
diff --git a/components/camel-drill/src/main/java/org/apache/camel/component/drill/DrillEndpoint.java b/components/camel-drill/src/main/java/org/apache/camel/component/drill/DrillEndpoint.java
index 150c8b0..dd30e5c 100644
--- a/components/camel-drill/src/main/java/org/apache/camel/component/drill/DrillEndpoint.java
+++ b/components/camel-drill/src/main/java/org/apache/camel/component/drill/DrillEndpoint.java
@@ -33,7 +33,6 @@
 import org.springframework.jdbc.core.ColumnMapRowMapper;
 import org.springframework.jdbc.core.RowMapperResultSetExtractor;
 
-
 /**
  * The drill component gives you the ability to quering into apache drill
  * cluster.
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxComponentVerifierExtension.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxComponentVerifierExtension.java
index 627dcff..cd3bc74 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxComponentVerifierExtension.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/DropboxComponentVerifierExtension.java
@@ -21,7 +21,6 @@
 
 import com.dropbox.core.DbxRequestConfig;
 import com.dropbox.core.v2.DbxClientV2;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/dto/DropboxFileUploadResult.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/dto/DropboxFileUploadResult.java
index e299ea1..85c8338 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/dto/DropboxFileUploadResult.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/dto/DropboxFileUploadResult.java
@@ -22,7 +22,6 @@
 
 import org.apache.camel.component.dropbox.util.DropboxResultCode;
 
-
 public class DropboxFileUploadResult {
 
 
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollConsumer.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollConsumer.java
index 668e18a..075cc3c 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollConsumer.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/integration/consumer/DropboxScheduledPollConsumer.java
@@ -23,7 +23,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public abstract class DropboxScheduledPollConsumer extends ScheduledPollConsumer {
     protected static final transient Logger LOG = LoggerFactory.getLogger(DropboxScheduledPollConsumer.class);
     protected final DropboxEndpoint endpoint;
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/DropboxTestSupport.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/DropboxTestSupport.java
index 442ff0c..501bf40 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/DropboxTestSupport.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/DropboxTestSupport.java
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
+
 import com.dropbox.core.DbxDownloader;
 import com.dropbox.core.DbxException;
 import com.dropbox.core.DbxRequestConfig;
@@ -29,7 +30,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
 
-
 public class DropboxTestSupport extends CamelTestSupport {
 
 
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerDelTest.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerDelTest.java
index 4377622..7648c49 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerDelTest.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerDelTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.dropbox.integration.producer;
 
 import java.io.IOException;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.dropbox.integration.DropboxTestSupport;
 import org.apache.camel.component.dropbox.util.DropboxConstants;
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetFolderTest.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetFolderTest.java
index 486ac46..7f22752 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetFolderTest.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetFolderTest.java
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 import java.util.Map;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.dropbox.integration.DropboxTestSupport;
 import org.apache.camel.component.dropbox.util.DropboxConstants;
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetSingleTest.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetSingleTest.java
index a8a6588..faf375d 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetSingleTest.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerGetSingleTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.dropbox.integration.producer;
 
 import java.io.IOException;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.dropbox.integration.DropboxTestSupport;
 import org.apache.camel.component.dropbox.util.DropboxConstants;
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerMoveTest.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerMoveTest.java
index 69dba80..495cf6f 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerMoveTest.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerMoveTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.dropbox.integration.producer;
 
 import java.io.IOException;
+
 import com.dropbox.core.DbxException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.dropbox.integration.DropboxTestSupport;
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerPutSingleFileTest.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerPutSingleFileTest.java
index 8fdf9fa..2eee1e0 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerPutSingleFileTest.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerPutSingleFileTest.java
@@ -23,6 +23,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.dropbox.integration.DropboxTestSupport;
 import org.apache.camel.component.dropbox.util.DropboxConstants;
diff --git a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerSearchQueryTest.java b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerSearchQueryTest.java
index 2d05766..4e88f60 100644
--- a/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerSearchQueryTest.java
+++ b/components/camel-dropbox/src/test/java/org/apache/camel/component/dropbox/integration/producer/DropboxProducerSearchQueryTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.dropbox.integration.producer;
 
 import java.io.IOException;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.dropbox.integration.DropboxTestSupport;
 import org.apache.camel.component.dropbox.util.DropboxConstants;
diff --git a/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/processor/aggregate/EhcacheAggregationRepositoryOperationTest.java b/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/processor/aggregate/EhcacheAggregationRepositoryOperationTest.java
index 45d510d..39bda69 100644
--- a/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/processor/aggregate/EhcacheAggregationRepositoryOperationTest.java
+++ b/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/processor/aggregate/EhcacheAggregationRepositoryOperationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.ehcache.processor.aggregate;
+
 import java.util.Set;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/processor/aggregate/EhcacheAggregationRepositoryRoutesTest.java b/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/processor/aggregate/EhcacheAggregationRepositoryRoutesTest.java
index ea3895c..df93364 100644
--- a/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/processor/aggregate/EhcacheAggregationRepositoryRoutesTest.java
+++ b/components/camel-ehcache/src/test/java/org/apache/camel/component/ehcache/processor/aggregate/EhcacheAggregationRepositoryRoutesTest.java
@@ -28,7 +28,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class EhcacheAggregationRepositoryRoutesTest extends EhcacheTestSupport {
     private static final String ENDPOINT_MOCK = "mock:result";
     private static final String ENDPOINT_DIRECT = "direct:one";
diff --git a/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java b/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java
index 31889d8..79dc42a 100644
--- a/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java
+++ b/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchProducer.java
@@ -19,6 +19,7 @@
 import java.lang.reflect.InvocationTargetException;
 import java.net.UnknownHostException;
 import java.util.Collections;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.support.DefaultProducer;
@@ -50,7 +51,6 @@
 import static org.apache.camel.component.elasticsearch.ElasticsearchConstants.PARAM_SCROLL;
 import static org.apache.camel.component.elasticsearch.ElasticsearchConstants.PARAM_SCROLL_KEEP_ALIVE_MS;
 
-
 /**
  * Represents an Elasticsearch producer.
  */
@@ -322,7 +322,7 @@
     
     private final class HighLevelClient extends RestHighLevelClient {
         private HighLevelClient(RestClient restClient) {
-            super(restClient, (client) -> { }, Collections.emptyList());
+            super(restClient, client -> { }, Collections.emptyList());
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchScrollRequestIterator.java b/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchScrollRequestIterator.java
index 191efaf..03ed704 100644
--- a/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchScrollRequestIterator.java
+++ b/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/ElasticsearchScrollRequestIterator.java
@@ -19,6 +19,7 @@
 import java.io.Closeable;
 import java.io.IOException;
 import java.util.Iterator;
+
 import org.apache.camel.Exchange;
 import org.elasticsearch.action.search.ClearScrollRequest;
 import org.elasticsearch.action.search.SearchRequest;
@@ -32,7 +33,6 @@
 
 import static org.apache.camel.component.elasticsearch.ElasticsearchConstants.PROPERTY_SCROLL_ES_QUERY_COUNT;
 
-
 public class ElasticsearchScrollRequestIterator implements Iterator<SearchHit>, Closeable {
     private final SearchRequest searchRequest;
     private final RestHighLevelClient restHighLevelClient;
diff --git a/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java b/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
index ab024a7..c3f98e9 100644
--- a/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
+++ b/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.camel.Converter;
diff --git a/components/camel-elasticsearch-rest/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchBulkTest.java b/components/camel-elasticsearch-rest/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchBulkTest.java
index 73734b4..c4ea7e2 100644
--- a/components/camel-elasticsearch-rest/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchBulkTest.java
+++ b/components/camel-elasticsearch-rest/src/test/java/org/apache/camel/component/elasticsearch/ElasticsearchBulkTest.java
@@ -20,11 +20,13 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.elasticsearch.action.bulk.BulkItemResponse;
 import org.elasticsearch.action.bulk.BulkRequest;
 import org.elasticsearch.action.index.IndexRequest;
 import org.junit.Test;
+
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.notNullValue;
 
diff --git a/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlComponent.java b/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlComponent.java
index 1065bf5..fc1273b 100644
--- a/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlComponent.java
+++ b/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlComponent.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.elsql;
 
 import java.util.Map;
+
 import javax.sql.DataSource;
 
 import com.opengamma.elsql.ElSqlConfig;
diff --git a/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlEndpoint.java b/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlEndpoint.java
index 852ba8a..d04c809 100644
--- a/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlEndpoint.java
+++ b/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlEndpoint.java
@@ -19,6 +19,7 @@
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.sql.DataSource;
 
 import com.opengamma.elsql.ElSql;
diff --git a/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlProducer.java b/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlProducer.java
index 4090832..6d7288f 100644
--- a/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlProducer.java
+++ b/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlProducer.java
@@ -22,6 +22,7 @@
 import java.sql.SQLException;
 import java.util.Iterator;
 import java.util.List;
+
 import javax.sql.DataSource;
 
 import com.opengamma.elsql.ElSql;
diff --git a/components/camel-etcd/src/main/java/org/apache/camel/component/etcd/policy/EtcdRoutePolicy.java b/components/camel-etcd/src/main/java/org/apache/camel/component/etcd/policy/EtcdRoutePolicy.java
index 05005d5..f25c7fd 100644
--- a/components/camel-etcd/src/main/java/org/apache/camel/component/etcd/policy/EtcdRoutePolicy.java
+++ b/components/camel-etcd/src/main/java/org/apache/camel/component/etcd/policy/EtcdRoutePolicy.java
@@ -379,4 +379,4 @@
 
         return result;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceCallRouteTest.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceCallRouteTest.java
index 6fa2f38..f9cbd3c 100644
--- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceCallRouteTest.java
+++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceCallRouteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.etcd.cloud;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryTest.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryTest.java
index 45a0321..d67fdf1 100644
--- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryTest.java
+++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/EtcdServiceDiscoveryTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.etcd.cloud;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.java
index b1a18c6..31c0ba7 100644
--- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.java
+++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallDefaultRouteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.etcd.cloud;
+
 import java.net.URI;
 
 import com.fasterxml.jackson.databind.JsonNode;
diff --git a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.java b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.java
index 7ec8617..fda5e02 100644
--- a/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.java
+++ b/components/camel-etcd/src/test/java/org/apache/camel/component/etcd/cloud/SpringEtcdServiceCallRouteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.etcd.cloud;
+
 import java.net.URI;
 
 import com.fasterxml.jackson.databind.JsonNode;
diff --git a/components/camel-eventadmin/src/main/java/org/apache/camel/component/eventadmin/EventAdminConsumer.java b/components/camel-eventadmin/src/main/java/org/apache/camel/component/eventadmin/EventAdminConsumer.java
index a7052f7..e21c490 100644
--- a/components/camel-eventadmin/src/main/java/org/apache/camel/component/eventadmin/EventAdminConsumer.java
+++ b/components/camel-eventadmin/src/main/java/org/apache/camel/component/eventadmin/EventAdminConsumer.java
@@ -18,6 +18,7 @@
 
 import java.util.Dictionary;
 import java.util.Hashtable;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.support.DefaultConsumer;
diff --git a/components/camel-exec/src/main/java/org/apache/camel/component/exec/ExecCommand.java b/components/camel-exec/src/main/java/org/apache/camel/component/exec/ExecCommand.java
index b46101d..2c25755 100644
--- a/components/camel-exec/src/main/java/org/apache/camel/component/exec/ExecCommand.java
+++ b/components/camel-exec/src/main/java/org/apache/camel/component/exec/ExecCommand.java
@@ -22,6 +22,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+
 import org.apache.camel.LoggingLevel;
 
 import static org.apache.camel.util.ObjectHelper.notNull;
diff --git a/components/camel-exec/src/main/java/org/apache/camel/component/exec/ExecException.java b/components/camel-exec/src/main/java/org/apache/camel/component/exec/ExecException.java
index 3f037a9..c260ae9 100644
--- a/components/camel-exec/src/main/java/org/apache/camel/component/exec/ExecException.java
+++ b/components/camel-exec/src/main/java/org/apache/camel/component/exec/ExecException.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.exec;
 
 import java.io.InputStream;
+
 import org.apache.camel.RuntimeCamelException;
 
 /**
diff --git a/components/camel-exec/src/main/java/org/apache/camel/component/exec/impl/DefaultExecBinding.java b/components/camel-exec/src/main/java/org/apache/camel/component/exec/impl/DefaultExecBinding.java
index cb67910..bdab296 100644
--- a/components/camel-exec/src/main/java/org/apache/camel/component/exec/impl/DefaultExecBinding.java
+++ b/components/camel-exec/src/main/java/org/apache/camel/component/exec/impl/DefaultExecBinding.java
@@ -30,6 +30,7 @@
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import static org.apache.camel.component.exec.impl.ExecParseUtils.splitToWhiteSpaceSeparatedTokens;
 
 /**
diff --git a/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecEndpointTest.java b/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecEndpointTest.java
index 9926b3b..d8199a8 100644
--- a/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecEndpointTest.java
+++ b/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecEndpointTest.java
@@ -19,10 +19,8 @@
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.util.UnsafeUriCharactersEncoder;
-
 import org.junit.Before;
 import org.junit.Test;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
diff --git a/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecOutFileTest.java b/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecOutFileTest.java
index de02db8..51be879 100644
--- a/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecOutFileTest.java
+++ b/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecOutFileTest.java
@@ -28,11 +28,9 @@
 import org.apache.camel.ProducerTemplate;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
diff --git a/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecProducerTest.java b/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecProducerTest.java
index 4f4289f..b687bd7 100644
--- a/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecProducerTest.java
+++ b/components/camel-exec/src/test/java/org/apache/camel/component/exec/ExecProducerTest.java
@@ -27,9 +27,7 @@
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.exec.impl.ExecCommandExecutorMock;
 import org.apache.commons.io.IOUtils;
-
 import org.junit.Test;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
diff --git a/components/camel-exec/src/test/java/org/apache/camel/component/exec/impl/ExecDocumentationExamplesTest.java b/components/camel-exec/src/test/java/org/apache/camel/component/exec/impl/ExecDocumentationExamplesTest.java
index 5b2f2f1..f645dbe 100644
--- a/components/camel-exec/src/test/java/org/apache/camel/component/exec/impl/ExecDocumentationExamplesTest.java
+++ b/components/camel-exec/src/test/java/org/apache/camel/component/exec/impl/ExecDocumentationExamplesTest.java
@@ -28,7 +28,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
-
 import org.junit.Ignore;
 import org.junit.Test;
 
diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/config/FacebookEndpointConfiguration.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/config/FacebookEndpointConfiguration.java
index 3273c85..ac27749 100644
--- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/config/FacebookEndpointConfiguration.java
+++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/config/FacebookEndpointConfiguration.java
@@ -32,7 +32,6 @@
 import facebook4j.Reading;
 import facebook4j.TagUpdate;
 import facebook4j.TestUser;
-
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
 
diff --git a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/FacebookMethodsTypeHelper.java b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/FacebookMethodsTypeHelper.java
index b8643d4..159019d 100644
--- a/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/FacebookMethodsTypeHelper.java
+++ b/components/camel-facebook/src/main/java/org/apache/camel/component/facebook/data/FacebookMethodsTypeHelper.java
@@ -29,13 +29,11 @@
 
 import facebook4j.Facebook;
 import facebook4j.FacebookException;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.facebook.config.FacebookNameStyle;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * Helper class for working with {@link FacebookMethodsType}.
  */
diff --git a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java
index 95f89a7..6fe838b 100644
--- a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java
+++ b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/FacebookComponentConsumerTest.java
@@ -27,7 +27,6 @@
 
 import facebook4j.FacebookException;
 import facebook4j.api.SearchMethods;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Route;
diff --git a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/TestUserMethodsTest.java b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/TestUserMethodsTest.java
index e7900e7..e3da350 100644
--- a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/TestUserMethodsTest.java
+++ b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/TestUserMethodsTest.java
@@ -22,12 +22,9 @@
 import java.util.Map;
 
 import facebook4j.TestUser;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
 
-
-
 /**
  * Test methods in {@link facebook4j.api.TestUserMethods}
  */
diff --git a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/config/FacebookEndpointConfigurationTest.java b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/config/FacebookEndpointConfigurationTest.java
index f931347..4179f10 100644
--- a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/config/FacebookEndpointConfigurationTest.java
+++ b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/config/FacebookEndpointConfigurationTest.java
@@ -20,7 +20,6 @@
 import org.apache.camel.component.facebook.FacebookComponent;
 import org.apache.camel.component.facebook.FacebookEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
-
 import org.junit.Test;
 
 public class FacebookEndpointConfigurationTest extends CamelTestSupport {
diff --git a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/FacebookMethodsTypeHelperTest.java b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/FacebookMethodsTypeHelperTest.java
index fb48769..236fa54 100644
--- a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/FacebookMethodsTypeHelperTest.java
+++ b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/FacebookMethodsTypeHelperTest.java
@@ -23,7 +23,6 @@
 import java.util.List;
 
 import facebook4j.Facebook;
-
 import org.apache.camel.component.facebook.config.FacebookEndpointConfiguration;
 import org.junit.Test;
 
@@ -31,7 +30,6 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-
 /**
  * Test {@link FacebookMethodsTypeHelper}.
  */
diff --git a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/FacebookMethodsTypeTest.java b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/FacebookMethodsTypeTest.java
index 7c5581b..20e540b 100644
--- a/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/FacebookMethodsTypeTest.java
+++ b/components/camel-facebook/src/test/java/org/apache/camel/component/facebook/data/FacebookMethodsTypeTest.java
@@ -19,13 +19,11 @@
 import java.lang.reflect.Method;
 
 import facebook4j.Facebook;
-
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-
 /**
  * Test that all *Methods methods are mapped in {@link FacebookMethodsType}.
  */
diff --git a/components/camel-fastjson/src/test/java/org/apache/camel/component/fastjson/FastjsonJsonDataFormatTest.java b/components/camel-fastjson/src/test/java/org/apache/camel/component/fastjson/FastjsonJsonDataFormatTest.java
index 4909c44..872c497 100644
--- a/components/camel-fastjson/src/test/java/org/apache/camel/component/fastjson/FastjsonJsonDataFormatTest.java
+++ b/components/camel-fastjson/src/test/java/org/apache/camel/component/fastjson/FastjsonJsonDataFormatTest.java
@@ -20,7 +20,6 @@
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.model.dataformat.JsonLibrary;
-
 import org.junit.Test;
 
 public class FastjsonJsonDataFormatTest extends FastjsonMarshalTest {
@@ -49,4 +48,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/ExtraParameters.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/ExtraParameters.java
index 1196c82..744b4f1 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/ExtraParameters.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/ExtraParameters.java
@@ -18,6 +18,7 @@
 
 import java.util.List;
 import java.util.Map;
+
 import ca.uhn.fhir.rest.api.CacheControlDirective;
 import ca.uhn.fhir.rest.api.EncodingEnum;
 import ca.uhn.fhir.rest.api.SummaryEnum;
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirCapabilities.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirCapabilities.java
index 45c14a1..ce07ee2 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirCapabilities.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirCapabilities.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.fhir.api;
 
 import java.util.Map;
+
 import ca.uhn.fhir.rest.client.api.IGenericClient;
 import ca.uhn.fhir.rest.gclient.IFetchConformanceTyped;
 import org.hl7.fhir.instance.model.api.IBaseConformance;
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirCreate.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirCreate.java
index 0a278fa..18075eae5 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirCreate.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirCreate.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.fhir.api;
 
 import java.util.Map;
+
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.api.PreferReturnEnum;
 import ca.uhn.fhir.rest.client.api.IGenericClient;
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirDelete.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirDelete.java
index dcc295b..768ff87 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirDelete.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirDelete.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.fhir.api;
 
 import java.util.Map;
+
 import ca.uhn.fhir.rest.client.api.IGenericClient;
 import ca.uhn.fhir.rest.gclient.IDeleteTyped;
 import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirHistory.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirHistory.java
index 2da1613..21f2ce7 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirHistory.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirHistory.java
@@ -18,6 +18,7 @@
 
 import java.util.Date;
 import java.util.Map;
+
 import ca.uhn.fhir.rest.client.api.IGenericClient;
 import ca.uhn.fhir.rest.gclient.IHistoryTyped;
 import org.hl7.fhir.instance.model.api.IBaseBundle;
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirLoadPage.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirLoadPage.java
index 3f0ae25..fd4c2d5 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirLoadPage.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirLoadPage.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.fhir.api;
 
 import java.util.Map;
+
 import ca.uhn.fhir.rest.client.api.IGenericClient;
 import ca.uhn.fhir.rest.gclient.IGetPageTyped;
 import org.hl7.fhir.instance.model.api.IBaseBundle;
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirMeta.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirMeta.java
index 788b892..4a72c83 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirMeta.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirMeta.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.fhir.api;
 
 import java.util.Map;
+
 import ca.uhn.fhir.rest.client.api.IGenericClient;
 import ca.uhn.fhir.rest.gclient.IClientExecutable;
 import org.hl7.fhir.instance.model.api.IBaseMetaType;
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirOperation.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirOperation.java
index ca7f124..2936bfb 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirOperation.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirOperation.java
@@ -17,15 +17,14 @@
 package org.apache.camel.component.fhir.api;
 
 import java.util.Map;
+
 import ca.uhn.fhir.rest.client.api.IGenericClient;
 import ca.uhn.fhir.rest.gclient.IOperationProcessMsg;
 import ca.uhn.fhir.rest.gclient.IOperationProcessMsgMode;
 import ca.uhn.fhir.rest.gclient.IOperationUnnamed;
 import ca.uhn.fhir.rest.gclient.IOperationUntyped;
 import ca.uhn.fhir.rest.gclient.IOperationUntypedWithInput;
-
 import org.apache.camel.util.ObjectHelper;
-
 import org.hl7.fhir.instance.model.api.IBaseBundle;
 import org.hl7.fhir.instance.model.api.IBaseParameters;
 import org.hl7.fhir.instance.model.api.IBaseResource;
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirPatch.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirPatch.java
index 7fc5084..58581a3 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirPatch.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirPatch.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.fhir.api;
 
 import java.util.Map;
+
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.api.PreferReturnEnum;
 import ca.uhn.fhir.rest.client.api.IGenericClient;
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirRead.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirRead.java
index 02b8d0a..e8bb42b 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirRead.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirRead.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.fhir.api;
 
 import java.util.Map;
+
 import ca.uhn.fhir.rest.client.api.IGenericClient;
 import ca.uhn.fhir.rest.gclient.IReadExecutable;
 import ca.uhn.fhir.rest.gclient.IReadIfNoneMatch;
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirSearch.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirSearch.java
index 1b69a6c..5603582 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirSearch.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirSearch.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.fhir.api;
 
 import java.util.Map;
+
 import ca.uhn.fhir.rest.client.api.IGenericClient;
 import ca.uhn.fhir.rest.gclient.IQuery;
 import org.hl7.fhir.instance.model.api.IBaseBundle;
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirTransaction.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirTransaction.java
index 326625c..b61021a 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirTransaction.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirTransaction.java
@@ -18,6 +18,7 @@
 
 import java.util.List;
 import java.util.Map;
+
 import ca.uhn.fhir.rest.client.api.IGenericClient;
 import ca.uhn.fhir.rest.gclient.ITransactionTyped;
 import org.hl7.fhir.instance.model.api.IBaseBundle;
@@ -69,4 +70,4 @@
         ExtraParameters.process(extraParameters, transactionTyped);
         return transactionTyped.execute();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirUpdate.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirUpdate.java
index ec925c5..dbda469 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirUpdate.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirUpdate.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.fhir.api;
 
 import java.util.Map;
+
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.api.PreferReturnEnum;
 import ca.uhn.fhir.rest.client.api.IGenericClient;
diff --git a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirValidate.java b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirValidate.java
index 82c08fe..fa5e323 100644
--- a/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirValidate.java
+++ b/components/camel-fhir/camel-fhir-api/src/main/java/org/apache/camel/component/fhir/api/FhirValidate.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.fhir.api;
 
 import java.util.Map;
+
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.client.api.IGenericClient;
 import ca.uhn.fhir.rest.gclient.IValidateUntyped;
diff --git a/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirDataFormat.java b/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirDataFormat.java
index 83a0122..99f3cba 100644
--- a/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirDataFormat.java
+++ b/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirDataFormat.java
@@ -18,6 +18,7 @@
 
 import java.util.List;
 import java.util.Set;
+
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.context.FhirVersionEnum;
 import ca.uhn.fhir.context.ParserOptions;
diff --git a/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirEndpoint.java b/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirEndpoint.java
index 16c18d8..de45384 100644
--- a/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirEndpoint.java
+++ b/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirEndpoint.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import ca.uhn.fhir.rest.client.api.IGenericClient;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirJsonDataFormat.java b/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirJsonDataFormat.java
index f8414d2..5bf4f20 100644
--- a/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirJsonDataFormat.java
+++ b/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirJsonDataFormat.java
@@ -20,6 +20,7 @@
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
+
 import ca.uhn.fhir.parser.IParser;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.annotations.Dataformat;
diff --git a/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirXmlDataFormat.java b/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirXmlDataFormat.java
index cd3194e..ac67119 100644
--- a/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirXmlDataFormat.java
+++ b/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/FhirXmlDataFormat.java
@@ -20,6 +20,7 @@
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
+
 import ca.uhn.fhir.parser.IParser;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.annotations.Dataformat;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/AbstractFhirTestSupport.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/AbstractFhirTestSupport.java
index fe4efff..a42fdd3 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/AbstractFhirTestSupport.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/AbstractFhirTestSupport.java
@@ -20,6 +20,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
+
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.context.FhirVersionEnum;
 import ca.uhn.fhir.rest.client.api.IGenericClient;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirCapabilitiesIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirCapabilitiesIT.java
index b1dd42b..8dec20c 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirCapabilitiesIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirCapabilitiesIT.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.fhir.api.ExtraParameters;
 import org.apache.camel.component.fhir.internal.FhirApiCollection;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirConfigurationIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirConfigurationIT.java
index d89aa1f..4f4a212 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirConfigurationIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirConfigurationIT.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.fhir;
 
 import java.util.List;
+
 import ca.uhn.fhir.rest.api.EncodingEnum;
 import ca.uhn.fhir.rest.api.SummaryEnum;
 import ca.uhn.fhir.rest.client.api.IClientInterceptor;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirCreateIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirCreateIT.java
index aa0f866..4dcda5d 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirCreateIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirCreateIT.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.fhir.api.ExtraParameters;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirCustomClientConfigurationIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirCustomClientConfigurationIT.java
index 20f3d26..28cfe9b 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirCustomClientConfigurationIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirCustomClientConfigurationIT.java
@@ -18,6 +18,7 @@
 
 import java.util.List;
 import java.util.Map;
+
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.interceptor.api.IInterceptorService;
 import ca.uhn.fhir.model.primitive.IdDt;
@@ -48,7 +49,6 @@
 import ca.uhn.fhir.rest.gclient.IUntypedQuery;
 import ca.uhn.fhir.rest.gclient.IUpdate;
 import ca.uhn.fhir.rest.gclient.IValidate;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirDeleteIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirDeleteIT.java
index 346de95..310e138 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirDeleteIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirDeleteIT.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import ca.uhn.fhir.rest.api.CacheControlDirective;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.fhir.api.ExtraParameters;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirExtraParametersIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirExtraParametersIT.java
index 9f1e9f1..5f1e88b 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirExtraParametersIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirExtraParametersIT.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.fhir.api.ExtraParameters;
 import org.apache.camel.component.fhir.internal.FhirApiCollection;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirHistoryIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirHistoryIT.java
index 88642cb..1705fa5 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirHistoryIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirHistoryIT.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.fhir.api.ExtraParameters;
 import org.apache.camel.component.fhir.internal.FhirApiCollection;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirLoadPageIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirLoadPageIT.java
index 5e1c77d..e775340 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirLoadPageIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirLoadPageIT.java
@@ -20,6 +20,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import ca.uhn.fhir.rest.api.EncodingEnum;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.fhir.api.ExtraParameters;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirMetaIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirMetaIT.java
index a7d13a0..2c21e88 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirMetaIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirMetaIT.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.fhir.api.ExtraParameters;
 import org.apache.camel.component.fhir.internal.FhirApiCollection;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirOperationIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirOperationIT.java
index 635bae1..77bc3fe 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirOperationIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirOperationIT.java
@@ -22,7 +22,6 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.fhir.internal.FhirApiCollection;
 import org.apache.camel.component.fhir.internal.FhirOperationApiMethod;
-
 import org.hl7.fhir.dstu3.model.Bundle;
 import org.hl7.fhir.dstu3.model.IdType;
 import org.hl7.fhir.dstu3.model.IntegerType;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirPatchIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirPatchIT.java
index 575ecdd..c3a6015 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirPatchIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirPatchIT.java
@@ -20,6 +20,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.fhir.api.ExtraParameters;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirReadIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirReadIT.java
index 2b8a811..93bce78 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirReadIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirReadIT.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.fhir.api.ExtraParameters;
 import org.apache.camel.component.fhir.internal.FhirApiCollection;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirTransactionIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirTransactionIT.java
index f3697e2..b49d9b5 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirTransactionIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirTransactionIT.java
@@ -20,6 +20,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import ca.uhn.fhir.rest.api.SummaryEnum;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.fhir.api.ExtraParameters;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirUpdateIT.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirUpdateIT.java
index 9aef095..dc5aed5 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirUpdateIT.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/FhirUpdateIT.java
@@ -21,6 +21,7 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.api.PreferReturnEnum;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/Hl7v2PatientToFhirPatientIntegrationTest.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/Hl7v2PatientToFhirPatientIntegrationTest.java
index fe8b44c..f3a8549 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/Hl7v2PatientToFhirPatientIntegrationTest.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/Hl7v2PatientToFhirPatientIntegrationTest.java
@@ -18,6 +18,7 @@
 
 import java.io.ByteArrayInputStream;
 import java.nio.charset.Charset;
+
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/FhirJsonDataFormatTest.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/FhirJsonDataFormatTest.java
index 5073b2c..55d10e9 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/FhirJsonDataFormatTest.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/FhirJsonDataFormatTest.java
@@ -18,6 +18,7 @@
 
 import java.io.InputStream;
 import java.io.InputStreamReader;
+
 import ca.uhn.fhir.context.FhirContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
@@ -95,4 +96,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/spring/FhirDataformatConfigSpringTest.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/spring/FhirDataformatConfigSpringTest.java
index 6f00052..ef2fb23 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/spring/FhirDataformatConfigSpringTest.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/spring/FhirDataformatConfigSpringTest.java
@@ -19,6 +19,7 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.Set;
+
 import ca.uhn.fhir.context.FhirVersionEnum;
 import ca.uhn.fhir.context.ParserOptions;
 import ca.uhn.fhir.parser.LenientErrorHandler;
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/spring/FhirJsonDataFormatSpringTest.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/spring/FhirJsonDataFormatSpringTest.java
index 2f7171a..6bfbdeb 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/spring/FhirJsonDataFormatSpringTest.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/spring/FhirJsonDataFormatSpringTest.java
@@ -18,6 +18,7 @@
 
 import java.io.InputStream;
 import java.io.InputStreamReader;
+
 import ca.uhn.fhir.context.FhirContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -85,4 +86,4 @@
     protected AbstractApplicationContext createApplicationContext() {
         return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/fhir/json/FhirJsonDataFormatSpringTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/spring/FhirXmlDataFormatSpringTest.java b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/spring/FhirXmlDataFormatSpringTest.java
index 5cbcc1a..99e46af 100644
--- a/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/spring/FhirXmlDataFormatSpringTest.java
+++ b/components/camel-fhir/camel-fhir-component/src/test/java/org/apache/camel/component/fhir/dataformat/spring/FhirXmlDataFormatSpringTest.java
@@ -18,6 +18,7 @@
 
 import java.io.InputStream;
 import java.io.InputStreamReader;
+
 import ca.uhn.fhir.context.FhirContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -87,4 +88,4 @@
     protected AbstractApplicationContext createApplicationContext() {
         return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/fhir/xml/FhirXmlDataFormatSpringTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-file-watch/src/main/java/org/apache/camel/component/file/watch/constants/FileEvent.java b/components/camel-file-watch/src/main/java/org/apache/camel/component/file/watch/constants/FileEvent.java
index 2753bfe..1792bad 100644
--- a/components/camel-file-watch/src/main/java/org/apache/camel/component/file/watch/constants/FileEvent.java
+++ b/components/camel-file-watch/src/main/java/org/apache/camel/component/file/watch/constants/FileEvent.java
@@ -1,54 +1,55 @@
-/*
- * 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.component.file.watch.constants;
-
-import java.nio.file.Path;
-import io.methvin.watcher.DirectoryChangeEvent;
-
-public class FileEvent {
-    private FileEventEnum eventType;
-    private Path eventPath;
-    private long eventDate;
-
-    private FileEvent() {
-        this.eventDate = System.currentTimeMillis();
-    }
-
-    public FileEvent(FileEventEnum eventType, Path eventPath) {
-        this();
-        this.eventType = eventType;
-        this.eventPath = eventPath;
-    }
-
-    public FileEvent(DirectoryChangeEvent event) {
-        this();
-        this.eventType = FileEventEnum.valueOf(event.eventType());
-        this.eventPath = event.path();
-    }
-
-    public FileEventEnum getEventType() {
-        return eventType;
-    }
-
-    public Path getEventPath() {
-        return eventPath;
-    }
-
-    public long getEventDate() {
-        return this.eventDate;
-    }
-}
+/*
+ * 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.component.file.watch.constants;
+
+import java.nio.file.Path;
+
+import io.methvin.watcher.DirectoryChangeEvent;
+
+public class FileEvent {
+    private FileEventEnum eventType;
+    private Path eventPath;
+    private long eventDate;
+
+    private FileEvent() {
+        this.eventDate = System.currentTimeMillis();
+    }
+
+    public FileEvent(FileEventEnum eventType, Path eventPath) {
+        this();
+        this.eventType = eventType;
+        this.eventPath = eventPath;
+    }
+
+    public FileEvent(DirectoryChangeEvent event) {
+        this();
+        this.eventType = FileEventEnum.valueOf(event.eventType());
+        this.eventPath = event.path();
+    }
+
+    public FileEventEnum getEventType() {
+        return eventType;
+    }
+
+    public Path getEventPath() {
+        return eventPath;
+    }
+
+    public long getEventDate() {
+        return this.eventDate;
+    }
+}
diff --git a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/CharsetTest.java b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/CharsetTest.java
index 0a769e1..4ab9dad 100644
--- a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/CharsetTest.java
+++ b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/CharsetTest.java
@@ -33,7 +33,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-
 @ContextConfiguration
 public class CharsetTest extends AbstractJUnit4SpringContextTests {
     private static final Logger LOG = LoggerFactory.getLogger(FixedLengthTest.class);
diff --git a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedAllowLongTest.java b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedAllowLongTest.java
index 27ec7e1..e28817d 100644
--- a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedAllowLongTest.java
+++ b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedAllowLongTest.java
@@ -33,7 +33,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-
 @ContextConfiguration
 public class DelimitedAllowLongTest extends AbstractJUnit4SpringContextTests {
     private static final Logger LOG = LoggerFactory.getLogger(DelimitedAllowLongTest.class);
diff --git a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedErrorWithUnmarshalTest.java b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedErrorWithUnmarshalTest.java
index 772b44a..df89b7b 100644
--- a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedErrorWithUnmarshalTest.java
+++ b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedErrorWithUnmarshalTest.java
@@ -26,7 +26,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-
 @ContextConfiguration
 public class DelimitedErrorWithUnmarshalTest extends AbstractJUnit4SpringContextTests {
 
diff --git a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedTest.java b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedTest.java
index 36ab3a6..b902c4c 100644
--- a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedTest.java
+++ b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedTest.java
@@ -33,7 +33,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-
 @ContextConfiguration
 public class DelimitedTest extends AbstractJUnit4SpringContextTests {
     private static final Logger LOG = LoggerFactory.getLogger(FixedLengthTest.class);
diff --git a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedWithUnmarshalTest.java b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedWithUnmarshalTest.java
index 63b88a3..b072d9e 100644
--- a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedWithUnmarshalTest.java
+++ b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/DelimitedWithUnmarshalTest.java
@@ -33,7 +33,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-
 @ContextConfiguration
 public class DelimitedWithUnmarshalTest extends AbstractJUnit4SpringContextTests {
     private static final Logger LOG = LoggerFactory.getLogger(FixedLengthTest.class);
diff --git a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthAllowLongTest.java b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthAllowLongTest.java
index 17f092b..3a701f3 100644
--- a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthAllowLongTest.java
+++ b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthAllowLongTest.java
@@ -32,6 +32,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+
 @ContextConfiguration
 public class FixedLengthAllowLongTest extends AbstractJUnit4SpringContextTests {
     private static final Logger LOG = LoggerFactory.getLogger(FixedLengthAllowLongTest.class);
diff --git a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthAllowShortTest.java b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthAllowShortTest.java
index aa32f3c..f66751e 100644
--- a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthAllowShortTest.java
+++ b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthAllowShortTest.java
@@ -32,6 +32,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+
 @ContextConfiguration
 public class FixedLengthAllowShortTest extends AbstractJUnit4SpringContextTests {
     private static final Logger LOG = LoggerFactory.getLogger(FixedLengthAllowShortTest.class);
diff --git a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthTest.java b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthTest.java
index 841e716..e3e1dca 100644
--- a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthTest.java
+++ b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthTest.java
@@ -32,6 +32,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+
 @ContextConfiguration
 public class FixedLengthTest extends AbstractJUnit4SpringContextTests {
     private static final Logger LOG = LoggerFactory.getLogger(FixedLengthTest.class);
diff --git a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthWithUnmarshalTest.java b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthWithUnmarshalTest.java
index 45929a5..0bd3383 100644
--- a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthWithUnmarshalTest.java
+++ b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/FixedLengthWithUnmarshalTest.java
@@ -32,6 +32,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+
 @ContextConfiguration
 public class FixedLengthWithUnmarshalTest extends AbstractJUnit4SpringContextTests {
     private static final Logger LOG = LoggerFactory.getLogger(FixedLengthTest.class);
diff --git a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/NoSplitRowsTest.java b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/NoSplitRowsTest.java
index e1bdb69..2d5a719 100644
--- a/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/NoSplitRowsTest.java
+++ b/components/camel-flatpack/src/test/java/org/apache/camel/component/flatpack/NoSplitRowsTest.java
@@ -29,6 +29,7 @@
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 
 import static org.junit.Assert.assertEquals;
+
 /**
  * Unit test to verify that splitRows=false option.
  */
diff --git a/components/camel-flink/src/main/java/org/apache/camel/component/flink/ConvertingDataSetCallback.java b/components/camel-flink/src/main/java/org/apache/camel/component/flink/ConvertingDataSetCallback.java
index a5e7999..730664b 100644
--- a/components/camel-flink/src/main/java/org/apache/camel/component/flink/ConvertingDataSetCallback.java
+++ b/components/camel-flink/src/main/java/org/apache/camel/component/flink/ConvertingDataSetCallback.java
@@ -16,11 +16,11 @@
  */
 package org.apache.camel.component.flink;
 
-import static java.lang.String.format;
-
 import org.apache.camel.CamelContext;
 import org.apache.flink.api.java.DataSet;
 
+import static java.lang.String.format;
+
 public abstract class ConvertingDataSetCallback<T> implements DataSetCallback<T> {
 
     private final CamelContext camelContext;
@@ -45,4 +45,4 @@
     }
 
     public abstract T doOnDataSet(DataSet ds, Object... payloads);
-}
\ No newline at end of file
+}
diff --git a/components/camel-flink/src/main/java/org/apache/camel/component/flink/DataStreamFlinkProducer.java b/components/camel-flink/src/main/java/org/apache/camel/component/flink/DataStreamFlinkProducer.java
index 93e9b1c..2ef1205 100644
--- a/components/camel-flink/src/main/java/org/apache/camel/component/flink/DataStreamFlinkProducer.java
+++ b/components/camel-flink/src/main/java/org/apache/camel/component/flink/DataStreamFlinkProducer.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.flink;
 
 import java.util.List;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.flink.streaming.api.datastream.DataStream;
@@ -73,4 +74,4 @@
             throw new IllegalArgumentException("Cannot resolve DataStream callback.");
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-flink/src/test/java/org/apache/camel/component/flink/FlinkProducerTest.java b/components/camel-flink/src/test/java/org/apache/camel/component/flink/FlinkProducerTest.java
index 944aa4e..4c54224 100644
--- a/components/camel-flink/src/test/java/org/apache/camel/component/flink/FlinkProducerTest.java
+++ b/components/camel-flink/src/test/java/org/apache/camel/component/flink/FlinkProducerTest.java
@@ -21,7 +21,6 @@
 import java.util.Arrays;
 
 import com.google.common.truth.Truth;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.component.flink.annotations.AnnotatedDataSetCallback;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
index 00541bd..ed4ecd2 100644
--- a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
+++ b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
@@ -22,7 +22,6 @@
 
 import freemarker.template.Configuration;
 import freemarker.template.Template;
-
 import org.apache.camel.Component;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
@@ -158,4 +157,4 @@
         out.setBody(buffer.toString());
         out.setHeaders(exchange.getIn().getHeaders());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerSetHeaderTest.java b/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerSetHeaderTest.java
index 56e398d..a2bc81e 100644
--- a/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerSetHeaderTest.java
+++ b/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerSetHeaderTest.java
@@ -22,9 +22,7 @@
 import org.apache.camel.Processor;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
-
 import org.junit.Test;
-
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class FreemarkerSetHeaderTest extends CamelSpringTestSupport {
@@ -59,4 +57,4 @@
     }
 
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java
index d389a35..b461511 100644
--- a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java
+++ b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java
@@ -44,7 +44,6 @@
 import com.jcraft.jsch.SocketFactory;
 import com.jcraft.jsch.UIKeyboardInteractive;
 import com.jcraft.jsch.UserInfo;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.LoggingLevel;
diff --git a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/strategy/FtpChangedExclusiveReadLockStrategy.java b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/strategy/FtpChangedExclusiveReadLockStrategy.java
index b1878c8..28f239f 100644
--- a/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/strategy/FtpChangedExclusiveReadLockStrategy.java
+++ b/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/strategy/FtpChangedExclusiveReadLockStrategy.java
@@ -219,4 +219,4 @@
     public void setFastExistsCheck(boolean fastExistsCheck) {
         this.fastExistsCheck = fastExistsCheck;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpRecursiveNoopTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpRecursiveNoopTest.java
index 82de336..28f05ff 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpRecursiveNoopTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FromFtpRecursiveNoopTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpBadLoginMockNoopConnectionLeakTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpBadLoginMockNoopConnectionLeakTest.java
index 08d36faa..909399d 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpBadLoginMockNoopConnectionLeakTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpBadLoginMockNoopConnectionLeakTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote;
+
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.Socket;
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDisconnectTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDisconnectTest.java
index 4b839d3..05091f4 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDisconnectTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDisconnectTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.commons.net.ftp.FTPClient;
 import org.junit.Before;
@@ -64,4 +65,4 @@
         assertTrue("The FtpEndpoint should be configured to disconnect", endpoint.isDisconnect());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerRelativeFileNameTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerRelativeFileNameTest.java
index 0dd736e..0fb09a2 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerRelativeFileNameTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerRelativeFileNameTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -62,4 +63,4 @@
         assertDirectoryEquals("target/filename-consumer-hello.txt", mock.getReceivedExchanges().get(1).getIn().getHeader(Exchange.FILE_NAME, String.class));
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerAllowNullBodyFileAlreadyExistTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerAllowNullBodyFileAlreadyExistTest.java
index da595d0..70f3b95 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerAllowNullBodyFileAlreadyExistTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerAllowNullBodyFileAlreadyExistTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -73,4 +74,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectOnBatchCompleteTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectOnBatchCompleteTest.java
index a7d3045..f6c9032 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectOnBatchCompleteTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectOnBatchCompleteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.commons.net.ftp.FTPClient;
@@ -62,4 +63,4 @@
         });
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectTest.java
index 048535d..0311b90 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote;
+
 import org.apache.commons.net.ftp.FTPClient;
 import org.junit.Before;
 import org.junit.Test;
@@ -45,4 +46,4 @@
         assertTrue("The FtpEndpoint should be configured to disconnect", endpoint.isDisconnect());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerFileWithCharsetTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerFileWithCharsetTest.java
index 5005559..8e05fa1 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerFileWithCharsetTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerFileWithCharsetTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
@@ -78,4 +79,4 @@
         assertEquals(32, data[3]);
         assertEquals(-87, data[4]);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/OsgiParserFactoryTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/OsgiParserFactoryTest.java
index 489b38d..27710a5 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/OsgiParserFactoryTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/OsgiParserFactoryTest.java
@@ -153,4 +153,4 @@
         assertThat(result, instanceOf(MacOsPeterFTPEntryParser.class));
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/PaddyRouteTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/PaddyRouteTest.java
index f462afb..7524a86 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/PaddyRouteTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/PaddyRouteTest.java
@@ -20,7 +20,6 @@
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-
 import org.junit.Test;
 
 /**
@@ -57,4 +56,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/RemoteFileProduceOverruleOnlyOnceTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/RemoteFileProduceOverruleOnlyOnceTest.java
index d264060..91d7479 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/RemoteFileProduceOverruleOnlyOnceTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/RemoteFileProduceOverruleOnlyOnceTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote;
+
 import java.util.HashMap;
 import java.util.Map;
 
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerCamelManualTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerCamelManualTest.java
index 9797324..ab8a24d 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerCamelManualTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerCamelManualTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote.manual;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
@@ -48,4 +49,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerCamelRecursiveManualTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerCamelRecursiveManualTest.java
index 01590ca..1135625 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerCamelRecursiveManualTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerCamelRecursiveManualTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote.manual;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
@@ -48,4 +49,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerCamelRecursiveToAbsoluteManualTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerCamelRecursiveToAbsoluteManualTest.java
index 943eb27..f97992e 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerCamelRecursiveToAbsoluteManualTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerCamelRecursiveToAbsoluteManualTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote.manual;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
@@ -48,4 +49,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerNotStepwiseCamelManualTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerNotStepwiseCamelManualTest.java
index 549e9ed..0280a9e 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerNotStepwiseCamelManualTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerNotStepwiseCamelManualTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote.manual;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
@@ -48,4 +49,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerNotStepwiseCamelRecursiveManualTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerNotStepwiseCamelRecursiveManualTest.java
index 18206b0..a4ccc22 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerNotStepwiseCamelRecursiveManualTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerNotStepwiseCamelRecursiveManualTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote.manual;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
@@ -48,4 +49,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerNotStepwiseCamelRecursiveToAbsoluteManualTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerNotStepwiseCamelRecursiveToAbsoluteManualTest.java
index d8b683f..fbde292 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerNotStepwiseCamelRecursiveToAbsoluteManualTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerNotStepwiseCamelRecursiveToAbsoluteManualTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote.manual;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
@@ -48,4 +49,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerScottManualTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerScottManualTest.java
index dcdd007..52b77a8 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerScottManualTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerScottManualTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote.manual;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerScottRecursiveManualTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerScottRecursiveManualTest.java
index 3b93e25..eefcc8a 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerScottRecursiveManualTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/manual/FtpConsumerScottRecursiveManualTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote.manual;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
@@ -48,4 +49,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpChangedReadLockTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpChangedReadLockTest.java
index a0bd343..afc9d02 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpChangedReadLockTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpChangedReadLockTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.file.remote.sftp;
+
 import java.io.File;
 import java.io.FileOutputStream;
 
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleConsumeThroughProxyTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleConsumeThroughProxyTest.java
index 8f5c571..dd425e3 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleConsumeThroughProxyTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleConsumeThroughProxyTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.file.remote.sftp;
 
 import com.jcraft.jsch.ProxyHTTP;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleProduceThroughProxyTest.java b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleProduceThroughProxyTest.java
index d4343b2..a269be9 100644
--- a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleProduceThroughProxyTest.java
+++ b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/SftpSimpleProduceThroughProxyTest.java
@@ -19,7 +19,6 @@
 import java.io.File;
 
 import com.jcraft.jsch.ProxyHTTP;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.test.AvailablePortFinder;
diff --git a/components/camel-ganglia/src/main/java/org/apache/camel/component/ganglia/GangliaConfiguration.java b/components/camel-ganglia/src/main/java/org/apache/camel/component/ganglia/GangliaConfiguration.java
index 4773ca9..42c142f 100644
--- a/components/camel-ganglia/src/main/java/org/apache/camel/component/ganglia/GangliaConfiguration.java
+++ b/components/camel-ganglia/src/main/java/org/apache/camel/component/ganglia/GangliaConfiguration.java
@@ -22,7 +22,6 @@
 import info.ganglia.gmetric4j.gmetric.GMetric;
 import info.ganglia.gmetric4j.gmetric.GMetricSlope;
 import info.ganglia.gmetric4j.gmetric.GMetricType;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
diff --git a/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProducerTest.java b/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProducerTest.java
index 02a907f..67ab789 100644
--- a/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProducerTest.java
+++ b/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProducerTest.java
@@ -22,7 +22,6 @@
 import info.ganglia.gmetric4j.Publisher;
 import info.ganglia.gmetric4j.gmetric.GMetricSlope;
 import info.ganglia.gmetric4j.gmetric.GMetricType;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.junit.Before;
diff --git a/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProtocolV30CamelTest.java b/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProtocolV30CamelTest.java
index af734c2..ff4569b 100644
--- a/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProtocolV30CamelTest.java
+++ b/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProtocolV30CamelTest.java
@@ -26,7 +26,6 @@
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.socket.DatagramPacket;
 import io.netty.handler.codec.MessageToMessageDecoder;
-
 import org.acplt.oncrpc.OncRpcException;
 import org.acplt.oncrpc.XdrBufferDecodingStream;
 import org.apache.camel.BindToRegistry;
@@ -41,14 +40,12 @@
 
 import static info.ganglia.gmetric4j.gmetric.GMetricSlope.NEGATIVE;
 import static info.ganglia.gmetric4j.gmetric.GMetricType.FLOAT;
-
 import static org.apache.camel.component.ganglia.GangliaConfiguration.DEFAULT_DMAX;
 import static org.apache.camel.component.ganglia.GangliaConfiguration.DEFAULT_METRIC_NAME;
 import static org.apache.camel.component.ganglia.GangliaConfiguration.DEFAULT_SLOPE;
 import static org.apache.camel.component.ganglia.GangliaConfiguration.DEFAULT_TMAX;
 import static org.apache.camel.component.ganglia.GangliaConfiguration.DEFAULT_TYPE;
 import static org.apache.camel.component.ganglia.GangliaConfiguration.DEFAULT_UNITS;
-
 import static org.apache.camel.component.ganglia.GangliaConstants.GROUP_NAME;
 import static org.apache.camel.component.ganglia.GangliaConstants.METRIC_DMAX;
 import static org.apache.camel.component.ganglia.GangliaConstants.METRIC_NAME;
diff --git a/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProtocolV31CamelTest.java b/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProtocolV31CamelTest.java
index c6eb8155..465e308 100644
--- a/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProtocolV31CamelTest.java
+++ b/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProtocolV31CamelTest.java
@@ -27,7 +27,6 @@
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.socket.DatagramPacket;
 import io.netty.handler.codec.MessageToMessageDecoder;
-
 import org.acplt.oncrpc.OncRpcException;
 import org.acplt.oncrpc.XdrAble;
 import org.acplt.oncrpc.XdrBufferDecodingStream;
@@ -45,17 +44,14 @@
 
 import static info.ganglia.gmetric4j.gmetric.GMetricSlope.NEGATIVE;
 import static info.ganglia.gmetric4j.gmetric.GMetricType.FLOAT;
-
 import static info.ganglia.gmetric4j.xdr.v31x.Ganglia_msg_formats.gmetadata_full;
 import static info.ganglia.gmetric4j.xdr.v31x.Ganglia_msg_formats.gmetric_string;
-
 import static org.apache.camel.component.ganglia.GangliaConfiguration.DEFAULT_DMAX;
 import static org.apache.camel.component.ganglia.GangliaConfiguration.DEFAULT_METRIC_NAME;
 import static org.apache.camel.component.ganglia.GangliaConfiguration.DEFAULT_SLOPE;
 import static org.apache.camel.component.ganglia.GangliaConfiguration.DEFAULT_TMAX;
 import static org.apache.camel.component.ganglia.GangliaConfiguration.DEFAULT_TYPE;
 import static org.apache.camel.component.ganglia.GangliaConfiguration.DEFAULT_UNITS;
-
 import static org.apache.camel.component.ganglia.GangliaConstants.GROUP_NAME;
 import static org.apache.camel.component.ganglia.GangliaConstants.METRIC_DMAX;
 import static org.apache.camel.component.ganglia.GangliaConstants.METRIC_NAME;
diff --git a/components/camel-geocoder/src/test/java/org/apache/camel/component/geocoder/GeoCoderProxyTest.java b/components/camel-geocoder/src/test/java/org/apache/camel/component/geocoder/GeoCoderProxyTest.java
index dcbaf09..25808c8 100644
--- a/components/camel-geocoder/src/test/java/org/apache/camel/component/geocoder/GeoCoderProxyTest.java
+++ b/components/camel-geocoder/src/test/java/org/apache/camel/component/geocoder/GeoCoderProxyTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.geocoder;
 
-
 import com.google.maps.GeoApiContext;
 import com.google.maps.GeocodingApi;
 import com.google.maps.GeocodingApiRequest;
diff --git a/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLComponent.java b/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLComponent.java
index 3ec39fd..dd04430 100644
--- a/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLComponent.java
+++ b/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLComponent.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.google.bigquery.sql;
 
 import java.util.Map;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory;
diff --git a/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpoint.java b/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpoint.java
index 4f1a001..540616b 100644
--- a/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpoint.java
+++ b/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpoint.java
@@ -20,7 +20,6 @@
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultEndpoint;
diff --git a/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLProducer.java b/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLProducer.java
index 6f57294..723e823 100644
--- a/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLProducer.java
+++ b/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLProducer.java
@@ -28,7 +28,6 @@
 import com.google.api.services.bigquery.model.QueryParameterValue;
 import com.google.api.services.bigquery.model.QueryRequest;
 import com.google.api.services.bigquery.model.QueryResponse;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.RuntimeExchangeException;
diff --git a/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/SqlHelper.java b/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/SqlHelper.java
index 0b22bd5..051f379 100644
--- a/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/SqlHelper.java
+++ b/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/SqlHelper.java
@@ -30,7 +30,6 @@
 import org.apache.camel.RuntimeExchangeException;
 import org.apache.camel.support.ResourceHelper;
 
-
 public final class SqlHelper {
 
     private static Pattern pattern = Pattern.compile("\\$\\{(\\w+)}");
diff --git a/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/BigQueryTestSupport.java b/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/BigQueryTestSupport.java
index 1ebd3cd..417dd09 100644
--- a/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/BigQueryTestSupport.java
+++ b/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/BigQueryTestSupport.java
@@ -31,7 +31,6 @@
 import com.google.api.services.bigquery.model.TableFieldSchema;
 import com.google.api.services.bigquery.model.TableReference;
 import com.google.api.services.bigquery.model.TableSchema;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.google.bigquery.GoogleBigQueryComponent;
diff --git a/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/sql/SqlQueryFromResourceTest.java b/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/sql/SqlQueryFromResourceTest.java
index a573bf4..62d284c 100644
--- a/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/sql/SqlQueryFromResourceTest.java
+++ b/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/sql/SqlQueryFromResourceTest.java
@@ -19,6 +19,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
+
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/sql/SqlQueryTest.java b/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/sql/SqlQueryTest.java
index 4df835e..9628661 100644
--- a/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/sql/SqlQueryTest.java
+++ b/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/integration/sql/SqlQueryTest.java
@@ -19,6 +19,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
+
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/BaseBigQueryTest.java b/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/BaseBigQueryTest.java
index d71b1fb..93e84c7 100644
--- a/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/BaseBigQueryTest.java
+++ b/components/camel-google-bigquery/src/test/java/org/apache/camel/component/google/bigquery/unit/BaseBigQueryTest.java
@@ -29,7 +29,6 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-
 public class BaseBigQueryTest extends CamelTestSupport {
     protected GoogleBigQueryEndpoint endpoint = mock(GoogleBigQueryEndpoint.class);
     protected Bigquery.Tabledata.InsertAll mockInsertall = mock(Bigquery.Tabledata.InsertAll.class);
diff --git a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarEndpoint.java b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarEndpoint.java
index 1261437..7e044b2 100644
--- a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarEndpoint.java
+++ b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/GoogleCalendarEndpoint.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.google.api.services.calendar.Calendar;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConsumer.java b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConsumer.java
index ee642f1..6434323 100644
--- a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConsumer.java
+++ b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConsumer.java
@@ -26,7 +26,6 @@
 import com.google.api.services.calendar.Calendar;
 import com.google.api.services.calendar.model.Event;
 import com.google.api.services.calendar.model.Events;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
diff --git a/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/AbstractGoogleCalendarTestSupport.java b/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/AbstractGoogleCalendarTestSupport.java
index c01e2c0..e906f9f 100644
--- a/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/AbstractGoogleCalendarTestSupport.java
+++ b/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/AbstractGoogleCalendarTestSupport.java
@@ -23,7 +23,6 @@
 import java.util.Random;
 
 import com.google.api.services.calendar.model.Calendar;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.support.PropertyBindingSupport;
diff --git a/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarCalendarListIntegrationTest.java b/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarCalendarListIntegrationTest.java
index 9f67f47..7351707 100644
--- a/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarCalendarListIntegrationTest.java
+++ b/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarCalendarListIntegrationTest.java
@@ -16,11 +16,9 @@
  */
 package org.apache.camel.component.google.calendar;
 
-
 import com.google.api.services.calendar.model.Calendar;
 import com.google.api.services.calendar.model.CalendarList;
 import com.google.api.services.calendar.model.CalendarListEntry;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.google.calendar.internal.CalendarCalendarListApiMethod;
 import org.apache.camel.component.google.calendar.internal.GoogleCalendarApiCollection;
diff --git a/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarCalendarsIntegrationTest.java b/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarCalendarsIntegrationTest.java
index 90eb7b6..71882ea 100644
--- a/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarCalendarsIntegrationTest.java
+++ b/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarCalendarsIntegrationTest.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import com.google.api.services.calendar.model.Calendar;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.google.calendar.internal.CalendarCalendarsApiMethod;
 import org.apache.camel.component.google.calendar.internal.GoogleCalendarApiCollection;
diff --git a/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarEventsIntegrationTest.java b/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarEventsIntegrationTest.java
index 033c4bf..8216904 100644
--- a/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarEventsIntegrationTest.java
+++ b/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarEventsIntegrationTest.java
@@ -26,7 +26,6 @@
 import com.google.api.services.calendar.model.Event;
 import com.google.api.services.calendar.model.EventAttendee;
 import com.google.api.services.calendar.model.EventDateTime;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.google.calendar.internal.CalendarEventsApiMethod;
 import org.apache.camel.component.google.calendar.internal.GoogleCalendarApiCollection;
diff --git a/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarFreebusyIntegrationTest.java b/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarFreebusyIntegrationTest.java
index 3784a89..5d8c3e6 100644
--- a/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarFreebusyIntegrationTest.java
+++ b/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/CalendarFreebusyIntegrationTest.java
@@ -22,7 +22,6 @@
 import com.google.api.client.util.DateTime;
 import com.google.api.services.calendar.model.FreeBusyRequest;
 import com.google.api.services.calendar.model.FreeBusyRequestItem;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.google.calendar.internal.CalendarFreebusyApiMethod;
 import org.apache.camel.component.google.calendar.internal.GoogleCalendarApiCollection;
diff --git a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/InteractiveGoogleDriveClientFactory.java b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/InteractiveGoogleDriveClientFactory.java
index b424335..f18c804 100644
--- a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/InteractiveGoogleDriveClientFactory.java
+++ b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/InteractiveGoogleDriveClientFactory.java
@@ -68,4 +68,4 @@
         // authorize
         return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FileConverterIntegrationTest.java b/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FileConverterIntegrationTest.java
index 7d7e12a..9810c2a 100644
--- a/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FileConverterIntegrationTest.java
+++ b/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FileConverterIntegrationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.google.drive;
+
 import com.google.api.services.drive.model.File;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.google.drive.internal.DriveFilesApiMethod;
diff --git a/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FilesConsumerIntegrationTest.java b/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FilesConsumerIntegrationTest.java
index 373ff4b..61d3a4f 100644
--- a/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FilesConsumerIntegrationTest.java
+++ b/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FilesConsumerIntegrationTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.google.drive;
 
-
 import com.google.api.services.drive.model.File;
 import com.google.api.services.drive.model.FileList;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/BatchGoogleMailClientFactory.java b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/BatchGoogleMailClientFactory.java
index 27ef95f..93df163 100644
--- a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/BatchGoogleMailClientFactory.java
+++ b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/BatchGoogleMailClientFactory.java
@@ -21,7 +21,6 @@
 import com.google.api.client.http.javanet.NetHttpTransport;
 import com.google.api.client.json.jackson2.JacksonFactory;
 import com.google.api.services.gmail.Gmail;
-
 import org.apache.camel.RuntimeCamelException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailComponent.java b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailComponent.java
index ea0f560..37137ec 100644
--- a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailComponent.java
+++ b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailComponent.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.google.mail;
 
 import com.google.api.services.gmail.Gmail;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.google.mail.internal.GoogleMailApiCollection;
diff --git a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailComponentVerifierExtension.java b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailComponentVerifierExtension.java
index d42dfff..0a0aec7 100644
--- a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailComponentVerifierExtension.java
+++ b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailComponentVerifierExtension.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.google.api.services.gmail.Gmail;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
@@ -75,4 +74,4 @@
 
         return builder.build();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailEndpoint.java b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailEndpoint.java
index 3ecfd49..1e80761 100644
--- a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailEndpoint.java
+++ b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/GoogleMailEndpoint.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.google.api.services.gmail.Gmail;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamComponent.java b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamComponent.java
index 1c0443b..739a7f5 100644
--- a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamComponent.java
+++ b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.google.api.services.gmail.Gmail;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.google.mail.BatchGoogleMailClientFactory;
diff --git a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamComponentVerifierExtension.java b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamComponentVerifierExtension.java
index aca6f63..4fc0689 100644
--- a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamComponentVerifierExtension.java
+++ b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamComponentVerifierExtension.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.google.api.services.gmail.Gmail;
-
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
 import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
@@ -78,4 +77,4 @@
 
         return builder.build();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
index 613be03..2b85f17 100644
--- a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
+++ b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
@@ -26,7 +26,6 @@
 import com.google.api.services.gmail.model.ListMessagesResponse;
 import com.google.api.services.gmail.model.Message;
 import com.google.api.services.gmail.model.ModifyMessageRequest;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
diff --git a/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersLabelsIntegrationTest.java b/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersLabelsIntegrationTest.java
index 1c59a57..03c3f20 100644
--- a/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersLabelsIntegrationTest.java
+++ b/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersLabelsIntegrationTest.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import com.google.api.services.gmail.model.Label;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.google.mail.internal.GmailUsersLabelsApiMethod;
 import org.apache.camel.component.google.mail.internal.GoogleMailApiCollection;
diff --git a/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersMessagesConsumerIntegrationTest.java b/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersMessagesConsumerIntegrationTest.java
index 4b4b161..6b350ae 100644
--- a/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersMessagesConsumerIntegrationTest.java
+++ b/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersMessagesConsumerIntegrationTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.google.mail;
 
 import com.google.api.services.gmail.model.ListMessagesResponse;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.google.mail.internal.GmailUsersMessagesApiMethod;
 import org.apache.camel.component.google.mail.internal.GoogleMailApiCollection;
diff --git a/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersMessagesIntegrationTest.java b/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersMessagesIntegrationTest.java
index a7122bb..a027153 100644
--- a/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersMessagesIntegrationTest.java
+++ b/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersMessagesIntegrationTest.java
@@ -30,7 +30,6 @@
 import com.google.api.client.repackaged.org.apache.commons.codec.binary.Base64;
 import com.google.api.services.gmail.model.ListMessagesResponse;
 import com.google.api.services.gmail.model.Message;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.google.mail.internal.GmailUsersMessagesApiMethod;
 import org.apache.camel.component.google.mail.internal.GoogleMailApiCollection;
diff --git a/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersThreadsIntegrationTest.java b/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersThreadsIntegrationTest.java
index 3e07be8..08c59fe 100644
--- a/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersThreadsIntegrationTest.java
+++ b/components/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/GmailUsersThreadsIntegrationTest.java
@@ -28,7 +28,6 @@
 
 import com.google.api.client.repackaged.org.apache.commons.codec.binary.Base64;
 import com.google.api.services.gmail.model.Message;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.google.mail.internal.GmailUsersThreadsApiMethod;
 import org.apache.camel.component.google.mail.internal.GoogleMailApiCollection;
diff --git a/components/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/consumer/PubsubAcknowledgement.java b/components/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/consumer/PubsubAcknowledgement.java
index 3292098..cf9ff45 100644
--- a/components/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/consumer/PubsubAcknowledgement.java
+++ b/components/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/consumer/PubsubAcknowledgement.java
@@ -25,7 +25,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public abstract class PubsubAcknowledgement {
 
     protected Logger logger;
diff --git a/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/AckModeNoneTest.java b/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/AckModeNoneTest.java
index b2c8360b..c2eb133 100644
--- a/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/AckModeNoneTest.java
+++ b/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/AckModeNoneTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.google.pubsub.integration;
+
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/AcknowledgementTest.java b/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/AcknowledgementTest.java
index ef60839..5cd1f4c 100644
--- a/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/AcknowledgementTest.java
+++ b/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/AcknowledgementTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.google.pubsub.integration;
+
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/BodyTypesTest.java b/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/BodyTypesTest.java
index 60144ce..81e0648 100644
--- a/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/BodyTypesTest.java
+++ b/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/BodyTypesTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.google.pubsub.integration;
+
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
diff --git a/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/GroupedExchangeRoundtripTest.java b/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/GroupedExchangeRoundtripTest.java
index 63c7b2b..d330430 100644
--- a/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/GroupedExchangeRoundtripTest.java
+++ b/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/GroupedExchangeRoundtripTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.google.pubsub.integration;
+
 import java.util.List;
 
 import org.apache.camel.Endpoint;
diff --git a/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/SingleExchangeRoundtripTest.java b/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/SingleExchangeRoundtripTest.java
index adaa9ee..13e0b9a 100644
--- a/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/SingleExchangeRoundtripTest.java
+++ b/components/camel-google-pubsub/src/test/java/org/apache/camel/component/google/pubsub/integration/SingleExchangeRoundtripTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.google.pubsub.integration;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsComponent.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsComponent.java
index 3da0c5a..e17fdfb 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsComponent.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsComponent.java
@@ -25,7 +25,6 @@
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.component.AbstractApiComponent;
 
-
 /**
  * Represents the component that manages {@link GoogleSheetsEndpoint}.
  */
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
index a7dc108..a0f667c 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.google.sheets;
 
-
 import java.util.Map;
 import java.util.Map.Entry;
 
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
index be8d2eb..89fa4d1 100644
--- a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
@@ -32,7 +32,6 @@
 import com.google.api.services.sheets.v4.model.Spreadsheet;
 import com.google.api.services.sheets.v4.model.SpreadsheetProperties;
 import com.google.api.services.sheets.v4.model.ValueRange;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.component.google.sheets.internal.GoogleSheetsConstants;
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServer.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServer.java
index 9956bab..00473df 100644
--- a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServer.java
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/server/GoogleSheetsApiTestServer.java
@@ -44,7 +44,6 @@
 import com.consol.citrus.http.server.HttpServerBuilder;
 import com.consol.citrus.http.servlet.GzipHttpServletResponseWrapper;
 import com.consol.citrus.http.servlet.RequestCachingServletFilter;
-
 import org.eclipse.jetty.server.HttpConfiguration;
 import org.eclipse.jetty.server.HttpConnectionFactory;
 import org.eclipse.jetty.server.SecureRequestCustomizer;
diff --git a/components/camel-gora/src/main/java/org/apache/camel/component/gora/GoraComponent.java b/components/camel-gora/src/main/java/org/apache/camel/component/gora/GoraComponent.java
index b86dcce..2c27641 100644
--- a/components/camel-gora/src/main/java/org/apache/camel/component/gora/GoraComponent.java
+++ b/components/camel-gora/src/main/java/org/apache/camel/component/gora/GoraComponent.java
@@ -100,4 +100,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-gora/src/main/java/org/apache/camel/component/gora/GoraConsumer.java b/components/camel-gora/src/main/java/org/apache/camel/component/gora/GoraConsumer.java
index 5ab9786..be0101b 100644
--- a/components/camel-gora/src/main/java/org/apache/camel/component/gora/GoraConsumer.java
+++ b/components/camel-gora/src/main/java/org/apache/camel/component/gora/GoraConsumer.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.gora;
 
 import java.lang.reflect.InvocationTargetException;
+
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
diff --git a/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeComponent.java b/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeComponent.java
index 237ad40..3003607 100644
--- a/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeComponent.java
+++ b/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import groovy.lang.GroovyClassLoader;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
diff --git a/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeEndpoint.java b/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeEndpoint.java
index 7a7dfe8..2d50415 100644
--- a/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeEndpoint.java
+++ b/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeEndpoint.java
@@ -21,7 +21,6 @@
 
 import groovy.grape.Grape;
 import groovy.lang.Closure;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeProducer.java b/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeProducer.java
index ff52e9e..0ca7da2 100644
--- a/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeProducer.java
+++ b/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeProducer.java
@@ -20,7 +20,6 @@
 import java.util.List;
 
 import groovy.grape.Grape;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.support.DefaultProducer;
 
diff --git a/components/camel-graphql/src/test/java/org/apache/camel/component/graphql/GraphqlComponentTest.java b/components/camel-graphql/src/test/java/org/apache/camel/component/graphql/GraphqlComponentTest.java
index 40b9ec7..13545fe 100644
--- a/components/camel-graphql/src/test/java/org/apache/camel/component/graphql/GraphqlComponentTest.java
+++ b/components/camel-graphql/src/test/java/org/apache/camel/component/graphql/GraphqlComponentTest.java
@@ -19,7 +19,6 @@
 import java.io.IOException;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovySetFixedHeaderTest.java b/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovySetFixedHeaderTest.java
index 86c5694..e05800f 100644
--- a/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovySetFixedHeaderTest.java
+++ b/components/camel-groovy/src/test/java/org/apache/camel/language/groovy/GroovySetFixedHeaderTest.java
@@ -47,4 +47,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcUtils.java b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcUtils.java
index 7077e2e..09abb6e 100644
--- a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcUtils.java
+++ b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcUtils.java
@@ -120,9 +120,7 @@
             StreamObserver<Object> requestObserver = (StreamObserver<Object>) ObjectHelper.invokeMethod(method, asyncStubClass, responseObserver);
             if (request instanceof List) {
                 List<Object> requestList = (List<Object>)request;
-                requestList.forEach((requestItem) -> {
-                    requestObserver.onNext(requestItem);
-                });
+                requestList.forEach(requestObserver::onNext);
             } else {
                 requestObserver.onNext(request);
             }
diff --git a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcMethodHandler.java b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcMethodHandler.java
index 62e2a05..14c2eda 100644
--- a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcMethodHandler.java
+++ b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcMethodHandler.java
@@ -67,9 +67,7 @@
             Object responseBody = exchange.getIn().getBody();
             if (responseBody instanceof List) {
                 List<Object> responseList = (List<Object>)responseBody;
-                responseList.forEach((responseItem) -> {
-                    responseObserver.onNext(responseItem);
-                });
+                responseList.forEach(responseObserver::onNext);
             } else {
                 responseObserver.onNext(responseBody);
             }
diff --git a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcRequestAggregationStreamObserver.java b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcRequestAggregationStreamObserver.java
index 292426d..19782e8 100644
--- a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcRequestAggregationStreamObserver.java
+++ b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcRequestAggregationStreamObserver.java
@@ -70,9 +70,7 @@
 
             if (responseBody instanceof List) {
                 List<?> responseList = (List<?>)responseBody;
-                responseList.forEach((responseItem) -> {
-                    responseObserver.onNext(responseItem);
-                });
+                responseList.forEach(responseObserver::onNext);
             } else {
                 responseObserver.onNext(responseBody);
             }
diff --git a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcRequestPropagationStreamObserver.java b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcRequestPropagationStreamObserver.java
index d0fa36f..33f2a52 100644
--- a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcRequestPropagationStreamObserver.java
+++ b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcRequestPropagationStreamObserver.java
@@ -58,9 +58,7 @@
             
             if (responseBody instanceof List) {
                 List<?> responseList = (List<?>)responseBody;
-                responseList.forEach((responseItem) -> {
-                    responseObserver.onNext(responseItem);
-                });
+                responseList.forEach(responseObserver::onNext);
             } else {
                 responseObserver.onNext(responseBody);
             }
diff --git a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcConsumerSecurityTest.java b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcConsumerSecurityTest.java
index 56893b5..b426a73 100644
--- a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcConsumerSecurityTest.java
+++ b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcConsumerSecurityTest.java
@@ -216,4 +216,4 @@
             return PongResponse.newBuilder().setPongName(pingRequests.getPingName() + GRPC_TEST_PONG_VALUE).setPongId(pingRequests.getPingId()).build();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerAsyncTest.java b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerAsyncTest.java
index c7c3ff2..d11ffca 100644
--- a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerAsyncTest.java
+++ b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerAsyncTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.grpc;
+
 import java.io.IOException;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
diff --git a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerSecurityTest.java b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerSecurityTest.java
index 6e53d15..657cc20 100644
--- a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerSecurityTest.java
+++ b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerSecurityTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.grpc;
+
 import java.io.File;
 import java.io.IOException;
 
diff --git a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerSyncTest.java b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerSyncTest.java
index ceed275..740c7b7 100644
--- a/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerSyncTest.java
+++ b/components/camel-grpc/src/test/java/org/apache/camel/component/grpc/GrpcProducerSyncTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.grpc;
+
 import java.io.IOException;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
diff --git a/components/camel-gson/src/test/java/org/apache/camel/component/gson/GsonDataFormatTest.java b/components/camel-gson/src/test/java/org/apache/camel/component/gson/GsonDataFormatTest.java
index 57e4020..4770f49 100644
--- a/components/camel-gson/src/test/java/org/apache/camel/component/gson/GsonDataFormatTest.java
+++ b/components/camel-gson/src/test/java/org/apache/camel/component/gson/GsonDataFormatTest.java
@@ -18,6 +18,7 @@
 
 import java.io.*;
 import java.util.*;
+
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
diff --git a/components/camel-gson/src/test/java/org/apache/camel/component/gson/GsonJsonDataFormatTest.java b/components/camel-gson/src/test/java/org/apache/camel/component/gson/GsonJsonDataFormatTest.java
index 5963d3d..4c83a84 100644
--- a/components/camel-gson/src/test/java/org/apache/camel/component/gson/GsonJsonDataFormatTest.java
+++ b/components/camel-gson/src/test/java/org/apache/camel/component/gson/GsonJsonDataFormatTest.java
@@ -20,7 +20,6 @@
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.model.dataformat.JsonLibrary;
-
 import org.junit.Test;
 
 public class GsonJsonDataFormatTest extends GsonMarshalTest {
@@ -49,4 +48,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-gson/src/test/java/org/apache/camel/component/gson/GsonMarshalListTest.java b/components/camel-gson/src/test/java/org/apache/camel/component/gson/GsonMarshalListTest.java
index cf4972b..523adc1 100644
--- a/components/camel-gson/src/test/java/org/apache/camel/component/gson/GsonMarshalListTest.java
+++ b/components/camel-gson/src/test/java/org/apache/camel/component/gson/GsonMarshalListTest.java
@@ -21,7 +21,6 @@
 import java.util.List;
 
 import com.google.gson.reflect.TypeToken;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-guava-eventbus/src/main/java/org/apache/camel/component/guava/eventbus/CamelEventHandler.java b/components/camel-guava-eventbus/src/main/java/org/apache/camel/component/guava/eventbus/CamelEventHandler.java
index 3ed4af2..f2b7c1d 100644
--- a/components/camel-guava-eventbus/src/main/java/org/apache/camel/component/guava/eventbus/CamelEventHandler.java
+++ b/components/camel-guava-eventbus/src/main/java/org/apache/camel/component/guava/eventbus/CamelEventHandler.java
@@ -60,4 +60,4 @@
         });
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-guava-eventbus/src/main/java/org/apache/camel/component/guava/eventbus/GuavaEventBusComponent.java b/components/camel-guava-eventbus/src/main/java/org/apache/camel/component/guava/eventbus/GuavaEventBusComponent.java
index 58e76d7..472d0a2 100644
--- a/components/camel-guava-eventbus/src/main/java/org/apache/camel/component/guava/eventbus/GuavaEventBusComponent.java
+++ b/components/camel-guava-eventbus/src/main/java/org/apache/camel/component/guava/eventbus/GuavaEventBusComponent.java
@@ -69,4 +69,4 @@
         this.listenerInterface = listenerInterface;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusComponentTest.java b/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusComponentTest.java
index 46c3803..8d6ed60 100644
--- a/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusComponentTest.java
+++ b/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusComponentTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.guava.eventbus;
 
 import com.google.common.eventbus.EventBus;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusConsumerTest.java b/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusConsumerTest.java
index 9a67592..f415a84 100644
--- a/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusConsumerTest.java
+++ b/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusConsumerTest.java
@@ -19,7 +19,6 @@
 import java.util.Date;
 
 import com.google.common.eventbus.EventBus;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusConsumingDeadEventsTest.java b/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusConsumingDeadEventsTest.java
index 0b4b557..9694591 100644
--- a/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusConsumingDeadEventsTest.java
+++ b/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusConsumingDeadEventsTest.java
@@ -20,7 +20,6 @@
 
 import com.google.common.eventbus.DeadEvent;
 import com.google.common.eventbus.EventBus;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusProducerTest.java b/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusProducerTest.java
index 30b5ca1..de7a245 100644
--- a/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusProducerTest.java
+++ b/components/camel-guava-eventbus/src/test/java/org/apache/camel/component/guava/eventbus/GuavaEventBusProducerTest.java
@@ -18,7 +18,6 @@
 
 import com.google.common.eventbus.EventBus;
 import com.google.common.eventbus.Subscribe;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastDefaultComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastDefaultComponent.java
index c52f0070..54ec94a 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastDefaultComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/HazelcastDefaultComponent.java
@@ -28,7 +28,6 @@
 import com.hazelcast.config.XmlConfigBuilder;
 import com.hazelcast.core.Hazelcast;
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberComponent.java
index c06eba3..bd9e72b 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.hazelcast.HazelcastDefaultComponent;
 import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberProducer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberProducer.java
index 2e1631e..2a39a1f 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberProducer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/atomicnumber/HazelcastAtomicnumberProducer.java
@@ -20,7 +20,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IAtomicLong;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.hazelcast.HazelcastComponentHelper;
 import org.apache.camel.component.hazelcast.HazelcastConstants;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/instance/HazelcastInstanceComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/instance/HazelcastInstanceComponent.java
index 830d599..805d8a6 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/instance/HazelcastInstanceComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/instance/HazelcastInstanceComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.hazelcast.HazelcastDefaultComponent;
 import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListComponent.java
index c10390e..eabe0a8 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.hazelcast.HazelcastDefaultComponent;
 import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListConsumer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListConsumer.java
index e24de62..79c8346 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListConsumer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListConsumer.java
@@ -18,7 +18,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IList;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListEndpoint.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListEndpoint.java
index 43ec2c0..f3289be 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListEndpoint.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListEndpoint.java
@@ -48,4 +48,4 @@
         return new HazelcastListProducer(hazelcastInstance, this, cacheName);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListProducer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListProducer.java
index 679aa37..8c6fae3 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListProducer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/list/HazelcastListProducer.java
@@ -21,7 +21,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IList;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Producer;
 import org.apache.camel.component.hazelcast.HazelcastComponentHelper;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/listener/CamelEntryListener.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/listener/CamelEntryListener.java
index a9e5f73..5ef0811 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/listener/CamelEntryListener.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/listener/CamelEntryListener.java
@@ -18,7 +18,6 @@
 
 import com.hazelcast.core.EntryEvent;
 import com.hazelcast.core.EntryListener;
-
 import com.hazelcast.core.MapEvent;
 import org.apache.camel.component.hazelcast.HazelcastConstants;
 import org.apache.camel.component.hazelcast.HazelcastDefaultConsumer;
@@ -61,4 +60,4 @@
     public void entryUpdated(EntryEvent<Object, Object> event) {
         this.sendExchange(HazelcastConstants.UPDATED, event.getKey(), event.getValue());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/listener/CamelItemListener.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/listener/CamelItemListener.java
index 02feb10..7cd2cfc 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/listener/CamelItemListener.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/listener/CamelItemListener.java
@@ -18,7 +18,6 @@
 
 import com.hazelcast.core.ItemEvent;
 import com.hazelcast.core.ItemListener;
-
 import org.apache.camel.component.hazelcast.HazelcastConstants;
 import org.apache.camel.component.hazelcast.HazelcastDefaultConsumer;
 
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/listener/CamelMapListener.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/listener/CamelMapListener.java
index e332f5a..362afbe 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/listener/CamelMapListener.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/listener/CamelMapListener.java
@@ -64,4 +64,4 @@
     public void mapEvicted(MapEvent event) {
         // noop
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapComponent.java
index b03d1ca..739735c 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.hazelcast.HazelcastDefaultComponent;
 import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java
index eb783b6..afe3ec1 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/map/HazelcastMapProducer.java
@@ -24,7 +24,6 @@
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IMap;
 import com.hazelcast.query.SqlPredicate;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.hazelcast.HazelcastComponentHelper;
 import org.apache.camel.component.hazelcast.HazelcastConstants;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/multimap/HazelcastMultimapComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/multimap/HazelcastMultimapComponent.java
index 662faa7..083ce5c 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/multimap/HazelcastMultimapComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/multimap/HazelcastMultimapComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.hazelcast.HazelcastDefaultComponent;
 import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/multimap/HazelcastMultimapConsumer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/multimap/HazelcastMultimapConsumer.java
index ffe542b..182854f 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/multimap/HazelcastMultimapConsumer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/multimap/HazelcastMultimapConsumer.java
@@ -18,7 +18,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.MultiMap;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
 import org.apache.camel.component.hazelcast.HazelcastDefaultConsumer;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/multimap/HazelcastMultimapProducer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/multimap/HazelcastMultimapProducer.java
index 90641b4..940794f 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/multimap/HazelcastMultimapProducer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/multimap/HazelcastMultimapProducer.java
@@ -20,7 +20,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.MultiMap;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.hazelcast.HazelcastComponentHelper;
 import org.apache.camel.component.hazelcast.HazelcastConstants;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueComponent.java
index 7e733cb..1a7ac15 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.hazelcast.HazelcastDefaultComponent;
 import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueConsumer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueConsumer.java
index 714fd75..d0a9e34 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueConsumer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueConsumer.java
@@ -21,7 +21,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IQueue;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueEndpoint.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueEndpoint.java
index 7629262..c4ceef4 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueEndpoint.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueEndpoint.java
@@ -19,7 +19,6 @@
 import java.util.concurrent.ExecutorService;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueProducer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueProducer.java
index 284b445..19168af 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueProducer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/queue/HazelcastQueueProducer.java
@@ -22,7 +22,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IQueue;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.hazelcast.HazelcastComponentHelper;
 import org.apache.camel.component.hazelcast.HazelcastConstants;
@@ -174,4 +173,4 @@
         Collection body = exchange.getIn().getBody(Collection.class);
         this.queue.retainAll(body);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/replicatedmap/HazelcastReplicatedmapComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/replicatedmap/HazelcastReplicatedmapComponent.java
index 603f99c..7b6a67e 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/replicatedmap/HazelcastReplicatedmapComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/replicatedmap/HazelcastReplicatedmapComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.hazelcast.HazelcastDefaultComponent;
 import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/replicatedmap/HazelcastReplicatedmapConsumer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/replicatedmap/HazelcastReplicatedmapConsumer.java
index a6ca99a..87dcef5 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/replicatedmap/HazelcastReplicatedmapConsumer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/replicatedmap/HazelcastReplicatedmapConsumer.java
@@ -18,7 +18,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.ReplicatedMap;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
 import org.apache.camel.component.hazelcast.HazelcastDefaultConsumer;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/replicatedmap/HazelcastReplicatedmapProducer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/replicatedmap/HazelcastReplicatedmapProducer.java
index 72f411e..96bf04a 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/replicatedmap/HazelcastReplicatedmapProducer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/replicatedmap/HazelcastReplicatedmapProducer.java
@@ -20,7 +20,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.ReplicatedMap;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.hazelcast.HazelcastComponentHelper;
 import org.apache.camel.component.hazelcast.HazelcastConstants;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferComponent.java
index 5ddd4d9..aa0e8f5 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.hazelcast.HazelcastDefaultComponent;
 import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferProducer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferProducer.java
index cee2c87..0d7b4cd 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferProducer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/ringbuffer/HazelcastRingbufferProducer.java
@@ -18,7 +18,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.ringbuffer.Ringbuffer;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.hazelcast.HazelcastComponentHelper;
 import org.apache.camel.component.hazelcast.HazelcastConstants;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/seda/HazelcastSedaComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/seda/HazelcastSedaComponent.java
index 6cbf7f8..c8a8824 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/seda/HazelcastSedaComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/seda/HazelcastSedaComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.hazelcast.HazelcastDefaultComponent;
 import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/seda/HazelcastSedaConsumer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/seda/HazelcastSedaConsumer.java
index 33574ee..070dcb0 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/seda/HazelcastSedaConsumer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/seda/HazelcastSedaConsumer.java
@@ -21,7 +21,6 @@
 
 import com.hazelcast.core.BaseQueue;
 import com.hazelcast.transaction.TransactionContext;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Consumer;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetComponent.java
index 3030742..4e27d68 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.hazelcast.HazelcastDefaultComponent;
 import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetConsumer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetConsumer.java
index 577a687..cdbb56d 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetConsumer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetConsumer.java
@@ -18,7 +18,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.ISet;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetEndpoint.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetEndpoint.java
index 8eea1e1..cf295ee 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetEndpoint.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetEndpoint.java
@@ -49,4 +49,4 @@
         return new HazelcastSetProducer(hazelcastInstance, this, cacheName);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetProducer.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetProducer.java
index 8e16522..2005723 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetProducer.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/set/HazelcastSetProducer.java
@@ -20,7 +20,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.ISet;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Producer;
 import org.apache.camel.component.hazelcast.HazelcastComponentHelper;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/topic/HazelcastTopicComponent.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/topic/HazelcastTopicComponent.java
index 98cec49..2051b8a 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/topic/HazelcastTopicComponent.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/topic/HazelcastTopicComponent.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.hazelcast.HazelcastDefaultComponent;
 import org.apache.camel.component.hazelcast.HazelcastDefaultEndpoint;
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepository.java b/components/camel-hazelcast/src/main/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepository.java
index fefec6c..7501eb1 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepository.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepository.java
@@ -29,7 +29,6 @@
 import com.hazelcast.core.TransactionalMap;
 import com.hazelcast.transaction.TransactionContext;
 import com.hazelcast.transaction.TransactionOptions;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.OptimisticLockingAggregationRepository;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java
index 764224e..4bf5266 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerForSpringTest.java
@@ -21,7 +21,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IAtomicLong;
-
 import org.junit.After;
 import org.junit.Test;
 import org.mockito.Mock;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerTest.java
index 64fc1af..922b762 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastAtomicnumberProducerTest.java
@@ -21,7 +21,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IAtomicLong;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.After;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastCamelTestHelper.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastCamelTestHelper.java
index 2282f42..f13b51a 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastCamelTestHelper.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastCamelTestHelper.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.hazelcast;
 
 import com.hazelcast.core.HazelcastInstance;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.hazelcast.atomicnumber.HazelcastAtomicnumberComponent;
 import org.apache.camel.component.hazelcast.instance.HazelcastInstanceComponent;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastCamelTestSupport.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastCamelTestSupport.java
index 54133c2..92fb0b6 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastCamelTestSupport.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastCamelTestSupport.java
@@ -22,6 +22,7 @@
 import org.junit.After;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+
 import static org.mockito.Mockito.*;
 
 public class HazelcastCamelTestSupport extends CamelTestSupport {
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastComponentInstanceReferenceNameSpringTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastComponentInstanceReferenceNameSpringTest.java
index aa60c19..66da51c 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastComponentInstanceReferenceNameSpringTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastComponentInstanceReferenceNameSpringTest.java
@@ -20,7 +20,6 @@
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class HazelcastComponentInstanceReferenceNameSpringTest extends HazelcastCamelSpringTestSupport {
 
     private static final String TEST_VALUE = "TestValue";
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastComponentInstanceReferenceSpringTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastComponentInstanceReferenceSpringTest.java
index 8081f0c..cceaf70 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastComponentInstanceReferenceSpringTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastComponentInstanceReferenceSpringTest.java
@@ -20,7 +20,6 @@
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class HazelcastComponentInstanceReferenceSpringTest extends HazelcastCamelSpringTestSupport {
 
     private static final String TEST_VALUE = "TestValue";
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastInstanceConsumerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastInstanceConsumerTest.java
index 6d1ee00..da5d67e 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastInstanceConsumerTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastInstanceConsumerTest.java
@@ -22,7 +22,6 @@
 
 import com.hazelcast.core.Cluster;
 import com.hazelcast.core.HazelcastInstance;
-
 import com.hazelcast.core.IList;
 import com.hazelcast.core.Member;
 import com.hazelcast.core.MembershipEvent;
@@ -30,7 +29,6 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastListProducerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastListProducerTest.java
index f889d38..b3848c8 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastListProducerTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastListProducerTest.java
@@ -21,7 +21,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IList;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.After;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerForSpringTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerForSpringTest.java
index 4b1c934..226c0b2 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerForSpringTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerForSpringTest.java
@@ -27,7 +27,6 @@
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IMap;
 import com.hazelcast.query.SqlPredicate;
-
 import org.apache.camel.component.hazelcast.testutil.Dummy;
 import org.junit.After;
 import org.junit.Test;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java
index 37db733..df2dbc0 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMapProducerTest.java
@@ -28,7 +28,6 @@
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IMap;
 import com.hazelcast.query.SqlPredicate;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.hazelcast.testutil.Dummy;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapConsumerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapConsumerTest.java
index 7c040a1..2836b48 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapConsumerTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapConsumerTest.java
@@ -24,7 +24,6 @@
 import com.hazelcast.core.EntryListener;
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.MultiMap;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerForSpringTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerForSpringTest.java
index 1af858d..0303619 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerForSpringTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerForSpringTest.java
@@ -21,7 +21,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.MultiMap;
-
 import org.junit.After;
 import org.junit.Test;
 import org.mockito.Mock;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerTest.java
index dabba6a..34fb396 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastMultimapProducerTest.java
@@ -21,7 +21,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.MultiMap;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.After;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastQueueProducerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastQueueProducerTest.java
index 94387d4..cc3047d 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastQueueProducerTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastQueueProducerTest.java
@@ -25,7 +25,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IQueue;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.After;
@@ -141,7 +140,7 @@
     
     @Test
     public void removeIf() throws InterruptedException {
-        Predicate<String> i  = (s)-> s.length() > 5;
+        Predicate<String> i  = s -> s.length() > 5;
         template.sendBody("direct:removeIf", i);
         verify(queue).removeIf(i);
     }
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastReplicatedmapConsumerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastReplicatedmapConsumerTest.java
index 36a5ce4..513fd75 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastReplicatedmapConsumerTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastReplicatedmapConsumerTest.java
@@ -24,7 +24,6 @@
 import com.hazelcast.core.EntryListener;
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.ReplicatedMap;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastReplicatedmapProducerForSpringTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastReplicatedmapProducerForSpringTest.java
index fd567f5..5dfd7d4 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastReplicatedmapProducerForSpringTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastReplicatedmapProducerForSpringTest.java
@@ -21,7 +21,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.ReplicatedMap;
-
 import org.junit.After;
 import org.junit.Test;
 import org.mockito.Mock;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastReplicatedmapProducerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastReplicatedmapProducerTest.java
index ad92bf4..4caaf09 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastReplicatedmapProducerTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastReplicatedmapProducerTest.java
@@ -21,7 +21,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.ReplicatedMap;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.After;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerForSpringTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerForSpringTest.java
index 199bc00..c32ba7f 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerForSpringTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerForSpringTest.java
@@ -18,7 +18,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.ringbuffer.Ringbuffer;
-
 import org.junit.Test;
 import org.mockito.ArgumentMatchers;
 import org.mockito.Mock;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerTest.java
index 2a88ac3..d541d6b 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastRingbufferProducerTest.java
@@ -18,7 +18,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.ringbuffer.Ringbuffer;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
 import org.mockito.ArgumentMatchers;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastSedaRecoverableConsumerRollbackTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastSedaRecoverableConsumerRollbackTest.java
index d21570c..aeb3c4e 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastSedaRecoverableConsumerRollbackTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastSedaRecoverableConsumerRollbackTest.java
@@ -23,7 +23,6 @@
 
 import static org.mockito.Mockito.*;
 
-
 public class HazelcastSedaRecoverableConsumerRollbackTest extends HazelcastSedaRecoverableConsumerTest {
 
     @Override
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastSetConsumerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastSetConsumerTest.java
index 2b66016..c62daff 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastSetConsumerTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastSetConsumerTest.java
@@ -24,7 +24,6 @@
 import com.hazelcast.core.ItemEvent;
 import com.hazelcast.core.ItemEventType;
 import com.hazelcast.core.ItemListener;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastSetProducerTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastSetProducerTest.java
index dade738..aa5f30c 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastSetProducerTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/component/hazelcast/HazelcastSetProducerTest.java
@@ -21,7 +21,6 @@
 
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.ISet;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.After;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryCamelTestSupport.java b/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryCamelTestSupport.java
index a47dae3..2abfc13 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryCamelTestSupport.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryCamelTestSupport.java
@@ -23,7 +23,6 @@
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 
-
 public class HazelcastAggregationRepositoryCamelTestSupport extends CamelTestSupport {
     private static HazelcastInstance hzOne;
     private static HazelcastInstance hzTwo;
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryConstructorsTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryConstructorsTest.java
index 5498cd1..85d5ef0 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryConstructorsTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryConstructorsTest.java
@@ -22,7 +22,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 public class HazelcastAggregationRepositoryConstructorsTest extends CamelTestSupport {
 
     @Test(expected = UnsupportedOperationException.class)
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryOperationsTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryOperationsTest.java
index 9426abf..706be16 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryOperationsTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryOperationsTest.java
@@ -21,7 +21,6 @@
 import org.apache.camel.Exchange;
 import org.junit.Test;
 
-
 public class HazelcastAggregationRepositoryOperationsTest extends HazelcastAggregationRepositoryCamelTestSupport {
 
 
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryRecoverableRoutesTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryRecoverableRoutesTest.java
index 7a63e76..180c21a 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryRecoverableRoutesTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryRecoverableRoutesTest.java
@@ -23,7 +23,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class HazelcastAggregationRepositoryRecoverableRoutesTest extends HazelcastAggregationRepositoryCamelTestSupport {
 
     private static final String REPO_NAME = "routeTestRepo";
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryRoutesTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryRoutesTest.java
index dfe2831..78002bf 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryRoutesTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/processor/aggregate/hazelcast/HazelcastAggregationRepositoryRoutesTest.java
@@ -23,7 +23,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class HazelcastAggregationRepositoryRoutesTest extends HazelcastAggregationRepositoryCamelTestSupport {
 
     private static final String REPO_NAME = "routeTestRepo";
diff --git a/components/camel-hazelcast/src/test/java/org/apache/camel/processor/idempotent/hazelcast/HazelcastIdempotentRepositoryTest.java b/components/camel-hazelcast/src/test/java/org/apache/camel/processor/idempotent/hazelcast/HazelcastIdempotentRepositoryTest.java
index 623a8da..86a4426 100644
--- a/components/camel-hazelcast/src/test/java/org/apache/camel/processor/idempotent/hazelcast/HazelcastIdempotentRepositoryTest.java
+++ b/components/camel-hazelcast/src/test/java/org/apache/camel/processor/idempotent/hazelcast/HazelcastIdempotentRepositoryTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.idempotent.hazelcast;
+
 import com.hazelcast.core.Hazelcast;
 import com.hazelcast.core.HazelcastInstance;
 import com.hazelcast.core.IMap;
diff --git a/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/HBaseHelper.java b/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/HBaseHelper.java
index 4fecacf..00323dd5 100644
--- a/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/HBaseHelper.java
+++ b/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/HBaseHelper.java
@@ -24,6 +24,7 @@
 import java.io.ObjectStreamClass;
 import java.util.HashMap;
 import java.util.Map;
+
 import org.apache.camel.component.hbase.processor.idempotent.HBaseIdempotentRepository;
 import org.apache.camel.util.IOHelper;
 import org.apache.hadoop.hbase.util.Bytes;
diff --git a/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/mapping/CellMappingStrategyFactory.java b/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/mapping/CellMappingStrategyFactory.java
index 37ee718..0daa1928 100644
--- a/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/mapping/CellMappingStrategyFactory.java
+++ b/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/mapping/CellMappingStrategyFactory.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import org.apache.camel.Message;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/mapping/HeaderMappingStrategy.java b/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/mapping/HeaderMappingStrategy.java
index e3f7ed3..a640cfe 100644
--- a/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/mapping/HeaderMappingStrategy.java
+++ b/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/mapping/HeaderMappingStrategy.java
@@ -19,6 +19,7 @@
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.component.hbase.HBaseAttribute;
diff --git a/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/model/HBaseData.java b/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/model/HBaseData.java
index c387045..c5f5c37 100644
--- a/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/model/HBaseData.java
+++ b/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/model/HBaseData.java
@@ -18,6 +18,7 @@
 
 import java.util.LinkedList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlRootElement;
 
 @XmlRootElement(name = "data")
diff --git a/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/model/HBaseRow.java b/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/model/HBaseRow.java
index 344724c..56a09da 100644
--- a/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/model/HBaseRow.java
+++ b/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/model/HBaseRow.java
@@ -18,6 +18,7 @@
 
 import java.util.LinkedHashSet;
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
diff --git a/components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs/kerberos/KerberosAuthentication.java b/components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs/kerberos/KerberosAuthentication.java
index bb9ccab..244a801 100644
--- a/components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs/kerberos/KerberosAuthentication.java
+++ b/components/camel-hdfs/src/main/java/org/apache/camel/component/hdfs/kerberos/KerberosAuthentication.java
@@ -20,11 +20,11 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 
-import static java.lang.String.format;
-
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.security.UserGroupInformation;
 
+import static java.lang.String.format;
+
 public class KerberosAuthentication {
 
     private final String username;
diff --git a/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/FromFileToHdfsTest.java b/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/FromFileToHdfsTest.java
index fdf8d99..a6e5c2f 100644
--- a/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/FromFileToHdfsTest.java
+++ b/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/FromFileToHdfsTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.hdfs;
+
 import java.io.File;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsInfoTest.java b/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsInfoTest.java
index 0405b6c..9bb4960 100644
--- a/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsInfoTest.java
+++ b/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsInfoTest.java
@@ -43,4 +43,4 @@
         assertThat(underTest.getFileSystem(), notNullValue());
         assertThat(underTest.getPath(), notNullValue());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsProducerConsumerTest.java b/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsProducerConsumerTest.java
index 7e98793..ef363b0 100644
--- a/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsProducerConsumerTest.java
+++ b/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsProducerConsumerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.hdfs;
+
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
diff --git a/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsProducerSplitTest.java b/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsProducerSplitTest.java
index 60976f5..62ce77d 100644
--- a/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsProducerSplitTest.java
+++ b/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsProducerSplitTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.hdfs;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.InputStreamReader;
diff --git a/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsProducerTest.java b/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsProducerTest.java
index a97f29b5..54970c7 100644
--- a/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsProducerTest.java
+++ b/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/HdfsProducerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.hdfs;
+
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.InputStream;
diff --git a/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/integration/HdfsAppendTest.java b/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/integration/HdfsAppendTest.java
index abfb8f7..eaf5316 100644
--- a/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/integration/HdfsAppendTest.java
+++ b/components/camel-hdfs/src/test/java/org/apache/camel/component/hdfs/integration/HdfsAppendTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.hdfs.integration;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-hipchat/src/main/java/org/apache/camel/component/hipchat/HipchatConsumer.java b/components/camel-hipchat/src/main/java/org/apache/camel/component/hipchat/HipchatConsumer.java
index e0b3d66..9df0183 100644
--- a/components/camel-hipchat/src/main/java/org/apache/camel/component/hipchat/HipchatConsumer.java
+++ b/components/camel-hipchat/src/main/java/org/apache/camel/component/hipchat/HipchatConsumer.java
@@ -25,7 +25,6 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.type.MapType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.support.ScheduledPollConsumer;
diff --git a/components/camel-hipchat/src/main/java/org/apache/camel/component/hipchat/HipchatProducer.java b/components/camel-hipchat/src/main/java/org/apache/camel/component/hipchat/HipchatProducer.java
index 5ee41e2..64057d7 100644
--- a/components/camel-hipchat/src/main/java/org/apache/camel/component/hipchat/HipchatProducer.java
+++ b/components/camel-hipchat/src/main/java/org/apache/camel/component/hipchat/HipchatProducer.java
@@ -21,7 +21,6 @@
 import java.util.Map;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.Message;
diff --git a/components/camel-hipchat/src/test/java/org/apache/camel/component/hipchat/HipchatXmlDefinedComponentProducerTest.java b/components/camel-hipchat/src/test/java/org/apache/camel/component/hipchat/HipchatXmlDefinedComponentProducerTest.java
index 6b6e119..22d4a8c 100644
--- a/components/camel-hipchat/src/test/java/org/apache/camel/component/hipchat/HipchatXmlDefinedComponentProducerTest.java
+++ b/components/camel-hipchat/src/test/java/org/apache/camel/component/hipchat/HipchatXmlDefinedComponentProducerTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.hipchat;
 
 import java.io.InputStream;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
@@ -26,7 +27,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 import static org.hamcrest.core.Is.is;
 
 public class HipchatXmlDefinedComponentProducerTest extends CamelTestSupport {
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/AckExpressionTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/AckExpressionTest.java
index c810072..e5beaa9 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/AckExpressionTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/AckExpressionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.hl7;
+
 import ca.uhn.hl7v2.AcknowledgmentCode;
 import ca.uhn.hl7v2.ErrorCode;
 import ca.uhn.hl7v2.HL7Exception;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7ByteArrayRouteTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7ByteArrayRouteTest.java
index d5a61db..142f9fe 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7ByteArrayRouteTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7ByteArrayRouteTest.java
@@ -24,7 +24,6 @@
 import ca.uhn.hl7v2.model.v24.segment.MSH;
 import ca.uhn.hl7v2.model.v24.segment.PID;
 import ca.uhn.hl7v2.model.v24.segment.QRD;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecBoundaryTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecBoundaryTest.java
index 02418e3..f0a97fb 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecBoundaryTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecBoundaryTest.java
@@ -20,13 +20,11 @@
 import java.io.InputStreamReader;
 
 import ca.uhn.hl7v2.model.v25.message.MDM_T02;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-
 import org.apache.camel.util.IOHelper;
 import org.junit.Test;
 
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecLongTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecLongTest.java
index b612e38..8576bef 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecLongTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecLongTest.java
@@ -22,7 +22,6 @@
 import ca.uhn.hl7v2.model.Message;
 import ca.uhn.hl7v2.model.v25.message.MDM_T02;
 import ca.uhn.hl7v2.model.v25.segment.MSH;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecMessageFloodingTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecMessageFloodingTest.java
index 651d84c..2fbccfe 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecMessageFloodingTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecMessageFloodingTest.java
@@ -26,7 +26,6 @@
 import java.util.concurrent.TimeUnit;
 
 import ca.uhn.hl7v2.model.Message;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecStandAndEndBytesTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecStandAndEndBytesTest.java
index acf2f833..deac5c4 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecStandAndEndBytesTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecStandAndEndBytesTest.java
@@ -21,7 +21,6 @@
 import ca.uhn.hl7v2.model.v24.segment.MSA;
 import ca.uhn.hl7v2.model.v24.segment.MSH;
 import ca.uhn.hl7v2.model.v24.segment.QRD;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecTest.java
index 9ef97ef..7a0ef5e 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPCodecTest.java
@@ -21,7 +21,6 @@
 import ca.uhn.hl7v2.model.v24.segment.MSA;
 import ca.uhn.hl7v2.model.v24.segment.MSH;
 import ca.uhn.hl7v2.model.v24.segment.QRD;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecBoundaryTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecBoundaryTest.java
index f785287..f5e82ef 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecBoundaryTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecBoundaryTest.java
@@ -20,7 +20,6 @@
 import java.io.InputStreamReader;
 
 import ca.uhn.hl7v2.model.v25.message.MDM_T02;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecByteArrayRouteTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecByteArrayRouteTest.java
index 4f9b451..cac06a0f 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecByteArrayRouteTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecByteArrayRouteTest.java
@@ -24,7 +24,6 @@
 import ca.uhn.hl7v2.model.v24.segment.MSH;
 import ca.uhn.hl7v2.model.v24.segment.PID;
 import ca.uhn.hl7v2.model.v24.segment.QRD;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecLongTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecLongTest.java
index 801d7b5..2bd4599 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecLongTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecLongTest.java
@@ -22,7 +22,6 @@
 import ca.uhn.hl7v2.model.Message;
 import ca.uhn.hl7v2.model.v25.message.MDM_T02;
 import ca.uhn.hl7v2.model.v25.segment.MSH;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecStandAndEndBytesTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecStandAndEndBytesTest.java
index 07ee84b..b753277 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecStandAndEndBytesTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecStandAndEndBytesTest.java
@@ -21,7 +21,6 @@
 import ca.uhn.hl7v2.model.v24.segment.MSA;
 import ca.uhn.hl7v2.model.v24.segment.MSH;
 import ca.uhn.hl7v2.model.v24.segment.QRD;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecTest.java
index f7da10e1..9a2736d 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyCodecTest.java
@@ -21,7 +21,6 @@
 import ca.uhn.hl7v2.model.v24.segment.MSA;
 import ca.uhn.hl7v2.model.v24.segment.MSH;
 import ca.uhn.hl7v2.model.v24.segment.QRD;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyDecoderResourceLeakTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyDecoderResourceLeakTest.java
index 28ca0a1..dd8c407 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyDecoderResourceLeakTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyDecoderResourceLeakTest.java
@@ -18,7 +18,6 @@
 
 import ca.uhn.hl7v2.model.Message;
 import io.netty.util.ResourceLeakDetector;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyRouteToTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyRouteToTest.java
index 681d940..af09670 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyRouteToTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7MLLPNettyRouteToTest.java
@@ -21,7 +21,6 @@
 import ca.uhn.hl7v2.model.v24.segment.MSA;
 import ca.uhn.hl7v2.model.v24.segment.MSH;
 import ca.uhn.hl7v2.model.v24.segment.QRD;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7NettyRouteTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7NettyRouteTest.java
index ec5dcbb..5052470 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7NettyRouteTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7NettyRouteTest.java
@@ -24,7 +24,6 @@
 import ca.uhn.hl7v2.model.v24.segment.MSH;
 import ca.uhn.hl7v2.model.v24.segment.PID;
 import ca.uhn.hl7v2.model.v24.segment.QRD;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7RouteTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7RouteTest.java
index 978b3d2..bb53b63 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7RouteTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7RouteTest.java
@@ -24,7 +24,6 @@
 import ca.uhn.hl7v2.model.v24.segment.MSH;
 import ca.uhn.hl7v2.model.v24.segment.PID;
 import ca.uhn.hl7v2.model.v24.segment.QRD;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/TerserExpressionTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/TerserExpressionTest.java
index 519a7ce..b055ba0 100644
--- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/TerserExpressionTest.java
+++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/TerserExpressionTest.java
@@ -27,7 +27,6 @@
 
 import static org.apache.camel.component.hl7.HL7.hl7terser;
 
-
 public class TerserExpressionTest extends CamelTestSupport {
 
     private static final String PATIENT_ID = "123456";
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelFileDataSource.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelFileDataSource.java
index 15eef16..e9f14af 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelFileDataSource.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelFileDataSource.java
@@ -17,6 +17,7 @@
 package org.apache.camel.http.common;
 
 import java.io.File;
+
 import javax.activation.FileDataSource;
 import javax.activation.FileTypeMap;
 
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelServlet.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelServlet.java
index 37f5765..f167221 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelServlet.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/CamelServlet.java
@@ -24,6 +24,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.stream.Collectors;
+
 import javax.servlet.AsyncContext;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
index 80ccfc0..751dbaa 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
@@ -33,6 +33,7 @@
 import java.util.Map;
 import java.util.TimeZone;
 import java.util.concurrent.TimeoutException;
+
 import javax.activation.DataHandler;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java
index 70f5f80..747ca08 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java
@@ -17,6 +17,7 @@
 package org.apache.camel.http.common;
 
 import java.io.IOException;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConverter.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConverter.java
index 11ac363..f0fc619 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConverter.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConverter.java
@@ -19,6 +19,7 @@
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
+
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java
index 8e6846f..e233400 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpHelper.java
@@ -27,6 +27,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpMessage.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpMessage.java
index de79734..1a6dbda 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpMessage.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpMessage.java
@@ -17,6 +17,7 @@
 package org.apache.camel.http.common;
 
 import java.io.IOException;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpRestServletResolveConsumerStrategy.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpRestServletResolveConsumerStrategy.java
index 188cf41..8e61e46 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpRestServletResolveConsumerStrategy.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpRestServletResolveConsumerStrategy.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.camel.support.RestConsumerContextPathMatcher;
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpServletResolveConsumerStrategy.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpServletResolveConsumerStrategy.java
index 565890b..a91746e 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpServletResolveConsumerStrategy.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpServletResolveConsumerStrategy.java
@@ -21,6 +21,7 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.stream.Collectors;
+
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.camel.support.RestConsumerContextPathMatcher;
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/ServletResolveConsumerStrategy.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/ServletResolveConsumerStrategy.java
index c640617..95d9094 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/ServletResolveConsumerStrategy.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/ServletResolveConsumerStrategy.java
@@ -17,6 +17,7 @@
 package org.apache.camel.http.common;
 
 import java.util.Map;
+
 import javax.servlet.http.HttpServletRequest;
 
 /**
diff --git a/components/camel-http-common/src/test/java/org/apache/camel/http/common/HttpSendDynamicAwareTest.java b/components/camel-http-common/src/test/java/org/apache/camel/http/common/HttpSendDynamicAwareTest.java
index 3892c3d..a939b3f 100644
--- a/components/camel-http-common/src/test/java/org/apache/camel/http/common/HttpSendDynamicAwareTest.java
+++ b/components/camel-http-common/src/test/java/org/apache/camel/http/common/HttpSendDynamicAwareTest.java
@@ -1,83 +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.http.common;
-
-import org.apache.camel.spi.SendDynamicAware.DynamicAwareEntry;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class HttpSendDynamicAwareTest {
-
-    private HttpSendDynamicAware httpSendDynamicAware;
-
-    @Before
-    public void setUp() throws Exception {
-        this.httpSendDynamicAware = new HttpSendDynamicAware();
-    }
-
-    @Test
-    public void testHttpUndefinedPortWithPathParseUri() {
-        this.httpSendDynamicAware.setScheme("http");
-        DynamicAwareEntry entry = new DynamicAwareEntry("http://localhost/test", null, null, null);
-        String[] result = httpSendDynamicAware.parseUri(entry);
-        assertEquals("Parse should not add port if http and not specified", "localhost", result[0]);
-    }
-    
-    @Test
-    public void testHttpsUndefinedPortParseUri() {
-        this.httpSendDynamicAware.setScheme("https");
-        DynamicAwareEntry entry = new DynamicAwareEntry("https://localhost/test", null, null, null);
-        String[] result = httpSendDynamicAware.parseUri(entry);
-        assertEquals("Parse should not add port if https and not specified", "localhost", result[0]);
-    }
-    
-    @Test
-    public void testHttpPort80ParseUri() {
-        this.httpSendDynamicAware.setScheme("http");
-        DynamicAwareEntry entry = new DynamicAwareEntry("http://localhost:80/test", null, null, null);
-        String[] result = httpSendDynamicAware.parseUri(entry);
-        assertEquals("Parse should not port if http and port 80 specified", "localhost", result[0]);
-    }
-    
-    @Test
-    public void testHttpsPort443ParseUri() {
-        this.httpSendDynamicAware.setScheme("https");
-        DynamicAwareEntry entry = new DynamicAwareEntry("https://localhost:443/test", null, null, null);
-        String[] result = httpSendDynamicAware.parseUri(entry);
-        assertEquals("Parse should not port if https and port 443 specified", "localhost", result[0]);
-    }
-    
-    @Test
-    public void testHttpPort8080ParseUri() {
-        this.httpSendDynamicAware.setScheme("http");
-        DynamicAwareEntry entry = new DynamicAwareEntry("http://localhost:8080/test", null, null, null);
-        String[] result = httpSendDynamicAware.parseUri(entry);
-        assertEquals("Parse should add port if http and port other than 80 specified", "localhost:8080", result[0]);
-    }
-    
-    @Test
-    public void testHttpsPort8443ParseUri() {
-        this.httpSendDynamicAware.setScheme("https");
-        DynamicAwareEntry entry = new DynamicAwareEntry("https://localhost:8443/test", null, null, null);
-        String[] result = httpSendDynamicAware.parseUri(entry);
-        assertEquals("Parse should add port if https and port other than 443 specified", "localhost:8443", result[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.http.common;
+
+import org.apache.camel.spi.SendDynamicAware.DynamicAwareEntry;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class HttpSendDynamicAwareTest {
+
+    private HttpSendDynamicAware httpSendDynamicAware;
+
+    @Before
+    public void setUp() throws Exception {
+        this.httpSendDynamicAware = new HttpSendDynamicAware();
+    }
+
+    @Test
+    public void testHttpUndefinedPortWithPathParseUri() {
+        this.httpSendDynamicAware.setScheme("http");
+        DynamicAwareEntry entry = new DynamicAwareEntry("http://localhost/test", null, null, null);
+        String[] result = httpSendDynamicAware.parseUri(entry);
+        assertEquals("Parse should not add port if http and not specified", "localhost", result[0]);
+    }
+    
+    @Test
+    public void testHttpsUndefinedPortParseUri() {
+        this.httpSendDynamicAware.setScheme("https");
+        DynamicAwareEntry entry = new DynamicAwareEntry("https://localhost/test", null, null, null);
+        String[] result = httpSendDynamicAware.parseUri(entry);
+        assertEquals("Parse should not add port if https and not specified", "localhost", result[0]);
+    }
+    
+    @Test
+    public void testHttpPort80ParseUri() {
+        this.httpSendDynamicAware.setScheme("http");
+        DynamicAwareEntry entry = new DynamicAwareEntry("http://localhost:80/test", null, null, null);
+        String[] result = httpSendDynamicAware.parseUri(entry);
+        assertEquals("Parse should not port if http and port 80 specified", "localhost", result[0]);
+    }
+    
+    @Test
+    public void testHttpsPort443ParseUri() {
+        this.httpSendDynamicAware.setScheme("https");
+        DynamicAwareEntry entry = new DynamicAwareEntry("https://localhost:443/test", null, null, null);
+        String[] result = httpSendDynamicAware.parseUri(entry);
+        assertEquals("Parse should not port if https and port 443 specified", "localhost", result[0]);
+    }
+    
+    @Test
+    public void testHttpPort8080ParseUri() {
+        this.httpSendDynamicAware.setScheme("http");
+        DynamicAwareEntry entry = new DynamicAwareEntry("http://localhost:8080/test", null, null, null);
+        String[] result = httpSendDynamicAware.parseUri(entry);
+        assertEquals("Parse should add port if http and port other than 80 specified", "localhost:8080", result[0]);
+    }
+    
+    @Test
+    public void testHttpsPort8443ParseUri() {
+        this.httpSendDynamicAware.setScheme("https");
+        DynamicAwareEntry entry = new DynamicAwareEntry("https://localhost:8443/test", null, null, null);
+        String[] result = httpSendDynamicAware.parseUri(entry);
+        assertEquals("Parse should add port if https and port other than 443 specified", "localhost:8443", result[0]);
+    }
+
+}
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
index 2705b41..9145351 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
@@ -23,6 +23,7 @@
 import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
+
 import javax.net.ssl.HostnameVerifier;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
index d2ca0ae..4ba7fff 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
@@ -20,6 +20,7 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Map;
+
 import javax.net.ssl.HostnameVerifier;
 
 import org.apache.camel.Consumer;
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpUtil.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpUtil.java
index 699cee9..9922e9e 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpUtil.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpUtil.java
@@ -21,7 +21,6 @@
 import org.apache.http.Header;
 import org.apache.http.HttpResponse;
 
-
 public final class HttpUtil {
     private HttpUtil() {
     }
diff --git a/components/camel-http/src/test/java/org/apache/camel/component/http/HeaderFilteringTest.java b/components/camel-http/src/test/java/org/apache/camel/component/http/HeaderFilteringTest.java
index 7d45db2..0472982 100644
--- a/components/camel-http/src/test/java/org/apache/camel/component/http/HeaderFilteringTest.java
+++ b/components/camel-http/src/test/java/org/apache/camel/component/http/HeaderFilteringTest.java
@@ -28,7 +28,6 @@
 
 import com.sun.net.httpserver.HttpExchange;
 import com.sun.net.httpserver.HttpServer;
-
 import org.apache.camel.Producer;
 import org.apache.camel.http.common.HttpOperationFailedException;
 import org.apache.camel.impl.DefaultCamelContext;
diff --git a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpBodyTest.java b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpBodyTest.java
index f1cf640..7d025dd 100644
--- a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpBodyTest.java
+++ b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpBodyTest.java
@@ -31,7 +31,6 @@
 import org.junit.Before;
 import org.junit.Test;
 
-
 public class HttpBodyTest extends BaseHttpTest {
     private String protocolString = "http://";
     // default content encoding of the local test server
diff --git a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpsServerTestSupport.java b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpsServerTestSupport.java
index 10e3620..9c1c943 100644
--- a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpsServerTestSupport.java
+++ b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpsServerTestSupport.java
@@ -20,6 +20,7 @@
 import java.io.InputStream;
 import java.net.URL;
 import java.security.KeyStore;
+
 import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.TrustManagerFactory;
diff --git a/components/camel-http/src/test/java/org/apache/camel/component/http/helper/HttpHelperTest.java b/components/camel-http/src/test/java/org/apache/camel/component/http/helper/HttpHelperTest.java
index d4d78b4..1177c97 100644
--- a/components/camel-http/src/test/java/org/apache/camel/component/http/helper/HttpHelperTest.java
+++ b/components/camel-http/src/test/java/org/apache/camel/component/http/helper/HttpHelperTest.java
@@ -37,7 +37,6 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-
 public class HttpHelperTest {
 
     @Test
diff --git a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixManagementTest.java b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixManagementTest.java
index ffd95aa..fc1c257 100644
--- a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixManagementTest.java
+++ b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixManagementTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.hystrix.processor;
 
 import java.util.stream.Stream;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
diff --git a/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalConverter.java b/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalConverter.java
index 8dbe2e1..c889228 100644
--- a/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalConverter.java
+++ b/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalConverter.java
@@ -22,7 +22,6 @@
 
 import net.fortuna.ical4j.model.Calendar;
 import net.fortuna.ical4j.model.property.DateProperty;
-
 import org.apache.camel.Converter;
 import org.apache.camel.Exchange;
 import org.apache.camel.support.ExchangeHelper;
diff --git a/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalDataFormat.java b/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalDataFormat.java
index a1551a2..b50717a 100644
--- a/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalDataFormat.java
+++ b/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalDataFormat.java
@@ -22,7 +22,6 @@
 import net.fortuna.ical4j.data.CalendarBuilder;
 import net.fortuna.ical4j.data.CalendarOutputter;
 import net.fortuna.ical4j.model.Calendar;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataFormatName;
diff --git a/components/camel-ical/src/test/java/org/apache/camel/component/ical/ICalDataFormatTest.java b/components/camel-ical/src/test/java/org/apache/camel/component/ical/ICalDataFormatTest.java
index 62f2ee7..15df760 100644
--- a/components/camel-ical/src/test/java/org/apache/camel/component/ical/ICalDataFormatTest.java
+++ b/components/camel-ical/src/test/java/org/apache/camel/component/ical/ICalDataFormatTest.java
@@ -41,7 +41,6 @@
 import net.fortuna.ical4j.model.property.Summary;
 import net.fortuna.ical4j.model.property.Uid;
 import net.fortuna.ical4j.model.property.Version;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.converter.IOConverter;
diff --git a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractIecComponent.java b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractIecComponent.java
index 89e4531..51954dc 100644
--- a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractIecComponent.java
+++ b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractIecComponent.java
@@ -20,14 +20,14 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import static java.util.Objects.requireNonNull;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.iec60870.client.ClientOptions;
 import org.apache.camel.support.DefaultComponent;
 import org.eclipse.neoscada.protocol.iec60870.ProtocolOptions;
 
+import static java.util.Objects.requireNonNull;
+
 public abstract class AbstractIecComponent<T1, T2 extends BaseOptions<T2>> extends DefaultComponent {
 
     private final Map<ConnectionId, T1> connections = new HashMap<>();
diff --git a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractIecEndpoint.java b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractIecEndpoint.java
index d912107..13983c2 100644
--- a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractIecEndpoint.java
+++ b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractIecEndpoint.java
@@ -18,8 +18,6 @@
 
 import java.util.concurrent.atomic.AtomicReference;
 
-import static java.util.Objects.requireNonNull;
-
 import org.apache.camel.component.iec60870.AbstractConnectionMultiplexor.Handle;
 import org.apache.camel.component.iec60870.client.ClientOptions;
 import org.apache.camel.spi.Metadata;
@@ -30,6 +28,8 @@
 import org.eclipse.neoscada.protocol.iec60870.ProtocolOptions;
 import org.eclipse.neoscada.protocol.iec60870.client.data.DataModuleOptions;
 
+import static java.util.Objects.requireNonNull;
+
 public abstract class AbstractIecEndpoint<T extends AbstractConnectionMultiplexor> extends DefaultEndpoint {
 
     /**
diff --git a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/client/ClientEndpoint.java b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/client/ClientEndpoint.java
index 336cb02..c9e3cc9 100644
--- a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/client/ClientEndpoint.java
+++ b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/client/ClientEndpoint.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.component.iec60870.client;
 
-import static java.util.Objects.requireNonNull;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
@@ -26,6 +24,8 @@
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.support.DefaultComponent;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  * IEC 60870 component used for telecontrol (supervisory control and data acquisition)
  * such as controlling electric power transmission grids and other geographically widespread control systems.
diff --git a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/server/ServerEndpoint.java b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/server/ServerEndpoint.java
index 061f406..d43e825 100644
--- a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/server/ServerEndpoint.java
+++ b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/server/ServerEndpoint.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.component.iec60870.server;
 
-import static java.util.Objects.requireNonNull;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
@@ -27,6 +25,8 @@
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultComponent;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  * IEC 60870 component used for telecontrol (supervisory control and data acquisition)
  * such as controlling electric power transmission grids and other geographically widespread control systems.
diff --git a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/server/ServerInstance.java b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/server/ServerInstance.java
index ef060fc..a111c2d 100644
--- a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/server/ServerInstance.java
+++ b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/server/ServerInstance.java
@@ -25,8 +25,6 @@
 import java.util.concurrent.CompletionStage;
 import java.util.concurrent.ConcurrentHashMap;
 
-import static java.util.Arrays.asList;
-
 import org.apache.camel.component.iec60870.DiscardAckModule;
 import org.apache.camel.component.iec60870.ObjectAddress;
 import org.eclipse.neoscada.protocol.iec60870.asdu.types.ASDUAddress;
@@ -43,6 +41,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.util.Arrays.asList;
+
 public class ServerInstance {
     private static final Logger LOG = LoggerFactory.getLogger(ServerInstance.class);
 
diff --git a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/AbstractIgniteComponent.java b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/AbstractIgniteComponent.java
index de12e13..161b6be 100644
--- a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/AbstractIgniteComponent.java
+++ b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/AbstractIgniteComponent.java
@@ -19,6 +19,7 @@
 import java.io.InputStream;
 import java.net.URI;
 import java.net.URL;
+
 import org.apache.camel.support.DefaultComponent;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.Ignition;
diff --git a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteCacheContinuousQueryTest.java b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteCacheContinuousQueryTest.java
index c3e9c26..a58dfb9 100644
--- a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteCacheContinuousQueryTest.java
+++ b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteCacheContinuousQueryTest.java
@@ -27,7 +27,6 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterators;
 import com.google.common.collect.Maps;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Route;
diff --git a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteCacheTest.java b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteCacheTest.java
index afb5a5a..6ffb21d 100644
--- a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteCacheTest.java
+++ b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteCacheTest.java
@@ -24,7 +24,6 @@
 import javax.cache.Cache.Entry;
 
 import com.google.common.collect.ImmutableMap;
-
 import org.apache.camel.CamelException;
 import org.apache.camel.component.ignite.cache.IgniteCacheComponent;
 import org.apache.camel.component.ignite.cache.IgniteCacheOperation;
diff --git a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteComputeTest.java b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteComputeTest.java
index 80c8d06..5706c68 100644
--- a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteComputeTest.java
+++ b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteComputeTest.java
@@ -25,7 +25,6 @@
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.ignite.compute.IgniteComputeComponent;
 import org.apache.camel.util.ObjectHelper;
diff --git a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteEventsTest.java b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteEventsTest.java
index 327d43f..90323bd 100644
--- a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteEventsTest.java
+++ b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteEventsTest.java
@@ -24,7 +24,6 @@
 
 import com.google.common.base.Function;
 import com.google.common.collect.Lists;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Route;
 import org.apache.camel.ServiceStatus;
diff --git a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteMessagingTest.java b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteMessagingTest.java
index eca360c..04b91b7 100644
--- a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteMessagingTest.java
+++ b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteMessagingTest.java
@@ -26,7 +26,6 @@
 import com.google.common.collect.DiscreteDomain;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Range;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteQueueTest.java b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteQueueTest.java
index de149cc..70d5dd3 100644
--- a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteQueueTest.java
+++ b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteQueueTest.java
@@ -28,7 +28,6 @@
 import com.google.common.collect.Iterators;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
-
 import org.apache.camel.component.ignite.queue.IgniteQueueComponent;
 import org.apache.camel.component.ignite.queue.IgniteQueueEndpoint;
 import org.apache.camel.component.ignite.queue.IgniteQueueOperation;
diff --git a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteSetTest.java b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteSetTest.java
index 965ac5b..88119c6 100644
--- a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteSetTest.java
+++ b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/IgniteSetTest.java
@@ -23,7 +23,6 @@
 import com.google.common.collect.Iterators;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
-
 import org.apache.camel.component.ignite.set.IgniteSetComponent;
 import org.apache.camel.component.ignite.set.IgniteSetEndpoint;
 import org.apache.camel.component.ignite.set.IgniteSetOperation;
diff --git a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/TestIgniteComputeResources.java b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/TestIgniteComputeResources.java
index bb85705..8085bc5 100644
--- a/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/TestIgniteComputeResources.java
+++ b/components/camel-ignite/src/test/java/org/apache/camel/component/ignite/TestIgniteComputeResources.java
@@ -25,7 +25,6 @@
 
 import com.google.common.base.Joiner;
 import com.google.common.collect.Lists;
-
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.compute.ComputeJob;
 import org.apache.ignite.compute.ComputeJobResult;
diff --git a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanClusteredConsumerTest.java b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanClusteredConsumerTest.java
index c73798a..007f4a2 100644
--- a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanClusteredConsumerTest.java
+++ b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanClusteredConsumerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.infinispan;
+
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.EndpointInject;
diff --git a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java
index c83471c..622f3e4 100644
--- a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java
+++ b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/InfinispanProducerTest.java
@@ -33,7 +33,6 @@
 
 import static org.apache.camel.component.infinispan.util.Wait.waitFor;
 
-
 public class InfinispanProducerTest extends InfinispanTestSupport {
 
     private static final String COMMAND_VALUE = "commandValue";
diff --git a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/processor/aggregate/InfinispanLocalAggregationRepositoryOperationsTest.java b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/processor/aggregate/InfinispanLocalAggregationRepositoryOperationsTest.java
index da65fdf..7cf7dd5 100644
--- a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/processor/aggregate/InfinispanLocalAggregationRepositoryOperationsTest.java
+++ b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/processor/aggregate/InfinispanLocalAggregationRepositoryOperationsTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.infinispan.processor.aggregate;
+
 import java.util.Set;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/processor/aggregate/InfinispanLocalAggregationRepositoryTest.java b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/processor/aggregate/InfinispanLocalAggregationRepositoryTest.java
index 277ce17..1f48dc4f 100644
--- a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/processor/aggregate/InfinispanLocalAggregationRepositoryTest.java
+++ b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/processor/aggregate/InfinispanLocalAggregationRepositoryTest.java
@@ -28,7 +28,6 @@
 import org.infinispan.configuration.cache.ConfigurationBuilder;
 import org.junit.Test;
 
-
 public class InfinispanLocalAggregationRepositoryTest extends CamelTestSupport {
 
     private static final String MOCK_GOTCHA = "mock:gotcha";
diff --git a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/processor/idempotent/SpringInfinispanIdempotentRepositoryIT.java b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/processor/idempotent/SpringInfinispanIdempotentRepositoryIT.java
index 30705bb..de2bd83 100644
--- a/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/processor/idempotent/SpringInfinispanIdempotentRepositoryIT.java
+++ b/components/camel-infinispan/src/test/java/org/apache/camel/component/infinispan/processor/idempotent/SpringInfinispanIdempotentRepositoryIT.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.infinispan.processor.idempotent;
 
 import java.util.UUID;
+
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
 import org.infinispan.client.hotrod.RemoteCache;
@@ -27,7 +28,6 @@
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class SpringInfinispanIdempotentRepositoryIT extends CamelSpringTestSupport {
 
     @Override
diff --git a/components/camel-influxdb/src/test/java/org/apache/camel/component/influxdb/MockedInfluxDbConfiguration.java b/components/camel-influxdb/src/test/java/org/apache/camel/component/influxdb/MockedInfluxDbConfiguration.java
index 776e9e5..83dafb1 100644
--- a/components/camel-influxdb/src/test/java/org/apache/camel/component/influxdb/MockedInfluxDbConfiguration.java
+++ b/components/camel-influxdb/src/test/java/org/apache/camel/component/influxdb/MockedInfluxDbConfiguration.java
@@ -18,8 +18,6 @@
 
 import java.net.UnknownHostException;
 
-import static junit.framework.TestCase.assertNotNull;
-
 import org.influxdb.InfluxDB;
 import org.influxdb.impl.InfluxDBImpl;
 import org.slf4j.Logger;
@@ -27,7 +25,7 @@
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-
+import static junit.framework.TestCase.assertNotNull;
 import static org.mockito.Mockito.*;
 
 @Configuration
diff --git a/components/camel-influxdb/src/test/java/org/apache/camel/component/influxdb/converters/CamelInfluxDbConverterTest.java b/components/camel-influxdb/src/test/java/org/apache/camel/component/influxdb/converters/CamelInfluxDbConverterTest.java
index c4d23d7..bef3b80 100644
--- a/components/camel-influxdb/src/test/java/org/apache/camel/component/influxdb/converters/CamelInfluxDbConverterTest.java
+++ b/components/camel-influxdb/src/test/java/org/apache/camel/component/influxdb/converters/CamelInfluxDbConverterTest.java
@@ -28,7 +28,6 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-
 public class CamelInfluxDbConverterTest {
 
     private static final Logger LOG = LoggerFactory.getLogger(CamelInfluxDbConverterTest.class);
diff --git a/components/camel-iota/src/main/java/org/apache/camel/component/iota/IOTAEndpoint.java b/components/camel-iota/src/main/java/org/apache/camel/component/iota/IOTAEndpoint.java
index 5b52781..7cdcfbc 100644
--- a/components/camel-iota/src/main/java/org/apache/camel/component/iota/IOTAEndpoint.java
+++ b/components/camel-iota/src/main/java/org/apache/camel/component/iota/IOTAEndpoint.java
@@ -19,11 +19,9 @@
 import java.net.URL;
 
 import jota.IotaAPI;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-iota/src/main/java/org/apache/camel/component/iota/IOTAProducer.java b/components/camel-iota/src/main/java/org/apache/camel/component/iota/IOTAProducer.java
index 6803e57..bc4b28d 100644
--- a/components/camel-iota/src/main/java/org/apache/camel/component/iota/IOTAProducer.java
+++ b/components/camel-iota/src/main/java/org/apache/camel/component/iota/IOTAProducer.java
@@ -24,14 +24,12 @@
 import jota.dto.response.SendTransferResponse;
 import jota.model.Transfer;
 import jota.utils.TrytesConverter;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * The IOTA producer.
  */
diff --git a/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSConfiguration.java b/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSConfiguration.java
index 9e078ae..7d81c85 100644
--- a/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSConfiguration.java
+++ b/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSConfiguration.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.ipfs;
 
-
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
diff --git a/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSEndpoint.java b/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSEndpoint.java
index e08f02d..391a654 100644
--- a/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSEndpoint.java
+++ b/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSEndpoint.java
@@ -30,12 +30,10 @@
 import io.nessus.ipfs.client.DefaultIPFSClient;
 import io.nessus.ipfs.client.IPFSClient;
 import io.nessus.ipfs.client.IPFSException;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.component.ipfs.IPFSConfiguration.IPFSCommand;
-
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultEndpoint;
diff --git a/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSProducer.java b/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSProducer.java
index d8f62cb..8a44616 100644
--- a/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSProducer.java
+++ b/components/camel-ipfs/src/main/java/org/apache/camel/component/ipfs/IPFSProducer.java
@@ -26,7 +26,6 @@
 import org.apache.camel.component.ipfs.IPFSConfiguration.IPFSCommand;
 import org.apache.camel.support.DefaultProducer;
 
-
 public class IPFSProducer extends DefaultProducer {
 
     public IPFSProducer(IPFSEndpoint endpoint) {
diff --git a/components/camel-ipfs/src/test/java/org/apache/camel/component/ipfs/SimpleIPFSTest.java b/components/camel-ipfs/src/test/java/org/apache/camel/component/ipfs/SimpleIPFSTest.java
index dfe5875..a5528b7 100644
--- a/components/camel-ipfs/src/test/java/org/apache/camel/component/ipfs/SimpleIPFSTest.java
+++ b/components/camel-ipfs/src/test/java/org/apache/camel/component/ipfs/SimpleIPFSTest.java
@@ -26,7 +26,6 @@
 import java.util.List;
 
 import io.nessus.utils.StreamUtils;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java b/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java
index 21523dee..62777c1 100644
--- a/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java
+++ b/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java
@@ -21,7 +21,6 @@
 
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.SSLContextParametersAware;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
diff --git a/components/camel-irc/src/test/java/org/apache/camel/component/irc/CodehausIrcChat.java b/components/camel-irc/src/test/java/org/apache/camel/component/irc/CodehausIrcChat.java
index ec9268f..cfe1f51 100644
--- a/components/camel-irc/src/test/java/org/apache/camel/component/irc/CodehausIrcChat.java
+++ b/components/camel-irc/src/test/java/org/apache/camel/component/irc/CodehausIrcChat.java
@@ -24,7 +24,6 @@
 import org.schwering.irc.lib.IRCEventAdapter;
 import org.schwering.irc.lib.IRCModeParser;
 import org.schwering.irc.lib.IRCUser;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcIntegrationTestSupport.java b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcIntegrationTestSupport.java
index 20501b8..5bfbab7 100644
--- a/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcIntegrationTestSupport.java
+++ b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcIntegrationTestSupport.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.EndpointInject;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcMultiChannelRouteTest.java b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcMultiChannelRouteTest.java
index 7c47221..8fc1f40 100644
--- a/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcMultiChannelRouteTest.java
+++ b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcMultiChannelRouteTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.irc.it;
 
 import java.util.List;
+
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcOnReplyTest.java b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcOnReplyTest.java
index 4da62b5..7edf9db 100644
--- a/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcOnReplyTest.java
+++ b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcOnReplyTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.irc.it;
 
 import java.util.List;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/GsonUtil.java b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/GsonUtil.java
index 19857e1..95659a6 100644
--- a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/GsonUtil.java
+++ b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/GsonUtil.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import com.google.gson.Gson;
-
 import org.apache.camel.Message;
 
 public final class GsonUtil {
diff --git a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConfiguration.java b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConfiguration.java
index a96b482..e383346 100644
--- a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConfiguration.java
+++ b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConfiguration.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.ironmq;
 
 import io.iron.ironmq.Client;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
diff --git a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConsumer.java b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConsumer.java
index c10ccb9..fbb27d2 100644
--- a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConsumer.java
+++ b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQConsumer.java
@@ -22,7 +22,6 @@
 import io.iron.ironmq.EmptyQueueException;
 import io.iron.ironmq.Message;
 import io.iron.ironmq.Messages;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQEndpoint.java b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQEndpoint.java
index c4ed94f..b413251 100644
--- a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQEndpoint.java
+++ b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQEndpoint.java
@@ -20,7 +20,6 @@
 
 import io.iron.ironmq.Client;
 import io.iron.ironmq.Cloud;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
diff --git a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQProducer.java b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQProducer.java
index 204ce5f..61e61e1 100644
--- a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQProducer.java
+++ b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQProducer.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.ironmq;
 
 import io.iron.ironmq.Queue;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.Message;
diff --git a/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/FromQueueToQueueTest.java b/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/FromQueueToQueueTest.java
index 9aec461..2c28fb7 100644
--- a/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/FromQueueToQueueTest.java
+++ b/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/FromQueueToQueueTest.java
@@ -19,7 +19,6 @@
 import java.io.IOException;
 
 import io.iron.ironmq.EmptyQueueException;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
diff --git a/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/IronMQBatchConsumerTest.java b/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/IronMQBatchConsumerTest.java
index 9e3b486..581c52d 100644
--- a/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/IronMQBatchConsumerTest.java
+++ b/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/IronMQBatchConsumerTest.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import io.iron.ironmq.Message;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
@@ -28,7 +27,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 public class IronMQBatchConsumerTest extends CamelTestSupport {
 
     private IronMQEndpoint endpoint;
diff --git a/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/IronMQBatchDeleteConsumerTest.java b/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/IronMQBatchDeleteConsumerTest.java
index fc927f7..e0f1810 100644
--- a/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/IronMQBatchDeleteConsumerTest.java
+++ b/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/IronMQBatchDeleteConsumerTest.java
@@ -21,7 +21,6 @@
 import java.util.concurrent.TimeUnit;
 
 import io.iron.ironmq.Message;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
@@ -29,7 +28,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 public class IronMQBatchDeleteConsumerTest extends CamelTestSupport {
 
     private IronMQEndpoint endpoint;
diff --git a/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/IronMQBatchProducerTest.java b/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/IronMQBatchProducerTest.java
index 3156874..dcca8e6 100644
--- a/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/IronMQBatchProducerTest.java
+++ b/components/camel-ironmq/src/test/java/org/apache/camel/component/ironmq/IronMQBatchProducerTest.java
@@ -16,13 +16,11 @@
  */
 package org.apache.camel.component.ironmq;
 
-
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
 import io.iron.ironmq.Ids;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonNotUseDefaultObjectMapperTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonNotUseDefaultObjectMapperTest.java
index d7fc992..ac74dcc 100644
--- a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonNotUseDefaultObjectMapperTest.java
+++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonNotUseDefaultObjectMapperTest.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonObjectMapperRegistryTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonObjectMapperRegistryTest.java
index d25521f..a8f4872 100644
--- a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonObjectMapperRegistryTest.java
+++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonObjectMapperRegistryTest.java
@@ -16,17 +16,14 @@
  */
 package org.apache.camel.component.jackson;
 
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Before;
 import org.junit.Test;
 
 public class JacksonObjectMapperRegistryTest extends CamelTestSupport {
diff --git a/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java b/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java
index ec4cff9..c9964c0 100644
--- a/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java
+++ b/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java
@@ -34,7 +34,6 @@
 import com.fasterxml.jackson.databind.type.CollectionType;
 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
diff --git a/components/camel-jasypt/src/main/java/org/apache/camel/component/jasypt/JasyptPropertiesParser.java b/components/camel-jasypt/src/main/java/org/apache/camel/component/jasypt/JasyptPropertiesParser.java
index f941206..c48299b 100644
--- a/components/camel-jasypt/src/main/java/org/apache/camel/component/jasypt/JasyptPropertiesParser.java
+++ b/components/camel-jasypt/src/main/java/org/apache/camel/component/jasypt/JasyptPropertiesParser.java
@@ -19,8 +19,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import static java.lang.String.format;
-
 import org.apache.camel.component.properties.DefaultPropertiesParser;
 import org.apache.camel.component.properties.PropertiesLookup;
 import org.apache.camel.util.ObjectHelper;
@@ -28,6 +26,8 @@
 import org.jasypt.encryption.StringEncryptor;
 import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
 
+import static java.lang.String.format;
+
 /**
  * A {@link org.apache.camel.component.properties.PropertiesParser} which is using
  * &nbsp;<a href="http://www.jasypt.org/">Jasypt</a> to decrypt encrypted values.
diff --git a/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesParserTest.java b/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesParserTest.java
index cefd55e..c47d2b6 100644
--- a/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesParserTest.java
+++ b/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesParserTest.java
@@ -16,12 +16,11 @@
  */
 package org.apache.camel.component.jasypt;
 
-import static java.lang.String.format;
-
 import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
 import org.junit.Before;
 import org.junit.Test;
 
+import static java.lang.String.format;
 import static org.apache.camel.component.jasypt.JasyptPropertiesParser.JASYPT_PREFIX_TOKEN;
 import static org.apache.camel.component.jasypt.JasyptPropertiesParser.JASYPT_SUFFIX_TOKEN;
 import static org.hamcrest.core.Is.is;
@@ -112,4 +111,4 @@
 
         System.clearProperty("myfoo");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java
index 436cd01..164d123 100644
--- a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java
+++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java
@@ -28,6 +28,7 @@
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbHelper.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbHelper.java
index b7c1d79..d096d72 100644
--- a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbHelper.java
+++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbHelper.java
@@ -17,6 +17,7 @@
 package org.apache.camel.converter.jaxb;
 
 import java.lang.reflect.Method;
+
 import javax.xml.bind.annotation.XmlElementDecl;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/address/ObjectFactory.java b/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/address/ObjectFactory.java
index a7af784..5d99f93 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/address/ObjectFactory.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/address/ObjectFactory.java
@@ -18,7 +18,6 @@
 
 import javax.xml.bind.annotation.XmlRegistry;
 
-
 /**
  * This object contains factory methods for each 
  * Java content interface and Java element interface 
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/message/ObjectFactory.java b/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/message/ObjectFactory.java
index ef1fa54..93dc964 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/message/ObjectFactory.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/message/ObjectFactory.java
@@ -21,7 +21,6 @@
 import javax.xml.bind.annotation.XmlRegistry;
 import javax.xml.namespace.QName;
 
-
 /**
  * This object contains factory methods for each
  * Java content interface and Java element interface
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/person/ObjectFactory.java b/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/person/ObjectFactory.java
index cfcf4ac..2d8224e 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/person/ObjectFactory.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/person/ObjectFactory.java
@@ -18,7 +18,6 @@
 
 import javax.xml.bind.annotation.XmlRegistry;
 
-
 /**
  * This object contains factory methods for each 
  * Java content interface and Java element interface 
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/person/Person.java b/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/person/Person.java
index 6ca9686..9d24954 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/person/Person.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/person/Person.java
@@ -21,8 +21,8 @@
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
-import org.apache.camel.converter.jaxb.address.Address;
 
+import org.apache.camel.converter.jaxb.address.Address;
 
 /**
  * <p>Java class for anonymous complex type.
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/example/DataFormatConcurrentTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/example/DataFormatConcurrentTest.java
index 6a679e0..5e873a1 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/example/DataFormatConcurrentTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/example/DataFormatConcurrentTest.java
@@ -32,7 +32,6 @@
 import org.apache.camel.converter.jaxb.JaxbDataFormat;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.test.junit4.CamelTestSupport;
-
 import org.junit.Test;
 
 public class DataFormatConcurrentTest extends CamelTestSupport {
@@ -275,4 +274,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/example/ExplicitEncodingAndXMLCharFilteringTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/example/ExplicitEncodingAndXMLCharFilteringTest.java
index 5a4867b..3b49b97 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/example/ExplicitEncodingAndXMLCharFilteringTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/example/ExplicitEncodingAndXMLCharFilteringTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.example;
+
 import java.io.FileInputStream;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -30,7 +31,6 @@
 import org.junit.Before;
 import org.junit.Test;
 
-
 public class ExplicitEncodingAndXMLCharFilteringTest extends CamelTestSupport {
 
     @Override
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/example/ExplicitFileEncodingTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/example/ExplicitFileEncodingTest.java
index e5245c6..6999c06 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/example/ExplicitFileEncodingTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/example/ExplicitFileEncodingTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.example;
+
 import java.io.File;
 
 import javax.xml.bind.JAXBContext;
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatTest.java
index 2a40e8bb..10d7f43 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/example/SpringDataFormatTest.java
@@ -19,8 +19,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
 import org.junit.Test;
-
-
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 public class SpringDataFormatTest extends CamelSpringTestSupport {
@@ -43,4 +41,4 @@
     protected ClassPathXmlApplicationContext createApplicationContext() {
         return new ClassPathXmlApplicationContext("org/apache/camel/example/springDataFormat.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/foo/bar/ObjectFactory.java b/components/camel-jaxb/src/test/java/org/apache/camel/foo/bar/ObjectFactory.java
index cd81bde..5b709c7 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/foo/bar/ObjectFactory.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/foo/bar/ObjectFactory.java
@@ -21,7 +21,6 @@
 import javax.xml.bind.annotation.XmlRegistry;
 import javax.xml.namespace.QName;
 
-
 /**
  * This object contains factory methods for each 
  * Java content interface and Java element interface 
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/foo/bar/PersonType.java b/components/camel-jaxb/src/test/java/org/apache/camel/foo/bar/PersonType.java
index f0a5df9..1fba52f 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/foo/bar/PersonType.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/foo/bar/PersonType.java
@@ -24,7 +24,6 @@
 
 import org.apache.camel.util.ObjectHelper;
 
-
 /**
  * <p>Java class for PersonType complex type.
  * 
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbNoNamespaceSchemaLocationSpringTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbNoNamespaceSchemaLocationSpringTest.java
index 5a66c7f..7546cc2 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbNoNamespaceSchemaLocationSpringTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbNoNamespaceSchemaLocationSpringTest.java
@@ -22,7 +22,6 @@
 import org.springframework.context.support.AbstractXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class CamelJaxbNoNamespaceSchemaLocationSpringTest extends CamelJaxbNoNamespaceSchemaTest {
     
     @Override
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbNoNamespaceSchemaTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbNoNamespaceSchemaTest.java
index bd3f83c..1885432 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbNoNamespaceSchemaTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbNoNamespaceSchemaTest.java
@@ -23,7 +23,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 public class CamelJaxbNoNamespaceSchemaTest extends CamelTestSupport {
     
     @Test
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbSpringTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbSpringTest.java
index 9ebc51b..f0b3809 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbSpringTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbSpringTest.java
@@ -22,7 +22,6 @@
 import org.springframework.context.support.AbstractXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class CamelJaxbSpringTest extends CamelJaxbTest {
     
     @Override
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbTest.java
index 49641b4..4fb2c31 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 public class CamelJaxbTest extends CamelTestSupport {
 
     @Test
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/FallbackTypeConverterObjectFactoryDisabledTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/FallbackTypeConverterObjectFactoryDisabledTest.java
index 50063e3..4571381 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/FallbackTypeConverterObjectFactoryDisabledTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/FallbackTypeConverterObjectFactoryDisabledTest.java
@@ -21,7 +21,6 @@
 import org.apache.camel.converter.jaxb.FallbackTypeConverter;
 import org.apache.camel.converter.jaxb.message.Message;
 import org.apache.camel.test.junit4.CamelTestSupport;
-
 import org.junit.Test;
 
 public class FallbackTypeConverterObjectFactoryDisabledTest extends CamelTestSupport {
@@ -50,4 +49,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/FallbackTypeConverterObjectFactoryEnabledTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/FallbackTypeConverterObjectFactoryEnabledTest.java
index 1228b66..adc36ac 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/FallbackTypeConverterObjectFactoryEnabledTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/FallbackTypeConverterObjectFactoryEnabledTest.java
@@ -20,7 +20,6 @@
 import org.apache.camel.converter.jaxb.FallbackTypeConverter;
 import org.apache.camel.converter.jaxb.message.Message;
 import org.apache.camel.test.junit4.CamelTestSupport;
-
 import org.junit.Test;
 
 public class FallbackTypeConverterObjectFactoryEnabledTest extends CamelTestSupport {
@@ -49,4 +48,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/FallbackTypeConverterShouldThrowExceptionTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/FallbackTypeConverterShouldThrowExceptionTest.java
index ae732c4..587ae9d 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/FallbackTypeConverterShouldThrowExceptionTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/FallbackTypeConverterShouldThrowExceptionTest.java
@@ -26,7 +26,6 @@
 import org.apache.camel.example.Bar;
 import org.apache.camel.example.Foo;
 import org.apache.camel.test.junit4.CamelTestSupport;
-
 import org.junit.Test;
 
 public class FallbackTypeConverterShouldThrowExceptionTest extends CamelTestSupport {
@@ -109,4 +108,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/SplitterAndExceptionRouteTwistIssueTest.java b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/SplitterAndExceptionRouteTwistIssueTest.java
index 6510095..bcae935 100644
--- a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/SplitterAndExceptionRouteTwistIssueTest.java
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/SplitterAndExceptionRouteTwistIssueTest.java
@@ -19,6 +19,7 @@
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
diff --git a/components/camel-jbpm/src/test/java/org/apache/camel/component/jbpm/workitem/GlobalContextCamelCommandTest.java b/components/camel-jbpm/src/test/java/org/apache/camel/component/jbpm/workitem/GlobalContextCamelCommandTest.java
index 2225747..bf1e2a0 100644
--- a/components/camel-jbpm/src/test/java/org/apache/camel/component/jbpm/workitem/GlobalContextCamelCommandTest.java
+++ b/components/camel-jbpm/src/test/java/org/apache/camel/component/jbpm/workitem/GlobalContextCamelCommandTest.java
@@ -96,4 +96,4 @@
             ServiceRegistry.get().remove(JBPMConstants.GLOBAL_CAMEL_CONTEXT_SERVICE_KEY);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheConfiguration.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheConfiguration.java
index 5f39512..123de78 100644
--- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheConfiguration.java
+++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheConfiguration.java
@@ -20,6 +20,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Properties;
+
 import javax.cache.Cache;
 import javax.cache.CacheManager;
 import javax.cache.configuration.Configuration;
diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEntryEventFilters.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEntryEventFilters.java
index ba4df00..1844c5b 100644
--- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEntryEventFilters.java
+++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEntryEventFilters.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+
 import javax.cache.event.CacheEntryEvent;
 import javax.cache.event.CacheEntryEventFilter;
 import javax.cache.event.CacheEntryListenerException;
diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheManager.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheManager.java
index e71c1ae..51a28c8 100644
--- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheManager.java
+++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheManager.java
@@ -19,6 +19,7 @@
 import java.io.Closeable;
 import java.io.IOException;
 import java.net.URI;
+
 import javax.cache.Cache;
 import javax.cache.CacheManager;
 import javax.cache.Caching;
diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheProducer.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheProducer.java
index 465a658..dccfd453 100644
--- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheProducer.java
+++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheProducer.java
@@ -20,6 +20,7 @@
 import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
+
 import javax.cache.Cache;
 import javax.cache.processor.EntryProcessor;
 
diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/osgi/OSGiCacheManager.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/osgi/OSGiCacheManager.java
index 2641a81..5ba35f3 100644
--- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/osgi/OSGiCacheManager.java
+++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/osgi/OSGiCacheManager.java
@@ -21,6 +21,7 @@
 import java.io.InputStreamReader;
 import java.net.URL;
 import java.util.Enumeration;
+
 import javax.cache.Cache;
 
 import org.apache.camel.component.jcache.JCacheConfiguration;
diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/policy/JCachePolicy.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/policy/JCachePolicy.java
index 151faad..5fb6db2 100644
--- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/policy/JCachePolicy.java
+++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/policy/JCachePolicy.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jcache.policy;
 
 import java.util.Set;
+
 import javax.cache.Cache;
 import javax.cache.CacheManager;
 import javax.cache.Caching;
diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/policy/JCachePolicyProcessor.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/policy/JCachePolicyProcessor.java
index f3cafea..0d36324 100644
--- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/policy/JCachePolicyProcessor.java
+++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/policy/JCachePolicyProcessor.java
@@ -26,7 +26,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class JCachePolicyProcessor extends DelegateAsyncProcessor {
     private static final Logger LOG = LoggerFactory.getLogger(JCachePolicyProcessor.class);
 
diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepository.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepository.java
index 872cd69..7fb8af9 100644
--- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepository.java
+++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepository.java
@@ -20,6 +20,7 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
+
 import javax.cache.Cache;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheComponentTestSupport.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheComponentTestSupport.java
index a2d48a6..c8e334c 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheComponentTestSupport.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheComponentTestSupport.java
@@ -19,6 +19,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
+
 import javax.cache.Cache;
 
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheConfigurationTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheConfigurationTest.java
index 80ed8b4..658d37a 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheConfigurationTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheConfigurationTest.java
@@ -19,6 +19,7 @@
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.Map;
+
 import javax.cache.Cache;
 import javax.cache.configuration.CompleteConfiguration;
 import javax.cache.configuration.Factory;
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerClearTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerClearTest.java
index a1ef7b4..dfb5549 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerClearTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerClearTest.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.cache.Cache;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerGetTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerGetTest.java
index 242cb94..87f5665 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerGetTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerGetTest.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.cache.Cache;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerInvokeTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerInvokeTest.java
index 0f5e89f..c525979 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerInvokeTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerInvokeTest.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.cache.Cache;
 import javax.cache.processor.EntryProcessor;
 import javax.cache.processor.EntryProcessorException;
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerPutTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerPutTest.java
index 6e8e9e4..bf17008 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerPutTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerPutTest.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.cache.Cache;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerRemoveTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerRemoveTest.java
index 352449b..4d59275 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerRemoveTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerRemoveTest.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.cache.Cache;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerReplaceTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerReplaceTest.java
index 4760c43..87c1050 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerReplaceTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/JCacheProducerReplaceTest.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.cache.Cache;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/CacheManagerFromRegistryTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/CacheManagerFromRegistryTest.java
index a1435f7..312c41a 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/CacheManagerFromRegistryTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/CacheManagerFromRegistryTest.java
@@ -17,12 +17,12 @@
 package org.apache.camel.component.jcache.policy;
 
 import java.net.URI;
+
 import javax.cache.Cache;
 import javax.cache.CacheManager;
 import javax.cache.Caching;
 
 import com.hazelcast.instance.HazelcastInstanceFactory;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.After;
@@ -72,7 +72,7 @@
     public void after() {
         super.after();
         CacheManager cacheManager = Caching.getCachingProvider().getCacheManager(URI.create("hzsecond"), null);
-        cacheManager.getCacheNames().forEach((s) -> cacheManager.destroyCache(s));
+        cacheManager.getCacheNames().forEach(s -> cacheManager.destroyCache(s));
         Caching.getCachingProvider().close(URI.create("hzsecond"), null);
 
         // We need to shutdown the second instance using the Hazelcast api.
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/JCachePolicyProcessorTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/JCachePolicyProcessorTest.java
index cb31ae2..dd813a1 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/JCachePolicyProcessorTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/JCachePolicyProcessorTest.java
@@ -133,7 +133,7 @@
     public void testNullResult() throws Exception {
         final String key = randomString();
         MockEndpoint mock = getMockEndpoint("mock:value");
-        mock.whenAnyExchangeReceived((e) -> e.getMessage().setBody(null));
+        mock.whenAnyExchangeReceived(e -> e.getMessage().setBody(null));
 
         //Send first
         this.template().requestBody("direct:cached-simple", key);
@@ -212,7 +212,7 @@
 
         //Send
         Exchange response = this.template().request("direct:cached-invalidkey",
-            (e) -> e.getMessage().setBody(body));
+            e -> e.getMessage().setBody(body));
 
         //Exception is on the exchange, cache is empty, onException was called.
         assertIsInstanceOf(SimpleIllegalSyntaxException.class, response.getException().getCause());
@@ -244,14 +244,15 @@
     public void testException() throws Exception {
         final String key = randomString();
         MockEndpoint mock = getMockEndpoint("mock:value");
-        mock.whenAnyExchangeReceived((e) -> {
+        mock.whenAnyExchangeReceived(e -> {
             throw new RuntimeException("unexpected");
         });
+
         Cache cache = lookupCache("simple");
 
         //Send
         Exchange response = this.template().request("direct:cached-exception",
-            (e) -> e.getMessage().setBody(key));
+            e -> e.getMessage().setBody(key));
 
         //Exception is on the exchange, cache is empty
         assertEquals("unexpected", response.getException().getMessage());
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/JCachePolicyTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/JCachePolicyTest.java
index d9b5f26..682326b 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/JCachePolicyTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/JCachePolicyTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jcache.policy;
 
 import java.util.concurrent.TimeUnit;
+
 import javax.cache.Cache;
 import javax.cache.CacheManager;
 import javax.cache.Caching;
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/JCachePolicyTestBase.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/JCachePolicyTestBase.java
index ccfdaf5..8cd1d7d 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/JCachePolicyTestBase.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/JCachePolicyTestBase.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jcache.policy;
 
 import java.util.UUID;
+
 import javax.cache.Cache;
 import javax.cache.CacheManager;
 import javax.cache.Caching;
@@ -25,15 +26,12 @@
 import org.junit.After;
 import org.junit.Before;
 
-
-
-
 public class JCachePolicyTestBase extends CamelTestSupport {
 
     @Before
     public void before() {
         //Setup mock
-        getMockEndpoint("mock:value").whenAnyExchangeReceived((e) ->
+        getMockEndpoint("mock:value").whenAnyExchangeReceived(e ->
                 e.getMessage().setBody(generateValue(e.getMessage().getBody(String.class))));
     }
 
@@ -54,7 +52,7 @@
     public void after() {
         //The RouteBuilder code is called for every test, so we destroy cache after each test
         CacheManager cacheManager = Caching.getCachingProvider().getCacheManager();
-        cacheManager.getCacheNames().forEach((s) -> cacheManager.destroyCache(s));
+        cacheManager.getCacheNames().forEach(s -> cacheManager.destroyCache(s));
         Caching.getCachingProvider().close();
     }
 }
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/SpringJCachePolicyTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/SpringJCachePolicyTest.java
index 1862ebb..a806a5c 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/SpringJCachePolicyTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/policy/SpringJCachePolicyTest.java
@@ -51,7 +51,7 @@
         //reset mock
         MockEndpoint mock = getMockEndpoint("mock:spring");
         mock.reset();
-        mock.whenAnyExchangeReceived((e) ->
+        mock.whenAnyExchangeReceived(e ->
             e.getMessage().setBody(generateValue(e.getMessage().getBody(String.class))));
     }
 
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryRoutesTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryRoutesTest.java
index 1d07ec2..02f7fdc 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryRoutesTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryRoutesTest.java
@@ -25,7 +25,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class JCacheAggregationRepositoryRoutesTest extends JCacheAggregationRepositoryTestSupport {
 
     private static final String MOCK_GOTCHA = "mock:gotcha";
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTest.java
index d10b575..df23914 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/aggregate/JCacheAggregationRepositoryTest.java
@@ -20,7 +20,6 @@
 import org.apache.camel.support.DefaultExchange;
 import org.junit.Test;
 
-
 public class JCacheAggregationRepositoryTest extends JCacheAggregationRepositoryTestSupport {
 
     @Test(expected = UnsupportedOperationException.class)
diff --git a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepositoryTest.java b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepositoryTest.java
index 1ef333d..2c85d5e 100644
--- a/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepositoryTest.java
+++ b/components/camel-jcache/src/test/java/org/apache/camel/component/jcache/processor/idempotent/JCacheIdempotentRepositoryTest.java
@@ -28,7 +28,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class JCacheIdempotentRepositoryTest extends CamelTestSupport {
     private static final Logger LOGGER = LoggerFactory.getLogger(JCacheIdempotentRepositoryTest.class);
 
diff --git a/components/camel-jclouds/src/test/java/org/apache/camel/component/jclouds/JcloudsFileConsumerStreamCachingIssueTest.java b/components/camel-jclouds/src/test/java/org/apache/camel/component/jclouds/JcloudsFileConsumerStreamCachingIssueTest.java
index 7826544..31c5a8f 100644
--- a/components/camel-jclouds/src/test/java/org/apache/camel/component/jclouds/JcloudsFileConsumerStreamCachingIssueTest.java
+++ b/components/camel-jclouds/src/test/java/org/apache/camel/component/jclouds/JcloudsFileConsumerStreamCachingIssueTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.jclouds;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-jclouds/src/test/java/org/apache/camel/component/jclouds/JcloudsSpringBlobstoreTest.java b/components/camel-jclouds/src/test/java/org/apache/camel/component/jclouds/JcloudsSpringBlobstoreTest.java
index 78f24ff..071a496 100644
--- a/components/camel-jclouds/src/test/java/org/apache/camel/component/jclouds/JcloudsSpringBlobstoreTest.java
+++ b/components/camel-jclouds/src/test/java/org/apache/camel/component/jclouds/JcloudsSpringBlobstoreTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.jclouds;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
diff --git a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/EndpointEventListener.java b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/EndpointEventListener.java
index f523ddd..ea4cbf6 100644
--- a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/EndpointEventListener.java
+++ b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/EndpointEventListener.java
@@ -18,6 +18,7 @@
 
 import java.util.LinkedList;
 import java.util.List;
+
 import javax.jcr.observation.Event;
 import javax.jcr.observation.EventIterator;
 import javax.jcr.observation.EventListener;
diff --git a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrEndpoint.java b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrEndpoint.java
index 910361e..5dec4a3 100644
--- a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrEndpoint.java
+++ b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrEndpoint.java
@@ -18,6 +18,7 @@
 
 import java.net.URI;
 import java.net.URISyntaxException;
+
 import javax.jcr.Credentials;
 import javax.jcr.Repository;
 import javax.jcr.SimpleCredentials;
diff --git a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java
index 8e3b0b0..fcb49be 100644
--- a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java
+++ b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrProducer.java
@@ -21,6 +21,7 @@
 import java.util.Calendar;
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.jcr.Node;
 import javax.jcr.Property;
 import javax.jcr.PropertyIterator;
diff --git a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrAuthTestBase.java b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrAuthTestBase.java
index d7b0e71..5e1a584 100644
--- a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrAuthTestBase.java
+++ b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrAuthTestBase.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jcr;
 
 import java.io.File;
+
 import javax.jcr.Repository;
 import javax.jcr.SimpleCredentials;
 import javax.jcr.security.AccessControlList;
@@ -87,4 +88,4 @@
         return repository;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrRouteTestSupport.java b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrRouteTestSupport.java
index 3da0b67..cd79e6c 100644
--- a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrRouteTestSupport.java
+++ b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrRouteTestSupport.java
@@ -18,6 +18,7 @@
 
 import java.io.File;
 import java.io.FileNotFoundException;
+
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
diff --git a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcComponent.java b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcComponent.java
index 2308b95..2ca86e0 100644
--- a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcComponent.java
+++ b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcComponent.java
@@ -18,6 +18,7 @@
 
 import java.util.Map;
 import java.util.Set;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.Endpoint;
diff --git a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java
index 6190d6d..a45fcd2 100644
--- a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java
+++ b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcEndpoint.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jdbc;
 
 import java.util.Map;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.Component;
diff --git a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
index 852a6ed..27df28e 100644
--- a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
+++ b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java
@@ -34,7 +34,6 @@
 import org.apache.camel.spi.Synchronization;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.camel.support.PropertyBindingSupport;
-
 import org.springframework.jdbc.datasource.DataSourceUtils;
 
 public class JdbcProducer extends DefaultProducer {
diff --git a/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcColumnTypeTest.java b/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcColumnTypeTest.java
index 8f766f5..c32fe3c 100644
--- a/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcColumnTypeTest.java
+++ b/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcColumnTypeTest.java
@@ -20,6 +20,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcGeneratedKeysTest.java b/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcGeneratedKeysTest.java
index abaad2c..5b533b3 100644
--- a/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcGeneratedKeysTest.java
+++ b/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcGeneratedKeysTest.java
@@ -19,7 +19,6 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
 
-
 public class JdbcGeneratedKeysTest extends AbstractJdbcGeneratedKeysTest {
 
     @Test
diff --git a/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerOutputTypeStreamListTest.java b/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerOutputTypeStreamListTest.java
index f09d84f..5763a20 100644
--- a/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerOutputTypeStreamListTest.java
+++ b/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcProducerOutputTypeStreamListTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jdbc;
 
 import java.util.*;
+
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
index 646abff..f835317 100644
--- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
+++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelContinuationServlet.java
@@ -22,6 +22,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeoutException;
 import java.util.stream.Collectors;
+
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
index 119acf5..90faaba 100644
--- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
+++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java
@@ -30,6 +30,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+
 import javax.management.MBeanServer;
 import javax.servlet.Filter;
 import javax.servlet.MultipartConfigElement;
diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java
index 9036de4..edeae07 100644
--- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java
+++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpEndpoint.java
@@ -20,6 +20,7 @@
 import java.net.URISyntaxException;
 import java.util.List;
 import java.util.Map;
+
 import javax.servlet.Filter;
 
 import org.apache.camel.Consumer;
diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/MultiPartFilter.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/MultiPartFilter.java
index 64c181f..a91c5d5 100644
--- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/MultiPartFilter.java
+++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/MultiPartFilter.java
@@ -27,7 +27,6 @@
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 
-
 /**
  * To enable handle attachments with Jetty 9 when this filter is set.
  * <p/>
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsAsyncRouteTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsAsyncRouteTest.java
index 895c866..bbda3f8 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsAsyncRouteTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsAsyncRouteTest.java
@@ -24,6 +24,7 @@
 import java.net.URL;
 import java.util.List;
 import java.util.Map;
+
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLContext;
 
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java
index ad82640..db00860 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/HttpsRouteTest.java
@@ -25,6 +25,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLContext;
 
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyThreadPoolSizeTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyThreadPoolSizeTest.java
index 4866602..b3d07d5 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyThreadPoolSizeTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/JettyThreadPoolSizeTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jetty;
 
 import java.util.Set;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
 import org.slf4j.Logger;
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormWithCustomFilterTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormWithCustomFilterTest.java
index 806ef46..67167f0 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormWithCustomFilterTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiPartFormWithCustomFilterTest.java
@@ -37,7 +37,6 @@
 import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
 import org.apache.commons.httpclient.methods.multipart.Part;
 import org.apache.commons.httpclient.methods.multipart.StringPart;
-
 import org.junit.Test;
 
 public class MultiPartFormWithCustomFilterTest extends BaseJettyTest {
diff --git a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiThreadedHttpGetTest.java b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiThreadedHttpGetTest.java
index 0f6ad66..ac1cdc2 100644
--- a/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiThreadedHttpGetTest.java
+++ b/components/camel-jetty/src/test/java/org/apache/camel/component/jetty/MultiThreadedHttpGetTest.java
@@ -25,7 +25,6 @@
 import org.apache.camel.component.http.HttpComponent;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-
 import org.junit.Test;
 
 public class MultiThreadedHttpGetTest extends BaseJettyTest {
diff --git a/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftComponent.java b/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftComponent.java
index 3433b49..76be1ce 100644
--- a/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftComponent.java
+++ b/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftComponent.java
@@ -20,7 +20,6 @@
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.jgroups.raft.utils.NopStateMachine;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.annotations.Component;
diff --git a/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftEndpoint.java b/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftEndpoint.java
index 91e7e86..0640397 100644
--- a/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftEndpoint.java
+++ b/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftEndpoint.java
@@ -24,7 +24,6 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -209,4 +208,4 @@
     public RaftHandle getResolvedRaftHandle() {
         return resolvedRaftHandle;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/cluster/ClusterRoleChangeListener.java b/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/cluster/ClusterRoleChangeListener.java
index 715c402..b374580 100644
--- a/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/cluster/ClusterRoleChangeListener.java
+++ b/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/cluster/ClusterRoleChangeListener.java
@@ -24,7 +24,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class ClusterRoleChangeListener implements RAFT.RoleChange {
     private static final transient Logger LOG = LoggerFactory.getLogger(ClusterRoleChangeListener.class);
 
diff --git a/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/cluster/JGroupsRaftClusterView.java b/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/cluster/JGroupsRaftClusterView.java
index 5d38a4f..af7459d 100644
--- a/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/cluster/JGroupsRaftClusterView.java
+++ b/components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/cluster/JGroupsRaftClusterView.java
@@ -30,7 +30,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class JGroupsRaftClusterView extends AbstractCamelClusterView {
 
     private static final transient Logger LOG = LoggerFactory.getLogger(JGroupsRaftClusterView.class);
diff --git a/components/camel-jgroups-raft/src/test/java/org/apache/camel/component/jgroups/raft/JGroupsRaftConsumerTest.java b/components/camel-jgroups-raft/src/test/java/org/apache/camel/component/jgroups/raft/JGroupsRaftConsumerTest.java
index d38e0e6..95d9306 100644
--- a/components/camel-jgroups-raft/src/test/java/org/apache/camel/component/jgroups/raft/JGroupsRaftConsumerTest.java
+++ b/components/camel-jgroups-raft/src/test/java/org/apache/camel/component/jgroups/raft/JGroupsRaftConsumerTest.java
@@ -87,4 +87,4 @@
 
         checkHeaders(leaderEventExchange);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jgroups/src/main/java/org/apache/camel/component/jgroups/CamelJGroupsReceiver.java b/components/camel-jgroups/src/main/java/org/apache/camel/component/jgroups/CamelJGroupsReceiver.java
index ad647c2..67c7817 100644
--- a/components/camel-jgroups/src/main/java/org/apache/camel/component/jgroups/CamelJGroupsReceiver.java
+++ b/components/camel-jgroups/src/main/java/org/apache/camel/component/jgroups/CamelJGroupsReceiver.java
@@ -83,4 +83,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jgroups/src/main/java/org/apache/camel/component/jgroups/cluster/JGroupsLockClusterView.java b/components/camel-jgroups/src/main/java/org/apache/camel/component/jgroups/cluster/JGroupsLockClusterView.java
index 57d374d..e40dc59 100644
--- a/components/camel-jgroups/src/main/java/org/apache/camel/component/jgroups/cluster/JGroupsLockClusterView.java
+++ b/components/camel-jgroups/src/main/java/org/apache/camel/component/jgroups/cluster/JGroupsLockClusterView.java
@@ -32,7 +32,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class JGroupsLockClusterView extends AbstractCamelClusterView {
 
     private static final transient Logger LOG = LoggerFactory.getLogger(JGroupsLockClusterView.class);
diff --git a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsClusterRouteTest.java b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsClusterRouteTest.java
index 30ba15a..ec9da3d 100644
--- a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsClusterRouteTest.java
+++ b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsClusterRouteTest.java
@@ -16,9 +16,6 @@
  */
 package org.apache.camel.component.jgroups;
 
-import static java.util.UUID.randomUUID;
-import static java.util.concurrent.TimeUnit.SECONDS;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -27,6 +24,8 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import static java.util.UUID.randomUUID;
+import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.apache.camel.component.jgroups.JGroupsExpressions.delayIfContextNotStarted;
 import static org.apache.camel.component.jgroups.JGroupsFilters.dropNonCoordinatorViews;
 
@@ -137,4 +136,4 @@
         camelContext.getEndpoint(masterMockUri, MockEndpoint.class).assertIsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsClusterTest.java b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsClusterTest.java
index be486d5..04be06d 100644
--- a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsClusterTest.java
+++ b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsClusterTest.java
@@ -16,9 +16,6 @@
  */
 package org.apache.camel.component.jgroups;
 
-import static java.lang.String.format;
-import static java.util.UUID.randomUUID;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
@@ -27,9 +24,10 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import static java.lang.String.format;
+import static java.util.UUID.randomUUID;
 import static org.apache.camel.component.jgroups.JGroupsFilters.dropNonCoordinatorViews;
 
-
 public class JGroupsClusterTest extends Assert {
 
     // Tested state
diff --git a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsComponentTest.java b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsComponentTest.java
index 968a6ff..ac6a583 100644
--- a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsComponentTest.java
+++ b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsComponentTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.jgroups;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsComponentWithChannelPropertiesTest.java b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsComponentWithChannelPropertiesTest.java
index 4d89cf2..e8c9351 100644
--- a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsComponentWithChannelPropertiesTest.java
+++ b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsComponentWithChannelPropertiesTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.jgroups;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsConsumerTest.java b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsConsumerTest.java
index a9831f6..475ed50 100644
--- a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsConsumerTest.java
+++ b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsConsumerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.jgroups;
+
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -99,4 +100,4 @@
         assertMockEndpointsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsProducerTest.java b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsProducerTest.java
index 1ac9763..f96f970 100644
--- a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsProducerTest.java
+++ b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/JGroupsProducerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.jgroups;
+
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/cluster/JGroupsLockMasterTest.java b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/cluster/JGroupsLockMasterTest.java
index 8356a78..4955ad4 100644
--- a/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/cluster/JGroupsLockMasterTest.java
+++ b/components/camel-jgroups/src/test/java/org/apache/camel/component/jgroups/cluster/JGroupsLockMasterTest.java
@@ -33,7 +33,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class JGroupsLockMasterTest {
     private static final Logger LOGGER = LoggerFactory.getLogger(JGroupsLockMasterTest.class);
     private static final List<String> CLIENTS = IntStream.range(0, 3).mapToObj(Integer::toString).collect(Collectors.toList());
diff --git a/components/camel-jing/src/main/java/org/apache/camel/component/validator/jing/JingValidator.java b/components/camel-jing/src/main/java/org/apache/camel/component/validator/jing/JingValidator.java
index adb3ff8..7da8b90 100644
--- a/components/camel-jing/src/main/java/org/apache/camel/component/validator/jing/JingValidator.java
+++ b/components/camel-jing/src/main/java/org/apache/camel/component/validator/jing/JingValidator.java
@@ -32,7 +32,6 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.support.DefaultProducer;
-
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.processor.validation.DefaultValidationErrorHandler;
 
diff --git a/components/camel-jira/src/main/java/org/apache/camel/component/jira/JiraEndpoint.java b/components/camel-jira/src/main/java/org/apache/camel/component/jira/JiraEndpoint.java
index 9c3baf8..3fe027e 100644
--- a/components/camel-jira/src/main/java/org/apache/camel/component/jira/JiraEndpoint.java
+++ b/components/camel-jira/src/main/java/org/apache/camel/component/jira/JiraEndpoint.java
@@ -45,7 +45,6 @@
 
 import static org.apache.camel.component.jira.JiraConstants.JIRA_REST_CLIENT_FACTORY;
 
-
 /**
  * The jira component interacts with the JIRA issue tracker.
  * <p>
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
index c73bc73..7b04588 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
@@ -18,6 +18,7 @@
 
 import java.util.Map;
 import java.util.concurrent.ExecutorService;
+
 import javax.jms.ConnectionFactory;
 import javax.jms.ExceptionListener;
 import javax.jms.Message;
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
index c7c160d..a167bfb 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
@@ -19,6 +19,7 @@
 import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.atomic.AtomicInteger;
+
 import javax.jms.ConnectionFactory;
 import javax.jms.Destination;
 import javax.jms.ExceptionListener;
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java
index ae532db..1cfa435 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java
@@ -21,8 +21,6 @@
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import static java.util.Optional.ofNullable;
-
 import javax.jms.Connection;
 import javax.jms.Destination;
 import javax.jms.JMSException;
@@ -47,6 +45,7 @@
 import org.springframework.jms.core.MessageCreator;
 import org.springframework.jms.support.JmsUtils;
 
+import static java.util.Optional.ofNullable;
 import static org.apache.camel.component.jms.JmsMessageHelper.isQueuePrefix;
 import static org.apache.camel.component.jms.JmsMessageHelper.isTopicPrefix;
 import static org.apache.camel.component.jms.JmsMessageHelper.normalizeDestinationName;
diff --git a/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/MessageSelectorCreator.java b/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/MessageSelectorCreator.java
index 18e1536..9b0e84b 100644
--- a/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/MessageSelectorCreator.java
+++ b/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/MessageSelectorCreator.java
@@ -84,4 +84,4 @@
         dirty = true;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/ConsumeJmsBytesMessageTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/ConsumeJmsBytesMessageTest.java
index 300cd7f..5dd3cab 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/ConsumeJmsBytesMessageTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/ConsumeJmsBytesMessageTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.jms;
 
-
 import java.util.Arrays;
 
 import javax.jms.BytesMessage;
@@ -38,7 +37,6 @@
 
 import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 
-
 public class ConsumeJmsBytesMessageTest extends CamelTestSupport {
     protected JmsTemplate jmsTemplate;
     private MockEndpoint endpoint;
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/ConsumerTemplateJmsSelectorTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/ConsumerTemplateJmsSelectorTest.java
index b6307c3..1c97527 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/ConsumerTemplateJmsSelectorTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/ConsumerTemplateJmsSelectorTest.java
@@ -56,4 +56,4 @@
     public boolean isUseRouteBuilder() {
         return false;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteJmsKeepLastModifiedTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteJmsKeepLastModifiedTest.java
index 655b36e..ea6a242 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteJmsKeepLastModifiedTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteJmsKeepLastModifiedTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.jms;
+
 import java.io.File;
 
 import javax.jms.ConnectionFactory;
@@ -81,4 +82,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteJmsPreMoveTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteJmsPreMoveTest.java
index 62424ca..f305e9e 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteJmsPreMoveTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteJmsPreMoveTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.jms;
+
 import javax.jms.ConnectionFactory;
 
 import org.apache.camel.CamelContext;
@@ -74,4 +75,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsTest.java
index cae37c3..9f8b1d7 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsTest.java
@@ -67,4 +67,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsToFileTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsToFileTest.java
index 68bf5f9..3bd8f70 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsToFileTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/FileRouteToJmsToFileTest.java
@@ -75,4 +75,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStartListenerTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStartListenerTest.java
index 6661d30..c760f05 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStartListenerTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStartListenerTest.java
@@ -66,4 +66,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStartStopListenerTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStartStopListenerTest.java
index bc8bf82..30e537e 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStartStopListenerTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStartStopListenerTest.java
@@ -73,4 +73,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStopListenerTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStopListenerTest.java
index 4850731..ba779c5 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStopListenerTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsAsyncStopListenerTest.java
@@ -64,4 +64,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java
index 6b3703e..7224f85 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBatchResequencerJMSPriorityTest.java
@@ -76,4 +76,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBindingTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBindingTest.java
index 9562b8b..a8bca0b 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBindingTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsBindingTest.java
@@ -25,7 +25,6 @@
 import org.apache.activemq.command.ActiveMQTextMessage;
 import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultCamelContext;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsConsumeTemplateTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsConsumeTemplateTest.java
index 70ea5bf..be16deb 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsConsumeTemplateTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsConsumeTemplateTest.java
@@ -54,4 +54,4 @@
     public boolean isUseRouteBuilder() {
         return false;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterQueueTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterQueueTest.java
index d15cd45..c8c1e3e 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterQueueTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterQueueTest.java
@@ -93,4 +93,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterQueueUsingTransferExchangeTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterQueueUsingTransferExchangeTest.java
index 1e29009..26c29b9 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterQueueUsingTransferExchangeTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDeadLetterQueueUsingTransferExchangeTest.java
@@ -88,4 +88,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDurableTopicTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDurableTopicTest.java
index b2986ff..802f918 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDurableTopicTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsDurableTopicTest.java
@@ -65,4 +65,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEagerLoadingPropertiesTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEagerLoadingPropertiesTest.java
index 9e6b072..8400ab1 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEagerLoadingPropertiesTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEagerLoadingPropertiesTest.java
@@ -65,4 +65,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyWithReplyToHeaderTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyWithReplyToHeaderTest.java
index 1101a1d..83fcf37 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyWithReplyToHeaderTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyWithReplyToHeaderTest.java
@@ -69,4 +69,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyWithReplyToHeaderTopicTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyWithReplyToHeaderTopicTest.java
index 2e5e2c1..1bacc29 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyWithReplyToHeaderTopicTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyWithReplyToHeaderTopicTest.java
@@ -74,4 +74,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutBeanReturnNullTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutBeanReturnNullTest.java
index 91bfa76..5ee62da 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutBeanReturnNullTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutBeanReturnNullTest.java
@@ -110,4 +110,4 @@
             return name;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutWithNoOutBodyTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutWithNoOutBodyTest.java
index c155011..cebe456 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutWithNoOutBodyTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOutWithNoOutBodyTest.java
@@ -24,6 +24,7 @@
 import org.junit.Test;
 
 import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
+
 /**
  *
  */
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsLoadBalanceFailoverTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsLoadBalanceFailoverTest.java
index 1721e40..cf06c07 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsLoadBalanceFailoverTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsLoadBalanceFailoverTest.java
@@ -75,4 +75,4 @@
         return camelContext;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMultipleConsumersTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMultipleConsumersTest.java
index 941e658..3f8e347 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMultipleConsumersTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMultipleConsumersTest.java
@@ -90,4 +90,4 @@
     public boolean isUseRouteBuilder() {
         return false;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNoRequestTimeoutTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNoRequestTimeoutTest.java
index cc07dc9..e6a3f49 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNoRequestTimeoutTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNoRequestTimeoutTest.java
@@ -53,4 +53,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsOnCompletionTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsOnCompletionTest.java
index 4432a36..0924a4b 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsOnCompletionTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsOnCompletionTest.java
@@ -105,4 +105,4 @@
         return camelContext;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerDisableReplyToTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerDisableReplyToTest.java
index d10fb76..9421176e 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerDisableReplyToTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerDisableReplyToTest.java
@@ -54,4 +54,4 @@
     public boolean isUseRouteBuilder() {
         return false;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProduerConcurrentWithReplyTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProduerConcurrentWithReplyTest.java
index da6ed94..bc3bd6c 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProduerConcurrentWithReplyTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProduerConcurrentWithReplyTest.java
@@ -91,4 +91,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToComponentTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToComponentTest.java
index 4b61f08..dc2bd4d 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToComponentTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToComponentTest.java
@@ -67,4 +67,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToConcurrentTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToConcurrentTest.java
index 3e79be1..51a1827 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToConcurrentTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToConcurrentTest.java
@@ -91,4 +91,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToRemoveAddRouteTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToRemoveAddRouteTest.java
index 01053c5..4c8e0ec 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToRemoveAddRouteTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToRemoveAddRouteTest.java
@@ -74,4 +74,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToTest.java
index 4efd8f5..faa0f20 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyExclusiveReplyToTest.java
@@ -78,4 +78,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyFixedReplyToInEndpointTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyFixedReplyToInEndpointTest.java
index 79f53c9..3f8f4d4 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyFixedReplyToInEndpointTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyFixedReplyToInEndpointTest.java
@@ -93,4 +93,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyManualWithJMSReplyToTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyManualWithJMSReplyToTest.java
index ee28ec5..a144140 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyManualWithJMSReplyToTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyManualWithJMSReplyToTest.java
@@ -71,4 +71,4 @@
         return camelContext;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyProcessRepliesConcurrentUsingThreadsTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyProcessRepliesConcurrentUsingThreadsTest.java
index f417daf..20ba1f8 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyProcessRepliesConcurrentUsingThreadsTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyProcessRepliesConcurrentUsingThreadsTest.java
@@ -78,4 +78,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplySharedReplyToTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplySharedReplyToTest.java
index e575c70..5858adc 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplySharedReplyToTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplySharedReplyToTest.java
@@ -63,4 +63,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyTemporaryCacheNoneTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyTemporaryCacheNoneTest.java
index 7ba3103..70b48ec 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyTemporaryCacheNoneTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRequestReplyTemporaryCacheNoneTest.java
@@ -75,4 +75,4 @@
             assertEquals("ReplyToCacheLevelName cannot be CACHE_NONE when using temporary reply queues. The value must be either CACHE_CONSUMER, or CACHE_SESSION", iae.getMessage());
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteRequestReplyTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteRequestReplyTest.java
index e6f3583..d225d01 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteRequestReplyTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteRequestReplyTest.java
@@ -44,7 +44,6 @@
 
 import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 
-
 public class JmsRouteRequestReplyTest extends CamelTestSupport {
 
     protected static final String REPLY_TO_DESTINATION_SELECTOR_NAME = "camelProducer";
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTimeoutCheckerIntervalTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTimeoutCheckerIntervalTest.java
index c1d8da4..07a4b82 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTimeoutCheckerIntervalTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTimeoutCheckerIntervalTest.java
@@ -73,4 +73,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTimeoutTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTimeoutTest.java
index 9b34c32..5e355a8 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTimeoutTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteTimeoutTest.java
@@ -70,4 +70,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingJMSXGroupTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingJMSXGroupTest.java
index a8f4f10..35eba65 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingJMSXGroupTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteUsingJMSXGroupTest.java
@@ -85,4 +85,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorTest.java
index cb951f1..753915c 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorTest.java
@@ -62,4 +62,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleInOnlyNoMutateTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleInOnlyNoMutateTest.java
index 0e0ee46..9db285d 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleInOnlyNoMutateTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleInOnlyNoMutateTest.java
@@ -70,4 +70,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestReply2Test.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestReply2Test.java
index e094401..66478dc 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestReply2Test.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestReply2Test.java
@@ -76,4 +76,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestReplyFixedReplyQueueTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestReplyFixedReplyQueueTest.java
index 881c424..dbd8fc6 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestReplyFixedReplyQueueTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestReplyFixedReplyQueueTest.java
@@ -76,4 +76,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestReplyTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestReplyTest.java
index 238cb44..4953e58 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestReplyTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSimpleRequestReplyTest.java
@@ -90,4 +90,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
index abc8dfb..d1b76e3 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.jms;
+
 import java.io.File;
 
 import javax.jms.ConnectionFactory;
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransactedRouteTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransactedRouteTest.java
index 04550bd..208baf8 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransactedRouteTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransactedRouteTest.java
@@ -26,7 +26,6 @@
 
 import static org.apache.camel.component.jms.JmsComponent.jmsComponentTransacted;
 
-
 public class JmsTransactedRouteTest extends CamelTestSupport {
 
     @Test
@@ -63,4 +62,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExceptionTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExceptionTest.java
index 776033a..a3cbbef 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExceptionTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsTransferExceptionTest.java
@@ -102,4 +102,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsUseOriginalBodyTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsUseOriginalBodyTest.java
index a292e5a..596a105 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsUseOriginalBodyTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsUseOriginalBodyTest.java
@@ -103,4 +103,4 @@
         return camelContext;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsXMLRouteTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsXMLRouteTest.java
index 122934a..7e172dd 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsXMLRouteTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsXMLRouteTest.java
@@ -33,7 +33,6 @@
 
 import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 
-
 /**
  * For unit testing with XML streams that can be troublesome with the StreamCache
  */
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsXPathHeaderTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsXPathHeaderTest.java
index 95205f3..759f003 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsXPathHeaderTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsXPathHeaderTest.java
@@ -89,4 +89,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/PayloadByteArrayJmsTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/PayloadByteArrayJmsTest.java
index 55b3dcb..24d3c03 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/PayloadByteArrayJmsTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/PayloadByteArrayJmsTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.jms;
 
-
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.io.Reader;
@@ -33,7 +32,6 @@
 
 import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 
-
 /**
  * Unit test that we send payload as byte[] for certain types
  */
@@ -101,4 +99,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/config/JmsEndpointWithCustomDestinationTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/config/JmsEndpointWithCustomDestinationTest.java
index a0f40ac..cd839c2 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/config/JmsEndpointWithCustomDestinationTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/config/JmsEndpointWithCustomDestinationTest.java
@@ -22,7 +22,6 @@
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class JmsEndpointWithCustomDestinationTest extends CamelSpringTestSupport {
 
     private Object expectedBody = "<hello>world!</hello>";
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/DynamicRoutersWithJMSMessageLostHeadersIssueTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/DynamicRoutersWithJMSMessageLostHeadersIssueTest.java
index 10ffb43..d064016 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/DynamicRoutersWithJMSMessageLostHeadersIssueTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/DynamicRoutersWithJMSMessageLostHeadersIssueTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.jms.issues;
+
 import javax.jms.ConnectionFactory;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsGetHeaderKeyFormatIssueWithContentTypeHeaderTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsGetHeaderKeyFormatIssueWithContentTypeHeaderTest.java
index c929040..15cbad0 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsGetHeaderKeyFormatIssueWithContentTypeHeaderTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsGetHeaderKeyFormatIssueWithContentTypeHeaderTest.java
@@ -85,4 +85,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOnlyIssueTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOnlyIssueTest.java
index fc561f1..bcb9572 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOnlyIssueTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOnlyIssueTest.java
@@ -109,4 +109,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOnlyParameterTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOnlyParameterTest.java
index 16e603a..00ba4c7 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOnlyParameterTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOnlyParameterTest.java
@@ -84,4 +84,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOutUseMessageIDasCorrelationIDTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOutUseMessageIDasCorrelationIDTest.java
index 784621c..5bf9cea 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOutUseMessageIDasCorrelationIDTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsInOutUseMessageIDasCorrelationIDTest.java
@@ -66,4 +66,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsJMSReplyToConsumerEndpointUsingInOutTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsJMSReplyToConsumerEndpointUsingInOutTest.java
index 9035faf..e25e7d4 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsJMSReplyToConsumerEndpointUsingInOutTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsJMSReplyToConsumerEndpointUsingInOutTest.java
@@ -58,4 +58,4 @@
         return camelContext;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsJMSReplyToEndpointUsingInOutTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsJMSReplyToEndpointUsingInOutTest.java
index b639e4c..a91cf1c 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsJMSReplyToEndpointUsingInOutTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsJMSReplyToEndpointUsingInOutTest.java
@@ -127,4 +127,4 @@
     }
 
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateRemoveHeaderMessageTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateRemoveHeaderMessageTest.java
index 2c6e33c..c233e2b 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateRemoveHeaderMessageTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsMutateRemoveHeaderMessageTest.java
@@ -87,4 +87,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsPassThroughtJmsKeyFormatStrategyUsingJmsConfigurationTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsPassThroughtJmsKeyFormatStrategyUsingJmsConfigurationTest.java
index 0335f68..655a818 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsPassThroughtJmsKeyFormatStrategyUsingJmsConfigurationTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsPassThroughtJmsKeyFormatStrategyUsingJmsConfigurationTest.java
@@ -98,4 +98,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsReplyToLoopIssueTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsReplyToLoopIssueTest.java
index 2422bb8..af7ae83 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsReplyToLoopIssueTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsReplyToLoopIssueTest.java
@@ -70,4 +70,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsTransactedDeadLetterChannelHandlerRollbackOnExceptionTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsTransactedDeadLetterChannelHandlerRollbackOnExceptionTest.java
index 84c0883..ab3a1e3 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsTransactedDeadLetterChannelHandlerRollbackOnExceptionTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsTransactedDeadLetterChannelHandlerRollbackOnExceptionTest.java
@@ -83,4 +83,4 @@
         return camelContext;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsTransactedOnExceptionRollbackOnExceptionTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsTransactedOnExceptionRollbackOnExceptionTest.java
index df36b80..374cdfc 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsTransactedOnExceptionRollbackOnExceptionTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsTransactedOnExceptionRollbackOnExceptionTest.java
@@ -75,4 +75,4 @@
         return camelContext;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/MQSeriesHeaderTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/MQSeriesHeaderTest.java
index d26011d..2b4af42 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/MQSeriesHeaderTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/MQSeriesHeaderTest.java
@@ -76,4 +76,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/temp/JmsRequestReplyTemporaryRefreshFailureOnStartupTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/temp/JmsRequestReplyTemporaryRefreshFailureOnStartupTest.java
index 76e25dc..83ece88 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/temp/JmsRequestReplyTemporaryRefreshFailureOnStartupTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/temp/JmsRequestReplyTemporaryRefreshFailureOnStartupTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jms.temp;
 
 import java.util.concurrent.TimeUnit;
+
 import javax.jms.ConnectionFactory;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/tuning/PerformanceRouteTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/tuning/PerformanceRouteTest.java
index 4b3b4e4..54faf13 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/tuning/PerformanceRouteTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/tuning/PerformanceRouteTest.java
@@ -27,7 +27,6 @@
 
 import static org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 
-
 @Ignore
 public class PerformanceRouteTest extends CamelTestSupport {
 
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMSTransactionThrottlingRoutePolicyTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMSTransactionThrottlingRoutePolicyTest.java
index b1c4056..9bc78ee 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMSTransactionThrottlingRoutePolicyTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMSTransactionThrottlingRoutePolicyTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.jms.tx;
+
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
 import org.junit.Before;
@@ -50,4 +51,4 @@
         assertMockEndpointsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/XMLQueueToQueueTransactionTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/XMLQueueToQueueTransactionTest.java
index af9c252..8c9c2a8 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/XMLQueueToQueueTransactionTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/XMLQueueToQueueTransactionTest.java
@@ -20,7 +20,6 @@
 import org.junit.Test;
 import org.springframework.context.support.AbstractXmlApplicationContext;
 
-
 /**
  * Test case derived from:
  * http://camel.apache.org/transactional-client.html and Martin
diff --git a/components/camel-jmx/src/main/java/org/apache/camel/component/jmx/JMXEndpoint.java b/components/camel-jmx/src/main/java/org/apache/camel/component/jmx/JMXEndpoint.java
index 961d7e7..ab5824f 100644
--- a/components/camel-jmx/src/main/java/org/apache/camel/component/jmx/JMXEndpoint.java
+++ b/components/camel-jmx/src/main/java/org/apache/camel/component/jmx/JMXEndpoint.java
@@ -19,6 +19,7 @@
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.concurrent.ExecutorService;
+
 import javax.management.MalformedObjectNameException;
 import javax.management.NotificationFilter;
 import javax.management.ObjectName;
diff --git a/components/camel-jmx/src/main/java/org/apache/camel/component/jmx/NotificationXmlFormatter.java b/components/camel-jmx/src/main/java/org/apache/camel/component/jmx/NotificationXmlFormatter.java
index 70b364a..236673c 100644
--- a/components/camel-jmx/src/main/java/org/apache/camel/component/jmx/NotificationXmlFormatter.java
+++ b/components/camel-jmx/src/main/java/org/apache/camel/component/jmx/NotificationXmlFormatter.java
@@ -21,6 +21,7 @@
 import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.List;
+
 import javax.management.AttributeChangeNotification;
 import javax.management.MBeanServerNotification;
 import javax.management.Notification;
diff --git a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXMonitorTypeLongCounterTest.java b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXMonitorTypeLongCounterTest.java
index b8b2d7f..b769817 100644
--- a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXMonitorTypeLongCounterTest.java
+++ b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXMonitorTypeLongCounterTest.java
@@ -21,7 +21,6 @@
 import org.apache.camel.component.jmx.beans.ISimpleMXBean;
 import org.junit.jupiter.api.Test;
 
-
 public class JMXMonitorTypeLongCounterTest extends SimpleBeanFixture {
     
     @Test
diff --git a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXNotificationFilterTest.java b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXNotificationFilterTest.java
index 5d90034..7f1be00 100644
--- a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXNotificationFilterTest.java
+++ b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXNotificationFilterTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jmx;
 
 import java.util.LinkedHashSet;
+
 import javax.management.Notification;
 import javax.management.NotificationFilter;
 
diff --git a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRobustRemoteConnectionTest.java b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRobustRemoteConnectionTest.java
index cbd8038..a7def0c 100644
--- a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRobustRemoteConnectionTest.java
+++ b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/JMXRobustRemoteConnectionTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.jmx;
 
-
 import java.io.File;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.registry.Registry;
diff --git a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/XmlFixture.java b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/XmlFixture.java
index c64fc4f..89581a4 100644
--- a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/XmlFixture.java
+++ b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/XmlFixture.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jmx;
 
 import java.io.File;
+
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Source;
 import javax.xml.transform.Transformer;
diff --git a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/beans/SimpleBean.java b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/beans/SimpleBean.java
index cd4e82f..6ce9aef 100644
--- a/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/beans/SimpleBean.java
+++ b/components/camel-jmx/src/test/java/org/apache/camel/component/jmx/beans/SimpleBean.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.management.AttributeChangeNotification;
 import javax.management.MBeanServerNotification;
 import javax.management.Notification;
diff --git a/components/camel-johnzon/src/main/java/org/apache/camel/component/johnzon/JohnzonDataFormat.java b/components/camel-johnzon/src/main/java/org/apache/camel/component/johnzon/JohnzonDataFormat.java
index 42b4255..5296b33 100644
--- a/components/camel-johnzon/src/main/java/org/apache/camel/component/johnzon/JohnzonDataFormat.java
+++ b/components/camel-johnzon/src/main/java/org/apache/camel/component/johnzon/JohnzonDataFormat.java
@@ -50,7 +50,7 @@
     private boolean skipNull;
 
     public JohnzonDataFormat() {
-       this(Object.class);
+        this(Object.class);
     }
     
     /**
diff --git a/components/camel-johnzon/src/test/java/org/apache/camel/component/johnzon/JohnzonDataFormatTest.java b/components/camel-johnzon/src/test/java/org/apache/camel/component/johnzon/JohnzonDataFormatTest.java
index d746ae4..0f96224 100644
--- a/components/camel-johnzon/src/test/java/org/apache/camel/component/johnzon/JohnzonDataFormatTest.java
+++ b/components/camel-johnzon/src/test/java/org/apache/camel/component/johnzon/JohnzonDataFormatTest.java
@@ -77,4 +77,4 @@
         }
         assertEquals(expected, unmarshalled);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java b/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java
index b55e2d4..219f2ab 100644
--- a/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java
+++ b/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java
@@ -28,7 +28,6 @@
 import com.bazaarvoice.jolt.Shiftr;
 import com.bazaarvoice.jolt.Sortr;
 import com.bazaarvoice.jolt.Transform;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Message;
diff --git a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java
index 252a33d..0006341 100644
--- a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java
+++ b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaComponent.java
@@ -18,6 +18,7 @@
 
 import java.util.Map;
 import java.util.concurrent.ExecutorService;
+
 import javax.persistence.EntityManagerFactory;
 
 import org.apache.camel.Endpoint;
diff --git a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java
index 14a965a..ec7239b 100644
--- a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java
+++ b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaEndpoint.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jpa;
 
 import java.util.Map;
+
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.LockModeType;
diff --git a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaPollingConsumer.java b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaPollingConsumer.java
index 77528fd..0b75190 100644
--- a/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaPollingConsumer.java
+++ b/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaPollingConsumer.java
@@ -24,6 +24,7 @@
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+
 import javax.persistence.Entity;
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
diff --git a/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/AbstractJpaMethodTest.java b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/AbstractJpaMethodTest.java
index 5f1937e..ccab26a 100644
--- a/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/AbstractJpaMethodTest.java
+++ b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/AbstractJpaMethodTest.java
@@ -20,6 +20,7 @@
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+
 import javax.persistence.EntityManager;
 
 import org.apache.camel.Consumer;
@@ -188,4 +189,4 @@
         customer.setAddress(address);
         return customer;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNamedQueryAndParametersTest.java b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNamedQueryAndParametersTest.java
index f8eff9e..a1b3a59 100644
--- a/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNamedQueryAndParametersTest.java
+++ b/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNamedQueryAndParametersTest.java
@@ -21,6 +21,7 @@
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+
 import javax.persistence.EntityManager;
 
 import org.apache.camel.Consumer;
diff --git a/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaPollingConsumerLockEntityTest.java b/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaPollingConsumerLockEntityTest.java
index bfdf7e1..97e979f 100644
--- a/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaPollingConsumerLockEntityTest.java
+++ b/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaPollingConsumerLockEntityTest.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.persistence.OptimisticLockException;
 
 import org.apache.camel.AggregationStrategy;
diff --git a/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaRouteSharedEntityManagerTest.java b/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaRouteSharedEntityManagerTest.java
index 9ea8bc7..8f7b312 100644
--- a/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaRouteSharedEntityManagerTest.java
+++ b/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaRouteSharedEntityManagerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.jpa;
+
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
diff --git a/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaRouteSkipLockedEntityTest.java b/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaRouteSkipLockedEntityTest.java
index b7d5929..945afb2 100644
--- a/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaRouteSkipLockedEntityTest.java
+++ b/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaRouteSkipLockedEntityTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.jpa;
+
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.List;
diff --git a/components/camel-jsch/src/test/java/org/apache/camel/component/scp/ScpServerTestSupport.java b/components/camel-jsch/src/test/java/org/apache/camel/component/scp/ScpServerTestSupport.java
index 7ca22ae..12bda8b 100644
--- a/components/camel-jsch/src/test/java/org/apache/camel/component/scp/ScpServerTestSupport.java
+++ b/components/camel-jsch/src/test/java/org/apache/camel/component/scp/ScpServerTestSupport.java
@@ -28,7 +28,6 @@
 import com.jcraft.jsch.JSchException;
 import com.jcraft.jsch.Session;
 import com.jcraft.jsch.UserInfo;
-
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.sshd.common.keyprovider.FileKeyPairProvider;
diff --git a/components/camel-jsonapi/src/main/java/org/apache/camel/component/jsonapi/JsonApiDataFormat.java b/components/camel-jsonapi/src/main/java/org/apache/camel/component/jsonapi/JsonApiDataFormat.java
index d79413e..3d65cd6 100644
--- a/components/camel-jsonapi/src/main/java/org/apache/camel/component/jsonapi/JsonApiDataFormat.java
+++ b/components/camel-jsonapi/src/main/java/org/apache/camel/component/jsonapi/JsonApiDataFormat.java
@@ -90,4 +90,4 @@
     public void setMainFormatType(Class<?> mainFormatType) {
         this.mainFormatType = mainFormatType;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPath.java b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPath.java
index 35e5e0e..3b9433b 100644
--- a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPath.java
+++ b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPath.java
@@ -52,4 +52,4 @@
      * To configure the JsonPath options to use
      */
     Option[] options() default {};
-}
\ No newline at end of file
+}
diff --git a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathSourceTest.java b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathSourceTest.java
index 999a212..b2b3876 100644
--- a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathSourceTest.java
+++ b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathSourceTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.jsonpath;
+
 import java.io.File;
 import java.lang.reflect.Field;
 import java.nio.charset.Charset;
@@ -25,7 +26,6 @@
 import org.junit.AfterClass;
 import org.junit.Test;
 
-
 public class JsonPathSourceTest extends CamelTestSupport {
     private static final String MESSAGE1 = "Joseph und seine Br\u00fcder";
     private static final String MESSAGE2 = "G\u00f6tzend\u00e4mmerung";
diff --git a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonStreamTest.java b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonStreamTest.java
index 9feb4e7..70c3f93 100644
--- a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonStreamTest.java
+++ b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonStreamTest.java
@@ -27,7 +27,6 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 
-
 public class JsonStreamTest {
 
     @Test
diff --git a/components/camel-jt400/src/test/java/org/apache/camel/component/jt400/Jt400SecureTestSupport.java b/components/camel-jt400/src/test/java/org/apache/camel/component/jt400/Jt400SecureTestSupport.java
index 824610e..d6a30e6 100644
--- a/components/camel-jt400/src/test/java/org/apache/camel/component/jt400/Jt400SecureTestSupport.java
+++ b/components/camel-jt400/src/test/java/org/apache/camel/component/jt400/Jt400SecureTestSupport.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.jt400;
 
 import com.ibm.as400.access.AS400ConnectionPool;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.After;
diff --git a/components/camel-jt400/src/test/java/org/apache/camel/component/jt400/Jt400TestSupport.java b/components/camel-jt400/src/test/java/org/apache/camel/component/jt400/Jt400TestSupport.java
index 658fef0..640736f 100644
--- a/components/camel-jt400/src/test/java/org/apache/camel/component/jt400/Jt400TestSupport.java
+++ b/components/camel-jt400/src/test/java/org/apache/camel/component/jt400/Jt400TestSupport.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.jt400;
 
 import com.ibm.as400.access.AS400ConnectionPool;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.After;
diff --git a/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/KafkaProducerFullTest.java b/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/KafkaProducerFullTest.java
index 6cc633f..a0b2a0f 100644
--- a/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/KafkaProducerFullTest.java
+++ b/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/KafkaProducerFullTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.kafka;
+
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
diff --git a/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/embedded/TestUtils.java b/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/embedded/TestUtils.java
index 5c9b74a..d44d49c 100644
--- a/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/embedded/TestUtils.java
+++ b/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/embedded/TestUtils.java
@@ -21,7 +21,6 @@
 
 import org.apache.commons.lang3.RandomStringUtils;
 
-
 final class TestUtils {
 
     private static final String TMPDIR = System.getProperty("java.io.tmpdir");
diff --git a/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/serde/DefaultKafkaHeaderDeserializerTest.java b/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/serde/DefaultKafkaHeaderDeserializerTest.java
index 15de492..33fa059 100644
--- a/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/serde/DefaultKafkaHeaderDeserializerTest.java
+++ b/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/serde/DefaultKafkaHeaderDeserializerTest.java
@@ -36,4 +36,4 @@
         assertArrayEquals(value, (byte[]) deserializedValue);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/serde/DefaultKafkaHeaderSerializerTest.java b/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/serde/DefaultKafkaHeaderSerializerTest.java
index a2c3c64..5ca0fbc 100644
--- a/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/serde/DefaultKafkaHeaderSerializerTest.java
+++ b/components/camel-kafka/src/test/java/org/apache/camel/component/kafka/serde/DefaultKafkaHeaderSerializerTest.java
@@ -58,4 +58,4 @@
             {new Object(), null}                             //unknown type
         });
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/AbstractKubernetesEndpoint.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/AbstractKubernetesEndpoint.java
index b721db0..74d891b 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/AbstractKubernetesEndpoint.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/AbstractKubernetesEndpoint.java
@@ -19,7 +19,6 @@
 import java.util.concurrent.ExecutorService;
 
 import io.fabric8.kubernetes.client.KubernetesClient;
-
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultEndpoint;
 
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConfiguration.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConfiguration.java
index a677eb1..8c3afc1 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConfiguration.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesConfiguration.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.kubernetes;
 
 import io.fabric8.kubernetes.client.KubernetesClient;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesHelper.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesHelper.java
index f3a98a8..5df5345 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesHelper.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/KubernetesHelper.java
@@ -20,7 +20,6 @@
 import io.fabric8.kubernetes.client.ConfigBuilder;
 import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
-
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cloud/KubernetesDnsSrvServiceDiscovery.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cloud/KubernetesDnsSrvServiceDiscovery.java
index 8b73f76..70ba24f 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cloud/KubernetesDnsSrvServiceDiscovery.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cloud/KubernetesDnsSrvServiceDiscovery.java
@@ -22,6 +22,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+
 import javax.naming.NamingEnumeration;
 import javax.naming.directory.DirContext;
 import javax.naming.directory.InitialDirContext;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/KubernetesClusterView.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/KubernetesClusterView.java
index 4d47b71..ca1dd72 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/KubernetesClusterView.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/KubernetesClusterView.java
@@ -26,7 +26,6 @@
 import java.util.stream.Collectors;
 
 import io.fabric8.kubernetes.client.KubernetesClient;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.cluster.CamelClusterMember;
 import org.apache.camel.component.kubernetes.KubernetesConfiguration;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/ConfigMapLockUtils.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/ConfigMapLockUtils.java
index a0589f8..3721143 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/ConfigMapLockUtils.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/ConfigMapLockUtils.java
@@ -22,7 +22,6 @@
 
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/KubernetesLeadershipController.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/KubernetesLeadershipController.java
index 6ff1f6d..a679606 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/KubernetesLeadershipController.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/cluster/lock/KubernetesLeadershipController.java
@@ -29,7 +29,6 @@
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.Pod;
 import io.fabric8.kubernetes.client.KubernetesClient;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Service;
 import org.slf4j.Logger;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsConsumer.java
index 6b36ebf..553d59d 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsConsumer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsConsumer.java
@@ -24,7 +24,6 @@
 import io.fabric8.kubernetes.client.Watch;
 import io.fabric8.kubernetes.client.Watcher;
 import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
index d756e20..fae5f40 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/config_maps/KubernetesConfigMapsProducer.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.client.Watch;
 import io.fabric8.kubernetes.client.Watcher;
 import io.fabric8.kubernetes.client.dsl.FilterWatchListMultiDeletable;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsConsumer.java
index d8adacd..3612bd5 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsConsumer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsConsumer.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.client.Watcher;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsProducer.java
index 9ab17f7..d729830 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/deployments/KubernetesDeploymentsProducer.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.api.model.apps.DoneableDeployment;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAConsumer.java
index fdb4550..2a25485 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAConsumer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAConsumer.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.client.Watcher;
 import io.fabric8.kubernetes.client.dsl.MixedOperation;
 import io.fabric8.kubernetes.client.dsl.Resource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAProducer.java
index abceeac..b60df9a 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/hpa/KubernetesHPAProducer.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.client.Watch;
 import io.fabric8.kubernetes.client.Watcher;
 import io.fabric8.kubernetes.client.dsl.FilterWatchListMultiDeletable;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/job/KubernetesJobProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/job/KubernetesJobProducer.java
index 9ab6186..277e697 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/job/KubernetesJobProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/job/KubernetesJobProducer.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.client.Watch;
 import io.fabric8.kubernetes.client.Watcher;
 import io.fabric8.kubernetes.client.dsl.FilterWatchListMultiDeletable;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesConsumer.java
index 33957bf..43eafa4 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesConsumer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesConsumer.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.client.Watcher;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.Resource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesProducer.java
index 380eaa3..0c2fa0b 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/namespaces/KubernetesNamespacesProducer.java
@@ -24,7 +24,6 @@
 import io.fabric8.kubernetes.api.model.NamespaceList;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.Resource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesConsumer.java
index e701651..526d832 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesConsumer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesConsumer.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.client.Watcher;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.Resource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesProducer.java
index 79224cd..c6a1a38 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/nodes/KubernetesNodesProducer.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.api.model.NodeSpec;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.Resource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes/KubernetesPersistentVolumesProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes/KubernetesPersistentVolumesProducer.java
index 57cf748..dae0a85 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes/KubernetesPersistentVolumesProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes/KubernetesPersistentVolumesProducer.java
@@ -23,7 +23,6 @@
 import io.fabric8.kubernetes.api.model.PersistentVolumeList;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.Resource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes_claims/KubernetesPersistentVolumesClaimsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes_claims/KubernetesPersistentVolumesClaimsProducer.java
index b01da07..f58a472 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes_claims/KubernetesPersistentVolumesClaimsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/persistent_volumes_claims/KubernetesPersistentVolumesClaimsProducer.java
@@ -28,7 +28,6 @@
 import io.fabric8.kubernetes.client.dsl.FilterWatchListMultiDeletable;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.Resource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsConsumer.java
index 347821f..a7eb09b 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsConsumer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsConsumer.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.client.Watcher;
 import io.fabric8.kubernetes.client.dsl.MixedOperation;
 import io.fabric8.kubernetes.client.dsl.PodResource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsProducer.java
index 131001e..ce40240 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/pods/KubernetesPodsProducer.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.client.Watch;
 import io.fabric8.kubernetes.client.Watcher;
 import io.fabric8.kubernetes.client.dsl.FilterWatchListMultiDeletable;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersConsumer.java
index 32abb99..d0e6762 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersConsumer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersConsumer.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.client.Watcher;
 import io.fabric8.kubernetes.client.dsl.MixedOperation;
 import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersProducer.java
index 9ac3dd9..036a643 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/replication_controllers/KubernetesReplicationControllersProducer.java
@@ -28,7 +28,6 @@
 import io.fabric8.kubernetes.client.dsl.FilterWatchListMultiDeletable;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/resources_quota/KubernetesResourcesQuotaProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/resources_quota/KubernetesResourcesQuotaProducer.java
index cb7f7b2..e081f36 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/resources_quota/KubernetesResourcesQuotaProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/resources_quota/KubernetesResourcesQuotaProducer.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.client.dsl.MixedOperation;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.Resource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/KubernetesSecretsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/KubernetesSecretsProducer.java
index 2242e05..5ba05b2 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/KubernetesSecretsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/secrets/KubernetesSecretsProducer.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.client.dsl.FilterWatchListMultiDeletable;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.Resource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/service_accounts/KubernetesServiceAccountsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/service_accounts/KubernetesServiceAccountsProducer.java
index c940d82..bfec352 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/service_accounts/KubernetesServiceAccountsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/service_accounts/KubernetesServiceAccountsProducer.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.client.dsl.FilterWatchListMultiDeletable;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.Resource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesConsumer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesConsumer.java
index 2fdcf15..735d10f 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesConsumer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesConsumer.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.client.Watcher;
 import io.fabric8.kubernetes.client.dsl.MixedOperation;
 import io.fabric8.kubernetes.client.dsl.ServiceResource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesProducer.java
index 30502c5..48f0d11 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/services/KubernetesServicesProducer.java
@@ -28,7 +28,6 @@
 import io.fabric8.kubernetes.client.dsl.FilterWatchListMultiDeletable;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.ServiceResource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/build_configs/OpenshiftBuildConfigsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/build_configs/OpenshiftBuildConfigsProducer.java
index d0e098c..ab97036 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/build_configs/OpenshiftBuildConfigsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/build_configs/OpenshiftBuildConfigsProducer.java
@@ -28,7 +28,6 @@
 import io.fabric8.openshift.api.model.DoneableBuildConfig;
 import io.fabric8.openshift.client.OpenShiftClient;
 import io.fabric8.openshift.client.dsl.BuildConfigResource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/builds/OpenshiftBuildsProducer.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/builds/OpenshiftBuildsProducer.java
index 73979be..84a5f4c5 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/builds/OpenshiftBuildsProducer.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/openshift/builds/OpenshiftBuildsProducer.java
@@ -28,7 +28,6 @@
 import io.fabric8.openshift.api.model.DoneableBuild;
 import io.fabric8.openshift.client.OpenShiftClient;
 import io.fabric8.openshift.client.dsl.BuildResource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.kubernetes.AbstractKubernetesEndpoint;
 import org.apache.camel.component.kubernetes.KubernetesConstants;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/KubernetesClusterServiceTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/KubernetesClusterServiceTest.java
index 9066a66..2b5129f 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/KubernetesClusterServiceTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/KubernetesClusterServiceTest.java
@@ -27,7 +27,6 @@
 import java.util.stream.IntStream;
 
 import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
-
 import org.apache.camel.component.kubernetes.KubernetesConfiguration;
 import org.apache.camel.component.kubernetes.cluster.utils.ConfigMapLockSimulator;
 import org.apache.camel.component.kubernetes.cluster.utils.LeaderRecorder;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/utils/ConfigMapLockSimulator.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/utils/ConfigMapLockSimulator.java
index 1df7628..294b0e6 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/utils/ConfigMapLockSimulator.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/utils/ConfigMapLockSimulator.java
@@ -18,7 +18,6 @@
 
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/utils/LockTestServer.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/utils/LockTestServer.java
index 581b2a9..11d7599 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/utils/LockTestServer.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/utils/LockTestServer.java
@@ -24,7 +24,6 @@
 import java.util.stream.Collectors;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.PodBuilder;
 import io.fabric8.kubernetes.api.model.PodListBuilder;
@@ -32,7 +31,6 @@
 import io.fabric8.mockwebserver.utils.ResponseProvider;
 import okhttp3.Headers;
 import okhttp3.mockwebserver.RecordedRequest;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/utils/LockTestServerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/utils/LockTestServerTest.java
index 713aa67..d2edba5 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/utils/LockTestServerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/cluster/utils/LockTestServerTest.java
@@ -19,7 +19,6 @@
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
-
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesConfigMapsConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesConfigMapsConsumerTest.java
index be0a3a3..724d0f6 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesConfigMapsConsumerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesConfigMapsConsumerTest.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import io.fabric8.kubernetes.api.model.ConfigMap;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNamespacesConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNamespacesConsumerTest.java
index c4b06fe..558fc91 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNamespacesConsumerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNamespacesConsumerTest.java
@@ -22,7 +22,6 @@
 import java.util.Map;
 
 import io.fabric8.kubernetes.api.model.Namespace;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNodesConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNodesConsumerTest.java
index d3a0fbc..c59f51b 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNodesConsumerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNodesConsumerTest.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.api.model.ContainerPort;
 import io.fabric8.kubernetes.api.model.Node;
 import io.fabric8.kubernetes.api.model.PodSpec;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesPodsConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesPodsConsumerTest.java
index c2ca36e..4ad1205 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesPodsConsumerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesPodsConsumerTest.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.api.model.ContainerPort;
 import io.fabric8.kubernetes.api.model.Pod;
 import io.fabric8.kubernetes.api.model.PodSpec;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesReplicationControllersConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesReplicationControllersConsumerTest.java
index 28fe9bc..1b6f715 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesReplicationControllersConsumerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesReplicationControllersConsumerTest.java
@@ -23,7 +23,6 @@
 import io.fabric8.kubernetes.api.model.PodTemplateSpecBuilder;
 import io.fabric8.kubernetes.api.model.ReplicationController;
 import io.fabric8.kubernetes.api.model.ReplicationControllerSpec;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesServicesConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesServicesConsumerTest.java
index dea6ee5..495cfe5 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesServicesConsumerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesServicesConsumerTest.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.api.model.Service;
 import io.fabric8.kubernetes.api.model.ServicePort;
 import io.fabric8.kubernetes.api.model.ServiceSpec;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
index 96ff1ab..9f7f41e 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesConfigMapsProducerTest.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.api.model.ObjectMeta;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java
index 4a8dd1d..596002c 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesDeploymentsProducerTest.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.api.model.apps.DeploymentListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesHPAProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesHPAProducerTest.java
index d69fb64..2743f77 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesHPAProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesHPAProducerTest.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.api.model.PodListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java
index 9ae3eb6..b8d8d31 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesJobProducerTest.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.api.model.batch.JobListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNamespacesProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNamespacesProducerTest.java
index 3640cd2..83d0444 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNamespacesProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNamespacesProducerTest.java
@@ -24,7 +24,6 @@
 import io.fabric8.kubernetes.api.model.ObjectMeta;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNodesProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNodesProducerTest.java
index 1c8119a..fb20523 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNodesProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesNodesProducerTest.java
@@ -28,7 +28,6 @@
 import io.fabric8.kubernetes.api.model.ObjectMeta;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java
index 0123a33..ac6aece 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesClaimsProducerTest.java
@@ -27,7 +27,6 @@
 import io.fabric8.kubernetes.api.model.PersistentVolumeClaimListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesProducerTest.java
index 70c1c54..7e1c822 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPersistentVolumesProducerTest.java
@@ -24,7 +24,6 @@
 import io.fabric8.kubernetes.api.model.PersistentVolumeListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPodsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPodsProducerTest.java
index 78d9f07..278d5dc 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPodsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesPodsProducerTest.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.api.model.PodListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java
index 412a1fd..3dddcf8 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesReplicationControllersProducerTest.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.api.model.ReplicationControllerListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesResourcesQuotaProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesResourcesQuotaProducerTest.java
index 204fc4c..07a2376 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesResourcesQuotaProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesResourcesQuotaProducerTest.java
@@ -23,7 +23,6 @@
 import io.fabric8.kubernetes.api.model.ResourceQuotaListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesSecretsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesSecretsProducerTest.java
index 93b6cb8..ff92c46 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesSecretsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesSecretsProducerTest.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.api.model.SecretListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServiceAccountsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServiceAccountsProducerTest.java
index 4abedba..96ac744 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServiceAccountsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServiceAccountsProducerTest.java
@@ -25,7 +25,6 @@
 import io.fabric8.kubernetes.api.model.ServiceAccountListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServicesProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServicesProducerTest.java
index 244a9bf..7a92869 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServicesProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/producer/KubernetesServicesProducerTest.java
@@ -26,7 +26,6 @@
 import io.fabric8.kubernetes.api.model.ServiceListBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildConfigsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildConfigsProducerTest.java
index d01e80d..c50ab5e 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildConfigsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildConfigsProducerTest.java
@@ -23,7 +23,6 @@
 import io.fabric8.openshift.api.model.BuildConfigListBuilder;
 import io.fabric8.openshift.client.NamespacedOpenShiftClient;
 import io.fabric8.openshift.client.server.mock.OpenShiftServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.kubernetes.KubernetesTestSupport;
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildsProducerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildsProducerTest.java
index 33ed996..46ac997 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildsProducerTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/openshift/producer/OpenshiftBuildsProducerTest.java
@@ -25,7 +25,6 @@
 import io.fabric8.openshift.api.model.BuildListBuilder;
 import io.fabric8.openshift.client.OpenShiftClient;
 import io.fabric8.openshift.client.server.mock.OpenShiftServer;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduComponent.java b/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduComponent.java
index 6020df0..1a6865d 100644
--- a/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduComponent.java
+++ b/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduComponent.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.kudu;
 
 import java.util.Map;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.annotations.Component;
diff --git a/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduEndpoint.java b/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduEndpoint.java
index 3d55c40..b011f80 100644
--- a/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduEndpoint.java
+++ b/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduEndpoint.java
@@ -18,6 +18,7 @@
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduProducer.java b/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduProducer.java
index 3cd2cdd..39e976c 100644
--- a/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduProducer.java
+++ b/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduProducer.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.kudu;
 
 import java.util.Map;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.kudu.Schema;
diff --git a/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduUtils.java b/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduUtils.java
index b84873a..fefdc0c 100644
--- a/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduUtils.java
+++ b/components/camel-kudu/src/main/java/org/apache/camel/component/kudu/KuduUtils.java
@@ -20,6 +20,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import org.apache.kudu.ColumnSchema;
 import org.apache.kudu.client.KuduClient;
 import org.apache.kudu.client.KuduException;
diff --git a/components/camel-kudu/src/test/java/org/apache/camel/component/kudu/AbstractKuduTest.java b/components/camel-kudu/src/test/java/org/apache/camel/component/kudu/AbstractKuduTest.java
index 8acece8..3347142 100644
--- a/components/camel-kudu/src/test/java/org/apache/camel/component/kudu/AbstractKuduTest.java
+++ b/components/camel-kudu/src/test/java/org/apache/camel/component/kudu/AbstractKuduTest.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.kudu.ColumnSchema;
 import org.apache.kudu.Schema;
diff --git a/components/camel-kudu/src/test/java/org/apache/camel/component/kudu/KuduProducerTest.java b/components/camel-kudu/src/test/java/org/apache/camel/component/kudu/KuduProducerTest.java
index 9b21846..bf33eb3 100644
--- a/components/camel-kudu/src/test/java/org/apache/camel/component/kudu/KuduProducerTest.java
+++ b/components/camel-kudu/src/test/java/org/apache/camel/component/kudu/KuduProducerTest.java
@@ -22,6 +22,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ThreadLocalRandom;
+
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-kudu/src/test/java/org/apache/camel/component/kudu/KuduScanTest.java b/components/camel-kudu/src/test/java/org/apache/camel/component/kudu/KuduScanTest.java
index 40cafb6..299fddc 100644
--- a/components/camel-kudu/src/test/java/org/apache/camel/component/kudu/KuduScanTest.java
+++ b/components/camel-kudu/src/test/java/org/apache/camel/component/kudu/KuduScanTest.java
@@ -18,6 +18,7 @@
 
 import java.util.List;
 import java.util.Map;
+
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
@@ -132,4 +133,4 @@
         assertEquals("Smith", row.get("lastname"));
         assertEquals("4359  Plainfield Avenue", row.get("address"));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java b/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java
index ae17c37..18d4f6f 100644
--- a/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java
+++ b/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java
@@ -145,4 +145,4 @@
         return "kura.camel." + bundleContext.getBundle().getSymbolicName() + ".route";
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java b/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java
index 4799dfb..7cb653b 100644
--- a/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java
+++ b/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java
@@ -36,7 +36,7 @@
 import org.osgi.service.cm.ConfigurationAdmin;
 
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;   
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.BDDMockito.given;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
diff --git a/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapEndpoint.java b/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapEndpoint.java
index ff9a522..23752ba 100644
--- a/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapEndpoint.java
+++ b/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapEndpoint.java
@@ -18,6 +18,7 @@
 
 import java.net.URISyntaxException;
 import java.util.Map;
+
 import javax.naming.directory.SearchControls;
 
 import org.apache.camel.Consumer;
diff --git a/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java b/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java
index 95bee9c..3635931 100644
--- a/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java
+++ b/components/camel-ldap/src/main/java/org/apache/camel/component/ldap/LdapProducer.java
@@ -21,6 +21,7 @@
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
+
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
 import javax.naming.directory.DirContext;
diff --git a/components/camel-ldap/src/test/java/org/apache/camel/component/ldap/LdapRouteTwoTest.java b/components/camel-ldap/src/test/java/org/apache/camel/component/ldap/LdapRouteTwoTest.java
index a826bff..3d2d25c 100644
--- a/components/camel-ldap/src/test/java/org/apache/camel/component/ldap/LdapRouteTwoTest.java
+++ b/components/camel-ldap/src/test/java/org/apache/camel/component/ldap/LdapRouteTwoTest.java
@@ -18,6 +18,7 @@
 
 import java.util.Collection;
 import java.util.Hashtable;
+
 import javax.naming.directory.SearchResult;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-leveldb/src/main/java/org/apache/camel/component/leveldb/LevelDBFile.java b/components/camel-leveldb/src/main/java/org/apache/camel/component/leveldb/LevelDBFile.java
index 9118377..b56e6b0 100644
--- a/components/camel-leveldb/src/main/java/org/apache/camel/component/leveldb/LevelDBFile.java
+++ b/components/camel-leveldb/src/main/java/org/apache/camel/component/leveldb/LevelDBFile.java
@@ -21,6 +21,7 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+
 import org.apache.camel.Service;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateConcurrentDifferentGroupsTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateConcurrentDifferentGroupsTest.java
index d541f19..66f2789 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateConcurrentDifferentGroupsTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateConcurrentDifferentGroupsTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateConcurrentSameGroupTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateConcurrentSameGroupTest.java
index 7031382..83df9ef 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateConcurrentSameGroupTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateConcurrentSameGroupTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateDiscardOnTimeoutTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateDiscardOnTimeoutTest.java
index aeec351..23acdee 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateDiscardOnTimeoutTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateDiscardOnTimeoutTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.AggregationStrategy;
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateForceCompletionHeaderTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateForceCompletionHeaderTest.java
index 4c27eea..c033dcf 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateForceCompletionHeaderTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateForceCompletionHeaderTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.HashMap;
 import java.util.Map;
 
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateNotLostRemovedWhenConfirmedTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateNotLostRemovedWhenConfirmedTest.java
index 6132187..699356f 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateNotLostRemovedWhenConfirmedTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateNotLostRemovedWhenConfirmedTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.AggregationStrategy;
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateNotLostTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateNotLostTest.java
index 6650d8c..32d5fef 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateNotLostTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateNotLostTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.AggregationStrategy;
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverDeadLetterChannelFailedTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverDeadLetterChannelFailedTest.java
index bef185f..509efa4 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverDeadLetterChannelFailedTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverDeadLetterChannelFailedTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.AggregationStrategy;
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverDeadLetterChannelTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverDeadLetterChannelTest.java
index 48f09cb..951c667 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverDeadLetterChannelTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverDeadLetterChannelTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.AggregationStrategy;
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverTest.java
index cd0191c..ceb0e0f 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverWithRedeliveryPolicyTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverWithRedeliveryPolicyTest.java
index 7664ed6..6b4e5ef 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverWithRedeliveryPolicyTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverWithRedeliveryPolicyTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverWithSedaTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverWithSedaTest.java
index 6ebbb9c..2574924 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverWithSedaTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateRecoverWithSedaTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateTest.java
index 73828d3..e789f82 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregateTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.AggregationStrategy;
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryAlotDataTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryAlotDataTest.java
index 7da6b39..80a11d5 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryAlotDataTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryAlotDataTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.io.File;
 
 import org.apache.camel.Exchange;
@@ -104,4 +105,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryLoadExistingTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryLoadExistingTest.java
index 565f9f8..78af780 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryLoadExistingTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryLoadExistingTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.io.File;
 
 import org.apache.camel.Exchange;
@@ -83,4 +84,4 @@
         assertEquals("counter:2", actual.getIn().getBody());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryMultipleRepoTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryMultipleRepoTest.java
index c68db03..95bbed0 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryMultipleRepoTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryMultipleRepoTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.io.File;
 
 import org.apache.camel.Exchange;
@@ -124,4 +125,4 @@
         assertEquals("Bye World", actual.getIn().getBody());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryRecoverExistingTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryRecoverExistingTest.java
index dad6a5d..3e57ea0 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryRecoverExistingTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryRecoverExistingTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.io.File;
 
 import org.apache.camel.Exchange;
@@ -77,4 +78,4 @@
         repo.stop();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryTest.java
index 8e4435b..2af9689 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBAggregationRepositoryTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.io.File;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBExchangeSerializationTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBExchangeSerializationTest.java
index 92f5f1d..e5ba977 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBExchangeSerializationTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBExchangeSerializationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.io.File;
 import java.util.Date;
 
@@ -91,4 +92,4 @@
         assertSame(context, actual.getContext());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBGetNotFoundTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBGetNotFoundTest.java
index bbb2f6e..2de1974 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBGetNotFoundTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBGetNotFoundTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.io.File;
 
 import org.apache.camel.Exchange;
@@ -81,4 +82,4 @@
         assertNull("Should not find exchange", out2);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBSpringAggregateRecoverWithRedeliveryPolicyTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBSpringAggregateRecoverWithRedeliveryPolicyTest.java
index 84493ce..9bc026f 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBSpringAggregateRecoverWithRedeliveryPolicyTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBSpringAggregateRecoverWithRedeliveryPolicyTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
diff --git a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBSpringAggregateTest.java b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBSpringAggregateTest.java
index 70d2790..1898ba0 100644
--- a/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBSpringAggregateTest.java
+++ b/components/camel-leveldb/src/test/java/org/apache/camel/component/leveldb/LevelDBSpringAggregateTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.leveldb;
+
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.AggregationStrategy;
diff --git a/components/camel-lra/src/main/java/org/apache/camel/service/lra/LRAClient.java b/components/camel-lra/src/main/java/org/apache/camel/service/lra/LRAClient.java
index ec4c3cb..2bc729c 100644
--- a/components/camel-lra/src/main/java/org/apache/camel/service/lra/LRAClient.java
+++ b/components/camel-lra/src/main/java/org/apache/camel/service/lra/LRAClient.java
@@ -19,6 +19,7 @@
 import java.net.URL;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Function;
+
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.Entity;
diff --git a/components/camel-lra/src/test/java/org/apache/camel/service/lra/AbstractLRATestSupport.java b/components/camel-lra/src/test/java/org/apache/camel/service/lra/AbstractLRATestSupport.java
index 86ced60c..c39f0ac 100644
--- a/components/camel-lra/src/test/java/org/apache/camel/service/lra/AbstractLRATestSupport.java
+++ b/components/camel-lra/src/test/java/org/apache/camel/service/lra/AbstractLRATestSupport.java
@@ -18,7 +18,7 @@
 
 import java.io.IOException;
 import java.io.InputStream;
-import static java.util.concurrent.TimeUnit.SECONDS;
+
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.core.Response;
@@ -33,6 +33,7 @@
 import org.junit.Assert;
 import org.junit.Before;
 
+import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.awaitility.Awaitility.await;
 import static org.hamcrest.Matchers.equalTo;
 
diff --git a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentGlobalSSLTest.java b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentGlobalSSLTest.java
index 85b89bc..12d9392 100644
--- a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentGlobalSSLTest.java
+++ b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentGlobalSSLTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.lumberjack;
+
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
diff --git a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentLifecycleTest.java b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentLifecycleTest.java
index a1a9a00..ce94507 100644
--- a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentLifecycleTest.java
+++ b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentLifecycleTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.lumberjack;
+
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.AvailablePortFinder;
diff --git a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentSSLTest.java b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentSSLTest.java
index 657318e..dbf2b96 100644
--- a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentSSLTest.java
+++ b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentSSLTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.lumberjack;
+
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
diff --git a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentTest.java b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentTest.java
index c9ba541..b71d4a2 100644
--- a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentTest.java
+++ b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackComponentTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.lumberjack;
+
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
diff --git a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackDisconnectionTest.java b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackDisconnectionTest.java
index 8a80df8..7564c57 100644
--- a/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackDisconnectionTest.java
+++ b/components/camel-lumberjack/src/test/java/org/apache/camel/component/lumberjack/LumberjackDisconnectionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.lumberjack;
+
 import java.util.List;
 import java.util.Map;
 
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java
index f06ed01..9d78a9d 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java
@@ -20,6 +20,7 @@
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+
 import javax.mail.search.SearchTerm;
 
 import com.sun.mail.imap.SortTerm;
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
index 410e38c..ac4b306 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Queue;
+
 import javax.mail.Flags;
 import javax.mail.Folder;
 import javax.mail.FolderNotFoundException;
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java
index dc02d5e..8033781 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 import java.util.Map;
+
 import javax.mail.Message;
 import javax.mail.MessagingException;
 
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java
index 33f8a03..b641ea0 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.Store;
@@ -94,4 +95,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBindingAttachmentFileTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBindingAttachmentFileTest.java
index 882c28d..24efa85 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBindingAttachmentFileTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBindingAttachmentFileTest.java
@@ -21,6 +21,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
+
 import javax.activation.DataHandler;
 import javax.mail.Message;
 import javax.mail.MessagingException;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCommitOnCompletionTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCommitOnCompletionTest.java
index 97c8cbcd..754cef1 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCommitOnCompletionTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCommitOnCompletionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.Store;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailConsumerUnsupportedCharsetTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailConsumerUnsupportedCharsetTest.java
index bd0e28f..e47edd6 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailConsumerUnsupportedCharsetTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailConsumerUnsupportedCharsetTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.Store;
@@ -70,4 +71,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailConvertersTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailConvertersTest.java
index 25061a9..6968193 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailConvertersTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailConvertersTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import java.io.InputStream;
 
 import javax.mail.Message;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCopyToTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCopyToTest.java
index f37f008..7b743db 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCopyToTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailCopyToTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.Store;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDoNotDeleteIfProcessFailsTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDoNotDeleteIfProcessFailsTest.java
index 80ccfcf..2a057bd 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDoNotDeleteIfProcessFailsTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDoNotDeleteIfProcessFailsTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Flags;
 import javax.mail.Folder;
 import javax.mail.Message;
@@ -100,4 +101,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeTest.java
index 0174b40..d170bce 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.Store;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeZeroTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeZeroTest.java
index 9396a58..5ad3200 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeZeroTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailFetchSizeZeroTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.Store;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailMaxMessagesPerPollTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailMaxMessagesPerPollTest.java
index 19f2e24..cd10a94 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailMaxMessagesPerPollTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailMaxMessagesPerPollTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.Store;
@@ -91,4 +92,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichNoMailTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichNoMailTest.java
index 84a55aa..d1cdd4f 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichNoMailTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichNoMailTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Folder;
 import javax.mail.Store;
 
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java
index 46b9952..fafdc46 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailPollEnrichTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.Store;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java
index 5397133..591f1d2 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Flags;
 import javax.mail.Folder;
 import javax.mail.Message;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java
index e3d13da..8e103f6 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigLast24HoursTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import java.util.Date;
 
 import javax.mail.Folder;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java
index 5f45dd2..64f546d 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSearchTermUriConfigTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.Store;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteAllTasksTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteAllTasksTest.java
index 68c8c03..e103ab4 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteAllTasksTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteAllTasksTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.Store;
@@ -96,4 +97,4 @@
         folder.close(true);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteCurrentTaskOnlyTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteCurrentTaskOnlyTest.java
index a10da51..f121510 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteCurrentTaskOnlyTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailShutdownCompleteCurrentTaskOnlyTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.Store;
@@ -94,4 +95,4 @@
     }
 
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTest.java
index 5fc38c8..1c6dd96 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTest.java
@@ -25,7 +25,6 @@
 import javax.mail.search.SearchTerm;
 
 import com.sun.mail.imap.SortTerm;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermThreeTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermThreeTest.java
index c62c7ec..a049fe2 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermThreeTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermThreeTest.java
@@ -25,7 +25,6 @@
 import javax.mail.search.SearchTerm;
 
 import com.sun.mail.imap.SortTerm;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTwoTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTwoTest.java
index 604b5c8..fea18d4 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTwoTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSortTermTwoTest.java
@@ -25,7 +25,6 @@
 import javax.mail.search.SearchTerm;
 
 import com.sun.mail.imap.SortTerm;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSorterTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSorterTest.java
index e25dc2a..377ab1b 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSorterTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSorterTest.java
@@ -1,151 +1,150 @@
-/*
- * 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.component.mail;
-
-import java.util.Date;
-
-import javax.mail.Address;
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.internet.InternetAddress;
-
-import com.sun.mail.imap.SortTerm;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import static org.mockito.Mockito.when;
-
-
-/**
- * Tests mail sort util
- */
-public class MailSorterTest extends CamelTestSupport {
-    private static final Message[] MESSAGES = new Message[3];
-    private static final Message TIE_BREAKER;
-
-    /**
-     * All possible sort terms
-     */
-    private static final SortTerm[] POSSIBLE_TERMS = 
-        new SortTerm[] {
-            SortTerm.ARRIVAL, SortTerm.CC,
-            SortTerm.DATE, SortTerm.FROM,
-            SortTerm.SIZE, SortTerm.TO,
-            SortTerm.SUBJECT};
-
-    static {
-        try {
-            MESSAGES[0] = createMessage("to1", "cc1", "from1", new Date(1), new Date(1001), 1, "subject1");
-            MESSAGES[1] = createMessage("to2", "cc2", "from2", new Date(2), new Date(1002), 2, "subject2");
-            MESSAGES[2] = createMessage("to3", "cc3", "from3", new Date(3), new Date(1003), 3, "subject3");
-            // Message that creates a tie on all fields except for one
-            TIE_BREAKER = createMessage("to3", "cc3", "from3", new Date(3), new Date(1003), 3, "subject0TieBreaker");
-        } catch (MessagingException e) {
-            // Rethrow as unchecked. Can not occur anyways
-            throw new IllegalStateException(e);
-        }
-    }
-
-    /**
-     * Create a new message with the specified data
-     */
-    private static Message createMessage(String to, String cc, String from, Date received, Date sent, int size, String subject)
-        throws MessagingException {
-        final Message msg = Mockito.mock(Message.class);
-        when(msg.getFrom()).thenReturn(new Address[]{new InternetAddress(from)});
-        when(msg.getRecipients(Message.RecipientType.TO)).thenReturn(new Address[]{new InternetAddress(to)});
-        when(msg.getRecipients(Message.RecipientType.CC)).thenReturn(new Address[]{new InternetAddress(cc)});
-        when(msg.getSentDate()).thenReturn(sent);
-        when(msg.getReceivedDate()).thenReturn(received);
-        when(msg.getSize()).thenReturn(size);
-        when(msg.getSubject()).thenReturn(subject);
-        return msg;
-    }
-
-    @Test
-    public void testSortMessages() throws Exception {
-        Message[] expected = new Message[]{MESSAGES[0], MESSAGES[1], MESSAGES[2]};
-
-        // Sort using all the terms. Message order should be the same no matter what term is used
-        for (SortTerm term : POSSIBLE_TERMS) {
-            Message[] actual = MESSAGES.clone();
-            MailSorter.sortMessages(actual, new SortTerm[]{term});
-            try {
-                assertArrayEquals(actual, expected);
-            } catch (Exception ex) {
-                throw new Exception("Term: " + term.toString(), ex);
-            }
-        }
-    }
-
-    @Test
-    public void testSortMessagesReverse() throws Exception {
-        Message[] expected = new Message[]{MESSAGES[2], MESSAGES[1], MESSAGES[0]};
-
-        // Sort using all the terms. Message order should be the same no matter what term is used
-        for (SortTerm term : POSSIBLE_TERMS) {
-            Message[] actual = MESSAGES.clone();
-            MailSorter.sortMessages(actual, new SortTerm[]{SortTerm.REVERSE, term});
-            try {
-                assertArrayEquals(actual, expected);
-            } catch (AssertionError ex) {
-                throw new AssertionError("Term: " + term.toString(), ex);
-            }
-        }
-    }
-
-    @Test
-    public void testSortMessagesMulti() throws Exception {
-        Message[] expected = new Message[]{MESSAGES[0], MESSAGES[1], MESSAGES[2]};
-
-        // Sort using all the terms. Message order should be the same no matter what term is used. The second term
-        // should be ignored since it is already the decider.
-        for (SortTerm term1 : POSSIBLE_TERMS) {
-            for (SortTerm term2 : POSSIBLE_TERMS) {
-                Message[] actual = MESSAGES.clone();
-                MailSorter.sortMessages(actual, new SortTerm[]{term1, SortTerm.REVERSE, term2});
-                try {
-                    assertArrayEquals(actual, expected);
-                } catch (AssertionError ex) {
-                    throw new AssertionError(String.format("Terms: %s, %s", term1.toString(), term2.toString()), ex);
-                }
-            }
-
-        }
-    }
-
-    @Test
-    public void testSortMessagesWithTie() throws Exception {
-        Message[] given = new Message[]{MESSAGES[2], TIE_BREAKER};
-
-        // Sort according to the whole list. Only the last element breaks the tie
-        Message[] actual1 = given.clone();
-        MailSorter.sortMessages(actual1, POSSIBLE_TERMS);
-        assertArrayEquals(actual1, new Message[]{TIE_BREAKER, MESSAGES[2]});
-
-        // now reverse the last element (the tie breaker)
-        SortTerm[] reversed = new SortTerm[POSSIBLE_TERMS.length + 1];
-        System.arraycopy(POSSIBLE_TERMS, 0, reversed, 0, POSSIBLE_TERMS.length - 1);
-        reversed[reversed.length - 2] = SortTerm.REVERSE;
-        reversed[reversed.length - 1] = POSSIBLE_TERMS[POSSIBLE_TERMS.length - 1];
-        // And check again
-        Message[] actual2 = given.clone();
-        MailSorter.sortMessages(actual2, reversed);
-        assertArrayEquals(actual2, new Message[]{MESSAGES[2], TIE_BREAKER});
-    }
-}
\ No newline at end of file
+/*
+ * 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.component.mail;
+
+import java.util.Date;
+
+import javax.mail.Address;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.internet.InternetAddress;
+
+import com.sun.mail.imap.SortTerm;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import static org.mockito.Mockito.when;
+
+/**
+ * Tests mail sort util
+ */
+public class MailSorterTest extends CamelTestSupport {
+    private static final Message[] MESSAGES = new Message[3];
+    private static final Message TIE_BREAKER;
+
+    /**
+     * All possible sort terms
+     */
+    private static final SortTerm[] POSSIBLE_TERMS = 
+        new SortTerm[] {
+            SortTerm.ARRIVAL, SortTerm.CC,
+            SortTerm.DATE, SortTerm.FROM,
+            SortTerm.SIZE, SortTerm.TO,
+            SortTerm.SUBJECT};
+
+    static {
+        try {
+            MESSAGES[0] = createMessage("to1", "cc1", "from1", new Date(1), new Date(1001), 1, "subject1");
+            MESSAGES[1] = createMessage("to2", "cc2", "from2", new Date(2), new Date(1002), 2, "subject2");
+            MESSAGES[2] = createMessage("to3", "cc3", "from3", new Date(3), new Date(1003), 3, "subject3");
+            // Message that creates a tie on all fields except for one
+            TIE_BREAKER = createMessage("to3", "cc3", "from3", new Date(3), new Date(1003), 3, "subject0TieBreaker");
+        } catch (MessagingException e) {
+            // Rethrow as unchecked. Can not occur anyways
+            throw new IllegalStateException(e);
+        }
+    }
+
+    /**
+     * Create a new message with the specified data
+     */
+    private static Message createMessage(String to, String cc, String from, Date received, Date sent, int size, String subject)
+        throws MessagingException {
+        final Message msg = Mockito.mock(Message.class);
+        when(msg.getFrom()).thenReturn(new Address[]{new InternetAddress(from)});
+        when(msg.getRecipients(Message.RecipientType.TO)).thenReturn(new Address[]{new InternetAddress(to)});
+        when(msg.getRecipients(Message.RecipientType.CC)).thenReturn(new Address[]{new InternetAddress(cc)});
+        when(msg.getSentDate()).thenReturn(sent);
+        when(msg.getReceivedDate()).thenReturn(received);
+        when(msg.getSize()).thenReturn(size);
+        when(msg.getSubject()).thenReturn(subject);
+        return msg;
+    }
+
+    @Test
+    public void testSortMessages() throws Exception {
+        Message[] expected = new Message[]{MESSAGES[0], MESSAGES[1], MESSAGES[2]};
+
+        // Sort using all the terms. Message order should be the same no matter what term is used
+        for (SortTerm term : POSSIBLE_TERMS) {
+            Message[] actual = MESSAGES.clone();
+            MailSorter.sortMessages(actual, new SortTerm[]{term});
+            try {
+                assertArrayEquals(actual, expected);
+            } catch (Exception ex) {
+                throw new Exception("Term: " + term.toString(), ex);
+            }
+        }
+    }
+
+    @Test
+    public void testSortMessagesReverse() throws Exception {
+        Message[] expected = new Message[]{MESSAGES[2], MESSAGES[1], MESSAGES[0]};
+
+        // Sort using all the terms. Message order should be the same no matter what term is used
+        for (SortTerm term : POSSIBLE_TERMS) {
+            Message[] actual = MESSAGES.clone();
+            MailSorter.sortMessages(actual, new SortTerm[]{SortTerm.REVERSE, term});
+            try {
+                assertArrayEquals(actual, expected);
+            } catch (AssertionError ex) {
+                throw new AssertionError("Term: " + term.toString(), ex);
+            }
+        }
+    }
+
+    @Test
+    public void testSortMessagesMulti() throws Exception {
+        Message[] expected = new Message[]{MESSAGES[0], MESSAGES[1], MESSAGES[2]};
+
+        // Sort using all the terms. Message order should be the same no matter what term is used. The second term
+        // should be ignored since it is already the decider.
+        for (SortTerm term1 : POSSIBLE_TERMS) {
+            for (SortTerm term2 : POSSIBLE_TERMS) {
+                Message[] actual = MESSAGES.clone();
+                MailSorter.sortMessages(actual, new SortTerm[]{term1, SortTerm.REVERSE, term2});
+                try {
+                    assertArrayEquals(actual, expected);
+                } catch (AssertionError ex) {
+                    throw new AssertionError(String.format("Terms: %s, %s", term1.toString(), term2.toString()), ex);
+                }
+            }
+
+        }
+    }
+
+    @Test
+    public void testSortMessagesWithTie() throws Exception {
+        Message[] given = new Message[]{MESSAGES[2], TIE_BREAKER};
+
+        // Sort according to the whole list. Only the last element breaks the tie
+        Message[] actual1 = given.clone();
+        MailSorter.sortMessages(actual1, POSSIBLE_TERMS);
+        assertArrayEquals(actual1, new Message[]{TIE_BREAKER, MESSAGES[2]});
+
+        // now reverse the last element (the tie breaker)
+        SortTerm[] reversed = new SortTerm[POSSIBLE_TERMS.length + 1];
+        System.arraycopy(POSSIBLE_TERMS, 0, reversed, 0, POSSIBLE_TERMS.length - 1);
+        reversed[reversed.length - 2] = SortTerm.REVERSE;
+        reversed[reversed.length - 1] = POSSIBLE_TERMS[POSSIBLE_TERMS.length - 1];
+        // And check again
+        Message[] actual2 = given.clone();
+        MailSorter.sortMessages(actual2, reversed);
+        assertArrayEquals(actual2, new Message[]{MESSAGES[2], TIE_BREAKER});
+    }
+}
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeWithContentTypeTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeWithContentTypeTest.java
index 52f6c0e..6cca522 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeWithContentTypeTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeWithContentTypeTest.java
@@ -88,4 +88,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeWithLongerFilenameTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeWithLongerFilenameTest.java
index dead234..f0323b9 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeWithLongerFilenameTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMultipartAlternativeWithLongerFilenameTest.java
@@ -101,4 +101,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/RawMailMessageTest.java b/components/camel-mail/src/test/java/org/apache/camel/component/mail/RawMailMessageTest.java
index 6372bb0..3efacdd 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/component/mail/RawMailMessageTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/RawMailMessageTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.mail;
+
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.util.HashMap;
@@ -170,4 +171,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mail/src/test/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormatTest.java b/components/camel-mail/src/test/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormatTest.java
index 78d9d87..3b7ba6b 100644
--- a/components/camel-mail/src/test/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormatTest.java
+++ b/components/camel-mail/src/test/java/org/apache/camel/dataformat/mime/multipart/MimeMultipartDataFormatTest.java
@@ -24,6 +24,7 @@
 import java.io.UnsupportedEncodingException;
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.activation.DataHandler;
 import javax.activation.DataSource;
 import javax.mail.util.ByteArrayDataSource;
diff --git a/components/camel-master/src/test/java/org/apache/camel/component/master/MasterComponentTest.java b/components/camel-master/src/test/java/org/apache/camel/component/master/MasterComponentTest.java
index dc3c2ba..d35cc26 100644
--- a/components/camel-master/src/test/java/org/apache/camel/component/master/MasterComponentTest.java
+++ b/components/camel-master/src/test/java/org/apache/camel/component/master/MasterComponentTest.java
@@ -34,7 +34,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class MasterComponentTest {
     private static final Logger LOGGER = LoggerFactory.getLogger(MasterComponentTest.class);
     private static final List<String> INSTANCES = IntStream.range(0, 3).mapToObj(Integer::toString).collect(Collectors.toList());
diff --git a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/messagehistory/MetricsMessageHistoryService.java b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/messagehistory/MetricsMessageHistoryService.java
index deb2641..cfc9a04 100644
--- a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/messagehistory/MetricsMessageHistoryService.java
+++ b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/messagehistory/MetricsMessageHistoryService.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.metrics.messagehistory;
 
 import java.util.concurrent.TimeUnit;
+
 import javax.management.MBeanServer;
 
 import com.codahale.metrics.JmxReporter;
@@ -190,4 +191,4 @@
             }
         });
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MeterProducerTest.java b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MeterProducerTest.java
index ae42f27..42ec6b5 100644
--- a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MeterProducerTest.java
+++ b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MeterProducerTest.java
@@ -113,4 +113,4 @@
         inOrder.verifyNoMoreInteractions();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/messagehistory/ManagedMessageHistoryTest.java b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/messagehistory/ManagedMessageHistoryTest.java
index 1fde369..6769770 100644
--- a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/messagehistory/ManagedMessageHistoryTest.java
+++ b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/messagehistory/ManagedMessageHistoryTest.java
@@ -17,11 +17,11 @@
 package org.apache.camel.component.metrics.messagehistory;
 
 import java.util.Set;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
 import com.codahale.metrics.MetricRegistry;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/routepolicy/ManagedMetricsRoutePolicyTest.java b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/routepolicy/ManagedMetricsRoutePolicyTest.java
index 340c001..e5c26eb 100644
--- a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/routepolicy/ManagedMetricsRoutePolicyTest.java
+++ b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/routepolicy/ManagedMetricsRoutePolicyTest.java
@@ -22,7 +22,6 @@
 import javax.management.ObjectName;
 
 import com.codahale.metrics.MetricRegistry;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/AbstractMicrometerProducer.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/AbstractMicrometerProducer.java
index 37640cc..ec1df8a 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/AbstractMicrometerProducer.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/AbstractMicrometerProducer.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.micrometer;
 
 import java.util.function.Function;
+
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Tag;
@@ -27,6 +28,7 @@
 import org.apache.camel.spi.Language;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.camel.util.ObjectHelper;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_METRIC_NAME;
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_METRIC_TAGS;
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/CounterProducer.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/CounterProducer.java
index d0cfb4f..ec1e390 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/CounterProducer.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/CounterProducer.java
@@ -17,11 +17,13 @@
 package org.apache.camel.component.micrometer;
 
 import java.util.function.Function;
+
 import io.micrometer.core.instrument.Counter;
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Tag;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_COUNTER_DECREMENT;
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_COUNTER_INCREMENT;
 
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/DistributionStatisticConfigFilter.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/DistributionStatisticConfigFilter.java
index f05813e..f89c886 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/DistributionStatisticConfigFilter.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/DistributionStatisticConfigFilter.java
@@ -18,9 +18,11 @@
 
 import java.time.Duration;
 import java.util.function.Predicate;
+
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.config.MeterFilter;
 import io.micrometer.core.instrument.distribution.DistributionStatisticConfig;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.ALWAYS;
 import static org.apache.camel.component.micrometer.MicrometerConstants.CAMEL_METERS;
 
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/DistributionSummaryProducer.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/DistributionSummaryProducer.java
index c793111..181cd78 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/DistributionSummaryProducer.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/DistributionSummaryProducer.java
@@ -17,12 +17,14 @@
 package org.apache.camel.component.micrometer;
 
 import java.util.function.Function;
+
 import io.micrometer.core.instrument.DistributionSummary;
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Tag;
 import org.apache.camel.Exchange;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_HISTOGRAM_VALUE;
 
 public class DistributionSummaryProducer extends AbstractMicrometerProducer<DistributionSummary> {
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerComponent.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerComponent.java
index 571736a..bc95b8f 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerComponent.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerComponent.java
@@ -18,6 +18,7 @@
 
 import java.util.Map;
 import java.util.stream.Stream;
+
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Tag;
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConstants.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConstants.java
index a4dee73..5ffd3d9 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConstants.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerConstants.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.micrometer;
 
 import java.util.function.Predicate;
+
 import io.micrometer.core.instrument.Meter;
 
 public final class MicrometerConstants {
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerUtils.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerUtils.java
index ecf68be75..065fbc5 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerUtils.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/MicrometerUtils.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.micrometer;
 
 import java.util.Set;
+
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/TimerProducer.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/TimerProducer.java
index e5a9407..b5a6ea4 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/TimerProducer.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/TimerProducer.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.micrometer;
 
 import java.util.function.Function;
+
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Tag;
 import io.micrometer.core.instrument.Timer;
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerRouteEventNotifier.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerRouteEventNotifier.java
index 2f0860f..f89dd9a 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerRouteEventNotifier.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/eventnotifier/MicrometerRouteEventNotifier.java
@@ -26,7 +26,6 @@
 import org.apache.camel.spi.CamelEvent.RouteStartedEvent;
 import org.apache.camel.spi.CamelEvent.RouteStoppedEvent;
 
-
 public class MicrometerRouteEventNotifier extends AbstractMicrometerEventNotifier<RouteEvent> {
 
     private final AtomicLong routesAdded = new AtomicLong();
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/json/AbstractMicrometerService.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/json/AbstractMicrometerService.java
index 120c12f..cf7fc8f 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/json/AbstractMicrometerService.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/json/AbstractMicrometerService.java
@@ -18,6 +18,7 @@
 
 import java.util.concurrent.TimeUnit;
 import java.util.function.Predicate;
+
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectWriter;
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/json/MicrometerModule.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/json/MicrometerModule.java
index 68d3a44..7ac05ed 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/json/MicrometerModule.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/json/MicrometerModule.java
@@ -23,6 +23,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
+
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.Version;
 import com.fasterxml.jackson.databind.Module;
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryFactory.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryFactory.java
index 7f7ead9..30dd867 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryFactory.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryFactory.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.micrometer.messagehistory;
 
 import java.util.concurrent.TimeUnit;
+
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Tags;
 import org.apache.camel.CamelContext;
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryNamingStrategy.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryNamingStrategy.java
index 6e0af22..7d17e98 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryNamingStrategy.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryNamingStrategy.java
@@ -17,10 +17,12 @@
 package org.apache.camel.component.micrometer.messagehistory;
 
 import java.util.function.Predicate;
+
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.Tags;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Route;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_MESSAGE_HISTORY_METER_NAME;
 import static org.apache.camel.component.micrometer.MicrometerConstants.NODE_ID_TAG;
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyFactory.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyFactory.java
index e9cfc11..091ab98 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyFactory.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyFactory.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.micrometer.routepolicy;
 
 import java.util.concurrent.TimeUnit;
+
 import io.micrometer.core.instrument.MeterRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.NamedNode;
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyNamingStrategy.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyNamingStrategy.java
index 69bfe71..00cd0b66 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyNamingStrategy.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyNamingStrategy.java
@@ -17,10 +17,12 @@
 package org.apache.camel.component.micrometer.routepolicy;
 
 import java.util.function.Predicate;
+
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.Tags;
 import org.apache.camel.Exchange;
 import org.apache.camel.Route;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_METER_NAME;
 import static org.apache.camel.component.micrometer.MicrometerConstants.FAILED_TAG;
diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/spi/TimedScheduledExecutorService.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/spi/TimedScheduledExecutorService.java
index 81c400e..ffe3110 100644
--- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/spi/TimedScheduledExecutorService.java
+++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/spi/TimedScheduledExecutorService.java
@@ -20,6 +20,7 @@
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
+
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Tag;
 import io.micrometer.core.instrument.Timer;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterEndpointTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterEndpointTest.java
index 7dc58d0..b6b631b 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterEndpointTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterEndpointTest.java
@@ -28,6 +28,7 @@
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
+
 import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.notNullValue;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterRouteTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterRouteTest.java
index 59e7055..97cae76 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterRouteTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterRouteTest.java
@@ -35,6 +35,7 @@
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.context.ContextConfiguration;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_COUNTER_DECREMENT;
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_COUNTER_INCREMENT;
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_METRIC_NAME;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryEndpointTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryEndpointTest.java
index d3a7d1d..290175d 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryEndpointTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryEndpointTest.java
@@ -28,6 +28,7 @@
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
+
 import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.notNullValue;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryRouteTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryRouteTest.java
index ab17d75..fa66448 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryRouteTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryRouteTest.java
@@ -36,6 +36,7 @@
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.context.ContextConfiguration;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_HISTOGRAM_VALUE;
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_METRIC_NAME;
 import static org.apache.camel.component.micrometer.MicrometerConstants.METRICS_REGISTRY_NAME;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MetricComponentSpringTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MetricComponentSpringTest.java
index 85ccc6a..197174e 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MetricComponentSpringTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MetricComponentSpringTest.java
@@ -34,6 +34,7 @@
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.context.ContextConfiguration;
+
 import static org.mockito.ArgumentMatchers.anyIterable;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.times;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentRouteTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentRouteTest.java
index 762046f..18d6cc0 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentRouteTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentRouteTest.java
@@ -19,6 +19,7 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java
index 7d73591..6cbe6fa 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerComponentTest.java
@@ -19,6 +19,7 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Tags;
@@ -34,6 +35,7 @@
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
+
 import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.not;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerEndpointTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerEndpointTest.java
index 94d6556..c4436ce 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerEndpointTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MicrometerEndpointTest.java
@@ -32,6 +32,7 @@
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
+
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
 
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerEndpointTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerEndpointTest.java
index a58bb38..1420fc2 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerEndpointTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerEndpointTest.java
@@ -28,6 +28,7 @@
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
+
 import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.notNullValue;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java
index 71badd7..67771d6 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.micrometer;
 
 import java.util.concurrent.TimeUnit;
+
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Timer;
 import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
@@ -36,6 +37,7 @@
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.context.ContextConfiguration;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_METRIC_NAME;
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_TIMER_ACTION;
 import static org.apache.camel.component.micrometer.MicrometerConstants.METRICS_REGISTRY_NAME;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventNotifier/AbstractMicrometerEventNotifierTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventNotifier/AbstractMicrometerEventNotifierTest.java
index fa4ba87..e7a6b0a 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventNotifier/AbstractMicrometerEventNotifierTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventNotifier/AbstractMicrometerEventNotifierTest.java
@@ -21,7 +21,6 @@
 import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
 import io.micrometer.core.instrument.util.HierarchicalNameMapper;
 import io.micrometer.jmx.JmxMeterRegistry;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.micrometer.CamelJmxConfig;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventNotifier/MicrometerExchangeEventNotifierTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventNotifier/MicrometerExchangeEventNotifierTest.java
index 24dacce..5ccf666 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventNotifier/MicrometerExchangeEventNotifierTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventNotifier/MicrometerExchangeEventNotifierTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.micrometer.eventNotifier;
 
 import java.util.concurrent.TimeUnit;
+
 import io.micrometer.core.instrument.Timer;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.Exchange;
@@ -27,7 +28,6 @@
 import org.apache.camel.support.ExpressionAdapter;
 import org.junit.Test;
 
-
 public class MicrometerExchangeEventNotifierTest extends AbstractMicrometerEventNotifierTest {
 
     private static final String ROUTE_ID = "test";
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventNotifier/MicrometerRouteEventNotifierTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventNotifier/MicrometerRouteEventNotifierTest.java
index f1e3f2e..b25a88e 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventNotifier/MicrometerRouteEventNotifierTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/eventNotifier/MicrometerRouteEventNotifierTest.java
@@ -21,6 +21,7 @@
 import org.apache.camel.component.micrometer.eventnotifier.AbstractMicrometerEventNotifier;
 import org.apache.camel.component.micrometer.eventnotifier.MicrometerRouteEventNotifier;
 import org.junit.Test;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTES_ADDED;
 import static org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTES_RUNNING;
 
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/messagehistory/ManagedMessageHistoryTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/messagehistory/ManagedMessageHistoryTest.java
index 7d4695b..b8262a2 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/messagehistory/ManagedMessageHistoryTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/messagehistory/ManagedMessageHistoryTest.java
@@ -17,14 +17,15 @@
 package org.apache.camel.component.micrometer.messagehistory;
 
 import java.util.Set;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
+
 import io.micrometer.core.instrument.Clock;
 import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
 import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
 import io.micrometer.core.instrument.util.HierarchicalNameMapper;
 import io.micrometer.jmx.JmxMeterRegistry;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryTest.java
index 658d9dc..35019c7 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistoryTest.java
@@ -23,6 +23,7 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_MESSAGE_HISTORY_METER_NAME;
 import static org.apache.camel.component.micrometer.MicrometerConstants.NODE_ID_TAG;
 
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/messagehistory/SpringMicrometerMessageHistoryTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/messagehistory/SpringMicrometerMessageHistoryTest.java
index c2159ba..0447666 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/messagehistory/SpringMicrometerMessageHistoryTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/messagehistory/SpringMicrometerMessageHistoryTest.java
@@ -22,6 +22,7 @@
 import org.junit.Test;
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_MESSAGE_HISTORY_METER_NAME;
 import static org.apache.camel.component.micrometer.MicrometerConstants.NODE_ID_TAG;
 
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/AbstractMicrometerRoutePolicyTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/AbstractMicrometerRoutePolicyTest.java
index a640483..62c2164 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/AbstractMicrometerRoutePolicyTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/AbstractMicrometerRoutePolicyTest.java
@@ -21,7 +21,6 @@
 import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
 import io.micrometer.core.instrument.util.HierarchicalNameMapper;
 import io.micrometer.jmx.JmxMeterRegistry;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.micrometer.CamelJmxConfig;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/ManagedMicrometerRoutePolicyTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/ManagedMicrometerRoutePolicyTest.java
index d4493b3..2d209ba 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/ManagedMicrometerRoutePolicyTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/ManagedMicrometerRoutePolicyTest.java
@@ -18,8 +18,10 @@
 
 import java.util.List;
 import java.util.Set;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
+
 import io.micrometer.core.instrument.Meter;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyMulticastSubRouteTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyMulticastSubRouteTest.java
index 67eefa9..3ca4b08 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyMulticastSubRouteTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyMulticastSubRouteTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.micrometer.routepolicy;
 
 import java.util.List;
+
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.Timer;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicySubRouteTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicySubRouteTest.java
index 845f268..9478831 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicySubRouteTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicySubRouteTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.micrometer.routepolicy;
 
 import java.util.List;
+
 import io.micrometer.core.instrument.Meter;
 import io.micrometer.core.instrument.Timer;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyTest.java
index ce5b6e3..9d691e6 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/routepolicy/MicrometerRoutePolicyTest.java
@@ -17,10 +17,12 @@
 package org.apache.camel.component.micrometer.routepolicy;
 
 import java.util.concurrent.TimeUnit;
+
 import io.micrometer.core.instrument.Timer;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.DEFAULT_CAMEL_ROUTE_POLICY_METER_NAME;
 import static org.apache.camel.component.micrometer.MicrometerConstants.ROUTE_ID_TAG;
 
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/spi/InstrumentedThreadPoolFactoryTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/spi/InstrumentedThreadPoolFactoryTest.java
index ff22a2a..1d936cb 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/spi/InstrumentedThreadPoolFactoryTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/spi/InstrumentedThreadPoolFactoryTest.java
@@ -20,6 +20,7 @@
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
+
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Tags;
 import io.micrometer.core.instrument.internal.TimedExecutorService;
@@ -34,6 +35,7 @@
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
+
 import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.notNullValue;
diff --git a/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckRepositoryTest.java b/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckRepositoryTest.java
index 58fc6d4..31ae2b9 100644
--- a/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckRepositoryTest.java
+++ b/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckRepositoryTest.java
@@ -20,7 +20,6 @@
 import javax.json.JsonObject;
 
 import io.smallrye.health.SmallRyeHealth;
-
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.health.HealthCheckRegistry;
diff --git a/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckTest.java b/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckTest.java
index 4b34306..c40f342 100644
--- a/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckTest.java
+++ b/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthCheckTest.java
@@ -20,7 +20,6 @@
 import javax.json.JsonObject;
 
 import io.smallrye.health.SmallRyeHealth;
-
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.health.HealthCheckRegistry;
 import org.apache.camel.impl.engine.ExplicitCamelContextNameStrategy;
@@ -45,7 +44,7 @@
         JsonArray checks = healthObject.getJsonArray("checks");
         assertEquals(1, checks.size());
 
-        assertHealthCheckOutput("camel", State.UP, checks.getJsonObject(0), (checksJson) -> {
+        assertHealthCheckOutput("camel", State.UP, checks.getJsonObject(0), checksJson -> {
             assertEquals(ServiceStatus.Started.toString(), checksJson.getString("contextStatus"));
             assertEquals("health-context", checksJson.getString("name"));
         });
@@ -69,7 +68,7 @@
         JsonArray checks = healthObject.getJsonArray("checks");
         assertEquals(1, checks.size());
 
-        assertHealthCheckOutput("camel", State.DOWN, checks.getJsonObject(0), (checksJson) -> {
+        assertHealthCheckOutput("camel", State.DOWN, checks.getJsonObject(0), checksJson -> {
             assertEquals(ServiceStatus.Stopped.toString(), checksJson.getString("contextStatus"));
             assertEquals("health-context", checksJson.getString("name"));
         });
diff --git a/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthTestSupport.java b/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthTestSupport.java
index bc2cb99..7ce3e39 100644
--- a/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthTestSupport.java
+++ b/components/camel-microprofile-health/src/test/java/org/apache/camel/microprofile/health/CamelMicroProfileHealthTestSupport.java
@@ -28,7 +28,6 @@
 
 import io.smallrye.health.SmallRyeHealth;
 import io.smallrye.health.SmallRyeHealthReporter;
-
 import org.apache.camel.health.HealthCheck;
 import org.apache.camel.health.HealthCheckResultBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/AbstractMicroProfileMetricsProducer.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/AbstractMicroProfileMetricsProducer.java
index ac0ee04..9e6ea84 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/AbstractMicroProfileMetricsProducer.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/AbstractMicroProfileMetricsProducer.java
@@ -32,6 +32,7 @@
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.MetricType;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_METRIC_DESCRIPTION;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_METRIC_DISPLAY_NAME;
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsConcurrentGaugeProducer.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsConcurrentGaugeProducer.java
index 815bae84f..257b0e9 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsConcurrentGaugeProducer.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsConcurrentGaugeProducer.java
@@ -25,6 +25,7 @@
 import org.eclipse.microprofile.metrics.Metadata;
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_GAUGE_DECREMENT;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_GAUGE_INCREMENT;
 
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsCounterProducer.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsCounterProducer.java
index 275899c..3ca8447 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsCounterProducer.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsCounterProducer.java
@@ -24,6 +24,7 @@
 import org.eclipse.microprofile.metrics.Metadata;
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_COUNTER_INCREMENT;
 
 public class MicroProfileMetricsCounterProducer extends AbstractMicroProfileMetricsProducer<Counter> {
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsExchangeRecorder.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsExchangeRecorder.java
index 3d605ca..b3a8ca2 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsExchangeRecorder.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsExchangeRecorder.java
@@ -25,6 +25,7 @@
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.MetricType;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.EXCHANGES_COMPLETED_DESCRIPTION;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.EXCHANGES_COMPLETED_DISPLAY_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.EXCHANGES_COMPLETED_METRIC_NAME;
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeProducer.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeProducer.java
index 7a1373d..6b16668 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeProducer.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeProducer.java
@@ -25,6 +25,7 @@
 import org.eclipse.microprofile.metrics.Metadata;
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_GAUGE_VALUE;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsHelper.findMetric;
 
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHelper.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHelper.java
index 104567e..d9fff67 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHelper.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHelper.java
@@ -32,6 +32,7 @@
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.MetricType;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.METRIC_REGISTRY_NAME;
 
 public final class MicroProfileMetricsHelper {
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHistogramProducer.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHistogramProducer.java
index e21c4a8..941b5d4 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHistogramProducer.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHistogramProducer.java
@@ -24,6 +24,7 @@
 import org.eclipse.microprofile.metrics.Metadata;
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_HISTOGRAM_VALUE;
 
 public class MicroProfileMetricsHistogramProducer extends AbstractMicroProfileMetricsProducer<Histogram> {
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsMeteredProducer.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsMeteredProducer.java
index b274a53..21c8f50 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsMeteredProducer.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsMeteredProducer.java
@@ -24,6 +24,7 @@
 import org.eclipse.microprofile.metrics.Meter;
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_METER_MARK;
 
 public class MicroProfileMetricsMeteredProducer extends AbstractMicroProfileMetricsProducer<Meter> {
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTimerProducer.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTimerProducer.java
index 70e8950..42d2189 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTimerProducer.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTimerProducer.java
@@ -28,6 +28,7 @@
 import org.eclipse.microprofile.metrics.Timer.Context;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_TIMER_ACTION;
 
 public class MicroProfileMetricsTimerProducer extends AbstractMicroProfileMetricsProducer<Timer> {
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/MicroProfileMetricsEventNotifierNamingStrategy.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/MicroProfileMetricsEventNotifierNamingStrategy.java
index ba7147a..39543db 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/MicroProfileMetricsEventNotifierNamingStrategy.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/MicroProfileMetricsEventNotifierNamingStrategy.java
@@ -20,6 +20,7 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.ENDPOINT_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.EVENT_TYPE_TAG;
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/context/MicroProfileMetricsCamelContextEventNotifier.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/context/MicroProfileMetricsCamelContextEventNotifier.java
index fe22572..e60d8c6 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/context/MicroProfileMetricsCamelContextEventNotifier.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/context/MicroProfileMetricsCamelContextEventNotifier.java
@@ -27,6 +27,7 @@
 import org.eclipse.microprofile.metrics.MetricType;
 import org.eclipse.microprofile.metrics.MetricUnits;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_STATUS_DESCRIPTION;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_STATUS_DISPLAY_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_UPTIME_DESCRIPTION;
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/context/MicroProfileMetricsCamelContextEventNotifierNamingStrategy.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/context/MicroProfileMetricsCamelContextEventNotifierNamingStrategy.java
index 3f33c5c..dae6c5b 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/context/MicroProfileMetricsCamelContextEventNotifierNamingStrategy.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/context/MicroProfileMetricsCamelContextEventNotifierNamingStrategy.java
@@ -18,6 +18,7 @@
 
 import org.apache.camel.CamelContext;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_STATUS_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_UPTIME_METRIC_NAME;
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/exchange/MicroProfileMetricsExchangeEventNotifier.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/exchange/MicroProfileMetricsExchangeEventNotifier.java
index 9b43b63..2e25ab7 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/exchange/MicroProfileMetricsExchangeEventNotifier.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/exchange/MicroProfileMetricsExchangeEventNotifier.java
@@ -32,6 +32,7 @@
 import org.eclipse.microprofile.metrics.Tag;
 import org.eclipse.microprofile.metrics.Timer;
 import org.eclipse.microprofile.metrics.Timer.Context;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.PROCESSING_METRICS_SUFFIX;
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/exchange/MicroProfileMetricsExchangeEventNotifierNamingStrategy.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/exchange/MicroProfileMetricsExchangeEventNotifierNamingStrategy.java
index 1be6d48..830145d 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/exchange/MicroProfileMetricsExchangeEventNotifierNamingStrategy.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/exchange/MicroProfileMetricsExchangeEventNotifierNamingStrategy.java
@@ -20,6 +20,7 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.DEFAULT_CAMEL_EXCHANGE_EVENT_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.ENDPOINT_NAME;
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/route/MicroProfileMetricsRouteEventNotifier.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/route/MicroProfileMetricsRouteEventNotifier.java
index e0d9c20..a7c23a3 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/route/MicroProfileMetricsRouteEventNotifier.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/route/MicroProfileMetricsRouteEventNotifier.java
@@ -29,6 +29,7 @@
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.MetricType;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.ROUTES_ADDED_DESCRIPTION;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.ROUTES_ADDED_DISPLAY_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.ROUTES_RUNNING_DESCRIPTION;
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/route/MicroProfileMetricsRouteEventNotifierNamingStrategy.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/route/MicroProfileMetricsRouteEventNotifierNamingStrategy.java
index d8f26fc..97d0c30 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/route/MicroProfileMetricsRouteEventNotifierNamingStrategy.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/event/notifier/route/MicroProfileMetricsRouteEventNotifierNamingStrategy.java
@@ -18,6 +18,7 @@
 
 import org.apache.camel.CamelContext;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.DEFAULT_CAMEL_ROUTES_ADDED_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.DEFAULT_CAMEL_ROUTES_RUNNING_METRIC_NAME;
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsMessageHistory.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsMessageHistory.java
index 2dcfe2d..a938104 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsMessageHistory.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsMessageHistory.java
@@ -23,6 +23,7 @@
 import org.eclipse.microprofile.metrics.Metadata;
 import org.eclipse.microprofile.metrics.MetadataBuilder;
 import org.eclipse.microprofile.metrics.MetricRegistry;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.MESSAGE_HISTORY_DESCRIPTION;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.MESSAGE_HISTORY_DISPLAY_NAME;
 import static org.eclipse.microprofile.metrics.Timer.Context;
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsMessageHistoryNamingStrategy.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsMessageHistoryNamingStrategy.java
index 79dfd45..3fdf911 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsMessageHistoryNamingStrategy.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsMessageHistoryNamingStrategy.java
@@ -19,6 +19,7 @@
 import org.apache.camel.NamedNode;
 import org.apache.camel.Route;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.DEFAULT_CAMEL_MESSAGE_HISTORY_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.NODE_ID_TAG;
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/route/policy/MicroProfileMetricsRoutePolicy.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/route/policy/MicroProfileMetricsRoutePolicy.java
index 29ea6ac..6ff412a0 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/route/policy/MicroProfileMetricsRoutePolicy.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/route/policy/MicroProfileMetricsRoutePolicy.java
@@ -28,6 +28,7 @@
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.Timer;
 import org.eclipse.microprofile.metrics.Timer.Context;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.DEFAULT_CAMEL_ROUTE_POLICY_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.PROCESSING_METRICS_SUFFIX;
 
diff --git a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/route/policy/MicroProfileMetricsRoutePolicyNamingStrategy.java b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/route/policy/MicroProfileMetricsRoutePolicyNamingStrategy.java
index c0cee12..9b6cdf1 100644
--- a/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/route/policy/MicroProfileMetricsRoutePolicyNamingStrategy.java
+++ b/components/camel-microprofile-metrics/src/main/java/org/apache/camel/component/microprofile/metrics/route/policy/MicroProfileMetricsRoutePolicyNamingStrategy.java
@@ -18,6 +18,7 @@
 
 import org.apache.camel.Route;
 import org.eclipse.microprofile.metrics.Tag;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.DEFAULT_CAMEL_ROUTE_POLICY_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.ROUTE_ID_TAG;
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsConcurrentGaugeTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsConcurrentGaugeTest.java
index 636f42e..c0b7310 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsConcurrentGaugeTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsConcurrentGaugeTest.java
@@ -20,6 +20,7 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.eclipse.microprofile.metrics.ConcurrentGauge;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_GAUGE_DECREMENT;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_GAUGE_INCREMENT;
 
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsCounterTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsCounterTest.java
index 832deff..cbe25b5 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsCounterTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsCounterTest.java
@@ -20,6 +20,7 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.eclipse.microprofile.metrics.Counter;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_COUNTER_INCREMENT;
 
 public class MicroProfileMetricsCounterTest extends MicroProfileMetricsTestSupport {
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsCustomRegistryTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsCustomRegistryTest.java
index 912ec8b..6381bd9 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsCustomRegistryTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsCustomRegistryTest.java
@@ -19,7 +19,6 @@
 import java.util.SortedMap;
 
 import io.smallrye.metrics.MetricsRegistryImpl;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsEndpointTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsEndpointTest.java
index 03cc456..e03fe56 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsEndpointTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsEndpointTest.java
@@ -19,6 +19,7 @@
 import org.apache.camel.Producer;
 import org.eclipse.microprofile.metrics.MetricType;
 import org.junit.Test;
+
 import static org.hamcrest.core.Is.is;
 import static org.hamcrest.core.IsInstanceOf.instanceOf;
 import static org.junit.Assert.assertThat;
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsExchangeRecorderTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsExchangeRecorderTest.java
index 2e03a5e..20220b5 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsExchangeRecorderTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsExchangeRecorderTest.java
@@ -23,6 +23,7 @@
 import org.eclipse.microprofile.metrics.Tag;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_METRIC_PREFIX;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.EXCHANGES_COMPLETED_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.EXCHANGES_EXTERNAL_REDELIVERIES_METRIC_NAME;
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeTest.java
index cdc4835..46263b5 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsGaugeTest.java
@@ -20,6 +20,7 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.microprofile.metrics.gauge.SimpleGauge;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_GAUGE_VALUE;
 
 public class MicroProfileMetricsGaugeTest extends MicroProfileMetricsTestSupport {
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHelperTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHelperTest.java
index 8e4131b..e3b1997 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHelperTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHelperTest.java
@@ -17,12 +17,12 @@
 package org.apache.camel.component.microprofile.metrics;
 
 import io.smallrye.metrics.MetricRegistries;
-
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.Registry;
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.Tag;
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 public class MicroProfileMetricsHelperTest {
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHistogramTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHistogramTest.java
index b190a91..78ae724 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHistogramTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsHistogramTest.java
@@ -20,6 +20,7 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.eclipse.microprofile.metrics.Histogram;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_HISTOGRAM_VALUE;
 
 public class MicroProfileMetricsHistogramTest extends MicroProfileMetricsTestSupport {
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsMetadataTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsMetadataTest.java
index 1f19968..da50a18 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsMetadataTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsMetadataTest.java
@@ -23,6 +23,7 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.eclipse.microprofile.metrics.Metadata;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_METRIC_DESCRIPTION;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_METRIC_DISPLAY_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_METRIC_UNIT;
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsMeterTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsMeterTest.java
index 5026a37..40134a4 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsMeterTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsMeterTest.java
@@ -20,6 +20,7 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.eclipse.microprofile.metrics.Meter;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_METER_MARK;
 
 public class MicroProfileMetricsMeterTest extends MicroProfileMetricsTestSupport {
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTagTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTagTest.java
index 7ab36f4..5d0f57e 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTagTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTagTest.java
@@ -22,6 +22,7 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.eclipse.microprofile.metrics.Tag;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_METRIC_TAGS;
 
 public class MicroProfileMetricsTagTest extends MicroProfileMetricsTestSupport {
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTestSupport.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTestSupport.java
index 4fcf703..1f5a31e 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTestSupport.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTestSupport.java
@@ -23,7 +23,6 @@
 
 import io.smallrye.metrics.MetricRegistries;
 import io.smallrye.metrics.exporters.JsonExporter;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.component.microprofile.metrics.gauge.AtomicIntegerGauge;
 import org.apache.camel.component.microprofile.metrics.gauge.SimpleGauge;
@@ -38,6 +37,7 @@
 import org.eclipse.microprofile.metrics.MetricRegistry;
 import org.eclipse.microprofile.metrics.Tag;
 import org.eclipse.microprofile.metrics.Timer;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsHelper.findMetric;
 import static org.eclipse.microprofile.metrics.MetricRegistry.Type;
 
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTimerTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTimerTest.java
index 5b6f78f..433115f 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTimerTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/MicroProfileMetricsTimerTest.java
@@ -20,6 +20,7 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.eclipse.microprofile.metrics.Timer;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.HEADER_TIMER_ACTION;
 
 public class MicroProfileMetricsTimerTest extends MicroProfileMetricsTestSupport {
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/event/notifier/context/MicroProfileMetricsCamelContextEventNotifierTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/event/notifier/context/MicroProfileMetricsCamelContextEventNotifierTest.java
index 5b80789..46ffbc4 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/event/notifier/context/MicroProfileMetricsCamelContextEventNotifierTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/event/notifier/context/MicroProfileMetricsCamelContextEventNotifierTest.java
@@ -25,6 +25,7 @@
 import org.apache.camel.component.microprofile.metrics.gauge.LambdaGauge;
 import org.eclipse.microprofile.metrics.Tag;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_STATUS_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_UPTIME_METRIC_NAME;
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/event/notifier/exchange/MicroProfileMetricsExchangeEventNotifierTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/event/notifier/exchange/MicroProfileMetricsExchangeEventNotifierTest.java
index 9c09d11..57f1d1b 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/event/notifier/exchange/MicroProfileMetricsExchangeEventNotifierTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/event/notifier/exchange/MicroProfileMetricsExchangeEventNotifierTest.java
@@ -29,6 +29,7 @@
 import org.eclipse.microprofile.metrics.Tag;
 import org.eclipse.microprofile.metrics.Timer;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.EXCHANGES_COMPLETED_METRIC_NAME;
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/event/notifier/route/MicroProfileMetricsRouteEventNotifierTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/event/notifier/route/MicroProfileMetricsRouteEventNotifierTest.java
index 5a91dce..4e722ce 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/event/notifier/route/MicroProfileMetricsRouteEventNotifierTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/event/notifier/route/MicroProfileMetricsRouteEventNotifierTest.java
@@ -22,6 +22,7 @@
 import org.apache.camel.component.microprofile.metrics.MicroProfileMetricsTestSupport;
 import org.eclipse.microprofile.metrics.Gauge;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.DEFAULT_CAMEL_ROUTES_ADDED_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.DEFAULT_CAMEL_ROUTES_RUNNING_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsHelper.findMetric;
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsExceptionInRouteMessageHistoryTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsExceptionInRouteMessageHistoryTest.java
index 16d3d51..d36a66f 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsExceptionInRouteMessageHistoryTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsExceptionInRouteMessageHistoryTest.java
@@ -19,7 +19,6 @@
 import java.util.SortedMap;
 
 import io.smallrye.metrics.exporters.JsonExporter;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.microprofile.metrics.MicroProfileMetricsTestSupport;
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsMessageHistoryTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsMessageHistoryTest.java
index 69690d7..4f50504 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsMessageHistoryTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/message/history/MicroProfileMetricsMessageHistoryTest.java
@@ -21,7 +21,6 @@
 
 import io.smallrye.metrics.TagsUtils;
 import io.smallrye.metrics.exporters.JsonExporter;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.microprofile.metrics.MicroProfileMetricsHelper;
@@ -31,6 +30,7 @@
 import org.eclipse.microprofile.metrics.Tag;
 import org.eclipse.microprofile.metrics.Timer;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.DEFAULT_CAMEL_MESSAGE_HISTORY_METRIC_NAME;
 
 public class MicroProfileMetricsMessageHistoryTest extends MicroProfileMetricsTestSupport {
diff --git a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/route/policy/MicroProfileMetricsRoutePolicyTest.java b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/route/policy/MicroProfileMetricsRoutePolicyTest.java
index 915f46e..4ee9d89 100644
--- a/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/route/policy/MicroProfileMetricsRoutePolicyTest.java
+++ b/components/camel-microprofile-metrics/src/test/java/org/apache/camel/component/microprofile/metrics/route/policy/MicroProfileMetricsRoutePolicyTest.java
@@ -19,7 +19,6 @@
 import java.util.Arrays;
 
 import io.smallrye.metrics.TagsUtils;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.microprofile.metrics.MicroProfileMetricsHelper;
@@ -31,6 +30,7 @@
 import org.eclipse.microprofile.metrics.Tag;
 import org.eclipse.microprofile.metrics.Timer;
 import org.junit.Test;
+
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.CAMEL_CONTEXT_TAG;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.DEFAULT_CAMEL_ROUTE_POLICY_METRIC_NAME;
 import static org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants.DEFAULT_CAMEL_ROUTE_POLICY_PROCESSING_METRIC_NAME;
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/NodeIds.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/NodeIds.java
index f0a32cd..bada7e3 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/NodeIds.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/NodeIds.java
@@ -20,14 +20,13 @@
 import java.util.Objects;
 import java.util.UUID;
 
-import static java.util.Objects.requireNonNull;
-
 import org.eclipse.milo.opcua.stack.core.types.builtin.ByteString;
 import org.eclipse.milo.opcua.stack.core.types.builtin.ExpandedNodeId;
 import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
 import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger;
 import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UShort;
 
+import static java.util.Objects.requireNonNull;
 import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.ushort;
 
 /**
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java
index 9fb868e..bd828a6 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConnection.java
@@ -19,8 +19,6 @@
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Consumer;
 
-import static java.util.Objects.requireNonNull;
-
 import org.apache.camel.component.milo.client.internal.SubscriptionManager;
 import org.eclipse.milo.opcua.stack.core.Stack;
 import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
@@ -30,6 +28,8 @@
 import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger;
 import org.eclipse.milo.opcua.stack.core.types.structured.CallMethodResult;
 
+import static java.util.Objects.requireNonNull;
+
 public class MiloClientConnection implements AutoCloseable {
 
     private final MiloClientConfiguration configuration;
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
index a67a5be..38f2c03 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.component.milo.client;
 
-import static java.util.Objects.requireNonNull;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
@@ -28,6 +26,8 @@
 import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
 import org.eclipse.milo.opcua.stack.core.types.builtin.ExpandedNodeId;
 
+import static java.util.Objects.requireNonNull;
+
 public class MiloClientConsumer extends DefaultConsumer {
 
     private final MiloClientConnection connection;
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientProducer.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientProducer.java
index daabfbd..204c6f2 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientProducer.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientProducer.java
@@ -18,14 +18,14 @@
 
 import java.util.concurrent.CompletableFuture;
 
-import static java.lang.Boolean.TRUE;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.eclipse.milo.opcua.stack.core.types.builtin.ExpandedNodeId;
 
+import static java.lang.Boolean.TRUE;
+
 public class MiloClientProducer extends DefaultAsyncProducer {
 
     private final MiloClientConnection connection;
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
index 7b72024..8a057f6 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
@@ -34,8 +34,6 @@
 import java.util.function.Consumer;
 import java.util.function.Predicate;
 
-import static java.util.concurrent.CompletableFuture.completedFuture;
-
 import com.google.common.base.Strings;
 import org.apache.camel.component.milo.client.MiloClientConfiguration;
 import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
@@ -73,6 +71,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.util.concurrent.CompletableFuture.completedFuture;
 import static org.apache.camel.component.milo.NodeIds.toNodeId;
 
 public class SubscriptionManager {
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/MiloServerComponent.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/MiloServerComponent.java
index 5464ad7..d00b63f 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/MiloServerComponent.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/MiloServerComponent.java
@@ -36,8 +36,6 @@
 import java.util.Set;
 import java.util.function.Supplier;
 
-import static java.util.Collections.singletonList;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.milo.KeyStoreLoader;
 import org.apache.camel.component.milo.server.internal.CamelNamespace;
@@ -61,6 +59,7 @@
 import org.eclipse.milo.opcua.stack.core.types.structured.BuildInfo;
 import org.eclipse.milo.opcua.stack.core.types.structured.UserTokenPolicy;
 
+import static java.util.Collections.singletonList;
 import static org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfig.USER_TOKEN_POLICY_ANONYMOUS;
 
 /**
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java
index ed855f2..1c10522 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java
@@ -21,8 +21,6 @@
 import java.nio.file.Paths;
 import java.util.EnumSet;
 
-import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
@@ -33,6 +31,8 @@
 import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
 import org.junit.Test;
 
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+
 /**
  * Testing monitoring items over multiple connections
  */
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockNamespace.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockNamespace.java
index fed8073..1acd8de 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockNamespace.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockNamespace.java
@@ -21,8 +21,6 @@
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
 
-import static java.util.stream.Collectors.toList;
-
 import org.eclipse.milo.opcua.sdk.core.Reference;
 import org.eclipse.milo.opcua.sdk.server.OpcUaServer;
 import org.eclipse.milo.opcua.sdk.server.api.AccessContext;
@@ -50,6 +48,8 @@
 import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId;
 import org.eclipse.milo.opcua.stack.core.types.structured.WriteValue;
 
+import static java.util.stream.Collectors.toList;
+
 public class MockNamespace implements Namespace {
 
     public static final int FOLDER_ID = 1;
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java
index 1d4bdc1..fe58263 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java
@@ -20,11 +20,11 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-
 import org.apache.camel.component.milo.AbstractMiloServerTest;
 import org.junit.Test;
 
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+
 /**
  * Test setting the certificate manager
  */
diff --git a/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownMockTest.java b/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownMockTest.java
index 1a92d6c..a2a2cb2 100644
--- a/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownMockTest.java
+++ b/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownMockTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.mina;
 
-
 import java.lang.reflect.Field;
 
 import org.apache.camel.Endpoint;
diff --git a/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaSpringMinaEndpointTest.java b/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaSpringMinaEndpointTest.java
index e2df929..50044d5 100644
--- a/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaSpringMinaEndpointTest.java
+++ b/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaSpringMinaEndpointTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.mina;
 
-
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
 import org.junit.Test;
diff --git a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpClientProducer.java b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpClientProducer.java
index 48e046b..c931ffc 100644
--- a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpClientProducer.java
+++ b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpClientProducer.java
@@ -39,7 +39,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * The MLLP producer.
  */
diff --git a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpServerConsumer.java b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpServerConsumer.java
index b5ba736..fa4c9f4 100644
--- a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpServerConsumer.java
+++ b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpTcpServerConsumer.java
@@ -53,7 +53,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * The MLLP consumer.
  */
diff --git a/components/camel-mllp/src/main/java/org/apache/camel/processor/mllp/Hl7AcknowledgementGenerationException.java b/components/camel-mllp/src/main/java/org/apache/camel/processor/mllp/Hl7AcknowledgementGenerationException.java
index 1da9d62..d2a1433 100644
--- a/components/camel-mllp/src/main/java/org/apache/camel/processor/mllp/Hl7AcknowledgementGenerationException.java
+++ b/components/camel-mllp/src/main/java/org/apache/camel/processor/mllp/Hl7AcknowledgementGenerationException.java
@@ -18,7 +18,6 @@
 
 import org.apache.camel.component.mllp.internal.Hl7Util;
 
-
 /*
  * Exception thrown by the HL7AcknowledgmentGenerator in the event of a failure.
  */
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementDeliveryExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementDeliveryExceptionTest.java
index 4c3674c..13d696b 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementDeliveryExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementDeliveryExceptionTest.java
@@ -93,4 +93,4 @@
         assertArrayEquals(HL7_MESSAGE_BYTES, instance.hl7MessageBytes);
         assertArrayEquals(HL7_ACKNOWLEDGEMENT_BYTES, instance.hl7AcknowledgementBytes);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementExceptionTest.java
index d431b74..791b2af 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementExceptionTest.java
@@ -153,4 +153,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementReceiveExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementReceiveExceptionTest.java
index 9015976..075e0ab 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementReceiveExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementReceiveExceptionTest.java
@@ -150,4 +150,4 @@
         assertArrayEquals(HL7_MESSAGE_BYTES, instance.hl7MessageBytes);
         assertArrayEquals(HL7_ACKNOWLEDGEMENT_BYTES, instance.hl7AcknowledgementBytes);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementTimeoutExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementTimeoutExceptionTest.java
index 9e82f90..4caa1b4 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementTimeoutExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpAcknowledgementTimeoutExceptionTest.java
@@ -168,4 +168,4 @@
         assertNull(instance.getHl7Acknowledgement());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpApplicationErrorAcknowledgementExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpApplicationErrorAcknowledgementExceptionTest.java
index 5cbee6f..09b4c38 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpApplicationErrorAcknowledgementExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpApplicationErrorAcknowledgementExceptionTest.java
@@ -72,4 +72,4 @@
         assertEquals("AE", instance.getAcknowledgmentType());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpApplicationRejectAcknowledgementExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpApplicationRejectAcknowledgementExceptionTest.java
index f7913a7..225beb6 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpApplicationRejectAcknowledgementExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpApplicationRejectAcknowledgementExceptionTest.java
@@ -72,4 +72,4 @@
         assertEquals("AR", instance.getAcknowledgmentType());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpCommitErrorAcknowledgementExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpCommitErrorAcknowledgementExceptionTest.java
index 97e6e61..6ad3a59 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpCommitErrorAcknowledgementExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpCommitErrorAcknowledgementExceptionTest.java
@@ -72,4 +72,4 @@
         assertEquals("CE", instance.getAcknowledgmentType());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpCommitRejectAcknowledgementExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpCommitRejectAcknowledgementExceptionTest.java
index 7a20e63..9ffd6ee 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpCommitRejectAcknowledgementExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpCommitRejectAcknowledgementExceptionTest.java
@@ -71,4 +71,4 @@
 
         assertEquals("CR", instance.getAcknowledgmentType());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpComponentTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpComponentTest.java
index 4df7d45..8813894 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpComponentTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpComponentTest.java
@@ -125,4 +125,4 @@
         MllpComponent.setLogPhiMaxBytes(expected);
         assertEquals(expected, MllpComponent.logPhiMaxBytes);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpEndpointTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpEndpointTest.java
index f9aad21..b336be3 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpEndpointTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpEndpointTest.java
@@ -48,4 +48,4 @@
 
         assertEquals(maxConcurrentConsumers, mllpEndpoint.getConfiguration().getMaxConcurrentConsumers());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpExceptionTest.java
index e1e259e..2d73bd8 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpExceptionTest.java
@@ -185,4 +185,4 @@
 
         return expectedMessageBuilder.toString();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpInvalidAcknowledgementExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpInvalidAcknowledgementExceptionTest.java
index 9230f6e..b7163f1 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpInvalidAcknowledgementExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpInvalidAcknowledgementExceptionTest.java
@@ -60,4 +60,4 @@
         assertArrayEquals(HL7_MESSAGE_BYTES, instance.getHl7MessageBytes());
         assertArrayEquals(HL7_ACKNOWLEDGEMENT_BYTES, instance.getHl7AcknowledgementBytes());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpInvalidMessageExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpInvalidMessageExceptionTest.java
index 440004a..a82eea0 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpInvalidMessageExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpInvalidMessageExceptionTest.java
@@ -60,4 +60,4 @@
         assertArrayEquals(HL7_MESSAGE_BYTES, instance.getHl7MessageBytes());
         assertNull(instance.getHl7AcknowledgementBytes());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpNegativeAcknowledgementExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpNegativeAcknowledgementExceptionTest.java
index d1d3ff5..65ca66d 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpNegativeAcknowledgementExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpNegativeAcknowledgementExceptionTest.java
@@ -89,4 +89,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpProducerConsumerLoopbackTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpProducerConsumerLoopbackTest.java
index 975f605..7e84e9e 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpProducerConsumerLoopbackTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpProducerConsumerLoopbackTest.java
@@ -36,7 +36,6 @@
 
 import static org.junit.Assume.assumeTrue;
 
-
 public class MllpProducerConsumerLoopbackTest extends CamelTestSupport {
     int mllpPort = AvailablePortFinder.getNextAvailable();
     String mllpHost = "localhost";
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpReceiveExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpReceiveExceptionTest.java
index 4b99211..a2780eb 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpReceiveExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpReceiveExceptionTest.java
@@ -125,4 +125,4 @@
         assertArrayEquals(HL7_MESSAGE_BYTES, instance.hl7MessageBytes);
         assertArrayEquals(HL7_ACKNOWLEDGEMENT_BYTES, instance.hl7AcknowledgementBytes);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpSocketExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpSocketExceptionTest.java
index b3d8a15..bcb9169 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpSocketExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpSocketExceptionTest.java
@@ -57,4 +57,4 @@
         assertEquals(TEST_EXCEPTION_MESSAGE, instance.getMessage());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerIdleConnectionTimeoutTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerIdleConnectionTimeoutTest.java
index e26c76c..cdf7628 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerIdleConnectionTimeoutTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerIdleConnectionTimeoutTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.mllp;
 
-
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerAutoAcknowledgementWithBridgeErrorHandlerTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerAutoAcknowledgementWithBridgeErrorHandlerTest.java
index a3b1d42..a21a689 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerAutoAcknowledgementWithBridgeErrorHandlerTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerAutoAcknowledgementWithBridgeErrorHandlerTest.java
@@ -22,7 +22,6 @@
 import static org.hamcrest.CoreMatchers.endsWith;
 import static org.hamcrest.CoreMatchers.startsWith;
 
-
 public class MllpTcpServerConsumerAutoAcknowledgementWithBridgeErrorHandlerTest extends TcpServerConsumerAcknowledgementTestSupport {
     @Override
     protected boolean isBridgeErrorHandler() {
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerAutoAcknowledgementWithoutBridgeErrorHandlerTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerAutoAcknowledgementWithoutBridgeErrorHandlerTest.java
index dcd8e4e..a737276 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerAutoAcknowledgementWithoutBridgeErrorHandlerTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerAutoAcknowledgementWithoutBridgeErrorHandlerTest.java
@@ -22,7 +22,6 @@
 import static org.hamcrest.CoreMatchers.endsWith;
 import static org.hamcrest.CoreMatchers.startsWith;
 
-
 public class MllpTcpServerConsumerAutoAcknowledgementWithoutBridgeErrorHandlerTest extends TcpServerConsumerAcknowledgementTestSupport {
     @Override
     protected boolean isBridgeErrorHandler() {
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerManualAcknowledgementWithBridgeErrorHandlerTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerManualAcknowledgementWithBridgeErrorHandlerTest.java
index 85b0a1c..f01856a 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerManualAcknowledgementWithBridgeErrorHandlerTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerManualAcknowledgementWithBridgeErrorHandlerTest.java
@@ -19,7 +19,6 @@
 import org.apache.camel.Exchange;
 import org.junit.Test;
 
-
 public class MllpTcpServerConsumerManualAcknowledgementWithBridgeErrorHandlerTest extends TcpServerConsumerAcknowledgementTestSupport {
     @Override
     protected boolean isBridgeErrorHandler() {
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerManualAcknowledgementWithoutBridgeErrorHandlerTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerManualAcknowledgementWithoutBridgeErrorHandlerTest.java
index 77ff9e1..27f5b65 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerManualAcknowledgementWithoutBridgeErrorHandlerTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerManualAcknowledgementWithoutBridgeErrorHandlerTest.java
@@ -19,7 +19,6 @@
 import org.apache.camel.Exchange;
 import org.junit.Test;
 
-
 public class MllpTcpServerConsumerManualAcknowledgementWithoutBridgeErrorHandlerTest extends TcpServerConsumerAcknowledgementTestSupport {
     @Override
     protected boolean isBridgeErrorHandler() {
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpWriteExceptionTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpWriteExceptionTest.java
index 60a0f07..9c0e975e 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpWriteExceptionTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpWriteExceptionTest.java
@@ -91,4 +91,4 @@
         assertArrayEquals(HL7_ACKNOWLEDGEMENT_BYTES, instance.hl7AcknowledgementBytes);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/TcpServerConsumerAcknowledgementTestSupport.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/TcpServerConsumerAcknowledgementTestSupport.java
index 98dec55..b29d40e 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/TcpServerConsumerAcknowledgementTestSupport.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/TcpServerConsumerAcknowledgementTestSupport.java
@@ -30,7 +30,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Rule;
 
-
 public abstract class TcpServerConsumerAcknowledgementTestSupport extends CamelTestSupport {
     static final String TEST_MESSAGE =
         "MSH|^~\\&|APP_A|FAC_A|^org^sys||||ADT^A04^ADT_A04|||2.6" + '\r'
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferReadFromTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferReadFromTest.java
index d8cedf8..324f405 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferReadFromTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferReadFromTest.java
@@ -83,4 +83,4 @@
             assertNull(instance.toByteArray());
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferTest.java
index 6731931..3d3d409 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferTest.java
@@ -26,7 +26,6 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-
 /**
  * Tests for the MllpSocketBuffer class.
  */
@@ -743,4 +742,4 @@
         assertNull(instance.getTrailingOutOfBandData());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferWriteTest.java b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferWriteTest.java
index fae295c..3c44931 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferWriteTest.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferWriteTest.java
@@ -389,4 +389,4 @@
         assertArrayEquals("FOOBAR".getBytes(), instance.toByteArray());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/test/junit/rule/mllp/MllpClientResource.java b/components/camel-mllp/src/test/java/org/apache/camel/test/junit/rule/mllp/MllpClientResource.java
index 03c8b05..9c26773 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/test/junit/rule/mllp/MllpClientResource.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/test/junit/rule/mllp/MllpClientResource.java
@@ -505,4 +505,4 @@
         CLOSE,
         RESET
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mllp/src/test/java/org/apache/camel/test/tcp/JavaSocketTests.java b/components/camel-mllp/src/test/java/org/apache/camel/test/tcp/JavaSocketTests.java
index 40a17a8..d918087 100644
--- a/components/camel-mllp/src/test/java/org/apache/camel/test/tcp/JavaSocketTests.java
+++ b/components/camel-mllp/src/test/java/org/apache/camel/test/tcp/JavaSocketTests.java
@@ -34,7 +34,6 @@
 
 import static org.junit.Assert.fail;
 
-
 /**
  * Various tests used to validate the behaviour of Java Sockets.
  *
diff --git a/components/camel-mongodb-gridfs/src/main/java/org/apache/camel/component/mongodb/gridfs/GridFsComponent.java b/components/camel-mongodb-gridfs/src/main/java/org/apache/camel/component/mongodb/gridfs/GridFsComponent.java
index 3fb3204..1e9a638 100644
--- a/components/camel-mongodb-gridfs/src/main/java/org/apache/camel/component/mongodb/gridfs/GridFsComponent.java
+++ b/components/camel-mongodb-gridfs/src/main/java/org/apache/camel/component/mongodb/gridfs/GridFsComponent.java
@@ -22,7 +22,6 @@
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
 
-
 @Component("mongodb-gridfs")
 public class GridFsComponent extends DefaultComponent {
 
diff --git a/components/camel-mongodb-gridfs/src/main/java/org/apache/camel/component/mongodb/gridfs/GridFsProducer.java b/components/camel-mongodb-gridfs/src/main/java/org/apache/camel/component/mongodb/gridfs/GridFsProducer.java
index 755f26b..fec7e0b 100644
--- a/components/camel-mongodb-gridfs/src/main/java/org/apache/camel/component/mongodb/gridfs/GridFsProducer.java
+++ b/components/camel-mongodb-gridfs/src/main/java/org/apache/camel/component/mongodb/gridfs/GridFsProducer.java
@@ -30,7 +30,6 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.support.DefaultProducer;
 
-
 public class GridFsProducer extends DefaultProducer {    
     private GridFsEndpoint endpoint;
 
diff --git a/components/camel-mongodb-gridfs/src/test/java/org/apache/camel/component/mongodb/gridfs/AbstractMongoDbTest.java b/components/camel-mongodb-gridfs/src/test/java/org/apache/camel/component/mongodb/gridfs/AbstractMongoDbTest.java
index 8f8c6b6..143b202 100644
--- a/components/camel-mongodb-gridfs/src/test/java/org/apache/camel/component/mongodb/gridfs/AbstractMongoDbTest.java
+++ b/components/camel-mongodb-gridfs/src/test/java/org/apache/camel/component/mongodb/gridfs/AbstractMongoDbTest.java
@@ -58,4 +58,4 @@
         ctx.getPropertiesComponent().setLocation("classpath:mongodb.test.properties");
         return ctx;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mongodb-gridfs/src/test/java/org/apache/camel/component/mongodb/gridfs/EmbedMongoConfiguration.java b/components/camel-mongodb-gridfs/src/test/java/org/apache/camel/component/mongodb/gridfs/EmbedMongoConfiguration.java
index f5e71e3..d6f1c36 100644
--- a/components/camel-mongodb-gridfs/src/test/java/org/apache/camel/component/mongodb/gridfs/EmbedMongoConfiguration.java
+++ b/components/camel-mongodb-gridfs/src/test/java/org/apache/camel/component/mongodb/gridfs/EmbedMongoConfiguration.java
@@ -63,4 +63,4 @@
     public MongoClient myDb() throws UnknownHostException {
         return new MongoClient(defaultHost(), PORT);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoAbstractConsumerThread.java b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoAbstractConsumerThread.java
index 8ea9a54..638ce54 100644
--- a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoAbstractConsumerThread.java
+++ b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoAbstractConsumerThread.java
@@ -20,7 +20,6 @@
 
 import com.mongodb.client.MongoCollection;
 import com.mongodb.client.MongoCursor;
-
 import org.apache.camel.Consumer;
 import org.bson.Document;
 import org.slf4j.Logger;
diff --git a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbChangeStreamsConsumer.java b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbChangeStreamsConsumer.java
index 4cbaaab..fcefe7f 100644
--- a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbChangeStreamsConsumer.java
+++ b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbChangeStreamsConsumer.java
@@ -19,13 +19,13 @@
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 
-import static java.util.Collections.singletonList;
-
 import org.apache.camel.Processor;
 import org.apache.camel.support.DefaultConsumer;
 import org.apache.camel.util.ObjectHelper;
 import org.bson.BsonDocument;
 
+import static java.util.Collections.singletonList;
+
 /**
  * The MongoDb Change Streams consumer.
  */
diff --git a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbChangeStreamsThread.java b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbChangeStreamsThread.java
index 41fb9de..2f94bdb 100644
--- a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbChangeStreamsThread.java
+++ b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbChangeStreamsThread.java
@@ -91,4 +91,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbTailingThread.java b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbTailingThread.java
index 738a3cd..fbf2e4a 100644
--- a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbTailingThread.java
+++ b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbTailingThread.java
@@ -141,4 +141,4 @@
             tailTracking.persistToStore();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/EmbedMongoConfiguration.java b/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/EmbedMongoConfiguration.java
index 0c81499..57649dc 100644
--- a/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/EmbedMongoConfiguration.java
+++ b/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/EmbedMongoConfiguration.java
@@ -29,7 +29,6 @@
 import de.flapdoodle.embed.mongo.config.MongodConfigBuilder;
 import de.flapdoodle.embed.mongo.config.Net;
 import de.flapdoodle.embed.mongo.config.Storage;
-
 import org.bson.Document;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
diff --git a/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbChangeStreamsConsumerTest.java b/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbChangeStreamsConsumerTest.java
index 69e1bf4..dc1bfe0 100644
--- a/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbChangeStreamsConsumerTest.java
+++ b/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbChangeStreamsConsumerTest.java
@@ -110,4 +110,4 @@
             }
         });
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConnectionBeansTest.java b/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConnectionBeansTest.java
index a37d8f3..8d8e246 100644
--- a/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConnectionBeansTest.java
+++ b/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbConnectionBeansTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.mongodb;
 
 import com.mongodb.MongoClient;
-
 import org.apache.camel.Endpoint;
 import org.junit.Test;
 
diff --git a/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbOperationsTest.java b/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbOperationsTest.java
index 3042f06..a4b8918 100644
--- a/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbOperationsTest.java
+++ b/components/camel-mongodb/src/test/java/org/apache/camel/component/mongodb/MongoDbOperationsTest.java
@@ -21,8 +21,6 @@
 import java.util.HashMap;
 import java.util.List;
 
-import static java.util.Arrays.asList;
-
 import com.mongodb.MongoClient;
 import com.mongodb.client.model.Filters;
 import com.mongodb.client.result.DeleteResult;
@@ -43,6 +41,7 @@
 import static com.mongodb.client.model.Updates.combine;
 import static com.mongodb.client.model.Updates.currentTimestamp;
 import static com.mongodb.client.model.Updates.set;
+import static java.util.Arrays.asList;
 import static org.apache.camel.component.mongodb.MongoDbConstants.MONGO_ID;
 
 public class MongoDbOperationsTest extends AbstractMongoDbTest {
diff --git a/components/camel-msv/src/main/java/org/apache/camel/component/validator/msv/MsvComponent.java b/components/camel-msv/src/main/java/org/apache/camel/component/validator/msv/MsvComponent.java
index 53e381b..a1412f0 100644
--- a/components/camel-msv/src/main/java/org/apache/camel/component/validator/msv/MsvComponent.java
+++ b/components/camel-msv/src/main/java/org/apache/camel/component/validator/msv/MsvComponent.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.validator.msv;
 
 import java.util.Map;
+
 import javax.xml.validation.SchemaFactory;
 
 import org.apache.camel.Endpoint;
diff --git a/components/camel-msv/src/main/java/org/apache/camel/component/validator/msv/MsvEndpoint.java b/components/camel-msv/src/main/java/org/apache/camel/component/validator/msv/MsvEndpoint.java
index fd7981d..ba6992a 100644
--- a/components/camel-msv/src/main/java/org/apache/camel/component/validator/msv/MsvEndpoint.java
+++ b/components/camel-msv/src/main/java/org/apache/camel/component/validator/msv/MsvEndpoint.java
@@ -20,7 +20,6 @@
 
 import org.apache.camel.Component;
 import org.apache.camel.component.validator.ValidatorEndpoint;
-
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.support.processor.validation.ValidatingProcessor;
 import org.iso_relax.verifier.jaxp.validation.RELAXNGSchemaFactoryImpl;
diff --git a/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosAsyncSendTest.java b/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosAsyncSendTest.java
index cd3ac52..94cc948 100644
--- a/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosAsyncSendTest.java
+++ b/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosAsyncSendTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.nagios;
+
 import com.googlecode.jsendnsca.NonBlockingNagiosPassiveCheckSender;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.BeforeClass;
@@ -47,4 +48,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosEventNotifierTest.java b/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosEventNotifierTest.java
index e7a1896..15c0745 100644
--- a/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosEventNotifierTest.java
+++ b/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosEventNotifierTest.java
@@ -19,7 +19,6 @@
 import com.googlecode.jsendnsca.MessagePayload;
 import com.googlecode.jsendnsca.NagiosPassiveCheckSender;
 import com.googlecode.jsendnsca.PassiveCheckSender;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
@@ -29,6 +28,7 @@
 import org.mockito.Mockito;
 
 import static org.mockito.Mockito.*;
+
 public class NagiosEventNotifierTest extends CamelTestSupport {
     protected boolean canRun;
 
diff --git a/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosTest.java b/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosTest.java
index ffbd4d6..749b486 100644
--- a/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosTest.java
+++ b/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosTest.java
@@ -35,7 +35,6 @@
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
-
 public class NagiosTest extends CamelTestSupport {
     @Mock
     protected static PassiveCheckSender nagiosPassiveCheckSender;
@@ -175,4 +174,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosXorEncryptionTest.java b/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosXorEncryptionTest.java
index bbe0e28..eb354d3 100644
--- a/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosXorEncryptionTest.java
+++ b/components/camel-nagios/src/test/java/org/apache/camel/component/nagios/NagiosXorEncryptionTest.java
@@ -82,4 +82,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java
index bcbba01..d046a8f 100644
--- a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java
+++ b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java
@@ -22,7 +22,6 @@
 import io.nats.client.Connection;
 import io.nats.client.Options;
 import io.nats.client.Options.Builder;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
diff --git a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConsumer.java b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConsumer.java
index 5c82148..1a0611a 100644
--- a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConsumer.java
+++ b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConsumer.java
@@ -24,7 +24,6 @@
 import io.nats.client.Dispatcher;
 import io.nats.client.Message;
 import io.nats.client.MessageHandler;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.support.DefaultConsumer;
diff --git a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java
index 536b641..d07b1fc 100644
--- a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java
+++ b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java
@@ -26,7 +26,6 @@
 import io.nats.client.Nats;
 import io.nats.client.Options;
 import io.nats.client.Options.Builder;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsProducer.java b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsProducer.java
index a3e16b6..a46eaff 100644
--- a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsProducer.java
+++ b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsProducer.java
@@ -20,7 +20,6 @@
 
 import io.nats.client.Connection;
 import io.nats.client.Connection.Status;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.camel.util.ObjectHelper;
diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthConsumerLoadTest.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthConsumerLoadTest.java
index 65043ce..5d7c9fd 100644
--- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthConsumerLoadTest.java
+++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthConsumerLoadTest.java
@@ -22,7 +22,6 @@
 import io.nats.client.Connection;
 import io.nats.client.Nats;
 import io.nats.client.Options;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTokenConsumerLoadTest.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTokenConsumerLoadTest.java
index d1b95fc..a2156b5 100644
--- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTokenConsumerLoadTest.java
+++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsAuthTokenConsumerLoadTest.java
@@ -22,7 +22,6 @@
 import io.nats.client.Connection;
 import io.nats.client.Nats;
 import io.nats.client.Options;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerLoadTest.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerLoadTest.java
index a69c126..3c0fc66 100644
--- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerLoadTest.java
+++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerLoadTest.java
@@ -22,7 +22,6 @@
 import io.nats.client.Connection;
 import io.nats.client.Nats;
 import io.nats.client.Options;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerWithConnectionLoadTest.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerWithConnectionLoadTest.java
index c87ea8b..61be2ba 100644
--- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerWithConnectionLoadTest.java
+++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerWithConnectionLoadTest.java
@@ -23,7 +23,6 @@
 import io.nats.client.Nats;
 import io.nats.client.Options;
 import io.nats.client.Options.Builder;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerWithRedeliveryTest.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerWithRedeliveryTest.java
index 706a9ab..1f965cc 100644
--- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerWithRedeliveryTest.java
+++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/NatsConsumerWithRedeliveryTest.java
@@ -19,7 +19,6 @@
 import java.io.IOException;
 
 import io.nats.client.Message;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.LoggingLevel;
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
index 6e9fd65..016a2f6 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/DefaultNettyHttpBinding.java
@@ -45,7 +45,6 @@
 import io.netty.handler.codec.http.HttpResponseStatus;
 import io.netty.handler.codec.http.HttpVersion;
 import io.netty.util.ReferenceCountUtil;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.RuntimeCamelException;
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/HttpServerInitializerFactory.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/HttpServerInitializerFactory.java
index ad6016e..232e34e 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/HttpServerInitializerFactory.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/HttpServerInitializerFactory.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.netty.http;
 
-
 import java.util.List;
 
 import javax.net.ssl.SSLContext;
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConverter.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConverter.java
index 8f57e5c..b5841bd 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConverter.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpConverter.java
@@ -28,7 +28,6 @@
 import org.apache.camel.component.netty.NettyConverter;
 import org.apache.camel.spi.TypeConverterRegistry;
 
-
 @Converter(generateLoader = true)
 public final class NettyHttpConverter {
 
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
index ffd5b84..80c666a 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
@@ -32,7 +32,6 @@
 import org.apache.camel.http.common.cookie.CookieHandler;
 import org.apache.camel.support.SynchronizationAdapter;
 
-
 /**
  * HTTP based {@link NettyProducer}.
  */
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/RestContextPathMatcher.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/RestContextPathMatcher.java
index 24d1cba..7f1d046 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/RestContextPathMatcher.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/RestContextPathMatcher.java
@@ -18,7 +18,6 @@
 
 import java.util.Locale;
 
-
 /**
  * A {@link org.apache.camel.component.netty.http.ContextPathMatcher} that supports the Rest DSL.
  */
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpInboundStreamHandler.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpInboundStreamHandler.java
index 6f07488..b8bde5f 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpInboundStreamHandler.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpInboundStreamHandler.java
@@ -94,4 +94,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
index 8e0ae91..eae645a 100644
--- a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
+++ b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/handlers/HttpServerMultiplexChannelHandler.java
@@ -125,7 +125,7 @@
             boolean isRestrictedToOptions = handler.getConsumer().getEndpoint().getHttpMethodRestrict() != null
                 && handler.getConsumer().getEndpoint().getHttpMethodRestrict().contains("OPTIONS");
             if ("OPTIONS".equals(request.method().name()) && !isRestrictedToOptions) {
-                String allowedMethods = CamelServlet.METHODS.stream().filter((m) -> isHttpMethodAllowed(request, m)).collect(Collectors.joining(","));
+                String allowedMethods = CamelServlet.METHODS.stream().filter(m -> isHttpMethodAllowed(request, m)).collect(Collectors.joining(","));
                 if (allowedMethods == null && handler.getConsumer().getEndpoint().getHttpMethodRestrict() != null) {
                     allowedMethods = handler.getConsumer().getEndpoint().getHttpMethodRestrict();
                 }
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthConstraintMapperTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthConstraintMapperTest.java
index 67d3b98..dbda9f7 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthConstraintMapperTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthConstraintMapperTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.netty.http;
+
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthTest.java
index 1a0e0f6..aa636d8 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBasicAuthTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.netty.http;
+
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingPreservePostFormUrlEncodedBodyTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingPreservePostFormUrlEncodedBodyTest.java
index f088993..44c9f29 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingPreservePostFormUrlEncodedBodyTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingPreservePostFormUrlEncodedBodyTest.java
@@ -23,7 +23,6 @@
 import org.apache.camel.component.http.HttpMethods;
 import org.junit.Test;
 
-
 public class NettyHttpBindingPreservePostFormUrlEncodedBodyTest extends BaseNettyTest {
 
     @Test
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingUseAbsolutePathTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingUseAbsolutePathTest.java
index d5c398d..31b2275 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingUseAbsolutePathTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingUseAbsolutePathTest.java
@@ -23,7 +23,6 @@
 import org.apache.camel.component.http.HttpMethods;
 import org.junit.Test;
 
-
 public class NettyHttpBindingUseAbsolutePathTest extends BaseNettyTest {
 
     @Test
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingUseRelativePathInPostTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingUseRelativePathInPostTest.java
index ebc196e..374e80f 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingUseRelativePathInPostTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingUseRelativePathInPostTest.java
@@ -23,7 +23,6 @@
 import org.apache.camel.component.http.HttpMethods;
 import org.junit.Test;
 
-
 public class NettyHttpBindingUseRelativePathInPostTest extends BaseNettyTest {
 
     @Test
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingUseRelativePathTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingUseRelativePathTest.java
index ca63850..c9108c7 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingUseRelativePathTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpBindingUseRelativePathTest.java
@@ -23,7 +23,6 @@
 import org.apache.camel.component.http.HttpMethods;
 import org.junit.Test;
 
-
 public class NettyHttpBindingUseRelativePathTest extends BaseNettyTest {
 
     @Test
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpCompressTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpCompressTest.java
index c31b5a3..1459bc2 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpCompressTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpCompressTest.java
@@ -24,7 +24,6 @@
 
 import io.netty.channel.ChannelHandler;
 import io.netty.handler.codec.http.HttpContentDecompressor;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpGetWithInvalidMessageTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpGetWithInvalidMessageTest.java
index 796dc40..8637110 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpGetWithInvalidMessageTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpGetWithInvalidMessageTest.java
@@ -22,7 +22,6 @@
 import io.netty.channel.ChannelHandler;
 import io.netty.handler.codec.string.StringDecoder;
 import io.netty.handler.codec.string.StringEncoder;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpHeaderFilterStrategyRemovalTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpHeaderFilterStrategyRemovalTest.java
index 1d6a5b2..8f15a61 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpHeaderFilterStrategyRemovalTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpHeaderFilterStrategyRemovalTest.java
@@ -16,14 +16,13 @@
  */
 package org.apache.camel.component.netty.http;
 
-import static java.util.Collections.singleton;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
+import static java.util.Collections.singleton;
 import static org.apache.camel.Exchange.HTTP_QUERY;
 
 public class NettyHttpHeaderFilterStrategyRemovalTest extends BaseNettyTest {
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSSLTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSSLTest.java
index 3dbd2b2..0dffdd8 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSSLTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSSLTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.netty.http;
+
 import java.net.URL;
 import java.util.Properties;
 
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthConstraintMapperTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthConstraintMapperTest.java
index adc3d3f7..034d5f3 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthConstraintMapperTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthConstraintMapperTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.netty.http;
+
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthTest.java
index 3b89fee..f5116c3 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSimpleBasicAuthTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.netty.http;
+
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.After;
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSwitchingStatus204Test.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSwitchingStatus204Test.java
index 8e593e9..9f88bc6 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSwitchingStatus204Test.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpSwitchingStatus204Test.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.netty.http;
 
 import io.netty.handler.codec.http.FullHttpResponse;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.http.HttpResponse;
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettySharedHttpServerTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettySharedHttpServerTest.java
index ceee47f..796b9da 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettySharedHttpServerTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettySharedHttpServerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.netty.http;
+
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.After;
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/ProxyProtocolTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/ProxyProtocolTest.java
index fbea956..f6c785f 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/ProxyProtocolTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/ProxyProtocolTest.java
@@ -35,7 +35,6 @@
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufAllocator;
 import io.netty.util.ResourceLeakDetector;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/SpringNettyHttpBasicAuthTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/SpringNettyHttpBasicAuthTest.java
index 393f2d8..277cfa8 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/SpringNettyHttpBasicAuthTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/SpringNettyHttpBasicAuthTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.netty.http;
+
 import javax.annotation.Resource;
 
 import org.apache.camel.CamelExecutionException;
diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/SpringNettyHttpSSLTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/SpringNettyHttpSSLTest.java
index ac0608e..fe9a8d5 100644
--- a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/SpringNettyHttpSSLTest.java
+++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/SpringNettyHttpSSLTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.netty.http;
+
 import java.net.URL;
 
 import javax.annotation.Resource;
diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/ChannelHandlerFactories.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/ChannelHandlerFactories.java
index 5f57284..7eff6a6 100644
--- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/ChannelHandlerFactories.java
+++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/ChannelHandlerFactories.java
@@ -39,7 +39,6 @@
 import org.apache.camel.component.netty.codec.ObjectDecoder;
 import org.apache.camel.component.netty.codec.ObjectEncoder;
 
-
 /**
  * Helper to create commonly used {@link ChannelHandlerFactory} instances.
  */
diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBootstrapFactory.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBootstrapFactory.java
index 82e6087..e27f8ca 100644
--- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBootstrapFactory.java
+++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBootstrapFactory.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.netty;
+
 import java.util.concurrent.ThreadFactory;
 
 import io.netty.channel.Channel;
diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBossPoolBuilder.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBossPoolBuilder.java
index 28a9ed4..2d91047 100644
--- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBossPoolBuilder.java
+++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBossPoolBuilder.java
@@ -21,7 +21,6 @@
 import io.netty.channel.nio.NioEventLoopGroup;
 import org.apache.camel.util.concurrent.CamelThreadFactory;
 
-
 /**
  * A builder to create Netty {@link io.netty.channel.EventLoopGroup} which can be used for executor boss events
  * with multiple Netty {@link org.apache.camel.component.netty.NettyServerBootstrapFactory} server bootstrap configurations.
diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/ServerInitializerFactory.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/ServerInitializerFactory.java
index 2b0be7b..f331f90 100644
--- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/ServerInitializerFactory.java
+++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/ServerInitializerFactory.java
@@ -20,7 +20,6 @@
 import io.netty.channel.ChannelInitializer;
 import io.netty.channel.ChannelPipeline;
 
-
 /**
  * Factory to create {@link ChannelPipeline} for servers, eg {@link NettyConsumer}.
  * <p/>
diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/codec/DatagramPacketObjectDecoder.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/codec/DatagramPacketObjectDecoder.java
index 8ba0cf1..69c1c48 100644
--- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/codec/DatagramPacketObjectDecoder.java
+++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/codec/DatagramPacketObjectDecoder.java
@@ -26,8 +26,6 @@
 import io.netty.handler.codec.MessageToMessageDecoder;
 import io.netty.handler.codec.serialization.ClassResolver;
 
-
-
 public class DatagramPacketObjectDecoder extends MessageToMessageDecoder<AddressedEnvelope<Object, InetSocketAddress>> {
 
     private final ObjectDecoder delegateDecoder;
diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/codec/ObjectDecoder.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/codec/ObjectDecoder.java
index db67a12..fb086a7 100644
--- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/codec/ObjectDecoder.java
+++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/codec/ObjectDecoder.java
@@ -20,7 +20,6 @@
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.handler.codec.serialization.ClassResolver;
 
-
 /**
  * Just expose the decode method for DatagramPacketObjectDecoder to use
  */
diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/codec/ObjectEncoder.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/codec/ObjectEncoder.java
index 21c2e15..6deaea0 100644
--- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/codec/ObjectEncoder.java
+++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/codec/ObjectEncoder.java
@@ -21,7 +21,6 @@
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandlerContext;
 
-
 /**
  * Just expose the encode method for DatagramPacketObjectEncoder to use
  */
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/BaseNettyTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/BaseNettyTest.java
index 669fcae..9316712 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/BaseNettyTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/BaseNettyTest.java
@@ -21,7 +21,6 @@
 
 import io.netty.buffer.ByteBufAllocator;
 import io.netty.util.ResourceLeakDetector;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.test.AvailablePortFinder;
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/MultipleCodecsTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/MultipleCodecsTest.java
index 1d52a81..46f342b 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/MultipleCodecsTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/MultipleCodecsTest.java
@@ -24,7 +24,6 @@
 import io.netty.handler.codec.LengthFieldPrepender;
 import io.netty.handler.codec.string.StringDecoder;
 import io.netty.handler.codec.string.StringEncoder;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyConsumerClientModeTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyConsumerClientModeTest.java
index 130e29a..a7a8ca1 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyConsumerClientModeTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyConsumerClientModeTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.netty;
 
-
 import io.netty.bootstrap.ServerBootstrap;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelFuture;
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomCodecTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomCodecTest.java
index a69458e..e20e07c 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomCodecTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomCodecTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.netty;
 
 import io.netty.channel.ChannelHandler;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.util.ObjectHelper;
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomCorrelationManagerTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomCorrelationManagerTest.java
index 07ae2ae..fe19d6b 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomCorrelationManagerTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomCorrelationManagerTest.java
@@ -18,7 +18,6 @@
 
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandlerContext;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomPipelineFactoryAsynchTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomPipelineFactoryAsynchTest.java
index 6f8a5b0..f68c206 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomPipelineFactoryAsynchTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomPipelineFactoryAsynchTest.java
@@ -23,7 +23,6 @@
 import io.netty.handler.codec.string.StringDecoder;
 import io.netty.handler.codec.string.StringEncoder;
 import io.netty.util.CharsetUtil;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomPipelineFactorySynchTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomPipelineFactorySynchTest.java
index c465c41..e10611b 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomPipelineFactorySynchTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyCustomPipelineFactorySynchTest.java
@@ -23,7 +23,6 @@
 import io.netty.handler.codec.string.StringDecoder;
 import io.netty.handler.codec.string.StringEncoder;
 import io.netty.util.CharsetUtil;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyRedeliveryTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyRedeliveryTest.java
index 5ee7fcd..8829d9d 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyRedeliveryTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyRedeliveryTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.netty;
+
 import java.io.IOException;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLConsumerClientModeTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLConsumerClientModeTest.java
index 3ef6871..966bb7a 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLConsumerClientModeTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySSLConsumerClientModeTest.java
@@ -48,7 +48,6 @@
 import io.netty.handler.codec.string.StringDecoder;
 import io.netty.handler.codec.string.StringEncoder;
 import io.netty.handler.ssl.SslHandler;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySingleCodecTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySingleCodecTest.java
index 534d4fa..106c7c7 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySingleCodecTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettySingleCodecTest.java
@@ -20,7 +20,6 @@
 
 import io.netty.handler.codec.string.StringDecoder;
 import io.netty.handler.codec.string.StringEncoder;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUDPMessageLargerThanDefaultBufferSizeTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUDPMessageLargerThanDefaultBufferSizeTest.java
index 4b39df2..d2a65b4 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUDPMessageLargerThanDefaultBufferSizeTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUDPMessageLargerThanDefaultBufferSizeTest.java
@@ -18,7 +18,6 @@
 
 import io.netty.channel.ChannelOption;
 import io.netty.channel.FixedRecvByteBufAllocator;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUseSharedWorkerThreadPoolManyRoutesTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUseSharedWorkerThreadPoolManyRoutesTest.java
index 6437e9e..72c40c1 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUseSharedWorkerThreadPoolManyRoutesTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUseSharedWorkerThreadPoolManyRoutesTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.netty;
 
 import io.netty.channel.EventLoopGroup;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Before;
diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUseSharedWorkerThreadPoolTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUseSharedWorkerThreadPoolTest.java
index 185a706..90d6426 100644
--- a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUseSharedWorkerThreadPoolTest.java
+++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUseSharedWorkerThreadPoolTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.netty;
 
 import io.netty.channel.EventLoopGroup;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
diff --git a/components/camel-nitrite/src/main/java/org/apache/camel/component/nitrite/NitriteProducer.java b/components/camel-nitrite/src/main/java/org/apache/camel/component/nitrite/NitriteProducer.java
index c89817c..41a9165 100644
--- a/components/camel-nitrite/src/main/java/org/apache/camel/component/nitrite/NitriteProducer.java
+++ b/components/camel-nitrite/src/main/java/org/apache/camel/component/nitrite/NitriteProducer.java
@@ -34,7 +34,7 @@
 public class NitriteProducer extends DefaultProducer {
     private static final Logger LOG = LoggerFactory.getLogger(NitriteProducer.class);
     private NitriteEndpoint endpoint;
-    private Consumer<AbstractNitriteOperation> operationValidator = (noop) -> { };
+    private Consumer<AbstractNitriteOperation> operationValidator = noop -> { };
 
     public NitriteProducer(NitriteEndpoint endpoint) {
         super(endpoint);
diff --git a/components/camel-nitrite/src/main/java/org/apache/camel/component/nitrite/operation/repository/UpdateRepositoryOperation.java b/components/camel-nitrite/src/main/java/org/apache/camel/component/nitrite/operation/repository/UpdateRepositoryOperation.java
index 5f78dd8..d9ff6df 100644
--- a/components/camel-nitrite/src/main/java/org/apache/camel/component/nitrite/operation/repository/UpdateRepositoryOperation.java
+++ b/components/camel-nitrite/src/main/java/org/apache/camel/component/nitrite/operation/repository/UpdateRepositoryOperation.java
@@ -22,7 +22,6 @@
 import org.apache.camel.component.nitrite.NitriteEndpoint;
 import org.apache.camel.component.nitrite.operation.AbstractPayloadAwareOperation;
 import org.apache.camel.component.nitrite.operation.RepositoryOperation;
-import org.dizitart.no2.Document;
 import org.dizitart.no2.objects.ObjectFilter;
 import org.dizitart.no2.objects.ObjectRepository;
 
diff --git a/components/camel-nitrite/src/test/java/org/apache/camel/component/nitrite/NitriteProducerCollectionTest.java b/components/camel-nitrite/src/test/java/org/apache/camel/component/nitrite/NitriteProducerCollectionTest.java
index 0633d25..8562385 100644
--- a/components/camel-nitrite/src/test/java/org/apache/camel/component/nitrite/NitriteProducerCollectionTest.java
+++ b/components/camel-nitrite/src/test/java/org/apache/camel/component/nitrite/NitriteProducerCollectionTest.java
@@ -35,7 +35,6 @@
 import org.apache.camel.component.nitrite.operation.common.UpdateOperation;
 import org.apache.camel.component.nitrite.operation.common.UpsertOperation;
 import org.apache.camel.component.nitrite.operation.repository.FindRepositoryOperation;
-import org.apache.camel.component.nitrite.operation.repository.UpdateRepositoryOperation;
 import org.apache.camel.support.DefaultExchange;
 import org.apache.camel.util.FileUtil;
 import org.dizitart.no2.Document;
diff --git a/components/camel-nsq/src/main/java/org/apache/camel/component/nsq/NsqSynchronization.java b/components/camel-nsq/src/main/java/org/apache/camel/component/nsq/NsqSynchronization.java
index 1bfa5fc..ddfdb2e 100644
--- a/components/camel-nsq/src/main/java/org/apache/camel/component/nsq/NsqSynchronization.java
+++ b/components/camel-nsq/src/main/java/org/apache/camel/component/nsq/NsqSynchronization.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.nsq;
 
 import com.github.brainlag.nsq.NSQMessage;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.support.SynchronizationAdapter;
 
diff --git a/components/camel-nsq/src/test/java/org/apache/camel/component/nsq/NsqConsumerTest.java b/components/camel-nsq/src/test/java/org/apache/camel/component/nsq/NsqConsumerTest.java
index 8d836d9..7712810 100644
--- a/components/camel-nsq/src/test/java/org/apache/camel/component/nsq/NsqConsumerTest.java
+++ b/components/camel-nsq/src/test/java/org/apache/camel/component/nsq/NsqConsumerTest.java
@@ -20,7 +20,6 @@
 
 import com.github.brainlag.nsq.NSQProducer;
 import com.github.brainlag.nsq.exceptions.NSQException;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-nsq/src/test/java/org/apache/camel/component/nsq/NsqProducerTest.java b/components/camel-nsq/src/test/java/org/apache/camel/component/nsq/NsqProducerTest.java
index 36d82d1..810b835 100644
--- a/components/camel-nsq/src/test/java/org/apache/camel/component/nsq/NsqProducerTest.java
+++ b/components/camel-nsq/src/test/java/org/apache/camel/component/nsq/NsqProducerTest.java
@@ -23,7 +23,6 @@
 import com.github.brainlag.nsq.NSQConsumer;
 import com.github.brainlag.nsq.lookup.DefaultNSQLookup;
 import com.github.brainlag.nsq.lookup.NSQLookup;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
 
@@ -43,7 +42,7 @@
         NSQLookup lookup = new DefaultNSQLookup();
         lookup.addLookupAddress("localhost", 4161);
 
-        NSQConsumer consumer = new NSQConsumer(lookup, "test", "testconsumer", (message) -> {
+        NSQConsumer consumer = new NSQConsumer(lookup, "test", "testconsumer", message -> {
             counter.incrementAndGet();
             message.finished();
             lock.countDown();
@@ -70,7 +69,7 @@
         NSQLookup lookup = new DefaultNSQLookup();
         lookup.addLookupAddress("localhost", 4161);
 
-        NSQConsumer consumer = new NSQConsumer(lookup, "test", "testconsumer", (message) -> {
+        NSQConsumer consumer = new NSQConsumer(lookup, "test", "testconsumer", message -> {
             counter.incrementAndGet();
             message.finished();
             lock.countDown();
diff --git a/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/CamelClassResolver.java b/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/CamelClassResolver.java
index d399063..272b89b 100644
--- a/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/CamelClassResolver.java
+++ b/components/camel-ognl/src/main/java/org/apache/camel/language/ognl/CamelClassResolver.java
@@ -19,6 +19,7 @@
 import java.util.Map;
 
 import ognl.ClassResolver;
+
 /**
  * This class is used to wrap the org.apache.camel.spi.ClassResolver with ClassResolver interface
  */
diff --git a/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/impl/Olingo2AppImpl.java b/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/impl/Olingo2AppImpl.java
index ed532e6f..ae07b85 100644
--- a/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/impl/Olingo2AppImpl.java
+++ b/components/camel-olingo2/camel-olingo2-api/src/main/java/org/apache/camel/component/olingo2/api/impl/Olingo2AppImpl.java
@@ -37,6 +37,7 @@
 import java.util.Optional;
 import java.util.UUID;
 import java.util.function.Consumer;
+
 import org.apache.camel.component.olingo2.api.Olingo2App;
 import org.apache.camel.component.olingo2.api.Olingo2ResponseHandler;
 import org.apache.camel.component.olingo2.api.batch.Olingo2BatchChangeRequest;
@@ -340,7 +341,7 @@
     public void delete(final String resourcePath, final Map<String, String> endpointHttpHeaders, final Olingo2ResponseHandler<HttpStatusCodes> responseHandler) {
         HttpDelete deleteRequest = new HttpDelete(createUri(resourcePath));
 
-        Consumer<HttpRequestBase> deleteFunction = (request) -> {
+        Consumer<HttpRequestBase> deleteFunction = request -> {
             execute(request, contentType, endpointHttpHeaders, new AbstractFutureCallback<HttpStatusCodes>(responseHandler) {
                 @Override
                 public void onCompleted(HttpResponse result) {
diff --git a/components/camel-olingo2/camel-olingo2-component/src/main/java/org/apache/camel/component/olingo2/Olingo2Consumer.java b/components/camel-olingo2/camel-olingo2-component/src/main/java/org/apache/camel/component/olingo2/Olingo2Consumer.java
index e16bc62..4077ff8 100644
--- a/components/camel-olingo2/camel-olingo2-component/src/main/java/org/apache/camel/component/olingo2/Olingo2Consumer.java
+++ b/components/camel-olingo2/camel-olingo2-component/src/main/java/org/apache/camel/component/olingo2/Olingo2Consumer.java
@@ -21,6 +21,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
diff --git a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/AbstractOlingo2AppAPITestSupport.java b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/AbstractOlingo2AppAPITestSupport.java
index 2bf45ec..be1af95 100644
--- a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/AbstractOlingo2AppAPITestSupport.java
+++ b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/AbstractOlingo2AppAPITestSupport.java
@@ -25,6 +25,7 @@
 import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.component.olingo2.api.Olingo2ResponseHandler;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.http.entity.ContentType;
diff --git a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppAPIETagEnabledTest.java b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppAPIETagEnabledTest.java
index 2aaa0cb..c72fe0f 100644
--- a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppAPIETagEnabledTest.java
+++ b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppAPIETagEnabledTest.java
@@ -18,7 +18,9 @@
 
 import java.io.InputStream;
 import java.util.Map;
+
 import javax.ws.rs.HttpMethod;
+
 import okhttp3.HttpUrl;
 import okhttp3.mockwebserver.Dispatcher;
 import okhttp3.mockwebserver.MockResponse;
diff --git a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppAPITest.java b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppAPITest.java
index 210df3d..04dda9b 100644
--- a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppAPITest.java
+++ b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2AppAPITest.java
@@ -24,6 +24,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.component.olingo2.api.Olingo2App;
 import org.apache.camel.component.olingo2.api.batch.Olingo2BatchChangeRequest;
 import org.apache.camel.component.olingo2.api.batch.Olingo2BatchQueryRequest;
@@ -45,6 +46,7 @@
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
diff --git a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2ComponentConsumerTest.java b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2ComponentConsumerTest.java
index 64e8726..3a22139 100644
--- a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2ComponentConsumerTest.java
+++ b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2ComponentConsumerTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.olingo2;
 
 import java.util.Map;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.AvailablePortFinder;
diff --git a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2ComponentProducerTest.java b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2ComponentProducerTest.java
index cd0483c..d351e57 100644
--- a/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2ComponentProducerTest.java
+++ b/components/camel-olingo2/camel-olingo2-component/src/test/java/org/apache/camel/component/olingo2/Olingo2ComponentProducerTest.java
@@ -21,6 +21,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.olingo2.api.batch.Olingo2BatchChangeRequest;
diff --git a/components/camel-olingo4/camel-olingo4-api/src/main/java/org/apache/camel/component/olingo4/api/impl/Olingo4AppImpl.java b/components/camel-olingo4/camel-olingo4-api/src/main/java/org/apache/camel/component/olingo4/api/impl/Olingo4AppImpl.java
index 57a2432..fe7dbf5 100644
--- a/components/camel-olingo4/camel-olingo4-api/src/main/java/org/apache/camel/component/olingo4/api/impl/Olingo4AppImpl.java
+++ b/components/camel-olingo4/camel-olingo4-api/src/main/java/org/apache/camel/component/olingo4/api/impl/Olingo4AppImpl.java
@@ -292,7 +292,7 @@
     public void delete(final String resourcePath, final Map<String, String> endpointHttpHeaders, final Olingo4ResponseHandler<HttpStatusCode> responseHandler) {
         HttpDelete deleteRequest = new HttpDelete(createUri(resourcePath));
 
-        Consumer<HttpRequestBase> deleteFunction = (request) -> {
+        Consumer<HttpRequestBase> deleteFunction = request -> {
             execute(request, contentType, endpointHttpHeaders, new AbstractFutureCallback<HttpStatusCode>(responseHandler) {
                 @Override
                 public void onCompleted(HttpResponse result) {
diff --git a/components/camel-olingo4/camel-olingo4-api/src/test/java/org/apache/camel/component/olingo4/Olingo4AppAPITest.java b/components/camel-olingo4/camel-olingo4-api/src/test/java/org/apache/camel/component/olingo4/Olingo4AppAPITest.java
index 66f7e2ef..d3b89d7 100644
--- a/components/camel-olingo4/camel-olingo4-api/src/test/java/org/apache/camel/component/olingo4/Olingo4AppAPITest.java
+++ b/components/camel-olingo4/camel-olingo4-api/src/test/java/org/apache/camel/component/olingo4/Olingo4AppAPITest.java
@@ -30,6 +30,7 @@
 import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.component.olingo4.api.Olingo4App;
 import org.apache.camel.component.olingo4.api.Olingo4ResponseHandler;
 import org.apache.camel.component.olingo4.api.batch.Olingo4BatchChangeRequest;
diff --git a/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Configuration.java b/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Configuration.java
index 0a519b8..82a48eb 100644
--- a/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Configuration.java
+++ b/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Configuration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.olingo4;
 
 import java.util.Map;
+
 import org.apache.camel.component.olingo4.internal.Olingo4ApiName;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Consumer.java b/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Consumer.java
index 3fcb9b9..0b99ba0 100644
--- a/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Consumer.java
+++ b/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Consumer.java
@@ -21,6 +21,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
diff --git a/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Producer.java b/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Producer.java
index bebb619..37f0c01 100644
--- a/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Producer.java
+++ b/components/camel-olingo4/camel-olingo4-component/src/main/java/org/apache/camel/component/olingo4/Olingo4Producer.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.RuntimeCamelException;
diff --git a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentConsumerTest.java b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentConsumerTest.java
index e53e2f8..58af1e2 100644
--- a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentConsumerTest.java
+++ b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentConsumerTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.olingo4;
 
 import java.util.Iterator;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.olingo.client.api.domain.ClientCollectionValue;
diff --git a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentProducerTest.java b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentProducerTest.java
index 07079bb..0aa24de 100644
--- a/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentProducerTest.java
+++ b/components/camel-olingo4/camel-olingo4-component/src/test/java/org/apache/camel/component/olingo4/Olingo4ComponentProducerTest.java
@@ -21,6 +21,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-openstack/src/main/java/org/apache/camel/component/openstack/keystone/producer/AbstractKeystoneProducer.java b/components/camel-openstack/src/main/java/org/apache/camel/component/openstack/keystone/producer/AbstractKeystoneProducer.java
index 382f277..baaea1d 100644
--- a/components/camel-openstack/src/main/java/org/apache/camel/component/openstack/keystone/producer/AbstractKeystoneProducer.java
+++ b/components/camel-openstack/src/main/java/org/apache/camel/component/openstack/keystone/producer/AbstractKeystoneProducer.java
@@ -20,7 +20,6 @@
 import org.apache.camel.component.openstack.common.AbstractOpenstackProducer;
 import org.openstack4j.api.OSClient;
 
-
 public abstract class AbstractKeystoneProducer extends AbstractOpenstackProducer {
 
     OSClient.OSClientV3 osV3Client;
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/ActiveSpanManager.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/ActiveSpanManager.java
index 8019931..50be44d 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/ActiveSpanManager.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/ActiveSpanManager.java
@@ -17,7 +17,6 @@
 package org.apache.camel.opentracing;
 
 import io.opentracing.Span;
-
 import org.apache.camel.Exchange;
 
 /**
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CqlSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CqlSpanDecorator.java
index c3d6268..e4fbf33 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CqlSpanDecorator.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CqlSpanDecorator.java
@@ -21,7 +21,6 @@
 
 import io.opentracing.Span;
 import io.opentracing.tag.Tags;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecorator.java
index 328281a..9f8721c 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecorator.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecorator.java
@@ -20,7 +20,6 @@
 
 import io.opentracing.Span;
 import io.opentracing.tag.Tags;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JdbcSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JdbcSpanDecorator.java
index 32e3f1a..5611d19 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JdbcSpanDecorator.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/JdbcSpanDecorator.java
@@ -18,7 +18,6 @@
 
 import io.opentracing.Span;
 import io.opentracing.tag.Tags;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/KafkaSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/KafkaSpanDecorator.java
index 3cbe8fa..becdb5d 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/KafkaSpanDecorator.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/KafkaSpanDecorator.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import io.opentracing.Span;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecorator.java
index 423e5a5..20c15e5 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecorator.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecorator.java
@@ -20,7 +20,6 @@
 
 import io.opentracing.Span;
 import io.opentracing.tag.Tags;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RestSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RestSpanDecorator.java
index d1fbadc..b389555 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RestSpanDecorator.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/RestSpanDecorator.java
@@ -23,7 +23,6 @@
 import java.util.List;
 
 import io.opentracing.Span;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.slf4j.Logger;
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SqlSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SqlSpanDecorator.java
index 37033fd..72c2b89 100644
--- a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SqlSpanDecorator.java
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/SqlSpanDecorator.java
@@ -18,7 +18,6 @@
 
 import io.opentracing.Span;
 import io.opentracing.tag.Tags;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/ActiveSpanManagerTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/ActiveSpanManagerTest.java
index 274840e..3a44570 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/ActiveSpanManagerTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/ActiveSpanManagerTest.java
@@ -18,7 +18,6 @@
 
 import io.opentracing.Span;
 import io.opentracing.mock.MockTracer;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.test.junit4.ExchangeTestSupport;
 import org.junit.Test;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/OpentracingSpanCollectorInRegistryTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/OpentracingSpanCollectorInRegistryTest.java
index c93fc6d..9fcc19d 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/OpentracingSpanCollectorInRegistryTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/OpentracingSpanCollectorInRegistryTest.java
@@ -18,7 +18,6 @@
 
 import io.opentracing.noop.NoopTracer;
 import io.opentracing.noop.NoopTracerFactory;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TwoServiceWithExcludeTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TwoServiceWithExcludeTest.java
index be987b2..c76ecea 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TwoServiceWithExcludeTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/TwoServiceWithExcludeTest.java
@@ -20,7 +20,6 @@
 import java.util.Set;
 
 import io.opentracing.tag.Tags;
-
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/agent/InstallOpenTracingTracerRuleTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/agent/InstallOpenTracingTracerRuleTest.java
index d1ace717..c549810 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/agent/InstallOpenTracingTracerRuleTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/agent/InstallOpenTracingTracerRuleTest.java
@@ -22,7 +22,6 @@
 import io.opentracing.mock.MockTracer;
 import io.opentracing.mock.MockTracer.Propagator;
 import io.opentracing.tag.Tags;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CqlSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CqlSpanDecoratorTest.java
index f71ec3e..e85c68f 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CqlSpanDecoratorTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CqlSpanDecoratorTest.java
@@ -19,7 +19,6 @@
 import io.opentracing.mock.MockSpan;
 import io.opentracing.mock.MockTracer;
 import io.opentracing.tag.Tags;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecoratorTest.java
index 5c7fca5..b2d84a0 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecoratorTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecoratorTest.java
@@ -19,7 +19,6 @@
 import io.opentracing.mock.MockSpan;
 import io.opentracing.mock.MockTracer;
 import io.opentracing.tag.Tags;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JdbcSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JdbcSpanDecoratorTest.java
index b48c1a7..7356364 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JdbcSpanDecoratorTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/JdbcSpanDecoratorTest.java
@@ -19,7 +19,6 @@
 import io.opentracing.mock.MockSpan;
 import io.opentracing.mock.MockTracer;
 import io.opentracing.tag.Tags;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/KafkaSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/KafkaSpanDecoratorTest.java
index ad8ea68..d46c758 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/KafkaSpanDecoratorTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/KafkaSpanDecoratorTest.java
@@ -18,7 +18,6 @@
 
 import io.opentracing.mock.MockSpan;
 import io.opentracing.mock.MockTracer;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecoratorTest.java
index cab5519..07cd441 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecoratorTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/MongoDBSpanDecoratorTest.java
@@ -21,7 +21,6 @@
 import io.opentracing.mock.MockSpan;
 import io.opentracing.mock.MockTracer;
 import io.opentracing.tag.Tags;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.opentracing.SpanDecorator;
 import org.junit.Test;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/RestSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/RestSpanDecoratorTest.java
index cab057c..7099055 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/RestSpanDecoratorTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/RestSpanDecoratorTest.java
@@ -20,7 +20,6 @@
 
 import io.opentracing.mock.MockSpan;
 import io.opentracing.mock.MockTracer;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/SqlSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/SqlSpanDecoratorTest.java
index 3c1abea..26849dd 100644
--- a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/SqlSpanDecoratorTest.java
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/SqlSpanDecoratorTest.java
@@ -19,7 +19,6 @@
 import io.opentracing.mock.MockSpan;
 import io.opentracing.mock.MockTracer;
 import io.opentracing.tag.Tags;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoConfiguration.java b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoConfiguration.java
index 0d5239c..8ca63c1 100644
--- a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoConfiguration.java
+++ b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.paho;
 
 import java.util.Properties;
+
 import javax.net.SocketFactory;
 import javax.net.ssl.HostnameVerifier;
 
diff --git a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/PdfProducer.java b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/PdfProducer.java
index 5ad1157..d51d159 100644
--- a/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/PdfProducer.java
+++ b/components/camel-pdf/src/main/java/org/apache/camel/component/pdf/PdfProducer.java
@@ -142,4 +142,4 @@
         }
         return result;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfCreationTest.java b/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfCreationTest.java
index 81541de..31cea45 100644
--- a/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfCreationTest.java
+++ b/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/PdfCreationTest.java
@@ -120,4 +120,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/text/PatternSplitStrategyTest.java b/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/text/PatternSplitStrategyTest.java
index 049e47a..18f1d14 100644
--- a/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/text/PatternSplitStrategyTest.java
+++ b/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/text/PatternSplitStrategyTest.java
@@ -33,4 +33,4 @@
         assertEquals(2, split.size());
         assertEquals("world", new ArrayList<>(split).get(1));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/text/WordSplitStrategyTest.java b/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/text/WordSplitStrategyTest.java
index b05372a..8b9cddc 100644
--- a/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/text/WordSplitStrategyTest.java
+++ b/components/camel-pdf/src/test/java/org/apache/camel/component/pdf/text/WordSplitStrategyTest.java
@@ -33,4 +33,4 @@
         assertEquals(4, split.size());
         assertEquals("Bar", new ArrayList<>(split).get(3));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventEndpoint.java b/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventEndpoint.java
index 9b60186..88fe3a4 100644
--- a/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventEndpoint.java
+++ b/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventEndpoint.java
@@ -17,11 +17,11 @@
 package org.apache.camel.component.pgevent;
 
 import java.sql.DriverManager;
+
 import javax.sql.DataSource;
 
 import com.impossibl.postgres.api.jdbc.PGConnection;
 import com.impossibl.postgres.jdbc.PGDriver;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventProducer.java b/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventProducer.java
index 692ff99..7038a9a 100644
--- a/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventProducer.java
+++ b/components/camel-pgevent/src/main/java/org/apache/camel/component/pgevent/PgEventProducer.java
@@ -20,7 +20,6 @@
 import java.sql.PreparedStatement;
 
 import com.impossibl.postgres.api.jdbc.PGConnection;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.support.DefaultProducer;
 
diff --git a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventConsumerTest.java b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventConsumerTest.java
index c6b5026..fa39c62 100644
--- a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventConsumerTest.java
+++ b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventConsumerTest.java
@@ -20,7 +20,6 @@
 
 import com.impossibl.postgres.api.jdbc.PGConnection;
 import com.impossibl.postgres.jdbc.PGDataSource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
diff --git a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventHelperTest.java b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventHelperTest.java
index 9c4b347..5bfe2a9 100644
--- a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventHelperTest.java
+++ b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventHelperTest.java
@@ -19,13 +19,13 @@
 import java.sql.Connection;
 
 import com.impossibl.postgres.api.jdbc.PGConnection;
-
 import org.apache.camel.component.pgevent.PgEventHelper;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.mockito.junit.MockitoJUnitRunner;
+
 import static org.junit.Assert.assertSame;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
diff --git a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventProducerTest.java b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventProducerTest.java
index 1389cd5..d2dc345 100644
--- a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventProducerTest.java
+++ b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/PgEventProducerTest.java
@@ -22,7 +22,6 @@
 
 import com.impossibl.postgres.api.jdbc.PGConnection;
 import com.impossibl.postgres.jdbc.PGDataSource;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.component.pgevent.InvalidStateException;
diff --git a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/integration/PgEventWithDefinedDatasourceIntegrationTest.java b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/integration/PgEventWithDefinedDatasourceIntegrationTest.java
index 3737b2a..4ecbcac 100644
--- a/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/integration/PgEventWithDefinedDatasourceIntegrationTest.java
+++ b/components/camel-pgevent/src/test/java/org/apache/camel/pgevent/integration/PgEventWithDefinedDatasourceIntegrationTest.java
@@ -19,7 +19,6 @@
 import java.util.Properties;
 
 import com.impossibl.postgres.jdbc.PGDataSource;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
diff --git a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrintDocument.java b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrintDocument.java
index 25b7f02..f447630 100644
--- a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrintDocument.java
+++ b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrintDocument.java
@@ -21,6 +21,7 @@
 import java.io.InputStream;
 import java.io.Reader;
 import java.io.StringReader;
+
 import javax.print.Doc;
 import javax.print.DocFlavor;
 import javax.print.attribute.DocAttributeSet;
diff --git a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterConfiguration.java b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterConfiguration.java
index 01b2a2d..9be5b8b 100644
--- a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterConfiguration.java
+++ b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterConfiguration.java
@@ -19,6 +19,7 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Map;
+
 import javax.print.DocFlavor;
 import javax.print.attribute.standard.MediaSizeName;
 import javax.print.attribute.standard.OrientationRequested;
diff --git a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperations.java b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperations.java
index 0fa9df4..c43da3e 100644
--- a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperations.java
+++ b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterOperations.java
@@ -21,6 +21,7 @@
 import java.io.InputStream;
 import java.util.Locale;
 import java.util.UUID;
+
 import javax.print.Doc;
 import javax.print.DocFlavor;
 import javax.print.DocPrintJob;
diff --git a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java
index fec18c3..1a943df 100644
--- a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java
+++ b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterProducer.java
@@ -18,6 +18,7 @@
 
 import java.io.InputStream;
 import java.util.Locale;
+
 import javax.print.DocFlavor;
 import javax.print.PrintException;
 import javax.print.PrintService;
diff --git a/components/camel-protobuf/src/test/java/org/apache/camel/dataformat/protobuf/ProtobufConverterTest.java b/components/camel-protobuf/src/test/java/org/apache/camel/dataformat/protobuf/ProtobufConverterTest.java
index b7f22e4..94ac420 100644
--- a/components/camel-protobuf/src/test/java/org/apache/camel/dataformat/protobuf/ProtobufConverterTest.java
+++ b/components/camel-protobuf/src/test/java/org/apache/camel/dataformat/protobuf/ProtobufConverterTest.java
@@ -98,4 +98,4 @@
         final AddressBookProtos.Person message = (AddressBookProtos.Person) protobufConverter.toProto(input);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-protobuf/src/test/java/org/apache/camel/dataformat/protobuf/ProtobufMarshalAndUnmarshalSpringTest.java b/components/camel-protobuf/src/test/java/org/apache/camel/dataformat/protobuf/ProtobufMarshalAndUnmarshalSpringTest.java
index df40510..a953004 100644
--- a/components/camel-protobuf/src/test/java/org/apache/camel/dataformat/protobuf/ProtobufMarshalAndUnmarshalSpringTest.java
+++ b/components/camel-protobuf/src/test/java/org/apache/camel/dataformat/protobuf/ProtobufMarshalAndUnmarshalSpringTest.java
@@ -23,7 +23,6 @@
 import org.apache.camel.dataformat.protobuf.generated.AddressBookProtos;
 import org.apache.camel.dataformat.protobuf.generated.AddressBookProtos.Person;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
-
 import org.junit.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
diff --git a/components/camel-pubnub/src/main/java/org/apache/camel/component/pubnub/PubNubConsumer.java b/components/camel-pubnub/src/main/java/org/apache/camel/component/pubnub/PubNubConsumer.java
index 2688caa..e0c6aee 100644
--- a/components/camel-pubnub/src/main/java/org/apache/camel/component/pubnub/PubNubConsumer.java
+++ b/components/camel-pubnub/src/main/java/org/apache/camel/component/pubnub/PubNubConsumer.java
@@ -23,7 +23,6 @@
 import com.pubnub.api.models.consumer.PNStatus;
 import com.pubnub.api.models.consumer.pubsub.PNMessageResult;
 import com.pubnub.api.models.consumer.pubsub.PNPresenceEventResult;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
@@ -31,7 +30,6 @@
 
 import static com.pubnub.api.enums.PNStatusCategory.PNTimeoutCategory;
 import static com.pubnub.api.enums.PNStatusCategory.PNUnexpectedDisconnectCategory;
-
 import static org.apache.camel.component.pubnub.PubNubConstants.CHANNEL;
 import static org.apache.camel.component.pubnub.PubNubConstants.TIMETOKEN;
 
diff --git a/components/camel-pubnub/src/main/java/org/apache/camel/component/pubnub/PubNubEndpoint.java b/components/camel-pubnub/src/main/java/org/apache/camel/component/pubnub/PubNubEndpoint.java
index ec821b66..45ccc7c 100644
--- a/components/camel-pubnub/src/main/java/org/apache/camel/component/pubnub/PubNubEndpoint.java
+++ b/components/camel-pubnub/src/main/java/org/apache/camel/component/pubnub/PubNubEndpoint.java
@@ -18,7 +18,6 @@
 
 import com.pubnub.api.PNConfiguration;
 import com.pubnub.api.PubNub;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-pubnub/src/main/java/org/apache/camel/component/pubnub/PubNubProducer.java b/components/camel-pubnub/src/main/java/org/apache/camel/component/pubnub/PubNubProducer.java
index 73c71bc..6d0c5f3 100644
--- a/components/camel-pubnub/src/main/java/org/apache/camel/component/pubnub/PubNubProducer.java
+++ b/components/camel-pubnub/src/main/java/org/apache/camel/component/pubnub/PubNubProducer.java
@@ -28,7 +28,6 @@
 import com.pubnub.api.models.consumer.presence.PNHereNowResult;
 import com.pubnub.api.models.consumer.presence.PNSetStateResult;
 import com.pubnub.api.models.consumer.presence.PNWhereNowResult;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.CamelException;
 import org.apache.camel.Exchange;
diff --git a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubFireTest.java b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubFireTest.java
index 05b8021..aeb6cab 100644
--- a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubFireTest.java
+++ b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubFireTest.java
@@ -25,7 +25,6 @@
 import static com.github.tomakehurst.wiremock.client.WireMock.get;
 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
-
 import static org.apache.camel.component.pubnub.PubNubConstants.TIMETOKEN;
 
 public class PubNubFireTest extends PubNubTestBase {
diff --git a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubOperationsTest.java b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubOperationsTest.java
index eb77303..c2303e4 100644
--- a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubOperationsTest.java
+++ b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubOperationsTest.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.component.pubnub;
 
-
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -27,7 +25,6 @@
 import com.pubnub.api.models.consumer.presence.PNGetStateResult;
 import com.pubnub.api.models.consumer.presence.PNHereNowResult;
 import com.pubnub.api.models.consumer.presence.PNSetStateResult;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
 
diff --git a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubPresenceTest.java b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubPresenceTest.java
index a3864ea..ff6a579 100644
--- a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubPresenceTest.java
+++ b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubPresenceTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.pubnub;
 
 import com.pubnub.api.models.consumer.pubsub.PNPresenceEventResult;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -27,10 +26,8 @@
 import static com.github.tomakehurst.wiremock.client.WireMock.get;
 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
-
 import static org.hamcrest.CoreMatchers.equalTo;
 
-
 public class PubNubPresenceTest extends PubNubTestBase {
 
     @EndpointInject("mock:result")
diff --git a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubPublishTest.java b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubPublishTest.java
index 614858e..5d16314 100644
--- a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubPublishTest.java
+++ b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubPublishTest.java
@@ -27,7 +27,6 @@
 import static com.github.tomakehurst.wiremock.client.WireMock.post;
 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
-
 import static org.apache.camel.component.pubnub.PubNubConstants.TIMETOKEN;
 
 public class PubNubPublishTest extends PubNubTestBase {
diff --git a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubSubscriberTest.java b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubSubscriberTest.java
index 27aacc9..22135ab 100644
--- a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubSubscriberTest.java
+++ b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubSubscriberTest.java
@@ -26,7 +26,6 @@
 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
 
-
 public class PubNubSubscriberTest extends PubNubTestBase {
 
     @EndpointInject("mock:result")
diff --git a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubTestBase.java b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubTestBase.java
index f44e3ca..feca647 100644
--- a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubTestBase.java
+++ b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/PubNubTestBase.java
@@ -22,7 +22,6 @@
 import com.pubnub.api.PNConfiguration;
 import com.pubnub.api.PubNub;
 import com.pubnub.api.enums.PNLogVerbosity;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/example/PubNubSensor2Example.java b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/example/PubNubSensor2Example.java
index 1e034f9..d5055f6 100644
--- a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/example/PubNubSensor2Example.java
+++ b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/example/PubNubSensor2Example.java
@@ -22,7 +22,6 @@
 import java.util.concurrent.ConcurrentHashMap;
 
 import com.pubnub.api.models.consumer.pubsub.PNMessageResult;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/example/PubNubStateExample.java b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/example/PubNubStateExample.java
index ac150e6..071af53 100644
--- a/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/example/PubNubStateExample.java
+++ b/components/camel-pubnub/src/test/java/org/apache/camel/component/pubnub/example/PubNubStateExample.java
@@ -21,7 +21,6 @@
 
 import com.pubnub.api.models.consumer.presence.PNGetStateResult;
 import com.pubnub.api.models.consumer.presence.PNSetStateResult;
-
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.pubnub.PubNubConstants;
diff --git a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/DefaultPulsarMessageReceipt.java b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/DefaultPulsarMessageReceipt.java
index f1322fc..6d3a1cd 100644
--- a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/DefaultPulsarMessageReceipt.java
+++ b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/DefaultPulsarMessageReceipt.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.pulsar;
 
 import java.util.concurrent.CompletableFuture;
+
 import org.apache.pulsar.client.api.Consumer;
 import org.apache.pulsar.client.api.MessageId;
 import org.apache.pulsar.client.api.PulsarClientException;
diff --git a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/PulsarMessageReceipt.java b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/PulsarMessageReceipt.java
index bb2f849..db4b148 100644
--- a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/PulsarMessageReceipt.java
+++ b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/PulsarMessageReceipt.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.pulsar;
 
 import java.util.concurrent.CompletableFuture;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.component.pulsar.configuration.PulsarConfiguration;
 import org.apache.pulsar.client.api.MessageId;
diff --git a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/utils/consumers/CommonCreationStrategyImpl.java b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/utils/consumers/CommonCreationStrategyImpl.java
index de2ff9c..704b974 100644
--- a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/utils/consumers/CommonCreationStrategyImpl.java
+++ b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/utils/consumers/CommonCreationStrategyImpl.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.pulsar.utils.consumers;
 
 import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.component.pulsar.PulsarConsumer;
 import org.apache.camel.component.pulsar.PulsarEndpoint;
 import org.apache.camel.component.pulsar.PulsarMessageListener;
diff --git a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/utils/message/PulsarMessageUtils.java b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/utils/message/PulsarMessageUtils.java
index 860337f..c25b1d3 100644
--- a/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/utils/message/PulsarMessageUtils.java
+++ b/components/camel-pulsar/src/main/java/org/apache/camel/component/pulsar/utils/message/PulsarMessageUtils.java
@@ -20,6 +20,7 @@
 import java.io.IOException;
 import java.io.NotSerializableException;
 import java.io.ObjectOutputStream;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.pulsar.client.api.Message;
diff --git a/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarComponentTest.java b/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarComponentTest.java
index a3f2487..78f9baa 100644
--- a/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarComponentTest.java
+++ b/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarComponentTest.java
@@ -21,8 +21,8 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Before;
 import org.junit.Test;
-
 import org.mockito.ArgumentMatchers;
+
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
diff --git a/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarConsumerAcknowledgementTest.java b/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarConsumerAcknowledgementTest.java
index e3195b3..1d34ff1 100644
--- a/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarConsumerAcknowledgementTest.java
+++ b/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarConsumerAcknowledgementTest.java
@@ -18,6 +18,7 @@
 
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarProducerHeadersInTest.java b/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarProducerHeadersInTest.java
index 21fd49c..299aa71 100644
--- a/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarProducerHeadersInTest.java
+++ b/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/PulsarProducerHeadersInTest.java
@@ -19,6 +19,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
diff --git a/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/utils/PulsarUtilsTest.java b/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/utils/PulsarUtilsTest.java
index b4c9dad..5cd1a4c 100644
--- a/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/utils/PulsarUtilsTest.java
+++ b/components/camel-pulsar/src/test/java/org/apache/camel/component/pulsar/utils/PulsarUtilsTest.java
@@ -18,6 +18,7 @@
 
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
+
 import org.apache.pulsar.client.api.Consumer;
 import org.apache.pulsar.client.api.PulsarClientException;
 import org.junit.Test;
diff --git a/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeOptionsTest.java b/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeOptionsTest.java
index 2f0d214..9419586 100644
--- a/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeOptionsTest.java
+++ b/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/SpringQuartzPersistentStoreRestartAppChangeOptionsTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.quartz;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.test.junit4.TestSupport;
 import org.apache.camel.util.IOHelper;
diff --git a/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/StatefulQuartzRouteTest.java b/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/StatefulQuartzRouteTest.java
index 8c3b2c1..7fb5874 100644
--- a/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/StatefulQuartzRouteTest.java
+++ b/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/StatefulQuartzRouteTest.java
@@ -24,7 +24,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
 
-
 public class StatefulQuartzRouteTest extends BaseQuartzTest {
     protected MockEndpoint resultEndpoint;
 
diff --git a/components/camel-quartz/src/test/java/org/apache/camel/pollconsumer/quartz/FileConsumerQuartzSchedulerRestartTest.java b/components/camel-quartz/src/test/java/org/apache/camel/pollconsumer/quartz/FileConsumerQuartzSchedulerRestartTest.java
index 2bd3435..e1e0677 100644
--- a/components/camel-quartz/src/test/java/org/apache/camel/pollconsumer/quartz/FileConsumerQuartzSchedulerRestartTest.java
+++ b/components/camel-quartz/src/test/java/org/apache/camel/pollconsumer/quartz/FileConsumerQuartzSchedulerRestartTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.pollconsumer.quartz;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-quartz/src/test/java/org/apache/camel/pollconsumer/quartz/FileConsumerQuartzSchedulerTest.java b/components/camel-quartz/src/test/java/org/apache/camel/pollconsumer/quartz/FileConsumerQuartzSchedulerTest.java
index afecee1..d995f55 100644
--- a/components/camel-quartz/src/test/java/org/apache/camel/pollconsumer/quartz/FileConsumerQuartzSchedulerTest.java
+++ b/components/camel-quartz/src/test/java/org/apache/camel/pollconsumer/quartz/FileConsumerQuartzSchedulerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.pollconsumer.quartz;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SpringMultiplePoliciesOnRouteTest.java b/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SpringMultiplePoliciesOnRouteTest.java
index 33d3920..bf74baa 100644
--- a/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SpringMultiplePoliciesOnRouteTest.java
+++ b/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SpringMultiplePoliciesOnRouteTest.java
@@ -21,7 +21,6 @@
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class SpringMultiplePoliciesOnRouteTest extends CamelSpringTestSupport {
     private String url = "seda:foo?concurrentConsumers=20";
     private int size = 100;
diff --git a/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SpringScheduledRoutePolicyTest.java b/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SpringScheduledRoutePolicyTest.java
index 37f56b4..8f97cd0 100644
--- a/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SpringScheduledRoutePolicyTest.java
+++ b/components/camel-quartz/src/test/java/org/apache/camel/routepolicy/quartz/SpringScheduledRoutePolicyTest.java
@@ -31,7 +31,6 @@
 import org.apache.camel.test.junit4.TestSupport;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public abstract class SpringScheduledRoutePolicyTest extends TestSupport {
     protected enum TestType {
         SIMPLE, CRON
diff --git a/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/QuickfixjSpringTest.java b/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/QuickfixjSpringTest.java
index 9340783..58ed9fa 100644
--- a/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/QuickfixjSpringTest.java
+++ b/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/QuickfixjSpringTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.quickfixj;
+
 import java.util.Properties;
 
 import org.apache.camel.test.spring.CamelSpringTestSupport;
diff --git a/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/routing/FixMessageRouter.java b/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/routing/FixMessageRouter.java
index 89d1176..8f6f29e 100644
--- a/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/routing/FixMessageRouter.java
+++ b/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/routing/FixMessageRouter.java
@@ -103,4 +103,4 @@
         }
         return null;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/trading/TradeExecutor.java b/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/trading/TradeExecutor.java
index 669f928..e2f5ffb 100644
--- a/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/trading/TradeExecutor.java
+++ b/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/trading/TradeExecutor.java
@@ -433,4 +433,4 @@
             return defaultMarketPrice;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/transform/QuickfixjMessageJsonPrinter.java b/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/transform/QuickfixjMessageJsonPrinter.java
index 658ea3b..57a03d2 100644
--- a/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/transform/QuickfixjMessageJsonPrinter.java
+++ b/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/transform/QuickfixjMessageJsonPrinter.java
@@ -33,4 +33,4 @@
     public void print(Exchange exchange) {
         LOG.info(formatter.transform(exchange));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/util/CountDownLatchDecrementer.java b/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/util/CountDownLatchDecrementer.java
index e40b982..cb4f4a2 100644
--- a/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/util/CountDownLatchDecrementer.java
+++ b/components/camel-quickfix/src/test/java/org/apache/camel/component/quickfixj/examples/util/CountDownLatchDecrementer.java
@@ -39,4 +39,4 @@
         LOG.info("Decrementing latch count: " + label);
         latch.countDown();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java
index ebfd4ec..3172b24 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQComponent.java
@@ -19,6 +19,7 @@
 import java.net.URI;
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.net.ssl.TrustManager;
 
 import com.rabbitmq.client.ConnectionFactory;
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQEndpoint.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQEndpoint.java
index dee053f..3f46fe2 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQEndpoint.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQEndpoint.java
@@ -22,6 +22,7 @@
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeoutException;
+
 import javax.net.ssl.TrustManager;
 
 import com.rabbitmq.client.AMQP;
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/reply/MessageSentCallback.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/reply/MessageSentCallback.java
index 8a84c6b..83b11ea 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/reply/MessageSentCallback.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/reply/MessageSentCallback.java
@@ -18,8 +18,6 @@
 
 import com.rabbitmq.client.Connection;
 
-
-
 /**
  * Callback when a {@link Message} has been sent.
  */
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/reply/ReplyHandler.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/reply/ReplyHandler.java
index 658c946..0ceaf74 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/reply/ReplyHandler.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/reply/ReplyHandler.java
@@ -18,7 +18,6 @@
 
 import com.rabbitmq.client.AMQP;
 
-
 /**
  * Handles a reply.
  */
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTest.java
index 7b152cc..34035ca 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTest.java
@@ -26,7 +26,6 @@
 
 import com.rabbitmq.client.AMQP;
 import com.rabbitmq.client.Channel;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTestReplyTo.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTestReplyTo.java
index 43dae5a..c6f3311 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTestReplyTo.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTestReplyTo.java
@@ -110,4 +110,4 @@
             received.add(new String(body));
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQSpringIntTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQSpringIntTest.java
index 36c017a..6894455 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQSpringIntTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQSpringIntTest.java
@@ -1,141 +1,141 @@
-/*
- * 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.component.rabbitmq;
-
-import java.io.IOException;
-import java.util.concurrent.TimeoutException;
-
-import com.rabbitmq.client.AMQP;
-import com.rabbitmq.client.Channel;
-import com.rabbitmq.client.Connection;
-import com.rabbitmq.client.ConnectionFactory;
-import com.rabbitmq.client.DefaultConsumer;
-import com.rabbitmq.client.Envelope;
-import org.apache.camel.Produce;
-import org.apache.camel.ProducerTemplate;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Test RabbitMQ component with Spring DSL
- */
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration
-public class RabbitMQSpringIntTest {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(RabbitMQSpringIntTest.class);
-
-    @Produce("direct:rabbitMQ")
-    protected ProducerTemplate template;
-    @Autowired
-    private ConnectionFactory connectionFactory;
-    private Connection connection;
-    private Channel channel;
-
-    private boolean isConnectionOpened() {
-        return connection != null && connection.isOpen();
-    }
-
-    private Connection openConnection() throws IOException, TimeoutException {
-        if (!isConnectionOpened()) {
-            LOGGER.info("Open connection");
-            connection = connectionFactory.newConnection();
-        }
-        return connection;
-    }
-
-    private boolean isChannelOpened() {
-        return channel != null && channel.isOpen();
-    }
-
-    private Channel openChannel() throws IOException, TimeoutException {
-        if (!isChannelOpened()) {
-            LOGGER.info("Open channel");
-            channel = openConnection().createChannel();
-        }
-        return channel;
-    }
-
-    @Before
-    public void bindQueueExchange() throws IOException, TimeoutException {
-        openChannel();
-    }
-
-    @After
-    public void closeConnection() throws TimeoutException {
-        if (isChannelOpened()) {
-            try {
-                LOGGER.info("Close channel");
-                channel.close();
-            } catch (IOException e) {
-            }
-        }
-        if (isConnectionOpened()) {
-            try {
-                LOGGER.info("Close connection");
-                connection.close();
-            } catch (IOException e) {
-            }
-        }
-    }
-
-    private static final class LastDeliveryConsumer extends DefaultConsumer {
-        private byte[] lastBody;
-
-        private LastDeliveryConsumer(Channel channel) {
-            super(channel);
-        }
-
-        @Override
-        public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
-            lastBody = body;
-            super.handleDelivery(consumerTag, envelope, properties, body);
-        }
-
-        public byte[] getLastBody() {
-            return lastBody;
-        }
-        public String getLastBodyAsString() {
-            return lastBody == null ? null : new String(lastBody);
-        }
-    }
-
-    @Test
-    public void testSendCustomConnectionFactory() throws Exception {
-        String body = "Hello Rabbit";
-        template.sendBodyAndHeader(body, RabbitMQConstants.ROUTING_KEY, "rk2");
-
-        openChannel();
-        LastDeliveryConsumer consumer = new LastDeliveryConsumer(channel);
-        channel.basicConsume("q2", true, consumer);
-        int i = 10;
-        while (consumer.getLastBody() == null && i > 0) {
-            Thread.sleep(1000L);
-            i--;
-        }
-        assertEquals(body, consumer.getLastBodyAsString());
-    }
-}
+/*
+ * 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.component.rabbitmq;
+
+import java.io.IOException;
+import java.util.concurrent.TimeoutException;
+
+import com.rabbitmq.client.AMQP;
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
+import com.rabbitmq.client.DefaultConsumer;
+import com.rabbitmq.client.Envelope;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Test RabbitMQ component with Spring DSL
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration
+public class RabbitMQSpringIntTest {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(RabbitMQSpringIntTest.class);
+
+    @Produce("direct:rabbitMQ")
+    protected ProducerTemplate template;
+    @Autowired
+    private ConnectionFactory connectionFactory;
+    private Connection connection;
+    private Channel channel;
+
+    private boolean isConnectionOpened() {
+        return connection != null && connection.isOpen();
+    }
+
+    private Connection openConnection() throws IOException, TimeoutException {
+        if (!isConnectionOpened()) {
+            LOGGER.info("Open connection");
+            connection = connectionFactory.newConnection();
+        }
+        return connection;
+    }
+
+    private boolean isChannelOpened() {
+        return channel != null && channel.isOpen();
+    }
+
+    private Channel openChannel() throws IOException, TimeoutException {
+        if (!isChannelOpened()) {
+            LOGGER.info("Open channel");
+            channel = openConnection().createChannel();
+        }
+        return channel;
+    }
+
+    @Before
+    public void bindQueueExchange() throws IOException, TimeoutException {
+        openChannel();
+    }
+
+    @After
+    public void closeConnection() throws TimeoutException {
+        if (isChannelOpened()) {
+            try {
+                LOGGER.info("Close channel");
+                channel.close();
+            } catch (IOException e) {
+            }
+        }
+        if (isConnectionOpened()) {
+            try {
+                LOGGER.info("Close connection");
+                connection.close();
+            } catch (IOException e) {
+            }
+        }
+    }
+
+    private static final class LastDeliveryConsumer extends DefaultConsumer {
+        private byte[] lastBody;
+
+        private LastDeliveryConsumer(Channel channel) {
+            super(channel);
+        }
+
+        @Override
+        public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
+            lastBody = body;
+            super.handleDelivery(consumerTag, envelope, properties, body);
+        }
+
+        public byte[] getLastBody() {
+            return lastBody;
+        }
+        public String getLastBodyAsString() {
+            return lastBody == null ? null : new String(lastBody);
+        }
+    }
+
+    @Test
+    public void testSendCustomConnectionFactory() throws Exception {
+        String body = "Hello Rabbit";
+        template.sendBodyAndHeader(body, RabbitMQConstants.ROUTING_KEY, "rk2");
+
+        openChannel();
+        LastDeliveryConsumer consumer = new LastDeliveryConsumer(channel);
+        channel.basicConsume("q2", true, consumer);
+        int i = 10;
+        while (consumer.getLastBody() == null && i > 0) {
+            Thread.sleep(1000L);
+            i--;
+        }
+        assertEquals(body, consumer.getLastBodyAsString());
+    }
+}
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQConsumerQpidTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQConsumerQpidTest.java
index cb8491c..399e8f7 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQConsumerQpidTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQConsumerQpidTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.rabbitmq.qpid;
+
 import org.apache.camel.component.rabbitmq.RabbitMQConsumerIntTest;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQInOutQpidTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQInOutQpidTest.java
index d87d84d..a3b17a0 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQInOutQpidTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQInOutQpidTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.rabbitmq.qpid;
+
 import org.apache.camel.component.rabbitmq.RabbitMQInOutIntTest;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQLoadQpidTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQLoadQpidTest.java
index e343426..9e0d14f 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQLoadQpidTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQLoadQpidTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.rabbitmq.qpid;
+
 import org.apache.camel.component.rabbitmq.RabbitMQLoadIntTest;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQProducerQpidTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQProducerQpidTest.java
index 8969904..16e84fa 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQProducerQpidTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQProducerQpidTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.rabbitmq.qpid;
+
 import java.io.IOException;
 import java.util.concurrent.TimeoutException;
 
@@ -43,4 +44,4 @@
     @Override
     public void shouldSuccessfullyProduceMessageWhenGuaranteedDeliveryIsActivatedOnABadRouteButMessageIsNotMandatory() throws InterruptedException, IOException, TimeoutException {
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQReConnectionQpidTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQReConnectionQpidTest.java
index 761a81c..4b24833 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQReConnectionQpidTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQReConnectionQpidTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.rabbitmq.qpid;
+
 import org.apache.camel.component.rabbitmq.RabbitMQReConnectionIntTest;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQRequeueQpidTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQRequeueQpidTest.java
index 5944d4a..5ac83af 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQRequeueQpidTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQRequeueQpidTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.rabbitmq.qpid;
+
 import org.apache.camel.component.rabbitmq.RabbitMQRequeueIntTest;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQRequeueUnhandledExceptionQpidTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQRequeueUnhandledExceptionQpidTest.java
index 54f6862..dc422d8 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQRequeueUnhandledExceptionQpidTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQRequeueUnhandledExceptionQpidTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.rabbitmq.qpid;
+
 import org.apache.camel.component.rabbitmq.RabbitMQRequeueUnhandledExceptionIntTest;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQSupendResumeQpidTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQSupendResumeQpidTest.java
index 5034d4d..2493c5a 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQSupendResumeQpidTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/qpid/RabbitMQSupendResumeQpidTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.rabbitmq.qpid;
+
 import org.apache.camel.component.rabbitmq.RabbitMQSupendResumeIntTest;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -29,4 +30,4 @@
     public static void stopBroker() {
         systemLauncher.shutdown();
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/ReactiveStreamsConverter.java b/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/ReactiveStreamsConverter.java
index 5dbf4a3..8d80e24 100644
--- a/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/ReactiveStreamsConverter.java
+++ b/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/ReactiveStreamsConverter.java
@@ -24,7 +24,6 @@
 import org.apache.camel.spi.TypeConverterRegistry;
 import org.reactivestreams.Publisher;
 
-
 @Converter(generateLoader = true)
 public final class ReactiveStreamsConverter implements CamelContextAware {
 
diff --git a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/BeanCallTest.java b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/BeanCallTest.java
index 4235158..cd92061 100644
--- a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/BeanCallTest.java
+++ b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/BeanCallTest.java
@@ -30,7 +30,6 @@
 import org.junit.Test;
 import org.reactivestreams.Publisher;
 
-
 public class BeanCallTest extends CamelTestSupport {
 
     @Test
diff --git a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/CamelReactiveStreamsTest.java b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/CamelReactiveStreamsTest.java
index 73c742f..6e01657 100644
--- a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/CamelReactiveStreamsTest.java
+++ b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/CamelReactiveStreamsTest.java
@@ -25,7 +25,6 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-
 public class CamelReactiveStreamsTest {
 
     @Test
diff --git a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/DelayedMonoPublisherTest.java b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/DelayedMonoPublisherTest.java
index e3dd78f..1c1451a0 100644
--- a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/DelayedMonoPublisherTest.java
+++ b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/DelayedMonoPublisherTest.java
@@ -35,7 +35,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-
 public class DelayedMonoPublisherTest {
 
     private ExecutorService service;
diff --git a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/DirectClientAPITest.java b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/DirectClientAPITest.java
index e844575..4d0faab 100644
--- a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/DirectClientAPITest.java
+++ b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/DirectClientAPITest.java
@@ -23,7 +23,6 @@
 import java.util.concurrent.TimeUnit;
 
 import io.reactivex.Flowable;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/EventTypeTest.java b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/EventTypeTest.java
index 43641c9..78ba89b 100644
--- a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/EventTypeTest.java
+++ b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/EventTypeTest.java
@@ -25,7 +25,6 @@
 import org.junit.Test;
 import org.reactivestreams.Subscriber;
 
-
 public class EventTypeTest extends CamelTestSupport {
 
     @Test
diff --git a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/ExchangeRequestTest.java b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/ExchangeRequestTest.java
index 4633d9b..cc0534e 100644
--- a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/ExchangeRequestTest.java
+++ b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/ExchangeRequestTest.java
@@ -27,7 +27,6 @@
 import org.junit.Test;
 import org.reactivestreams.Publisher;
 
-
 public class ExchangeRequestTest extends CamelTestSupport {
 
     @Test
diff --git a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/platforms/ReactorCorePlatformTest.java b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/platforms/ReactorCorePlatformTest.java
index 2032c4b..29c8cc3 100644
--- a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/platforms/ReactorCorePlatformTest.java
+++ b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/platforms/ReactorCorePlatformTest.java
@@ -22,7 +22,6 @@
 import org.reactivestreams.Subscriber;
 import reactor.core.publisher.Flux;
 
-
 public class ReactorCorePlatformTest extends AbstractPlatformTestSupport {
 
     @Override
diff --git a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/platforms/RxJavaPlatformTest.java b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/platforms/RxJavaPlatformTest.java
index b58260a..56a8ec3 100644
--- a/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/platforms/RxJavaPlatformTest.java
+++ b/components/camel-reactive-streams/src/test/java/org/apache/camel/component/reactive/streams/platforms/RxJavaPlatformTest.java
@@ -22,7 +22,6 @@
 import org.reactivestreams.Publisher;
 import org.reactivestreams.Subscriber;
 
-
 public class RxJavaPlatformTest extends AbstractPlatformTestSupport {
 
     @Override
diff --git a/components/camel-reactor/src/main/java/org/apache/camel/component/reactor/engine/ReactorStreamsService.java b/components/camel-reactor/src/main/java/org/apache/camel/component/reactor/engine/ReactorStreamsService.java
index 7deb37b..c1ec616 100644
--- a/components/camel-reactor/src/main/java/org/apache/camel/component/reactor/engine/ReactorStreamsService.java
+++ b/components/camel-reactor/src/main/java/org/apache/camel/component/reactor/engine/ReactorStreamsService.java
@@ -38,7 +38,6 @@
 import org.apache.camel.util.function.Suppliers;
 import org.reactivestreams.Publisher;
 import org.reactivestreams.Subscriber;
-
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
diff --git a/components/camel-reactor/src/test/java/org/apache/camel/component/reactor/engine/ReactorStreamsServiceBackpressureTest.java b/components/camel-reactor/src/test/java/org/apache/camel/component/reactor/engine/ReactorStreamsServiceBackpressureTest.java
index 2f353a4..f0b9c2b 100644
--- a/components/camel-reactor/src/test/java/org/apache/camel/component/reactor/engine/ReactorStreamsServiceBackpressureTest.java
+++ b/components/camel-reactor/src/test/java/org/apache/camel/component/reactor/engine/ReactorStreamsServiceBackpressureTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.component.reactor.engine.suport.TestSubscriber;
 import org.junit.Assert;
 import org.junit.Test;
-
 import reactor.core.publisher.Flux;
 
 public class ReactorStreamsServiceBackpressureTest extends ReactorStreamsServiceTestSupport {
diff --git a/components/camel-rest-swagger/src/main/java/org/apache/camel/component/rest/swagger/RestSwaggerEndpoint.java b/components/camel-rest-swagger/src/main/java/org/apache/camel/component/rest/swagger/RestSwaggerEndpoint.java
index 7823e63..8245b28 100644
--- a/components/camel-rest-swagger/src/main/java/org/apache/camel/component/rest/swagger/RestSwaggerEndpoint.java
+++ b/components/camel-rest-swagger/src/main/java/org/apache/camel/component/rest/swagger/RestSwaggerEndpoint.java
@@ -31,11 +31,8 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import static java.util.Optional.ofNullable;
-
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import io.swagger.models.HttpMethod;
 import io.swagger.models.Operation;
 import io.swagger.models.Path;
@@ -48,7 +45,6 @@
 import io.swagger.models.parameters.QueryParameter;
 import io.swagger.parser.SwaggerParser;
 import io.swagger.util.Json;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
@@ -66,6 +62,7 @@
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.UnsafeUriCharactersEncoder;
 
+import static java.util.Optional.ofNullable;
 import static org.apache.camel.component.rest.swagger.RestSwaggerHelper.isHostParam;
 import static org.apache.camel.component.rest.swagger.RestSwaggerHelper.isMediaRange;
 import static org.apache.camel.util.ObjectHelper.isNotEmpty;
diff --git a/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/HttpsTest.java b/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/HttpsTest.java
index e859654..4e53c40 100644
--- a/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/HttpsTest.java
+++ b/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/HttpsTest.java
@@ -35,7 +35,6 @@
 import com.github.tomakehurst.wiremock.common.HttpsSettings;
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
 import com.google.common.io.Resources;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/Jetty94ServerFactory.java b/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/Jetty94ServerFactory.java
index c7664b0..96f6337 100644
--- a/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/Jetty94ServerFactory.java
+++ b/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/Jetty94ServerFactory.java
@@ -24,7 +24,6 @@
 import com.github.tomakehurst.wiremock.http.StubRequestHandler;
 import com.github.tomakehurst.wiremock.jetty9.JettyHttpServer;
 import com.github.tomakehurst.wiremock.jetty9.JettyHttpServerFactory;
-
 import org.eclipse.jetty.io.NetworkTrafficListener;
 import org.eclipse.jetty.server.HttpConfiguration;
 import org.eclipse.jetty.server.HttpConnectionFactory;
diff --git a/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/RestSwaggerComponentTest.java b/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/RestSwaggerComponentTest.java
index 2165aa2..f7a87fc 100644
--- a/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/RestSwaggerComponentTest.java
+++ b/components/camel-rest-swagger/src/test/java/org/apache/camel/component/rest/swagger/RestSwaggerComponentTest.java
@@ -30,7 +30,6 @@
 import javax.xml.bind.Marshaller;
 
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-ribbon/src/test/java/org/apache/camel/component/ribbon/cloud/RibbonServiceCallUpdateRouteTest.java b/components/camel-ribbon/src/test/java/org/apache/camel/component/ribbon/cloud/RibbonServiceCallUpdateRouteTest.java
index a45cafa..d20cad0 100644
--- a/components/camel-ribbon/src/test/java/org/apache/camel/component/ribbon/cloud/RibbonServiceCallUpdateRouteTest.java
+++ b/components/camel-ribbon/src/test/java/org/apache/camel/component/ribbon/cloud/RibbonServiceCallUpdateRouteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.ribbon.cloud;
+
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.ribbon.RibbonConfiguration;
diff --git a/components/camel-rss/src/main/java/org/apache/camel/component/rss/AggregateRssFeedStrategy.java b/components/camel-rss/src/main/java/org/apache/camel/component/rss/AggregateRssFeedStrategy.java
index b21a316..c0d7cb8 100644
--- a/components/camel-rss/src/main/java/org/apache/camel/component/rss/AggregateRssFeedStrategy.java
+++ b/components/camel-rss/src/main/java/org/apache/camel/component/rss/AggregateRssFeedStrategy.java
@@ -21,7 +21,6 @@
 
 import com.rometools.rome.feed.synd.SyndEntry;
 import com.rometools.rome.feed.synd.SyndFeed;
-
 import org.apache.camel.AggregationStrategy;
 import org.apache.camel.Exchange;
 import org.apache.camel.util.CastUtils;
diff --git a/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java b/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java
index d3760dc..7f8d807 100644
--- a/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java
+++ b/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java
@@ -21,7 +21,6 @@
 
 import com.rometools.rome.feed.synd.SyndEntry;
 import com.rometools.rome.feed.synd.SyndFeed;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
diff --git a/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java b/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java
index 216eb18..ceeff80 100644
--- a/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java
+++ b/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java
@@ -20,7 +20,6 @@
 import java.util.Date;
 
 import com.rometools.rome.feed.synd.SyndFeed;
-
 import org.apache.camel.Processor;
 import org.apache.camel.component.feed.EntryFilter;
 import org.apache.camel.component.feed.FeedEntryPollingConsumer;
diff --git a/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssUtils.java b/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssUtils.java
index 98a471d..9f3d75c 100644
--- a/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssUtils.java
+++ b/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssUtils.java
@@ -23,7 +23,6 @@
 import com.rometools.rome.feed.synd.SyndFeed;
 import com.rometools.rome.io.SyndFeedInput;
 import com.rometools.rome.io.XmlReader;
-
 import org.apache.commons.codec.binary.Base64;
 
 public final class RssUtils {
diff --git a/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java b/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java
index 59ba41a..7756d76 100644
--- a/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java
+++ b/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import com.rometools.rome.feed.synd.SyndEntry;
-
 import org.apache.camel.component.feed.EntryFilter;
 import org.apache.camel.component.feed.FeedEndpoint;
 import org.apache.camel.support.LRUCacheFactory;
diff --git a/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssConverter.java b/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssConverter.java
index 1303474..982dd3f 100644
--- a/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssConverter.java
+++ b/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssConverter.java
@@ -22,7 +22,6 @@
 import com.rometools.rome.io.FeedException;
 import com.rometools.rome.io.SyndFeedInput;
 import com.rometools.rome.io.SyndFeedOutput;
-
 import org.apache.camel.Converter;
 
 @Converter(generateLoader = true)
diff --git a/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssDataFormat.java b/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssDataFormat.java
index 9c6b541..7e5c0d9 100644
--- a/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssDataFormat.java
+++ b/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssDataFormat.java
@@ -20,7 +20,6 @@
 import java.io.OutputStream;
 
 import com.rometools.rome.feed.synd.SyndFeed;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataFormatName;
diff --git a/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerWithBasicAuthTest.java b/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerWithBasicAuthTest.java
index 6bc8c4f..5325610 100644
--- a/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerWithBasicAuthTest.java
+++ b/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerWithBasicAuthTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.rss;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerWithFilterTest.java b/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerWithFilterTest.java
index 2e8d0e5..ccd59a5 100644
--- a/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerWithFilterTest.java
+++ b/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerWithFilterTest.java
@@ -22,7 +22,6 @@
 
 import com.rometools.rome.feed.synd.SyndEntry;
 import com.rometools.rome.feed.synd.SyndFeed;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java b/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java
index 2652fb3..01bbf53 100644
--- a/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java
+++ b/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java
@@ -20,7 +20,6 @@
 
 import com.rometools.rome.feed.synd.SyndEntry;
 import com.rometools.rome.feed.synd.SyndFeed;
-
 import org.apache.camel.Body;
 import org.apache.camel.builder.ExpressionBuilder;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssFilterTest.java b/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssFilterTest.java
index 725fdb3..0abc5a3 100644
--- a/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssFilterTest.java
+++ b/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssFilterTest.java
@@ -18,7 +18,6 @@
 
 import com.rometools.rome.feed.synd.SyndEntry;
 import com.rometools.rome.feed.synd.SyndFeed;
-
 import org.apache.camel.Body;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssPollingConsumerTest.java b/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssPollingConsumerTest.java
index 7d6837e..99b4d88 100644
--- a/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssPollingConsumerTest.java
+++ b/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssPollingConsumerTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.rss;
 
 import com.rometools.rome.feed.synd.SyndFeed;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssPollingConsumerWithBasicAuthTest.java b/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssPollingConsumerWithBasicAuthTest.java
index 4b3911d..ea66340 100644
--- a/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssPollingConsumerWithBasicAuthTest.java
+++ b/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssPollingConsumerWithBasicAuthTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.rss;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/components/camel-rss/src/test/java/org/apache/camel/component/rss/UpdatedDateFilterTest.java b/components/camel-rss/src/test/java/org/apache/camel/component/rss/UpdatedDateFilterTest.java
index 7d057e2..78ebc5d6 100644
--- a/components/camel-rss/src/test/java/org/apache/camel/component/rss/UpdatedDateFilterTest.java
+++ b/components/camel-rss/src/test/java/org/apache/camel/component/rss/UpdatedDateFilterTest.java
@@ -21,7 +21,6 @@
 import com.rometools.rome.feed.synd.SyndEntry;
 import com.rometools.rome.feed.synd.SyndEntryImpl;
 import com.rometools.rome.feed.synd.SyndFeedImpl;
-
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/components/camel-rss/src/test/java/org/apache/camel/dataformat/rss/RssConverterTest.java b/components/camel-rss/src/test/java/org/apache/camel/dataformat/rss/RssConverterTest.java
index a25ff95..c5fac4a 100644
--- a/components/camel-rss/src/test/java/org/apache/camel/dataformat/rss/RssConverterTest.java
+++ b/components/camel-rss/src/test/java/org/apache/camel/dataformat/rss/RssConverterTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.dataformat.rss;
 
 import com.rometools.rome.feed.synd.SyndFeed;
-
 import org.apache.camel.builder.RouteBuilder;
 
 public class RssConverterTest extends RssDataFormatTest {
diff --git a/components/camel-rss/src/test/java/org/apache/camel/dataformat/rss/RssDataFormatTest.java b/components/camel-rss/src/test/java/org/apache/camel/dataformat/rss/RssDataFormatTest.java
index 6999e74..747fe9c 100644
--- a/components/camel-rss/src/test/java/org/apache/camel/dataformat/rss/RssDataFormatTest.java
+++ b/components/camel-rss/src/test/java/org/apache/camel/dataformat/rss/RssDataFormatTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.dataformat.rss;
 
 import com.rometools.rome.feed.synd.SyndFeed;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.rss.RssUtils;
diff --git a/components/camel-rxjava/src/test/java/org/apache/camel/component/rxjava/engine/RxJavaStreamsServiceTest.java b/components/camel-rxjava/src/test/java/org/apache/camel/component/rxjava/engine/RxJavaStreamsServiceTest.java
index 4b5175a..26b56e2 100644
--- a/components/camel-rxjava/src/test/java/org/apache/camel/component/rxjava/engine/RxJavaStreamsServiceTest.java
+++ b/components/camel-rxjava/src/test/java/org/apache/camel/component/rxjava/engine/RxJavaStreamsServiceTest.java
@@ -23,7 +23,6 @@
 
 import io.reactivex.Flowable;
 import io.reactivex.disposables.Disposable;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.FailedToStartRouteException;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java
index f6a1e2e..e26ffad 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java
@@ -21,7 +21,6 @@
 import java.util.Map;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java
index 1338461..6de0ded 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpointConfig.java
@@ -23,7 +23,6 @@
 import java.util.Optional;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.salesforce.api.dto.analytics.reports.ReportMetadata;
 import org.apache.camel.component.salesforce.api.dto.approval.ApprovalRequest;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceHttpClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceHttpClient.java
index f7c8caa..69dd9ad 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceHttpClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceHttpClient.java
@@ -21,8 +21,6 @@
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-import static java.util.Optional.ofNullable;
-
 import org.apache.camel.component.salesforce.internal.SalesforceSession;
 import org.apache.camel.component.salesforce.internal.client.SalesforceHttpRequest;
 import org.apache.camel.component.salesforce.internal.client.SalesforceSecurityHandler;
@@ -35,6 +33,8 @@
 import org.eclipse.jetty.client.http.HttpClientTransportOverHTTP;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
 
+import static java.util.Optional.ofNullable;
+
 /**
  * Custom Salesforce HTTP Client that creates {@link SalesforceHttpRequest}
  * requests.
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceMetaDataExtension.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceMetaDataExtension.java
index 13334ea..9208819 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceMetaDataExtension.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceMetaDataExtension.java
@@ -28,7 +28,6 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.extension.metadata.AbstractMetaDataExtension;
 import org.apache.camel.component.extension.metadata.MetaDataBuilder;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/TypeReferences.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/TypeReferences.java
index e82ae6c..4a01dc4 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/TypeReferences.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/TypeReferences.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import com.fasterxml.jackson.core.type.TypeReference;
-
 import org.apache.camel.component.salesforce.api.dto.Limits.Usage;
 import org.apache.camel.component.salesforce.api.dto.RecentItem;
 import org.apache.camel.component.salesforce.api.dto.RestError;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractDTOBase.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractDTOBase.java
index c7f29a7..45157bc 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractDTOBase.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/AbstractDTOBase.java
@@ -21,7 +21,6 @@
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 
 // avoid running into Salesforce backward compatibility breaks
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Limits.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Limits.java
index fda9937..dfd6ae5 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Limits.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/Limits.java
@@ -34,7 +34,6 @@
 import com.fasterxml.jackson.databind.DeserializationContext;
 import com.fasterxml.jackson.databind.JsonDeserializer;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-
 import org.apache.camel.component.salesforce.api.TypeReferences;
 import org.apache.camel.component.salesforce.api.dto.Limits.LimitsDeserializer;
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/analytics/reports/QueryRecordsReport.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/analytics/reports/QueryRecordsReport.java
index 756be2f..eec2ea3 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/analytics/reports/QueryRecordsReport.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/analytics/reports/QueryRecordsReport.java
@@ -19,7 +19,6 @@
 import java.util.List;
 
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
 import org.apache.camel.component.salesforce.api.dto.AbstractQueryRecordsBase;
 
 /**
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/analytics/reports/Report.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/analytics/reports/Report.java
index 1c68547..8d001de 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/analytics/reports/Report.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/analytics/reports/Report.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamConverter;
-
 import org.apache.camel.component.salesforce.api.PicklistEnumConverter;
 import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/analytics/reports/SummaryValue.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/analytics/reports/SummaryValue.java
index 0733d3e..80613d8 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/analytics/reports/SummaryValue.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/analytics/reports/SummaryValue.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.salesforce.api.dto.analytics.reports;
 
 import com.fasterxml.jackson.annotation.JsonAnySetter;
-
 import org.apache.camel.component.salesforce.api.dto.AbstractDTOBase;
 
 /**
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalRequest.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalRequest.java
index 943d772..a179b79 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalRequest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalRequest.java
@@ -29,7 +29,6 @@
 
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalResult.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalResult.java
index 985395f17..ed8d418 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalResult.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalResult.java
@@ -32,7 +32,6 @@
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
 import org.apache.camel.component.salesforce.api.dto.RestError;
 import org.apache.camel.component.salesforce.api.dto.approval.ApprovalResult.ApprovalResultDeserializer;
 import org.apache.camel.component.salesforce.api.dto.approval.ApprovalResult.Result;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/BatchInfoList.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/BatchInfoList.java
index 69ea9e5..285f7f9 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/BatchInfoList.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/BatchInfoList.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlType;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/BatchResult.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/BatchResult.java
index 3ecc2e4..e4805f3 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/BatchResult.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/BatchResult.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlType;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/QueryResult.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/QueryResult.java
index 48dbb09..513db5a 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/QueryResult.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/QueryResult.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/QueryResultList.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/QueryResultList.java
index 3aa39cc..e9e85b1 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/QueryResultList.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/QueryResultList.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlType;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/Result.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/Result.java
index c33d124..9b2423e 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/Result.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/Result.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlType;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/ResultError.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/ResultError.java
index 295c61d..0775ec4 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/ResultError.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/ResultError.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/SObject.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/SObject.java
index c6b0cf8..4be3ac1 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/SObject.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/bulk/SObject.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAnyElement;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/BatchRequest.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/BatchRequest.java
index 6f6a600..d26fcef 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/BatchRequest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/BatchRequest.java
@@ -23,7 +23,6 @@
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamConverter;
-
 import org.apache.camel.component.salesforce.api.dto.XStreamFieldOrder;
 import org.apache.camel.component.salesforce.api.dto.composite.SObjectBatch.Method;
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/CompositeRequest.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/CompositeRequest.java
index 39aa62fc..2506f3c 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/CompositeRequest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/CompositeRequest.java
@@ -23,7 +23,6 @@
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamConverter;
-
 import org.apache.camel.component.salesforce.api.dto.XStreamFieldOrder;
 import org.apache.camel.component.salesforce.api.dto.composite.SObjectComposite.Method;
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/ReferenceId.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/ReferenceId.java
index e5588c1..fdbb5d0 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/ReferenceId.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/ReferenceId.java
@@ -20,17 +20,16 @@
 import java.util.List;
 import java.util.Objects;
 
-import static java.util.Collections.emptyList;
-import static java.util.Collections.unmodifiableList;
-import static java.util.Optional.ofNullable;
-
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
 import org.apache.camel.component.salesforce.api.dto.RestError;
 
+import static java.util.Collections.emptyList;
+import static java.util.Collections.unmodifiableList;
+import static java.util.Optional.ofNullable;
+
 @XStreamAlias("results")
 public final class ReferenceId implements Serializable {
     private static final long serialVersionUID = 1L;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatch.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatch.java
index f1afc88..9c231e0 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatch.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatch.java
@@ -32,7 +32,6 @@
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamOmitField;
-
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
 import org.apache.camel.component.salesforce.api.utils.Version;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectComposite.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectComposite.java
index dfbcd96..2fffd7c 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectComposite.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectComposite.java
@@ -32,7 +32,6 @@
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamOmitField;
-
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
 import org.apache.camel.component.salesforce.api.utils.Version;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectNode.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectNode.java
index 52c1be4..c5d3db8 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectNode.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectNode.java
@@ -27,21 +27,20 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import static java.util.Objects.requireNonNull;
-
 import com.fasterxml.jackson.annotation.JsonAnyGetter;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonUnwrapped;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamConverter;
 import com.thoughtworks.xstream.annotations.XStreamOmitField;
-
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.RestError;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
 import org.apache.camel.util.ObjectHelper;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  * Represents one node in the SObject tree request. SObject trees
  * ({@link SObjectTree}) are composed from instances of {@link SObjectNode}s.
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTree.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTree.java
index a65343d..7be70ba 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTree.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTree.java
@@ -33,20 +33,19 @@
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
-import static java.util.Objects.requireNonNull;
-
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
 import com.thoughtworks.xstream.annotations.XStreamOmitField;
-
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.Attributes;
 import org.apache.camel.component.salesforce.api.dto.RestError;
 import org.apache.camel.util.ObjectHelper;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  * Payload and response for the SObject tree Composite API. The main interface
  * for specifying what to include in the sumission to the API endpoint. To build
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeResponse.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeResponse.java
index 51aca17..db1be19 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeResponse.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeResponse.java
@@ -26,7 +26,6 @@
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
 import org.apache.camel.component.salesforce.api.dto.RestError;
 
 /**
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/JsonUtils.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/JsonUtils.java
index 54ee381..e1e34cc 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/JsonUtils.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/JsonUtils.java
@@ -24,9 +24,6 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import static java.util.stream.Collectors.joining;
-
-
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.BeanDescription;
 import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -53,7 +50,6 @@
 import com.fasterxml.jackson.module.jsonSchema.types.ObjectSchema;
 import com.fasterxml.jackson.module.jsonSchema.types.SimpleTypeSchema;
 import com.fasterxml.jackson.module.jsonSchema.types.StringSchema;
-
 import org.apache.camel.component.salesforce.api.FieldsToNullPropertyFilter;
 import org.apache.camel.component.salesforce.api.dto.AbstractDTOBase;
 import org.apache.camel.component.salesforce.api.dto.AbstractQueryRecordsBase;
@@ -66,6 +62,8 @@
 import org.apache.camel.component.salesforce.api.dto.SObjectField;
 import org.apache.camel.impl.engine.DefaultPackageScanClassResolver;
 
+import static java.util.stream.Collectors.joining;
+
 /**
  * Factory class for creating
  * {@linkplain com.fasterxml.jackson.databind.ObjectMapper}
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/XStreamUtils.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/XStreamUtils.java
index 2318fe1..2bec0bc 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/XStreamUtils.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/utils/XStreamUtils.java
@@ -31,7 +31,6 @@
 import com.thoughtworks.xstream.security.ExplicitTypePermission;
 import com.thoughtworks.xstream.security.TypePermission;
 import com.thoughtworks.xstream.security.WildcardTypePermission;
-
 import org.apache.camel.component.salesforce.api.dto.AnnotationFieldKeySorter;
 import org.apache.camel.component.salesforce.internal.dto.RestChoices;
 import org.apache.camel.component.salesforce.internal.dto.RestErrors;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java
index cd2d483..3d1e00c 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/SalesforceSession.java
@@ -36,7 +36,6 @@
 import java.util.concurrent.TimeoutException;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.Service;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
index 4c85210..afdca2d 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
@@ -38,7 +38,6 @@
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.thoughtworks.xstream.XStream;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Service;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java
index 77fbe46..9faf366 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultAnalyticsApiClient.java
@@ -26,7 +26,6 @@
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.component.salesforce.SalesforceHttpClient;
 import org.apache.camel.component.salesforce.api.NoSuchSObjectException;
 import org.apache.camel.component.salesforce.api.SalesforceException;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeApiClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeApiClient.java
index edbbaa9..fe42f49 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeApiClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultCompositeApiClient.java
@@ -31,7 +31,6 @@
 import com.fasterxml.jackson.databind.ObjectWriter;
 import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.XStreamException;
-
 import org.apache.camel.component.salesforce.SalesforceEndpointConfig;
 import org.apache.camel.component.salesforce.SalesforceHttpClient;
 import org.apache.camel.component.salesforce.api.NoSuchSObjectException;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
index 623f04a..a3b60e9 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/DefaultRestClient.java
@@ -28,7 +28,6 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.thoughtworks.xstream.XStream;
-
 import org.apache.camel.component.salesforce.SalesforceHttpClient;
 import org.apache.camel.component.salesforce.api.NoSuchSObjectException;
 import org.apache.camel.component.salesforce.api.SalesforceException;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/dto/PushTopic.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/dto/PushTopic.java
index 9f7fa16..00432ed 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/dto/PushTopic.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/dto/PushTopic.java
@@ -19,7 +19,6 @@
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamConverter;
-
 import org.apache.camel.component.salesforce.api.PicklistEnumConverter;
 import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
index 76104d5..c5da9be 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/JsonRestProcessor.java
@@ -25,7 +25,6 @@
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java
index 626724d..b944e3b 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/processor/XmlRestProcessor.java
@@ -28,7 +28,6 @@
 import com.thoughtworks.xstream.XStreamException;
 import com.thoughtworks.xstream.mapper.CachingMapper;
 import com.thoughtworks.xstream.mapper.CannotResolveClassException;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/PushTopicHelper.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/PushTopicHelper.java
index 618c930..d2e272e 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/PushTopicHelper.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/PushTopicHelper.java
@@ -22,7 +22,6 @@
 import java.util.concurrent.TimeUnit;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.CamelException;
 import org.apache.camel.component.salesforce.SalesforceEndpointConfig;
 import org.apache.camel.component.salesforce.api.SalesforceException;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java
index b9b1fcc..d270d56 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java
@@ -25,9 +25,6 @@
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Stream;
 
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static java.util.concurrent.TimeUnit.SECONDS;
-
 import org.apache.camel.CamelException;
 import org.apache.camel.component.salesforce.SalesforceComponent;
 import org.apache.camel.component.salesforce.SalesforceConsumer;
@@ -48,6 +45,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.cometd.bayeux.Channel.META_CONNECT;
 import static org.cometd.bayeux.Channel.META_DISCONNECT;
 import static org.cometd.bayeux.Channel.META_HANDSHAKE;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/ApprovalIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/ApprovalIntegrationTest.java
index 5b79c01..0b3cf6c 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/ApprovalIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/ApprovalIntegrationTest.java
@@ -21,7 +21,6 @@
 import java.util.stream.Collectors;
 
 import com.googlecode.junittoolbox.ParallelParameterized;
-
 import org.apache.camel.component.salesforce.api.dto.approval.ApprovalRequest;
 import org.apache.camel.component.salesforce.api.dto.approval.ApprovalRequest.Action;
 import org.apache.camel.component.salesforce.api.dto.approval.ApprovalResult;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiJobIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiJobIntegrationTest.java
index efca9fd..4834dd3 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiJobIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/BulkApiJobIntegrationTest.java
@@ -22,7 +22,6 @@
 import java.util.stream.Collectors;
 
 import com.googlecode.junittoolbox.ParallelParameterized;
-
 import org.apache.camel.component.salesforce.api.dto.bulk.ContentType;
 import org.apache.camel.component.salesforce.api.dto.bulk.JobInfo;
 import org.apache.camel.component.salesforce.api.dto.bulk.JobStateEnum;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/CompositeApiBatchIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/CompositeApiBatchIntegrationTest.java
index 752c82c..ddb019e 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/CompositeApiBatchIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/CompositeApiBatchIntegrationTest.java
@@ -26,7 +26,6 @@
 
 import com.googlecode.junittoolbox.ParallelParameterized;
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.salesforce.api.dto.AbstractQueryRecordsBase;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/CompositeApiIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/CompositeApiIntegrationTest.java
index f7466b5..5d3b355 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/CompositeApiIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/CompositeApiIntegrationTest.java
@@ -25,7 +25,6 @@
 
 import com.googlecode.junittoolbox.ParallelParameterized;
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.salesforce.api.dto.AbstractQueryRecordsBase;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/CompositeApiTreeIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/CompositeApiTreeIntegrationTest.java
index 2652cd4..f74ab99 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/CompositeApiTreeIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/CompositeApiTreeIntegrationTest.java
@@ -19,7 +19,6 @@
 import java.util.Arrays;
 
 import com.googlecode.junittoolbox.ParallelParameterized;
-
 import org.apache.camel.component.salesforce.api.dto.composite.SObjectTree;
 import org.apache.camel.component.salesforce.dto.generated.Account;
 import org.apache.camel.component.salesforce.dto.generated.Account_IndustryEnum;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/NotFoundIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/NotFoundIntegrationTest.java
index 00c7d03..ac20977 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/NotFoundIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/NotFoundIntegrationTest.java
@@ -19,7 +19,6 @@
 import java.util.Arrays;
 
 import com.googlecode.junittoolbox.ParallelParameterized;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.component.salesforce.api.NoSuchSObjectException;
 import org.apache.camel.component.salesforce.dto.generated.Account;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java
index 7fd8aa7..e892b1e 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RawPayloadTest.java
@@ -28,7 +28,6 @@
 import okhttp3.mockwebserver.MockResponse;
 import okhttp3.mockwebserver.MockWebServer;
 import okhttp3.mockwebserver.RecordedRequest;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.eclipse.jetty.http.HttpHeader;
 import org.junit.AfterClass;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RecentIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RecentIntegrationTest.java
index f51cadf..8e679a3 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RecentIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RecentIntegrationTest.java
@@ -21,7 +21,6 @@
 import java.util.stream.IntStream;
 
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.salesforce.api.dto.AbstractQueryRecordsBase;
 import org.apache.camel.component.salesforce.api.dto.RecentItem;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
index 2bf0da9..e5181dc 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java
@@ -27,7 +27,6 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import com.thoughtworks.xstream.annotations.XStreamAlias;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
@@ -125,10 +124,10 @@
 
     @After
     public void removeData() {
-        template.request("salesforce:deleteSObject?sObjectName=Merchandise__c&sObjectId=" + merchandiseId, (Processor)(e) -> {
+        template.request("salesforce:deleteSObject?sObjectName=Merchandise__c&sObjectId=" + merchandiseId, (Processor) e -> {
             // NOOP
         });
-        template.request("direct:deleteLineItems", (Processor)(e) -> {
+        template.request("direct:deleteLineItems", (Processor) e -> {
             // NOOP
         });
     }
@@ -164,12 +163,12 @@
 
     private void deleteAccountAndContact() {
         if (accountId != null) {
-            template.request("salesforce:deleteSObject?sObjectName=Account&sObjectId=" + accountId, (Processor)(e) -> {
+            template.request("salesforce:deleteSObject?sObjectName=Account&sObjectId=" + accountId, (Processor) e -> {
                 // NOOP
             });
         }
         if (contactId != null) {
-            template.request("salesforce:deleteSObject?sObjectName=Contact&sObjectId=" + contactId, (Processor)(e) -> {
+            template.request("salesforce:deleteSObject?sObjectName=Contact&sObjectId=" + contactId, (Processor) e -> {
                 // NOOP
             });
         }
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceConsumerTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceConsumerTest.java
index e1249a0..9d77a8a 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceConsumerTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceConsumerTest.java
@@ -23,7 +23,6 @@
 import java.util.Objects;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
-
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceEndpointTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceEndpointTest.java
index 77adbe1..07c3fd0 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceEndpointTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceEndpointTest.java
@@ -33,7 +33,7 @@
         String[] operationNamesInAnnotation = uriPath.enums().split(",");
         Arrays.sort(operationNamesInAnnotation);
 
-        String[] operationNamesInEnum = Arrays.stream(OperationName.values()).map(OperationName::value).toArray((length) -> new String[length]);
+        String[] operationNamesInEnum = Arrays.stream(OperationName.values()).map(OperationName::value).toArray(length -> new String[length]);
         Arrays.sort(operationNamesInEnum);
 
         Assert.assertArrayEquals("All operation values, the String value returned from OperationName::value, must be defined in the @UriPath "
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceMetaDataExtensionTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceMetaDataExtensionTest.java
index 426bdeb..00a2f96 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceMetaDataExtensionTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceMetaDataExtensionTest.java
@@ -30,7 +30,6 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
 import com.fasterxml.jackson.module.jsonSchema.types.ObjectSchema;
-
 import org.apache.camel.component.extension.MetaDataExtension;
 import org.apache.camel.component.extension.MetaDataExtension.MetaData;
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/MultiSelectPicklistJsonTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/MultiSelectPicklistJsonTest.java
index c57710b..386c10c 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/MultiSelectPicklistJsonTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/MultiSelectPicklistJsonTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.salesforce.api;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.camel.component.salesforce.dto.generated.MSPTest;
 import org.apache.camel.component.salesforce.dto.generated.StringMSPTest;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/MultiSelectPicklistXmlTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/MultiSelectPicklistXmlTest.java
index 5fcd761..90ac5b7 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/MultiSelectPicklistXmlTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/MultiSelectPicklistXmlTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.salesforce.api;
 
 import com.thoughtworks.xstream.XStream;
-
 import org.apache.camel.component.salesforce.api.utils.XStreamUtils;
 import org.apache.camel.component.salesforce.dto.generated.MSPTest;
 import org.junit.Test;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/LimitsTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/LimitsTest.java
index 4839c92..e2ca3b9 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/LimitsTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/LimitsTest.java
@@ -29,7 +29,6 @@
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.component.salesforce.api.dto.Limits.Usage;
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.junit.Test;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/PlatformEventTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/PlatformEventTest.java
index 2e77864..1aceff6 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/PlatformEventTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/PlatformEventTest.java
@@ -20,7 +20,6 @@
 import java.time.ZonedDateTime;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.junit.Test;
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/RecentItemTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/RecentItemTest.java
index 230f90d..eee0185 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/RecentItemTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/RecentItemTest.java
@@ -20,7 +20,6 @@
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.junit.Test;
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/RestErrorTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/RestErrorTest.java
index 53edda3..d3bbe98 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/RestErrorTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/RestErrorTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectReader;
 import com.thoughtworks.xstream.XStream;
-
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.camel.component.salesforce.api.utils.XStreamUtils;
 import org.junit.Test;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalRequestTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalRequestTest.java
index 4de50e5..45443c9 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalRequestTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalRequestTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.thoughtworks.xstream.XStream;
-
 import org.apache.camel.component.salesforce.api.dto.approval.ApprovalRequest.Action;
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.camel.component.salesforce.api.utils.XStreamUtils;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalRequestsTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalRequestsTest.java
index 9823c38..ba7120f2 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalRequestsTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalRequestsTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.thoughtworks.xstream.XStream;
-
 import org.apache.camel.component.salesforce.api.dto.approval.ApprovalRequest.Action;
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.camel.component.salesforce.api.utils.XStreamUtils;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalResultTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalResultTest.java
index dbb199c..20b211e 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalResultTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalResultTest.java
@@ -22,7 +22,6 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.thoughtworks.xstream.XStream;
-
 import org.apache.camel.component.salesforce.api.dto.approval.ApprovalResult.Result;
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.camel.component.salesforce.api.utils.XStreamUtils;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalsTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalsTest.java
index da9185f..ea09c41 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalsTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/approval/ApprovalsTest.java
@@ -22,7 +22,6 @@
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.component.salesforce.api.dto.approval.Approvals.Info;
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.junit.Test;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/MapOfMapsConverterTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/MapOfMapsConverterTest.java
index 8a85960..a6ec3be 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/MapOfMapsConverterTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/MapOfMapsConverterTest.java
@@ -25,7 +25,6 @@
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
 import com.thoughtworks.xstream.io.xml.XppDomReader;
 import com.thoughtworks.xstream.io.xml.xppdom.XppDom;
-
 import org.junit.Test;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatchResponseTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatchResponseTest.java
index dc2d6a9..5967057 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatchResponseTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatchResponseTest.java
@@ -22,7 +22,6 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.thoughtworks.xstream.XStream;
-
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.camel.component.salesforce.api.utils.XStreamUtils;
 import org.junit.Test;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatchTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatchTest.java
index 1438d0e..0ec1913 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatchTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectBatchTest.java
@@ -19,7 +19,6 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.thoughtworks.xstream.XStream;
-
 import org.apache.camel.component.salesforce.api.dto.composite.SObjectBatch.Method;
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.camel.component.salesforce.api.utils.XStreamUtils;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectCompositeResponseTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectCompositeResponseTest.java
index a6e7468..c2f883d 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectCompositeResponseTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectCompositeResponseTest.java
@@ -22,7 +22,6 @@
 import java.util.Map;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.commons.io.IOUtils;
 import org.junit.Test;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectCompositeTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectCompositeTest.java
index fbdefcb..a27e4b7 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectCompositeTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectCompositeTest.java
@@ -22,7 +22,6 @@
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
-
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeResponseTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeResponseTest.java
index d719c75..0ed4cbe 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeResponseTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeResponseTest.java
@@ -22,7 +22,6 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectReader;
 import com.thoughtworks.xstream.XStream;
-
 import org.apache.camel.component.salesforce.api.dto.RestError;
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.camel.component.salesforce.api.utils.XStreamUtils;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeTest.java
index 86f4f89..e8e0c39 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/dto/composite/SObjectTreeTest.java
@@ -24,7 +24,6 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectWriter;
 import com.thoughtworks.xstream.XStream;
-
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.camel.component.salesforce.api.utils.XStreamUtils;
 import org.apache.camel.component.salesforce.dto.generated.Account;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java
index af20327..6a28d3f 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/JsonUtilsTest.java
@@ -19,7 +19,6 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
 import com.fasterxml.jackson.module.jsonSchema.types.ObjectSchema;
-
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
 import org.apache.camel.component.salesforce.dto.generated.Account;
 import org.junit.Test;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/SalesforceTimeFormatsTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/SalesforceTimeFormatsTest.java
index 1a1d84f..06ab18a 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/SalesforceTimeFormatsTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/api/utils/SalesforceTimeFormatsTest.java
@@ -29,21 +29,19 @@
 import java.util.Date;
 import java.util.Objects;
 
-import static java.lang.String.format;
-
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
-
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameter;
 import org.junit.runners.Parameterized.Parameters;
 
+import static java.lang.String.format;
 import static org.assertj.core.api.Assertions.assertThat;
 
 @RunWith(Parameterized.class)
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Account.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Account.java
index b388c34..7b85040 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Account.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Account.java
@@ -22,7 +22,6 @@
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamConverter;
-
 import org.apache.camel.component.salesforce.api.PicklistEnumConverter;
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Contact.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Contact.java
index 4aaf257..9cdd62b 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Contact.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Contact.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.salesforce.dto.generated;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
@@ -23,9 +26,6 @@
 import org.apache.camel.component.salesforce.api.dto.SObjectDescriptionUrls;
 import org.apache.camel.component.salesforce.api.dto.SObjectField;
 
-import java.util.ArrayList;
-import java.util.List;
-
 // CHECKSTYLE:OFF
 /**
  * Salesforce DTO for SObject Contact
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Document.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Document.java
index 2b07493..4d58274 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Document.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Document.java
@@ -16,17 +16,16 @@
  */
 package org.apache.camel.component.salesforce.dto.generated;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
-
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescriptionUrls;
 import org.apache.camel.component.salesforce.api.dto.SObjectField;
 
-import java.util.ArrayList;
-import java.util.List;
-
 //CHECKSTYLE:OFF
 /**
  * Salesforce DTO for SObject Document
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Line_Item__c.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Line_Item__c.java
index eb4f56a..2be9683 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Line_Item__c.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Line_Item__c.java
@@ -16,17 +16,16 @@
  */
 package org.apache.camel.component.salesforce.dto.generated;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
-
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescriptionUrls;
 import org.apache.camel.component.salesforce.api.dto.SObjectField;
 
-import java.util.ArrayList;
-import java.util.List;
-
 //CHECKSTYLE:OFF
 @XStreamAlias("Line_Item__c")
 public class Line_Item__c extends AbstractDescribedSObjectBase {
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/MSPTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/MSPTest.java
index 491df9a..d0788d3 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/MSPTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/MSPTest.java
@@ -25,7 +25,6 @@
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamConverter;
-
 import org.apache.camel.component.salesforce.api.MultiSelectPicklistConverter;
 import org.apache.camel.component.salesforce.api.MultiSelectPicklistDeserializer;
 import org.apache.camel.component.salesforce.api.MultiSelectPicklistSerializer;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Merchandise__c.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Merchandise__c.java
index 9798951..db88550 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Merchandise__c.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Merchandise__c.java
@@ -16,17 +16,16 @@
  */
 package org.apache.camel.component.salesforce.dto.generated;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
-
 import org.apache.camel.component.salesforce.api.dto.AbstractDescribedSObjectBase;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
 import org.apache.camel.component.salesforce.api.dto.SObjectDescriptionUrls;
 import org.apache.camel.component.salesforce.api.dto.SObjectField;
 
-import java.util.ArrayList;
-import java.util.List;
-
 //CHECKSTYLE:OFF
 @XStreamAlias("Merchandise__c")
 public class Merchandise__c extends AbstractDescribedSObjectBase {
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsAccount.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsAccount.java
index 1bf8e44..ca23847 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsAccount.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsAccount.java
@@ -16,11 +16,11 @@
  */
 package org.apache.camel.component.salesforce.dto.generated;
 
+import java.util.List;
+
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
 import org.apache.camel.component.salesforce.api.dto.AbstractQueryRecordsBase;
 
-import java.util.List;
-
 public class QueryRecordsAccount extends AbstractQueryRecordsBase {
     @XStreamImplicit
     private List<Account> records;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsContact.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsContact.java
index d8964d7..18a8289 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsContact.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/QueryRecordsContact.java
@@ -16,11 +16,11 @@
  */
 package org.apache.camel.component.salesforce.dto.generated;
 
+import java.util.List;
+
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
 import org.apache.camel.component.salesforce.api.dto.AbstractQueryRecordsBase;
 
-import java.util.List;
-
 public class QueryRecordsContact extends AbstractQueryRecordsBase {
     @XStreamImplicit
     private List<Contact> records;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/StringMSPTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/StringMSPTest.java
index 06bec5c..f82f5b6 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/StringMSPTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/StringMSPTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamConverter;
-
 import org.apache.camel.component.salesforce.api.StringMultiSelectPicklistConverter;
 import org.apache.camel.component.salesforce.api.StringMultiSelectPicklistDeserializer;
 import org.apache.camel.component.salesforce.api.StringMultiSelectPicklistSerializer;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Task.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Task.java
index 187a628..af1d6cd 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Task.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/dto/generated/Task.java
@@ -20,7 +20,6 @@
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
-
 import org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase;
 
 /**
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/LoginTokenTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/LoginTokenTest.java
index 691ff9b..fd0e8ed 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/LoginTokenTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/LoginTokenTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.salesforce.internal;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.camel.component.salesforce.internal.dto.LoginToken;
 import org.junit.Test;
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
index 97e948b..69baea1 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
@@ -20,9 +20,6 @@
 import java.util.List;
 import java.util.Map;
 
-import static java.util.Arrays.asList;
-import static java.util.Collections.singletonList;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -42,6 +39,8 @@
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.entry;
 import static org.junit.Assert.assertTrue;
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/ObjectDescriptions.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/ObjectDescriptions.java
index 9aba6ee3..9aed1e6 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/ObjectDescriptions.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/ObjectDescriptions.java
@@ -28,7 +28,6 @@
 import java.util.stream.Collectors;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.component.salesforce.api.SalesforceException;
 import org.apache.camel.component.salesforce.api.dto.GlobalObjects;
 import org.apache.camel.component.salesforce.api.dto.SObject;
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/SchemaMojo.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/SchemaMojo.java
index 37fe53f..92f5ffb 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/SchemaMojo.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/SchemaMojo.java
@@ -25,7 +25,6 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
-
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.camel.component.salesforce.internal.client.RestClient;
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
index b2944fb..77fc47c 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoIntegrationTest.java
@@ -29,7 +29,6 @@
 import com.google.testing.compile.Compilation.Status;
 import com.google.testing.compile.Compiler;
 import com.google.testing.compile.JavaFileObjects;
-
 import org.apache.camel.component.salesforce.SalesforceEndpointConfig;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoOutputTest.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoOutputTest.java
index 9889838..4fc6901 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoOutputTest.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/CamelSalesforceMojoOutputTest.java
@@ -30,7 +30,6 @@
 import java.util.stream.StreamSupport;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.component.salesforce.api.dto.SObjectDescription;
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.apache.camel.component.salesforce.internal.client.RestClient;
diff --git a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/SchemaMojoIntegrationTest.java b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/SchemaMojoIntegrationTest.java
index b52cfcd..cd65b5e 100644
--- a/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/SchemaMojoIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-maven-plugin/src/test/java/org/apache/camel/maven/SchemaMojoIntegrationTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.module.jsonSchema.JsonSchema;
 import com.fasterxml.jackson.module.jsonSchema.types.ObjectSchema;
-
 import org.apache.camel.component.salesforce.api.utils.JsonUtils;
 import org.junit.Assert;
 import org.junit.Rule;
diff --git a/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverProducer.java b/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverProducer.java
index f659001..f1d2b96d 100644
--- a/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverProducer.java
+++ b/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverProducer.java
@@ -19,7 +19,6 @@
 import java.util.Map;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Producer;
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XPathSplitChoicePerformanceTest.java b/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XPathSplitChoicePerformanceTest.java
index 59a0647..6a7b7e6 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XPathSplitChoicePerformanceTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XPathSplitChoicePerformanceTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.builder.saxon;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.util.concurrent.TimeUnit;
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryFromFileExceptionTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryFromFileExceptionTest.java
index 8f7fe62..0ecede0 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryFromFileExceptionTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryFromFileExceptionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.xquery;
+
 import java.io.File;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryFromFileTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryFromFileTest.java
index 3aa7ce5..e208231 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryFromFileTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryFromFileTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.xquery;
+
 import java.util.List;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryLanguageFromFileTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryLanguageFromFileTest.java
index e3ade82..7505dd8 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryLanguageFromFileTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryLanguageFromFileTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.xquery;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryWithExtensionTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryWithExtensionTest.java
index c74727b..d761b18 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryWithExtensionTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xquery/XQueryWithExtensionTest.java
@@ -26,7 +26,6 @@
 import net.sf.saxon.trans.XPathException;
 import net.sf.saxon.value.SequenceType;
 import net.sf.saxon.value.StringValue;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -113,4 +112,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java
index 5b20908..2e8c170 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltDTDTest.java
@@ -29,7 +29,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 public class SaxonXsltDTDTest extends CamelTestSupport {
     
     private static final String MESSAGE = 
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltFeatureRouteTest.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltFeatureRouteTest.java
index 94a9557..d7d738d 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltFeatureRouteTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/SaxonXsltFeatureRouteTest.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.xslt;
 
 import net.sf.saxon.trans.UncheckedXPathException;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/extensions/MyExtensionFunction1.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/extensions/MyExtensionFunction1.java
index 5a9c5de..89b5aa1 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/extensions/MyExtensionFunction1.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/extensions/MyExtensionFunction1.java
@@ -86,4 +86,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/extensions/MyExtensionFunction2.java b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/extensions/MyExtensionFunction2.java
index 852c92e..909a834 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/extensions/MyExtensionFunction2.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/component/xslt/extensions/MyExtensionFunction2.java
@@ -89,4 +89,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/language/xpath/XPathLanguageDefaultSettingsTest.java b/components/camel-saxon/src/test/java/org/apache/camel/language/xpath/XPathLanguageDefaultSettingsTest.java
index 7b4b41b..f3b3b9d 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/language/xpath/XPathLanguageDefaultSettingsTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/language/xpath/XPathLanguageDefaultSettingsTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.language.xpath;
+
 import javax.xml.xpath.XPathFactory;
 
 import org.apache.camel.component.mock.MockEndpoint;
@@ -80,4 +81,4 @@
         assertMockEndpointsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-saxon/src/test/java/org/apache/camel/language/xpath/XPathLanguageTest.java b/components/camel-saxon/src/test/java/org/apache/camel/language/xpath/XPathLanguageTest.java
index 1faa809..333a91d 100644
--- a/components/camel-saxon/src/test/java/org/apache/camel/language/xpath/XPathLanguageTest.java
+++ b/components/camel-saxon/src/test/java/org/apache/camel/language/xpath/XPathLanguageTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.language.xpath;
+
 import javax.xml.xpath.XPathFactory;
 
 import org.apache.camel.Exchange;
@@ -160,4 +161,4 @@
         assertMockEndpointsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/SchematronProcessor.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/SchematronProcessor.java
index 384a07b..8109fff 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/SchematronProcessor.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/SchematronProcessor.java
@@ -32,8 +32,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
-
 /**
  * The schematoron Engine. Validates an XML for given scheamtron rules using an XSLT implementation of the Schematron
  * Engine.
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/SchematronProcessorFactory.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/SchematronProcessorFactory.java
index 655f835..bc15234 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/SchematronProcessorFactory.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/SchematronProcessorFactory.java
@@ -28,7 +28,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * Schematron Engine Factory
  *
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java
index 0b9974b..42b287f 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.schematron.processor;
 
-
 import java.io.InputStream;
 
 import javax.xml.transform.Source;
@@ -34,7 +33,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * Class generating Templates for a given schematron rules
  */
diff --git a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronEndpointTest.java b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronEndpointTest.java
index ff9a5a6..49f5869 100644
--- a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronEndpointTest.java
+++ b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronEndpointTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.schematron;
 
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
diff --git a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java
index 80938ae..c819d0f 100644
--- a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java
+++ b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java
@@ -22,12 +22,12 @@
 import javax.xml.transform.Templates;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.sax.SAXSource;
+
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
 
 import net.sf.saxon.TransformerFactoryImpl;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.component.schematron.constant.Constants;
diff --git a/components/camel-service/src/main/java/org/apache/camel/component/service/ServiceComponent.java b/components/camel-service/src/main/java/org/apache/camel/component/service/ServiceComponent.java
index 321687c..25ecf1b 100644
--- a/components/camel-service/src/main/java/org/apache/camel/component/service/ServiceComponent.java
+++ b/components/camel-service/src/main/java/org/apache/camel/component/service/ServiceComponent.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.service;
 
-
 import java.util.HashMap;
 import java.util.Map;
 
diff --git a/components/camel-service/src/main/java/org/apache/camel/component/service/ServiceConsumer.java b/components/camel-service/src/main/java/org/apache/camel/component/service/ServiceConsumer.java
index 4a70afb..0024d1c 100644
--- a/components/camel-service/src/main/java/org/apache/camel/component/service/ServiceConsumer.java
+++ b/components/camel-service/src/main/java/org/apache/camel/component/service/ServiceConsumer.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.service;
 
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/AbstractServiceNowProcessor.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/AbstractServiceNowProcessor.java
index ce0c97f..658cce7 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/AbstractServiceNowProcessor.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/AbstractServiceNowProcessor.java
@@ -22,6 +22,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.Response;
 
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowClient.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowClient.java
index 92a1433..2d058ee 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowClient.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowClient.java
@@ -21,6 +21,7 @@
 import java.util.Arrays;
 import java.util.Map;
 import java.util.function.Function;
+
 import javax.net.ssl.SSLContext;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowComponentVerifierExtension.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowComponentVerifierExtension.java
index 879efe1..208f94e 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowComponentVerifierExtension.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowComponentVerifierExtension.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.servicenow;
 
 import java.util.Map;
+
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.core.MediaType;
 
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowHelper.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowHelper.java
index 9b45fdc..7ff3b78 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowHelper.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowHelper.java
@@ -20,6 +20,7 @@
 import java.util.Map;
 import java.util.Optional;
 import java.util.function.BiConsumer;
+
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.Response;
 
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowMetaDataExtension.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowMetaDataExtension.java
index 11d0233..bf59bae 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowMetaDataExtension.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowMetaDataExtension.java
@@ -30,6 +30,7 @@
 import java.util.function.Consumer;
 import java.util.regex.Pattern;
 import java.util.stream.Stream;
+
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/auth/AuthenticationRequestFilter.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/auth/AuthenticationRequestFilter.java
index 4b97619..dcfba08 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/auth/AuthenticationRequestFilter.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/auth/AuthenticationRequestFilter.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.Base64;
+
 import javax.annotation.Priority;
 import javax.ws.rs.Priorities;
 import javax.ws.rs.client.ClientRequestContext;
@@ -28,7 +29,6 @@
 
 import org.apache.camel.component.servicenow.ServiceNowConfiguration;
 
-
 @Provider
 @Priority(Priorities.AUTHENTICATION)
 public final class AuthenticationRequestFilter implements ClientRequestFilter {
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAttachmentProcessor.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAttachmentProcessor.java
index d1e2ce3..ef980e4 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAttachmentProcessor.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowAttachmentProcessor.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.servicenow.releases.helsinki;
 
 import java.io.InputStream;
+
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCartsProcessor.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCartsProcessor.java
index e4d23f7..ac90dee 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCartsProcessor.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/releases/helsinki/HelsinkiServiceNowServiceCatalogCartsProcessor.java
@@ -31,7 +31,7 @@
 import static org.apache.camel.component.servicenow.ServiceNowConstants.ACTION_SUBJECT_CHECKOUT;
 import static org.apache.camel.component.servicenow.ServiceNowConstants.ACTION_SUBJECT_DELIVERY_ADDRESS;
 import static org.apache.camel.component.servicenow.ServiceNowConstants.ACTION_UPDATE;
-    
+
 class HelsinkiServiceNowServiceCatalogCartsProcessor extends AbstractServiceNowProcessor {
 
     HelsinkiServiceNowServiceCatalogCartsProcessor(ServiceNowEndpoint endpoint) throws Exception {
diff --git a/components/camel-servicenow/camel-servicenow-component/src/test/java/org/apache/camel/component/servicenow/ServiceNowComponentVerifierExtensionTest.java b/components/camel-servicenow/camel-servicenow-component/src/test/java/org/apache/camel/component/servicenow/ServiceNowComponentVerifierExtensionTest.java
index 8e46918..a36b50c 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/test/java/org/apache/camel/component/servicenow/ServiceNowComponentVerifierExtensionTest.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/test/java/org/apache/camel/component/servicenow/ServiceNowComponentVerifierExtensionTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.servicenow;
 
 import java.util.Map;
+
 import javax.ws.rs.ProcessingException;
 
 import org.apache.camel.Component;
diff --git a/components/camel-servicenow/camel-servicenow-component/src/test/java/org/apache/camel/component/servicenow/ServiceNowComponentVerifierTest.java b/components/camel-servicenow/camel-servicenow-component/src/test/java/org/apache/camel/component/servicenow/ServiceNowComponentVerifierTest.java
index e3f65ca..7f4c1ce 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/test/java/org/apache/camel/component/servicenow/ServiceNowComponentVerifierTest.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/test/java/org/apache/camel/component/servicenow/ServiceNowComponentVerifierTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.servicenow;
 
 import java.util.Map;
+
 import javax.ws.rs.ProcessingException;
 
 import org.apache.camel.component.extension.ComponentVerifierExtension;
diff --git a/components/camel-servicenow/camel-servicenow-maven-plugin/src/main/java/org/apache/camel/maven/CamelServiceNowGenerateMojo.java b/components/camel-servicenow/camel-servicenow-maven-plugin/src/main/java/org/apache/camel/maven/CamelServiceNowGenerateMojo.java
index 7f21daec..2590888 100644
--- a/components/camel-servicenow/camel-servicenow-maven-plugin/src/main/java/org/apache/camel/maven/CamelServiceNowGenerateMojo.java
+++ b/components/camel-servicenow/camel-servicenow-maven-plugin/src/main/java/org/apache/camel/maven/CamelServiceNowGenerateMojo.java
@@ -28,6 +28,7 @@
 import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+
 import javax.annotation.Generated;
 import javax.lang.model.element.Modifier;
 
diff --git a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/AttachmentHttpBinding.java b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/AttachmentHttpBinding.java
index e688a7e..08a5970 100644
--- a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/AttachmentHttpBinding.java
+++ b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/AttachmentHttpBinding.java
@@ -21,6 +21,7 @@
 import java.io.OutputStream;
 import java.util.Collection;
 import java.util.Locale;
+
 import javax.activation.DataSource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.Part;
diff --git a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultHttpRegistry.java b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultHttpRegistry.java
index f710e20..8aa044f 100644
--- a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultHttpRegistry.java
+++ b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/DefaultHttpRegistry.java
@@ -21,6 +21,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+
 import javax.servlet.Servlet;
 
 import org.apache.camel.http.common.CamelServlet;
diff --git a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/osgi/OsgiServletRegisterer.java b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/osgi/OsgiServletRegisterer.java
index bba328e..4323a70 100644
--- a/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/osgi/OsgiServletRegisterer.java
+++ b/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/osgi/OsgiServletRegisterer.java
@@ -18,6 +18,7 @@
 
 import java.util.Dictionary;
 import java.util.Hashtable;
+
 import javax.servlet.http.HttpServlet;
 
 import org.apache.camel.util.StringHelper;
diff --git a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java
index e85cbf7..469ef50 100644
--- a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java
+++ b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/HttpClientRouteTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.servlet;
 
 import java.io.ByteArrayInputStream;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
diff --git a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletAsyncArquillianTest.java b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletAsyncArquillianTest.java
index d393d03..5d8c8be 100644
--- a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletAsyncArquillianTest.java
+++ b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletAsyncArquillianTest.java
@@ -19,6 +19,7 @@
 import java.net.URL;
 import java.nio.file.Paths;
 import java.text.MessageFormat;
+
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.container.test.api.RunAsClient;
 import org.jboss.arquillian.junit.Arquillian;
diff --git a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletSwitchingStatusCode204Test.java b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletSwitchingStatusCode204Test.java
index 2ae27ed..fdd0da1 100644
--- a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletSwitchingStatusCode204Test.java
+++ b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/ServletSwitchingStatusCode204Test.java
@@ -20,7 +20,6 @@
 import com.meterware.httpunit.WebRequest;
 import com.meterware.httpunit.WebResponse;
 import com.meterware.servletunit.ServletUnitClient;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
diff --git a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletGetTest.java b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletGetTest.java
index 0b5d2ba..cbf0092 100644
--- a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletGetTest.java
+++ b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletGetTest.java
@@ -20,7 +20,6 @@
 import com.meterware.httpunit.WebRequest;
 import com.meterware.httpunit.WebResponse;
 import com.meterware.servletunit.ServletUnitClient;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletGetWildcardsTest.java b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletGetWildcardsTest.java
index 709f0c8..34d49c1 100644
--- a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletGetWildcardsTest.java
+++ b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletGetWildcardsTest.java
@@ -20,7 +20,6 @@
 import com.meterware.httpunit.WebRequest;
 import com.meterware.httpunit.WebResponse;
 import com.meterware.servletunit.ServletUnitClient;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletMethodNotAllowedTest.java b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletMethodNotAllowedTest.java
index 73adaf3..5cad20a 100644
--- a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletMethodNotAllowedTest.java
+++ b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletMethodNotAllowedTest.java
@@ -20,7 +20,6 @@
 import com.meterware.httpunit.WebRequest;
 import com.meterware.httpunit.WebResponse;
 import com.meterware.servletunit.ServletUnitClient;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletOptionsTest.java b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletOptionsTest.java
index 1af0923..67177e6 100644
--- a/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletOptionsTest.java
+++ b/components/camel-servlet/src/test/java/org/apache/camel/component/servlet/rest/RestServletOptionsTest.java
@@ -19,7 +19,6 @@
 import com.meterware.httpunit.WebRequest;
 import com.meterware.httpunit.WebResponse;
 import com.meterware.servletunit.ServletUnitClient;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.servlet.ServletCamelRouterTestSupport;
diff --git a/components/camel-sip/src/test/java/org/apache/camel/component/sip/PublishSubscribeTest.java b/components/camel-sip/src/test/java/org/apache/camel/component/sip/PublishSubscribeTest.java
index 2ceecd1..80f6212 100644
--- a/components/camel-sip/src/test/java/org/apache/camel/component/sip/PublishSubscribeTest.java
+++ b/components/camel-sip/src/test/java/org/apache/camel/component/sip/PublishSubscribeTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.sip;
+
 import javax.sip.message.Request;
 
 import org.apache.camel.EndpointInject;
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java
index dcff9f7..1efd458 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsMessageHelper.java
@@ -399,4 +399,4 @@
         return null;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerQueueTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerQueueTest.java
index d379799..807cfc5 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerQueueTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerQueueTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.sjms.consumer;
 
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.sjms.support.JmsTestSupport;
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerTempQueueTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerTempQueueTest.java
index 7bbe07e..ff30e20 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerTempQueueTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyConsumerTempQueueTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.sjms.consumer;
 
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.sjms.support.JmsTestSupport;
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/SyncJmsInOutIT.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/SyncJmsInOutIT.java
index 23359b3..0edbd2d 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/SyncJmsInOutIT.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/SyncJmsInOutIT.java
@@ -24,7 +24,6 @@
 import org.apache.camel.util.StopWatch;
 import org.junit.Test;
 
-
 /**
  * Integration test that verifies the ability of SJMS to correctly process
  * synchronous InOut exchanges from both the Producer and Consumer perspective
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/SyncJmsInOutTempDestIT.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/SyncJmsInOutTempDestIT.java
index 2a4d14f..0cf618f 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/SyncJmsInOutTempDestIT.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/SyncJmsInOutTempDestIT.java
@@ -24,7 +24,6 @@
 import org.apache.camel.util.StopWatch;
 import org.junit.Test;
 
-
 /**
  * Integration test that verifies the ability of SJMS to correctly process
  * synchronous InOut exchanges from both the Producer and Consumer perspective
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/jms/DestinationNameParserTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/jms/DestinationNameParserTest.java
index a49e2a0..abf8ccb 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/jms/DestinationNameParserTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/jms/DestinationNameParserTest.java
@@ -55,4 +55,4 @@
         parser.getShortName(null);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/InOutQueueProducerAsyncLoadTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/InOutQueueProducerAsyncLoadTest.java
index 16a4f08..3c10843 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/InOutQueueProducerAsyncLoadTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/InOutQueueProducerAsyncLoadTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.sjms.producer;
+
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/InOutQueueProducerSyncLoadTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/InOutQueueProducerSyncLoadTest.java
index 2c0f318..da5df51 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/InOutQueueProducerSyncLoadTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/InOutQueueProducerSyncLoadTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.sjms.producer;
+
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/QueueProducerQoSTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/QueueProducerQoSTest.java
index 7812675..2c7f824 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/QueueProducerQoSTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/producer/QueueProducerQoSTest.java
@@ -25,7 +25,6 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.sjms.support.JmsTestSupport;
-
 import org.junit.Assume;
 import org.junit.Test;
 
diff --git a/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackProducerTest.java b/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackProducerTest.java
index d0c5b25..4a24b29 100644
--- a/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackProducerTest.java
+++ b/components/camel-slack/src/test/java/org/apache/camel/component/slack/SlackProducerTest.java
@@ -22,7 +22,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit4.CamelTestSupport;
-
 import org.junit.Test;
 
 public class SlackProducerTest extends CamelTestSupport {
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java
index ee16870..4b57615 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java
@@ -144,4 +144,4 @@
         f.setAccessible(true);
         return (Class<? extends OptionalParameter>) f.get(tag);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/MessageReceiverListenerImpl.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/MessageReceiverListenerImpl.java
index 6ea29b0..0c0dc6d 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/MessageReceiverListenerImpl.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/MessageReceiverListenerImpl.java
@@ -116,4 +116,4 @@
     public void setMessageIDGenerator(MessageIDGenerator messageIDGenerator) {
         this.messageIDGenerator = messageIDGenerator;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
index dc73e6d..820b485 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
@@ -41,7 +41,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * A Strategy used to convert between a Camel {@link Exchange} and
  * {@link SmppMessage} to and from a SMPP {@link Command}
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppMessage.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppMessage.java
index f739f33..2b17d47 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppMessage.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppMessage.java
@@ -113,4 +113,4 @@
     public Command getCommand() {
         return command;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/AbstractSmppCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/AbstractSmppCommandTest.java
index 66a995b..a7e5d57 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/AbstractSmppCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/AbstractSmppCommandTest.java
@@ -70,4 +70,4 @@
         assertSame(OptionalParameter.Qos_time_to_live.class, command.determineTypeClass(Tag.QOS_TIME_TO_LIVE));
         assertSame(OptionalParameter.Alert_on_message_delivery.class, command.determineTypeClass(Tag.ALERT_ON_MESSAGE_DELIVERY));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/Smpp8BitSplitterTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/Smpp8BitSplitterTest.java
index d8f998d..92edc9b 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/Smpp8BitSplitterTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/Smpp8BitSplitterTest.java
@@ -63,4 +63,4 @@
 
         assertEquals(message, firstShortMessage + secondShortMessage);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
index f6a4ea8..77eb702 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
@@ -46,7 +46,6 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-
 /**
  * JUnit test class for <code>org.apache.camel.component.smpp.SmppBinding</code>
  */
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppCancelSmCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppCancelSmCommandTest.java
index 2cffbfd..e9b87d6 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppCancelSmCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppCancelSmCommandTest.java
@@ -76,4 +76,4 @@
         
         assertEquals("1", exchange.getOut().getHeader(SmppConstants.ID));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppCommandTypeTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppCommandTypeTest.java
index 9284d7e..e896b76 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppCommandTypeTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppCommandTypeTest.java
@@ -72,4 +72,4 @@
         
         assertSame(SmppCommandType.CANCEL_SM, SmppCommandType.fromExchange(exchange));
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConsumerTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConsumerTest.java
index 196fd13..05e5ce7 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConsumerTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConsumerTest.java
@@ -140,4 +140,4 @@
         assertSame(endpoint, consumer.getEndpoint());
         assertSame(configuration, consumer.getConfiguration());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
index a883afd..7239514 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.smpp;
+
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.TimeZone;
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDefaultSplitterTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDefaultSplitterTest.java
index f7e971f..847d414 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDefaultSplitterTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDefaultSplitterTest.java
@@ -64,4 +64,4 @@
 
         assertEquals(message, firstShortMessage + secondShortMessage);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppMessageTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppMessageTest.java
index 4e8059d..8600b79 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppMessageTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppMessageTest.java
@@ -175,4 +175,4 @@
 
         assertEquals("SmppMessage: PDUHeader(0, 00000000, 00000000, 0)", message.toString());
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppNLSTSplitterTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppNLSTSplitterTest.java
index 84a29b0..92eb3d6 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppNLSTSplitterTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppNLSTSplitterTest.java
@@ -69,4 +69,4 @@
         String secondShortMessage = new String(result[1], SmppNLSTSplitter.UDHIE_NLI_MULTI_MSG_HEADER_REAL_LENGTH, result[1].length - SmppNLSTSplitter.UDHIE_NLI_MULTI_MSG_HEADER_REAL_LENGTH);
         assertEquals(message, firstShortMessage + secondShortMessage);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppReplaceSmCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppReplaceSmCommandTest.java
index 10cb6af..588053e 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppReplaceSmCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppReplaceSmCommandTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.smpp;
+
 import java.util.Date;
 import java.util.TimeZone;
 
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSplitterTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSplitterTest.java
index 0b5c038..6fd40bc 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSplitterTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSplitterTest.java
@@ -72,4 +72,4 @@
 
         assertEquals(message, firstShortMessage + secondShortMessage);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
index c84d0ef..ae919c5 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.smpp;
+
 import java.util.Arrays;
 import java.util.Date;
 import java.util.LinkedHashMap;
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
index 3218dc6..6621938 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.smpp;
+
 import java.util.Arrays;
 import java.util.Date;
 import java.util.LinkedHashMap;
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppUcs2SplitterTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppUcs2SplitterTest.java
index e89d4ee..1346c2c 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppUcs2SplitterTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppUcs2SplitterTest.java
@@ -23,7 +23,6 @@
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
-
 public class SmppUcs2SplitterTest {
 
     @Test
@@ -64,4 +63,4 @@
 
         assertEquals(message, firstShortMessage + secondShortMessage);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppUtilsTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppUtilsTest.java
index 995928c..bb46656 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppUtilsTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppUtilsTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.smpp;
+
 import java.util.Calendar;
 import java.util.Date;
 import java.util.TimeZone;
diff --git a/components/camel-snmp/src/test/java/org/apache/camel/component/snmp/WalkOIDTest.java b/components/camel-snmp/src/test/java/org/apache/camel/component/snmp/WalkOIDTest.java
index f22d9c4..31c0273 100644
--- a/components/camel-snmp/src/test/java/org/apache/camel/component/snmp/WalkOIDTest.java
+++ b/components/camel-snmp/src/test/java/org/apache/camel/component/snmp/WalkOIDTest.java
@@ -27,7 +27,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 public class WalkOIDTest extends CamelTestSupport {
     private static final Logger LOG = LoggerFactory.getLogger(PollOIDTest.class);
 
diff --git a/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapCxfClientTest.java b/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapCxfClientTest.java
index 4958a51..e0615c3 100644
--- a/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapCxfClientTest.java
+++ b/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapCxfClientTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.soap;
+
 import java.util.List;
 
 import javax.annotation.Resource;
diff --git a/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapUnMarshalTest.java b/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapUnMarshalTest.java
index 8d32f66..70cf788 100644
--- a/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapUnMarshalTest.java
+++ b/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapUnMarshalTest.java
@@ -85,4 +85,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap12/Soap12UnMarshalTest.java b/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap12/Soap12UnMarshalTest.java
index 06b6e7e..dfe7eec 100644
--- a/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap12/Soap12UnMarshalTest.java
+++ b/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap12/Soap12UnMarshalTest.java
@@ -81,4 +81,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java b/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java
index 924e274..582112f 100644
--- a/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java
+++ b/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java
@@ -21,6 +21,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+
 import javax.activation.MimetypesFileTypeMap;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrTestSupport.java b/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrTestSupport.java
index 6ba0fb1..a11e271 100644
--- a/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrTestSupport.java
+++ b/components/camel-solr/src/test/java/org/apache/camel/component/solr/SolrTestSupport.java
@@ -18,7 +18,6 @@
 
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit4.CamelTestSupport;
-
 import org.junit.BeforeClass;
 
 public abstract class SolrTestSupport extends CamelTestSupport {
diff --git a/components/camel-soroush/src/main/java/org/apache/camel/component/soroushbot/component/SoroushBotSendMessageProducer.java b/components/camel-soroush/src/main/java/org/apache/camel/component/soroushbot/component/SoroushBotSendMessageProducer.java
index 6a1e5be..9b01e71 100644
--- a/components/camel-soroush/src/main/java/org/apache/camel/component/soroushbot/component/SoroushBotSendMessageProducer.java
+++ b/components/camel-soroush/src/main/java/org/apache/camel/component/soroushbot/component/SoroushBotSendMessageProducer.java
@@ -91,4 +91,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/BaseSparkTest.java b/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/BaseSparkTest.java
index 1cede99..4034359 100644
--- a/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/BaseSparkTest.java
+++ b/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/BaseSparkTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.sparkrest;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/DefaultSparkBindingTest.java b/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/DefaultSparkBindingTest.java
index 478c5c8..1801a0b 100644
--- a/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/DefaultSparkBindingTest.java
+++ b/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/DefaultSparkBindingTest.java
@@ -21,9 +21,6 @@
 import java.util.Map;
 import java.util.Objects;
 
-import static java.util.Arrays.asList;
-import static java.util.Collections.emptyMap;
-
 import javax.servlet.http.HttpServletRequest;
 
 import com.google.common.collect.ImmutableMap;
@@ -38,6 +35,8 @@
 import org.junit.runner.RunWith;
 import spark.Request;
 
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptyMap;
 import static org.apache.camel.Exchange.CONTENT_TYPE;
 import static org.apache.camel.Exchange.HTTP_METHOD;
 import static org.apache.camel.Exchange.HTTP_QUERY;
@@ -47,7 +46,6 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-
 @RunWith(Theories.class)
 public class DefaultSparkBindingTest {
 
diff --git a/components/camel-spark/src/main/java/org/apache/camel/component/spark/ConvertingRddCallback.java b/components/camel-spark/src/main/java/org/apache/camel/component/spark/ConvertingRddCallback.java
index 9de3019..a8c5e4c 100644
--- a/components/camel-spark/src/main/java/org/apache/camel/component/spark/ConvertingRddCallback.java
+++ b/components/camel-spark/src/main/java/org/apache/camel/component/spark/ConvertingRddCallback.java
@@ -16,11 +16,11 @@
  */
 package org.apache.camel.component.spark;
 
-import static java.lang.String.format;
-
 import org.apache.camel.CamelContext;
 import org.apache.spark.api.java.JavaRDDLike;
 
+import static java.lang.String.format;
+
 public abstract class ConvertingRddCallback<T> implements RddCallback<T> {
 
     private final CamelContext camelContext;
diff --git a/components/camel-spark/src/main/java/org/apache/camel/component/spark/DataFrameSparkProducer.java b/components/camel-spark/src/main/java/org/apache/camel/component/spark/DataFrameSparkProducer.java
index b910ddb..23f4978 100644
--- a/components/camel-spark/src/main/java/org/apache/camel/component/spark/DataFrameSparkProducer.java
+++ b/components/camel-spark/src/main/java/org/apache/camel/component/spark/DataFrameSparkProducer.java
@@ -84,4 +84,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spark/src/main/java/org/apache/camel/component/spark/RddSparkProducer.java b/components/camel-spark/src/main/java/org/apache/camel/component/spark/RddSparkProducer.java
index c5d0ab0..79125db 100644
--- a/components/camel-spark/src/main/java/org/apache/camel/component/spark/RddSparkProducer.java
+++ b/components/camel-spark/src/main/java/org/apache/camel/component/spark/RddSparkProducer.java
@@ -82,4 +82,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spark/src/main/java/org/apache/camel/component/spark/SparkMongos.java b/components/camel-spark/src/main/java/org/apache/camel/component/spark/SparkMongos.java
index 163817f..465613f 100644
--- a/components/camel-spark/src/main/java/org/apache/camel/component/spark/SparkMongos.java
+++ b/components/camel-spark/src/main/java/org/apache/camel/component/spark/SparkMongos.java
@@ -34,4 +34,4 @@
         return sparkContext.newAPIHadoopRDD(mongodbConfig, MongoInputFormat.class, Object.class, BSONObject.class);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spark/src/main/java/org/apache/camel/component/spark/annotations/AnnotatedRddCallbackProxy.java b/components/camel-spark/src/main/java/org/apache/camel/component/spark/annotations/AnnotatedRddCallbackProxy.java
index eeefb25..3ead1ee 100644
--- a/components/camel-spark/src/main/java/org/apache/camel/component/spark/annotations/AnnotatedRddCallbackProxy.java
+++ b/components/camel-spark/src/main/java/org/apache/camel/component/spark/annotations/AnnotatedRddCallbackProxy.java
@@ -21,12 +21,11 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import static java.util.Arrays.asList;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.spark.RddCallback;
 import org.apache.spark.api.java.JavaRDDLike;
 
+import static java.util.Arrays.asList;
 import static org.apache.camel.support.ObjectHelper.invokeMethodSafe;
 import static org.apache.camel.util.ObjectHelper.findMethodsWithAnnotation;
 
diff --git a/components/camel-spark/src/test/java/org/apache/camel/component/spark/SparkProducerTest.java b/components/camel-spark/src/test/java/org/apache/camel/component/spark/SparkProducerTest.java
index 4a73381..4fb2b25 100644
--- a/components/camel-spark/src/test/java/org/apache/camel/component/spark/SparkProducerTest.java
+++ b/components/camel-spark/src/test/java/org/apache/camel/component/spark/SparkProducerTest.java
@@ -20,9 +20,6 @@
 import java.io.IOException;
 import java.util.List;
 
-import static java.lang.Boolean.parseBoolean;
-import static java.util.Arrays.asList;
-
 import com.google.common.truth.Truth;
 import org.apache.camel.component.spark.annotations.RddCallback;
 import org.apache.camel.spi.Registry;
@@ -37,6 +34,8 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import static java.lang.Boolean.parseBoolean;
+import static java.util.Arrays.asList;
 import static org.apache.camel.component.spark.SparkConstants.SPARK_DATAFRAME_CALLBACK_HEADER;
 import static org.apache.camel.component.spark.SparkConstants.SPARK_RDD_CALLBACK_HEADER;
 import static org.apache.camel.component.spark.Sparks.createLocalSparkContext;
diff --git a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkConfiguration.java b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkConfiguration.java
index 564ef66..4ed4a5a 100644
--- a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkConfiguration.java
+++ b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkConfiguration.java
@@ -18,7 +18,6 @@
 
 import com.splunk.SSLSecurityProtocol;
 import com.splunk.Service;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
diff --git a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkConnectionFactory.java b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkConnectionFactory.java
index e6ae6c3..b0c5909 100644
--- a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkConnectionFactory.java
+++ b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkConnectionFactory.java
@@ -26,7 +26,6 @@
 import com.splunk.SSLSecurityProtocol;
 import com.splunk.Service;
 import com.splunk.ServiceArgs;
-
 import org.apache.camel.CamelContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkEndpoint.java b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkEndpoint.java
index b869736..4bb172c 100644
--- a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkEndpoint.java
+++ b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkEndpoint.java
@@ -19,6 +19,7 @@
 import java.net.ConnectException;
 import java.net.SocketException;
 import java.util.regex.Pattern;
+
 import javax.net.ssl.SSLException;
 
 import com.splunk.Service;
diff --git a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkProducer.java b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkProducer.java
index 04c5435..450da2b 100644
--- a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkProducer.java
+++ b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/SplunkProducer.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.splunk;
 
 import com.splunk.Args;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.splunk.event.SplunkEvent;
 import org.apache.camel.component.splunk.support.DataWriter;
diff --git a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/SplunkDataReader.java b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/SplunkDataReader.java
index c6facb6..4500245 100644
--- a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/SplunkDataReader.java
+++ b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/SplunkDataReader.java
@@ -37,7 +37,6 @@
 import com.splunk.SavedSearchDispatchArgs;
 import com.splunk.Service;
 import com.splunk.ServiceArgs;
-
 import org.apache.camel.component.splunk.ConsumerType;
 import org.apache.camel.component.splunk.SplunkEndpoint;
 import org.apache.camel.component.splunk.event.SplunkEvent;
diff --git a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/SplunkDataWriter.java b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/SplunkDataWriter.java
index 8564a57..f131fa14 100644
--- a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/SplunkDataWriter.java
+++ b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/SplunkDataWriter.java
@@ -25,7 +25,6 @@
 
 import com.splunk.Args;
 import com.splunk.Service;
-
 import org.apache.camel.component.splunk.SplunkEndpoint;
 import org.apache.camel.component.splunk.event.SplunkEvent;
 import org.slf4j.Logger;
diff --git a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/StreamDataWriter.java b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/StreamDataWriter.java
index 93c3a1d..9cc5f8b 100644
--- a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/StreamDataWriter.java
+++ b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/StreamDataWriter.java
@@ -23,7 +23,6 @@
 import com.splunk.Index;
 import com.splunk.Receiver;
 import com.splunk.Service;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.splunk.SplunkEndpoint;
 import org.slf4j.Logger;
diff --git a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/TcpDataWriter.java b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/TcpDataWriter.java
index 4a56cc8..6d29d18 100644
--- a/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/TcpDataWriter.java
+++ b/components/camel-splunk/src/main/java/org/apache/camel/component/splunk/support/TcpDataWriter.java
@@ -22,7 +22,6 @@
 import com.splunk.Args;
 import com.splunk.Service;
 import com.splunk.TcpInput;
-
 import org.apache.camel.component.splunk.SplunkEndpoint;
 
 public class TcpDataWriter extends SplunkDataWriter {
diff --git a/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/ConsumerStreamingTest.java b/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/ConsumerStreamingTest.java
index bf0762c..cde06f5 100644
--- a/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/ConsumerStreamingTest.java
+++ b/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/ConsumerStreamingTest.java
@@ -21,7 +21,6 @@
 
 import com.splunk.Job;
 import com.splunk.JobCollection;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.splunk.event.SplunkEvent;
diff --git a/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/ConsumerTest.java b/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/ConsumerTest.java
index e3689fe..160e6ec 100644
--- a/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/ConsumerTest.java
+++ b/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/ConsumerTest.java
@@ -21,7 +21,6 @@
 
 import com.splunk.Job;
 import com.splunk.JobCollection;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/Helper.java b/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/Helper.java
index b051b58..5e8eb78 100644
--- a/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/Helper.java
+++ b/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/Helper.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import com.splunk.Service;
-
 import org.apache.camel.CamelContext;
 
 public final class Helper {
diff --git a/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/ProducerTest.java b/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/ProducerTest.java
index ee943fa..e06be45 100644
--- a/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/ProducerTest.java
+++ b/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/ProducerTest.java
@@ -23,7 +23,6 @@
 import com.splunk.IndexCollection;
 import com.splunk.InputCollection;
 import com.splunk.TcpInput;
-
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Producer;
diff --git a/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/RawProducerTest.java b/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/RawProducerTest.java
index 0f3c627..5bd5d17 100644
--- a/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/RawProducerTest.java
+++ b/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/RawProducerTest.java
@@ -23,7 +23,6 @@
 import com.splunk.IndexCollection;
 import com.splunk.InputCollection;
 import com.splunk.TcpInput;
-
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/SplunkComponentConfigurationTest.java b/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/SplunkComponentConfigurationTest.java
index 56ef27c..2c7d156 100644
--- a/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/SplunkComponentConfigurationTest.java
+++ b/components/camel-splunk/src/test/java/org/apache/camel/component/splunk/SplunkComponentConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import com.splunk.SSLSecurityProtocol;
 import com.splunk.Service;
-
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelSpringBootApplicationController.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelSpringBootApplicationController.java
index 04fd47d..9b0f5bf 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelSpringBootApplicationController.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/CamelSpringBootApplicationController.java
@@ -18,6 +18,7 @@
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicBoolean;
+
 import javax.annotation.PreDestroy;
 
 import org.apache.camel.CamelContext;
@@ -101,4 +102,4 @@
         main.completed();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/TypeConversionConfiguration.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/TypeConversionConfiguration.java
index 3bba3db..3e0baac 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/TypeConversionConfiguration.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/TypeConversionConfiguration.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.spring.boot;
 
-import static java.util.Arrays.asList;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.TypeConverter;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -29,6 +27,8 @@
 import org.springframework.core.convert.converter.Converter;
 import org.springframework.core.convert.support.DefaultConversionService;
 
+import static java.util.Arrays.asList;
+
 @Configuration
 @ConditionalOnProperty(value = "camel.springboot.type-conversion", matchIfMissing = true)
 public class TypeConversionConfiguration {
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
index ec11652..c0c7c31 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpoint.java
@@ -44,7 +44,6 @@
 import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
 import org.springframework.lang.Nullable;
 
-
 /**
  * {@link Endpoint} to expose {@link org.apache.camel.Route} information.
  */
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/cloud/CamelCloudServiceDiscoveryAutoConfiguration.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/cloud/CamelCloudServiceDiscoveryAutoConfiguration.java
index b705e82..107e4ce 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/cloud/CamelCloudServiceDiscoveryAutoConfiguration.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/cloud/CamelCloudServiceDiscoveryAutoConfiguration.java
@@ -18,6 +18,7 @@
 
 import java.util.List;
 import java.util.Map;
+
 import javax.annotation.PostConstruct;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/health/HealthCheckRoutesAutoConfiguration.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/health/HealthCheckRoutesAutoConfiguration.java
index 1b5a7e4..776b0f2 100644
--- a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/health/HealthCheckRoutesAutoConfiguration.java
+++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/health/HealthCheckRoutesAutoConfiguration.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.spring.boot.health;
 
-
 import org.apache.camel.converter.TimePatternConverter;
 import org.apache.camel.health.HealthCheckRepository;
 import org.apache.camel.impl.health.RoutePerformanceCounterEvaluators;
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelAutoConfigurationTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelAutoConfigurationTest.java
index 8e1a25a..1c22bf3 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelAutoConfigurationTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelAutoConfigurationTest.java
@@ -228,4 +228,4 @@
         }
 
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelNonInvasiveCamelContextTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelNonInvasiveCamelContextTest.java
index 272b5d5..549cd43 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelNonInvasiveCamelContextTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelNonInvasiveCamelContextTest.java
@@ -82,4 +82,4 @@
 
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelSpringBootTemplateShutdownTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelSpringBootTemplateShutdownTest.java
index 6858dce..3ec20e1 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelSpringBootTemplateShutdownTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/CamelSpringBootTemplateShutdownTest.java
@@ -81,4 +81,4 @@
         assertTrue(((ServiceSupport) fluentProducerTemplate).isStopped());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointTest.java
index 6746bcd..4b64325 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRouteControllerEndpointTest.java
@@ -30,7 +30,6 @@
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit4.SpringRunner;
 
-
 /**
  * Test for the {@link CamelRouteControllerEndpoint} actuator endpoint.
  */
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointDisabledTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointDisabledTest.java
index d44f69e..6511524 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointDisabledTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/actuate/endpoint/CamelRoutesEndpointDisabledTest.java
@@ -28,7 +28,6 @@
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit4.SpringRunner;
 
-
 /**
  * Test for the {@link CamelRoutesEndpoint} actuator endpoint.
  */
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/cloud/CamelCloudServiceCallConfigurationTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/cloud/CamelCloudServiceCallConfigurationTest.java
index 3ca7d49..864ad21 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/cloud/CamelCloudServiceCallConfigurationTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/cloud/CamelCloudServiceCallConfigurationTest.java
@@ -21,13 +21,12 @@
 import org.apache.camel.cloud.ServiceFilter;
 import org.apache.camel.cloud.ServiceLoadBalancer;
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
-
 import org.junit.Ignore;
 import org.junit.Test;
-
 import org.springframework.boot.autoconfigure.AutoConfigurations;
 import org.springframework.boot.test.context.runner.ApplicationContextRunner;
 import org.springframework.core.env.Environment;
+
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
@@ -51,7 +50,7 @@
                     "camel.cloud.load-balancer.enabled=false",
                     "debug=false"
             )
-            .run((context) -> {
+            .run(context -> {
                     Environment env = context.getEnvironment();
                     assertFalse(env.getProperty("camel.cloud.enabled", Boolean.class));
                     assertFalse(env.getProperty("camel.cloud.service-discovery.enabled", Boolean.class));
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/issues/StreamCachingTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/issues/StreamCachingTest.java
index 8bf15ba..f7f94d0 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/issues/StreamCachingTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/issues/StreamCachingTest.java
@@ -20,8 +20,6 @@
 import java.io.FileInputStream;
 import java.util.List;
 
-import static java.util.Arrays.asList;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
@@ -32,6 +30,8 @@
 import org.springframework.core.convert.ConversionService;
 import org.springframework.core.convert.support.DefaultConversionService;
 
+import static java.util.Arrays.asList;
+
 public class StreamCachingTest extends CamelTestSupport {
     // this is not a spring boot test as its standalone Camel testing by extending CamelTestSupport
 
@@ -79,4 +79,4 @@
         return springTypeConverter;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/security/CamelSSLAutoConfigurationTest.java b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/security/CamelSSLAutoConfigurationTest.java
index f83c9d5..553702a 100644
--- a/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/security/CamelSSLAutoConfigurationTest.java
+++ b/components/camel-spring-boot/src/test/java/org/apache/camel/spring/boot/security/CamelSSLAutoConfigurationTest.java
@@ -19,9 +19,9 @@
 import org.apache.camel.spring.boot.CamelAutoConfiguration;
 import org.apache.camel.support.jsse.GlobalSSLContextParametersSupplier;
 import org.junit.Test;
-
 import org.springframework.boot.autoconfigure.AutoConfigurations;
 import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -47,7 +47,7 @@
                     "camel.ssl.config.trust-managers.key-store.password=changeit",
                     "camel.ssl.config.trust-managers.key-store.type=jks"
             )
-            .run((context) -> {
+            .run(context -> {
                     GlobalSSLContextParametersSupplier supplier = context.getBean(GlobalSSLContextParametersSupplier.class);
                     assertThat(context).hasSingleBean(CamelSSLAutoConfiguration.class);
                     assertNotNull(supplier);
@@ -66,4 +66,4 @@
 }
 
 
-   
\ No newline at end of file
+   
diff --git a/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancer.java b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancer.java
index 8eb5374..6a1ebbc 100644
--- a/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancer.java
+++ b/components/camel-spring-cloud/src/main/java/org/apache/camel/spring/cloud/CamelSpringCloudServiceLoadBalancer.java
@@ -75,4 +75,4 @@
     public interface LoadBalancerClientAdapter {
         ServiceLoadBalancer adapt(LoadBalancerClient client);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/config/CamelSourceAdapterParser.java b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/config/CamelSourceAdapterParser.java
index 6de5c45..0fe5143 100644
--- a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/config/CamelSourceAdapterParser.java
+++ b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/config/CamelSourceAdapterParser.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.spring.integration.adapter.config;
 
 import org.w3c.dom.Element;
+
 import org.apache.camel.component.spring.integration.adapter.CamelSourceAdapter;
 
 /**
diff --git a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/config/CamelTargetAdapterParser.java b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/config/CamelTargetAdapterParser.java
index 21e2a94..9db75b7 100644
--- a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/config/CamelTargetAdapterParser.java
+++ b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/config/CamelTargetAdapterParser.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.spring.integration.adapter.config;
 
 import org.w3c.dom.Element;
+
 import org.apache.camel.component.spring.integration.adapter.CamelTargetAdapter;
 
 /**
diff --git a/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java b/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java
index 3f4c0a4..adbfe6a 100644
--- a/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java
+++ b/components/camel-spring-javaconfig/src/main/java/org/apache/camel/spring/javaconfig/CamelConfiguration.java
@@ -20,8 +20,6 @@
 import java.util.List;
 import java.util.Map;
 
-import static java.util.Collections.emptyList;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.ProducerTemplate;
@@ -39,6 +37,8 @@
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+import static java.util.Collections.emptyList;
+
 /**
  * A useful base class for writing
  * <a
diff --git a/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/LoadingRawCamelConfigurationTest.java b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/LoadingRawCamelConfigurationTest.java
index ab7f64d..53964b0 100644
--- a/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/LoadingRawCamelConfigurationTest.java
+++ b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/autowire/LoadingRawCamelConfigurationTest.java
@@ -26,6 +26,7 @@
 import org.springframework.context.annotation.Configuration;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+
 import static org.junit.Assert.assertNotNull;
 
 @ContextConfiguration(
diff --git a/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/test/JavaConfigWithNestedConfigClassTest.java b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/test/JavaConfigWithNestedConfigClassTest.java
index 098c1d8..e8f9cad 100644
--- a/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/test/JavaConfigWithNestedConfigClassTest.java
+++ b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/test/JavaConfigWithNestedConfigClassTest.java
@@ -25,6 +25,7 @@
 import org.springframework.stereotype.Component;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+
 import static org.junit.Assert.assertEquals;
 
 @RunWith(CamelSpringJUnit4ClassRunner.class)
@@ -52,4 +53,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/test/JavaConfigWithPostProcessorTest.java b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/test/JavaConfigWithPostProcessorTest.java
index e44b4ef..bd0d650 100644
--- a/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/test/JavaConfigWithPostProcessorTest.java
+++ b/components/camel-spring-javaconfig/src/test/java/org/apache/camel/spring/javaconfig/test/JavaConfigWithPostProcessorTest.java
@@ -23,6 +23,7 @@
 import org.springframework.stereotype.Component;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+
 import static org.junit.Assert.assertEquals;
 
 @RunWith(CamelSpringJUnit4ClassRunner.class)
diff --git a/components/camel-spring-ldap/src/main/java/org/apache/camel/component/springldap/SpringLdapProducer.java b/components/camel-spring-ldap/src/main/java/org/apache/camel/component/springldap/SpringLdapProducer.java
index 14ca02a..9b6b7f3 100644
--- a/components/camel-spring-ldap/src/main/java/org/apache/camel/component/springldap/SpringLdapProducer.java
+++ b/components/camel-spring-ldap/src/main/java/org/apache/camel/component/springldap/SpringLdapProducer.java
@@ -1,135 +1,136 @@
-/*
- * 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.component.springldap;
-
-import java.util.Map;
-import java.util.function.BiFunction;
-import javax.naming.NamingException;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.ModificationItem;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.support.DefaultProducer;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.ldap.core.AttributesMapper;
-import org.springframework.ldap.core.ContextSource;
-import org.springframework.ldap.core.LdapOperations;
-import org.springframework.ldap.core.LdapTemplate;
-import org.springframework.ldap.core.support.BaseLdapPathContextSource;
-import org.springframework.ldap.query.LdapQueryBuilder;
-
-public class SpringLdapProducer extends DefaultProducer {
-
-    public static final String DN = "dn";
-    public static final String FILTER = "filter";
-    public static final String ATTRIBUTES = "attributes";
-    public static final String PASSWORD = "password";
-    public static final String MODIFICATION_ITEMS = "modificationItems";
-
-    public static final String FUNCTION = "function";
-    public static final String REQUEST = "request";
-
-    SpringLdapEndpoint endpoint;
-
-    private AttributesMapper<Object> mapper = new AttributesMapper<Object>() {
-
-        @Override
-        public Object mapFromAttributes(Attributes attributes) throws NamingException {
-            return attributes;
-        }
-    };
-
-    /**
-     * Initializes the SpringLdapProducer with the given endpoint
-     */
-    public SpringLdapProducer(SpringLdapEndpoint endpoint) {
-        super(endpoint);
-        this.endpoint = endpoint;
-    }
-
-    /**
-     * Performs the LDAP operation defined in SpringLdapEndpoint that created
-     * this producer. The in-message in the exchange must be a map, containing
-     * the following entries:
-     * 
-     * <pre>
-     * key: "dn" - base DN for the LDAP operation
-     * key: "filter" - necessary for the search operation only; LDAP filter for the search operation,
-     * see <a http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol>http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol</a>
-     * key: "attributes" - necessary for the bind operation only; an instance of javax.naming.directory.Attributes,
-     * containing the information necessary to create an LDAP node.
-     * key: "password" - necessary for the authentication operation only;
-     * key: "modificationItems" - necessary for the modify_attributes operation only;
-     * key: "function" - necessary for the function_driven operation only; provides a flexible hook into the {@link LdapTemplate} to call any method
-     * key: "request" - necessary for the function_driven operation only; passed into the "function" to enable the client to bind parameters that need to be passed into the {@link LdapTemplate}
-     * </pre>
-     * 
-     * The keys are defined as final fields above.
-     */
-    @Override
-    public void process(Exchange exchange) throws Exception {
-        @SuppressWarnings("unchecked")
-        Map<String, Object> body = exchange.getIn().getBody(Map.class);
-
-        LdapOperation operation = endpoint.getOperation();
-        if (null == operation) {
-            throw new UnsupportedOperationException("LDAP operation must not be empty, but you provided an empty operation");
-        }
-
-        LdapTemplate ldapTemplate = endpoint.getLdapTemplate();
-
-        String dn = (String)body.get(DN);
-        if (StringUtils.isBlank(dn)) {
-            ContextSource contextSource = ldapTemplate.getContextSource();
-            if (contextSource instanceof BaseLdapPathContextSource) {
-                dn = ((BaseLdapPathContextSource) contextSource).getBaseLdapPathAsString();
-            }
-        }
-        if (operation != LdapOperation.FUNCTION_DRIVEN && (StringUtils.isBlank(dn))) {
-            throw new UnsupportedOperationException("DN must not be empty, but you provided an empty DN");
-        }
-
-        switch (operation) {
-        case SEARCH:
-            String filter = (String)body.get(FILTER);
-            exchange.getIn().setBody(ldapTemplate.search(dn, filter, endpoint.scopeValue(), mapper));
-            break;
-        case BIND:
-            Attributes attributes = (Attributes)body.get(ATTRIBUTES);
-            ldapTemplate.bind(dn, null, attributes);
-            break;
-        case UNBIND:
-            ldapTemplate.unbind(dn);
-            break;
-        case AUTHENTICATE:
-            ldapTemplate.authenticate(LdapQueryBuilder.query().base(dn).filter((String)body.get(FILTER)), (String)body.get(PASSWORD));
-            break;
-        case MODIFY_ATTRIBUTES:
-            ModificationItem[] modificationItems = (ModificationItem[])body.get(MODIFICATION_ITEMS);
-            ldapTemplate.modifyAttributes(dn, modificationItems);
-            break;
-        case FUNCTION_DRIVEN:
-            BiFunction<LdapOperations, Object, ?> ldapOperationFunction = (BiFunction<LdapOperations, Object, ?>)body.get(FUNCTION);
-            Object ldapOperationRequest = body.get(REQUEST);
-            exchange.getIn().setBody(ldapOperationFunction.apply(ldapTemplate, ldapOperationRequest));
-            break;
-        default:
-            throw new UnsupportedOperationException("Bug in the Spring-LDAP component. Despite of all assertions, you managed to call an unsupported operation '" + operation
-                                                    + "'");
-        }
-    }
-}
+/*
+ * 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.component.springldap;
+
+import java.util.Map;
+import java.util.function.BiFunction;
+
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.ModificationItem;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.support.DefaultProducer;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.ldap.core.AttributesMapper;
+import org.springframework.ldap.core.ContextSource;
+import org.springframework.ldap.core.LdapOperations;
+import org.springframework.ldap.core.LdapTemplate;
+import org.springframework.ldap.core.support.BaseLdapPathContextSource;
+import org.springframework.ldap.query.LdapQueryBuilder;
+
+public class SpringLdapProducer extends DefaultProducer {
+
+    public static final String DN = "dn";
+    public static final String FILTER = "filter";
+    public static final String ATTRIBUTES = "attributes";
+    public static final String PASSWORD = "password";
+    public static final String MODIFICATION_ITEMS = "modificationItems";
+
+    public static final String FUNCTION = "function";
+    public static final String REQUEST = "request";
+
+    SpringLdapEndpoint endpoint;
+
+    private AttributesMapper<Object> mapper = new AttributesMapper<Object>() {
+
+        @Override
+        public Object mapFromAttributes(Attributes attributes) throws NamingException {
+            return attributes;
+        }
+    };
+
+    /**
+     * Initializes the SpringLdapProducer with the given endpoint
+     */
+    public SpringLdapProducer(SpringLdapEndpoint endpoint) {
+        super(endpoint);
+        this.endpoint = endpoint;
+    }
+
+    /**
+     * Performs the LDAP operation defined in SpringLdapEndpoint that created
+     * this producer. The in-message in the exchange must be a map, containing
+     * the following entries:
+     * 
+     * <pre>
+     * key: "dn" - base DN for the LDAP operation
+     * key: "filter" - necessary for the search operation only; LDAP filter for the search operation,
+     * see <a http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol>http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol</a>
+     * key: "attributes" - necessary for the bind operation only; an instance of javax.naming.directory.Attributes,
+     * containing the information necessary to create an LDAP node.
+     * key: "password" - necessary for the authentication operation only;
+     * key: "modificationItems" - necessary for the modify_attributes operation only;
+     * key: "function" - necessary for the function_driven operation only; provides a flexible hook into the {@link LdapTemplate} to call any method
+     * key: "request" - necessary for the function_driven operation only; passed into the "function" to enable the client to bind parameters that need to be passed into the {@link LdapTemplate}
+     * </pre>
+     * 
+     * The keys are defined as final fields above.
+     */
+    @Override
+    public void process(Exchange exchange) throws Exception {
+        @SuppressWarnings("unchecked")
+        Map<String, Object> body = exchange.getIn().getBody(Map.class);
+
+        LdapOperation operation = endpoint.getOperation();
+        if (null == operation) {
+            throw new UnsupportedOperationException("LDAP operation must not be empty, but you provided an empty operation");
+        }
+
+        LdapTemplate ldapTemplate = endpoint.getLdapTemplate();
+
+        String dn = (String)body.get(DN);
+        if (StringUtils.isBlank(dn)) {
+            ContextSource contextSource = ldapTemplate.getContextSource();
+            if (contextSource instanceof BaseLdapPathContextSource) {
+                dn = ((BaseLdapPathContextSource) contextSource).getBaseLdapPathAsString();
+            }
+        }
+        if (operation != LdapOperation.FUNCTION_DRIVEN && (StringUtils.isBlank(dn))) {
+            throw new UnsupportedOperationException("DN must not be empty, but you provided an empty DN");
+        }
+
+        switch (operation) {
+        case SEARCH:
+            String filter = (String)body.get(FILTER);
+            exchange.getIn().setBody(ldapTemplate.search(dn, filter, endpoint.scopeValue(), mapper));
+            break;
+        case BIND:
+            Attributes attributes = (Attributes)body.get(ATTRIBUTES);
+            ldapTemplate.bind(dn, null, attributes);
+            break;
+        case UNBIND:
+            ldapTemplate.unbind(dn);
+            break;
+        case AUTHENTICATE:
+            ldapTemplate.authenticate(LdapQueryBuilder.query().base(dn).filter((String)body.get(FILTER)), (String)body.get(PASSWORD));
+            break;
+        case MODIFY_ATTRIBUTES:
+            ModificationItem[] modificationItems = (ModificationItem[])body.get(MODIFICATION_ITEMS);
+            ldapTemplate.modifyAttributes(dn, modificationItems);
+            break;
+        case FUNCTION_DRIVEN:
+            BiFunction<LdapOperations, Object, ?> ldapOperationFunction = (BiFunction<LdapOperations, Object, ?>)body.get(FUNCTION);
+            Object ldapOperationRequest = body.get(REQUEST);
+            exchange.getIn().setBody(ldapOperationFunction.apply(ldapTemplate, ldapOperationRequest));
+            break;
+        default:
+            throw new UnsupportedOperationException("Bug in the Spring-LDAP component. Despite of all assertions, you managed to call an unsupported operation '" + operation
+                                                    + "'");
+        }
+    }
+}
diff --git a/components/camel-spring-ldap/src/test/java/org/apache/camel/component/springldap/SpringLdapComponentTest.java b/components/camel-spring-ldap/src/test/java/org/apache/camel/component/springldap/SpringLdapComponentTest.java
index da96fd0a..c471549 100644
--- a/components/camel-spring-ldap/src/test/java/org/apache/camel/component/springldap/SpringLdapComponentTest.java
+++ b/components/camel-spring-ldap/src/test/java/org/apache/camel/component/springldap/SpringLdapComponentTest.java
@@ -20,6 +20,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.naming.directory.Attributes;
 import javax.naming.directory.BasicAttributes;
 import javax.naming.directory.SearchControls;
diff --git a/components/camel-spring-security/src/test/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicyTest.java b/components/camel-spring-security/src/test/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicyTest.java
index 4fd1f97..7c69482 100644
--- a/components/camel-spring-security/src/test/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicyTest.java
+++ b/components/camel-spring-security/src/test/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicyTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.spring.security;
 
-
 import java.util.Collections;
 import java.util.List;
 
diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
index 885c832..46f5acc 100644
--- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
+++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
@@ -18,6 +18,7 @@
 
 import java.util.Iterator;
 import java.util.Map;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.xml.namespace.QName;
 import javax.xml.soap.MimeHeaders;
diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceHelper.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceHelper.java
index 5a0298f..c9bd1a5 100644
--- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceHelper.java
+++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceHelper.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.spring.ws;
 
 import java.util.Properties;
+
 import javax.xml.transform.Result;
 import javax.xml.transform.Source;
 import javax.xml.transform.Transformer;
diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelDirectConnection.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelDirectConnection.java
index eccd8cc..1d054a9 100644
--- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelDirectConnection.java
+++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelDirectConnection.java
@@ -1,87 +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.component.spring.ws.bean;
-
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.CamelExecutionException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.ws.WebServiceMessage;
-import org.springframework.ws.WebServiceMessageFactory;
-import org.springframework.ws.transport.WebServiceConnection;
-
-/**
- * Passes wsa:replyTo message back to the camel routing
- */
-public class CamelDirectConnection implements WebServiceConnection {
-    private static final Logger LOG = LoggerFactory.getLogger(CamelDirectConnection.class);
-    private CamelContext camelContext;
-    private URI destination;
-
-    public CamelDirectConnection(CamelContext camelContext, URI uri) throws URISyntaxException {
-        this.camelContext = camelContext;
-        destination = new URI("direct:" + uri);
-    }
-
-    @Override
-    public void send(WebServiceMessage message) throws IOException {
-        try {
-            camelContext.createProducerTemplate().sendBody(destination.toString(), message);
-        } catch (CamelExecutionException e) {
-            // simply discard replyTo message
-            LOG.warn("Could not found any camel endpoint [" + destination + "] for wsa:ReplyTo camel mapping.", e);
-        }
-    }
-
-    @Override
-    public WebServiceMessage receive(WebServiceMessageFactory messageFactory) throws IOException {
-        return null;
-    }
-
-    @Override
-    public URI getUri() throws URISyntaxException {
-        return destination;
-    }
-
-    @Override
-    public boolean hasError() throws IOException {
-        return false;
-    }
-
-    @Override
-    public String getErrorMessage() throws IOException {
-        return null;
-    }
-
-    @Override
-    public void close() throws IOException {
-
-    }
-
-    public CamelContext getCamelContext() {
-        return camelContext;
-    }
-
-    public void setCamelContext(CamelContext camelContext) {
-        this.camelContext = camelContext;
-    }
-
-}
+/*
+ * 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.component.spring.ws.bean;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelExecutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.ws.WebServiceMessage;
+import org.springframework.ws.WebServiceMessageFactory;
+import org.springframework.ws.transport.WebServiceConnection;
+
+/**
+ * Passes wsa:replyTo message back to the camel routing
+ */
+public class CamelDirectConnection implements WebServiceConnection {
+    private static final Logger LOG = LoggerFactory.getLogger(CamelDirectConnection.class);
+    private CamelContext camelContext;
+    private URI destination;
+
+    public CamelDirectConnection(CamelContext camelContext, URI uri) throws URISyntaxException {
+        this.camelContext = camelContext;
+        destination = new URI("direct:" + uri);
+    }
+
+    @Override
+    public void send(WebServiceMessage message) throws IOException {
+        try {
+            camelContext.createProducerTemplate().sendBody(destination.toString(), message);
+        } catch (CamelExecutionException e) {
+            // simply discard replyTo message
+            LOG.warn("Could not found any camel endpoint [" + destination + "] for wsa:ReplyTo camel mapping.", e);
+        }
+    }
+
+    @Override
+    public WebServiceMessage receive(WebServiceMessageFactory messageFactory) throws IOException {
+        return null;
+    }
+
+    @Override
+    public URI getUri() throws URISyntaxException {
+        return destination;
+    }
+
+    @Override
+    public boolean hasError() throws IOException {
+        return false;
+    }
+
+    @Override
+    public String getErrorMessage() throws IOException {
+        return null;
+    }
+
+    @Override
+    public void close() throws IOException {
+
+    }
+
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
+}
diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java
index fa764e6..ab7a591 100644
--- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java
+++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java
@@ -19,6 +19,7 @@
 import java.net.URISyntaxException;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+
 import javax.xml.XMLConstants;
 import javax.xml.namespace.QName;
 import javax.xml.transform.TransformerException;
diff --git a/components/camel-spring-ws/src/test/java/net/javacrumbs/calc/model/ObjectFactory.java b/components/camel-spring-ws/src/test/java/net/javacrumbs/calc/model/ObjectFactory.java
index 7a31566..d695d65 100644
--- a/components/camel-spring-ws/src/test/java/net/javacrumbs/calc/model/ObjectFactory.java
+++ b/components/camel-spring-ws/src/test/java/net/javacrumbs/calc/model/ObjectFactory.java
@@ -27,7 +27,6 @@
 
 import javax.xml.bind.annotation.XmlRegistry;
 
-
 /**
  * This object contains factory methods for each 
  * Java content interface and Java element interface 
diff --git a/components/camel-spring-ws/src/test/java/net/javacrumbs/calc/model/PlusRequest.java b/components/camel-spring-ws/src/test/java/net/javacrumbs/calc/model/PlusRequest.java
index 25e846f..52071e2 100644
--- a/components/camel-spring-ws/src/test/java/net/javacrumbs/calc/model/PlusRequest.java
+++ b/components/camel-spring-ws/src/test/java/net/javacrumbs/calc/model/PlusRequest.java
@@ -30,7 +30,6 @@
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
  * Java class for anonymous complex type.
  * 
diff --git a/components/camel-spring-ws/src/test/java/net/javacrumbs/calc/model/PlusResponse.java b/components/camel-spring-ws/src/test/java/net/javacrumbs/calc/model/PlusResponse.java
index 2334daf..06007f8 100644
--- a/components/camel-spring-ws/src/test/java/net/javacrumbs/calc/model/PlusResponse.java
+++ b/components/camel-spring-ws/src/test/java/net/javacrumbs/calc/model/PlusResponse.java
@@ -29,7 +29,6 @@
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-
 /**
  * Java class for anonymous complex type.
  * 
diff --git a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerBreadcrumbIdTest.java b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerBreadcrumbIdTest.java
index 16329ac..32f2d25 100644
--- a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerBreadcrumbIdTest.java
+++ b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerBreadcrumbIdTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.spring.ws;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerExceptionPropagationRouteTest.java b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerExceptionPropagationRouteTest.java
index ac1ac0c..25b7744 100644
--- a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerExceptionPropagationRouteTest.java
+++ b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerExceptionPropagationRouteTest.java
@@ -99,4 +99,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerMarshallingRouteTest.java b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerMarshallingRouteTest.java
index 1fc8101..014f523 100644
--- a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerMarshallingRouteTest.java
+++ b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerMarshallingRouteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.spring.ws;
+
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.spring.ws.bean.CamelEndpointMapping;
@@ -152,4 +153,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/SoapResponseAttachmentTest.java b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/SoapResponseAttachmentTest.java
index d4a9e53..32264c5 100644
--- a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/SoapResponseAttachmentTest.java
+++ b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/SoapResponseAttachmentTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.spring.ws;
+
 import javax.activation.DataHandler;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/processor/OkResponseProcessor.java b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/processor/OkResponseProcessor.java
index e3c469a..a8774bf 100644
--- a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/processor/OkResponseProcessor.java
+++ b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/processor/OkResponseProcessor.java
@@ -28,8 +28,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
-
 /**
  * Generates static response on StockQuote webservice requests
  */
diff --git a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/security/ProducerWss4JSecurityHeaderTest.java b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/security/ProducerWss4JSecurityHeaderTest.java
index 567eacd..492c162 100644
--- a/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/security/ProducerWss4JSecurityHeaderTest.java
+++ b/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/security/ProducerWss4JSecurityHeaderTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.spring.ws.security;
+
 import net.javacrumbs.calc.model.PlusRequest;
 import net.javacrumbs.calc.model.PlusResponse;
 import org.apache.camel.Produce;
diff --git a/components/camel-spring/src/main/java/org/apache/camel/spring/SpringModelJAXBContextFactory.java b/components/camel-spring/src/main/java/org/apache/camel/spring/SpringModelJAXBContextFactory.java
index 35430f6..76a8066 100644
--- a/components/camel-spring/src/main/java/org/apache/camel/spring/SpringModelJAXBContextFactory.java
+++ b/components/camel-spring/src/main/java/org/apache/camel/spring/SpringModelJAXBContextFactory.java
@@ -18,7 +18,6 @@
 
 import org.apache.camel.impl.DefaultModelJAXBContextFactory;
 
-
 public class SpringModelJAXBContextFactory extends DefaultModelJAXBContextFactory {
 
     public static final String ADDITIONAL_JAXB_CONTEXT_PACKAGES = ":"
diff --git a/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.java b/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.java
index 1b8b3a3..046ecc8 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.java
@@ -26,4 +26,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/component/properties/SpringPropertiesComponentEIPChoiceConvertBodyToTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.java b/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.java
index db1080e..d83ff2c 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.java
@@ -26,4 +26,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/component/properties/SpringPropertiesComponentEIPConvertBodyToTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/component/rest/SpringFromRestDuplicateTest.java b/components/camel-spring/src/test/java/org/apache/camel/component/rest/SpringFromRestDuplicateTest.java
index 73db61e..5c467c2 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/component/rest/SpringFromRestDuplicateTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/component/rest/SpringFromRestDuplicateTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.rest;
+
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spring.SpringTestSupport;
 import org.junit.Before;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextAwareTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextAwareTest.java
index 09bbe9f..91a10f9 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextAwareTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextAwareTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring;
+
 import java.util.Map;
 
 import org.apache.camel.impl.engine.DefaultConsumerTemplate;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextFactoryBeanTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextFactoryBeanTest.java
index 4a9b0ac..6392dba 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextFactoryBeanTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/CamelContextFactoryBeanTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring;
+
 import java.net.URL;
 import java.util.LinkedList;
 import java.util.List;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/CustomProcessorWithNamespacesTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/CustomProcessorWithNamespacesTest.java
index b1fe2f8..fe2d22d 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/CustomProcessorWithNamespacesTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/CustomProcessorWithNamespacesTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring;
+
 import java.util.List;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/DefaultJMXAgentTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/DefaultJMXAgentTest.java
index a4b9482..f45bb21 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/DefaultJMXAgentTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/DefaultJMXAgentTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring;
+
 import java.lang.management.ManagementFactory;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBean.java b/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBean.java
index feca396..cf3b061 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBean.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBean.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.spring;
 
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.PollingConsumer;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBeanTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBeanTest.java
index 3aa3ed4..165df02 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBeanTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/InjectedBeanTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.springframework.context.support.AbstractXmlApplicationContext;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/JMXAgentTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/JMXAgentTest.java
index 0b2db86..32ea9fd 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/JMXAgentTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/JMXAgentTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring;
+
 import javax.management.MBeanServerConnection;
 import javax.management.remote.JMXConnector;
 import javax.management.remote.JMXConnectorFactory;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/RoutingUsingCamelContextFactoryTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/RoutingUsingCamelContextFactoryTest.java
index 689f787..31c40ef 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/RoutingUsingCamelContextFactoryTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/RoutingUsingCamelContextFactoryTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring;
+
 import java.util.List;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/SendMessageOnRouteStartAndStopTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/SendMessageOnRouteStartAndStopTest.java
index 9275544..fdb40a93 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/SendMessageOnRouteStartAndStopTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/SendMessageOnRouteStartAndStopTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring;
+
 import java.io.File;
 
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java
index a0e3e07..394673a 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/bind/BeanInfoTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.bind;
+
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.camel.AsyncCallback;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/config/CamelContextAutoStartupTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/config/CamelContextAutoStartupTest.java
index fc305bb..a6c8d04 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/config/CamelContextAutoStartupTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/config/CamelContextAutoStartupTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.config;
+
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringCamelContext;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerRouteContextRefNotFoundTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerRouteContextRefNotFoundTest.java
index b2d72cf..5b4d24b 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerRouteContextRefNotFoundTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerRouteContextRefNotFoundTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.config;
+
 import org.apache.camel.FailedToCreateRouteException;
 import org.apache.camel.NoSuchBeanException;
 import org.apache.camel.spring.SpringTestSupport;
@@ -47,4 +48,4 @@
     public void testDummy() {
         // noop
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/config/OnExceptionNoExceptionConfiguredTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/config/OnExceptionNoExceptionConfiguredTest.java
index 5cd4547..902dfa9 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/config/OnExceptionNoExceptionConfiguredTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/config/OnExceptionNoExceptionConfiguredTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.config;
+
 import org.apache.camel.spring.SpringTestSupport;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/config/RouteAutoStartupPropertiesTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/config/RouteAutoStartupPropertiesTest.java
index eb52fa8..e0906f6 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/config/RouteAutoStartupPropertiesTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/config/RouteAutoStartupPropertiesTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.config;
+
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringCamelContext;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoFromTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoFromTest.java
index 8d934dd..fda1142 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoFromTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoFromTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.config;
+
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spring.SpringTestSupport;
 import org.junit.Before;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoOutputTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoOutputTest.java
index 2b11a0a..bb8b6cb 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoOutputTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/config/SpringRouteNoOutputTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.config;
+
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spring.SpringTestSupport;
 import org.junit.Before;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/SpringComponentScanTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/SpringComponentScanTest.java
index 25eee08..3201f70 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/SpringComponentScanTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/SpringComponentScanTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.config.scan;
+
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.ContextTestSupport;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/SpringComponentScanWithDeprecatedPackagesTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/SpringComponentScanWithDeprecatedPackagesTest.java
index 214d8ec..2cf22cf 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/SpringComponentScanWithDeprecatedPackagesTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/config/scan/SpringComponentScanWithDeprecatedPackagesTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.config.scan;
+
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.ModelCamelContext;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/example/ContentBasedRouteTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/example/ContentBasedRouteTest.java
index 95dbe6b..67d36b7 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/example/ContentBasedRouteTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/example/ContentBasedRouteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.example;
+
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringTestSupport;
 import org.junit.Before;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoConsumerTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoConsumerTest.java
index 20e28c0..5735430 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoConsumerTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoConsumerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.example;
+
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringTestSupport;
 import org.junit.Before;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoSenderTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoSenderTest.java
index b5006d0..8f3b53c 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoSenderTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoSenderTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.example;
+
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringTestSupport;
 import org.junit.Before;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoVmConsumerTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoVmConsumerTest.java
index d3eb45e..44c4995 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoVmConsumerTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/example/PojoVmConsumerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.example;
+
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringTestSupport;
 import org.junit.Before;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileConsumerPreMoveIssueTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileConsumerPreMoveIssueTest.java
index fd3471e..9c51a16 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileConsumerPreMoveIssueTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileConsumerPreMoveIssueTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/file/SpringFileConsumerPreMoveIssueTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileLanguageCBRTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileLanguageCBRTest.java
index a4575dc..8d9f526 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileLanguageCBRTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileLanguageCBRTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.file;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.spring.SpringTestSupport;
 import org.junit.Before;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/ContainerWideInterceptorTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/ContainerWideInterceptorTest.java
index 7c54288..289d6f6 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/ContainerWideInterceptorTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/ContainerWideInterceptorTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.interceptor;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.TestSupport;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/MixedPropagationTransactedTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/MixedPropagationTransactedTest.java
index 5fa5f3d..babd3f5 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/MixedPropagationTransactedTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/MixedPropagationTransactedTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.interceptor;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.RuntimeCamelException;
@@ -168,4 +169,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/MixedTransactionPropagationTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/MixedTransactionPropagationTest.java
index 42b00ef..e1211a6 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/MixedTransactionPropagationTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/MixedTransactionPropagationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.interceptor;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.RuntimeCamelException;
@@ -162,4 +163,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/NoStreamCachingInterceptorTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/NoStreamCachingInterceptorTest.java
index 4027ae7..40f8d47 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/NoStreamCachingInterceptorTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/NoStreamCachingInterceptorTest.java
@@ -52,4 +52,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/interceptor/noStreamCachingInterceptorTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/SpringTransactionalClientDataSourceTransactedTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/SpringTransactionalClientDataSourceTransactedTest.java
index a7b0a89..c8888dc 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/SpringTransactionalClientDataSourceTransactedTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/SpringTransactionalClientDataSourceTransactedTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.interceptor;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.RuntimeCamelException;
@@ -72,4 +73,4 @@
         assertEquals("Number of books", 1, count);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceMinimalConfigurationTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceMinimalConfigurationTest.java
index 41ba8a6..2badd11 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceMinimalConfigurationTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceMinimalConfigurationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.interceptor;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.RuntimeCamelException;
@@ -72,4 +73,4 @@
         assertEquals("Number of books", 1, count);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceTransactedWithFileOnExceptionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceTransactedWithFileOnExceptionTest.java
index 91145dcf..05cbb72 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceTransactedWithFileOnExceptionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceTransactedWithFileOnExceptionTest.java
@@ -78,4 +78,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceTransactedWithFileTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceTransactedWithFileTest.java
index 41319d9..45c404a 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceTransactedWithFileTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceTransactedWithFileTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.interceptor;
+
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.Exchange;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithDefaultErrorHandlerTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithDefaultErrorHandlerTest.java
index 57a167a..dee4667 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithDefaultErrorHandlerTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithDefaultErrorHandlerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.interceptor;
+
 import org.junit.Before;
 
 /**
@@ -30,4 +31,4 @@
         useTransactionErrorHandler = false;
     }
     
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithSpringRouteBuilderTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithSpringRouteBuilderTest.java
index ed69b1e..1e00c69 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithSpringRouteBuilderTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceWithSpringRouteBuilderTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.interceptor;
+
 import org.junit.Before;
 import org.springframework.context.support.AbstractXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientWithAnnotatedBeanTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientWithAnnotatedBeanTest.java
index 5e8726a..5de9b1c 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientWithAnnotatedBeanTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientWithAnnotatedBeanTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.interceptor;
+
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientWithRollbackTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientWithRollbackTest.java
index 151b624..ffb3194 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientWithRollbackTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientWithRollbackTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.interceptor;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.RollbackExchangeException;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/FileWireTapWithXMLPayloadIssueTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/FileWireTapWithXMLPayloadIssueTest.java
index c8bc788..e4910d1 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/FileWireTapWithXMLPayloadIssueTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/FileWireTapWithXMLPayloadIssueTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.issues;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringTestSupport;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringCatchNestedFailTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringCatchNestedFailTest.java
index 9ff677c..b7fdb05 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringCatchNestedFailTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringCatchNestedFailTest.java
@@ -78,4 +78,4 @@
         assertMockEndpointsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringFinallyNestedFailTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringFinallyNestedFailTest.java
index 7250a23..4fae244 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringFinallyNestedFailTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringFinallyNestedFailTest.java
@@ -81,4 +81,4 @@
         assertMockEndpointsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringRenameFileOnCommitIssueTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringRenameFileOnCommitIssueTest.java
index 73b7191..4f442f52 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringRenameFileOnCommitIssueTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringRenameFileOnCommitIssueTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.issues;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringTestSupport;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringTransactionErrorHandlerAndContextScopedOnExceptionIssueTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringTransactionErrorHandlerAndContextScopedOnExceptionIssueTest.java
index 31336ec..c2e475d 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringTransactionErrorHandlerAndContextScopedOnExceptionIssueTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringTransactionErrorHandlerAndContextScopedOnExceptionIssueTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.issues;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.CamelExecutionException;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringTryCatchFinallyAndErrorHandlerTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringTryCatchFinallyAndErrorHandlerTest.java
index 60d5955..b49131d 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringTryCatchFinallyAndErrorHandlerTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringTryCatchFinallyAndErrorHandlerTest.java
@@ -77,4 +77,4 @@
         assertMockEndpointsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringTryNestedFailTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringTryNestedFailTest.java
index e6ebd57..168d3f0 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringTryNestedFailTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/issues/SpringTryNestedFailTest.java
@@ -53,4 +53,4 @@
         assertMockEndpointsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringDualLoggingEventNotifierTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringDualLoggingEventNotifierTest.java
index 08300ba..91ee3b8 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringDualLoggingEventNotifierTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringDualLoggingEventNotifierTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/management/SpringDualLoggingEventNotifierTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringLoggingEventNotifierTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringLoggingEventNotifierTest.java
index 8cf96d2..20757e0 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringLoggingEventNotifierTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringLoggingEventNotifierTest.java
@@ -33,4 +33,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/management/SpringLoggingEventNotifierTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.java
index 8e4243a..1cf1c44 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedErrorHandlerTest.java
@@ -33,4 +33,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/management/SpringManagedErrorHandlerTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedStatisticsLevelRoutesOnlyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedStatisticsLevelRoutesOnlyTest.java
index 3a76ea93..13e60e0 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedStatisticsLevelRoutesOnlyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringManagedStatisticsLevelRoutesOnlyTest.java
@@ -33,4 +33,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/management/ManagedStatisticsLevelRoutesOnlyTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringPublishEventNotifierTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringPublishEventNotifierTest.java
index ff43c71..50b1809 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringPublishEventNotifierTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/management/SpringPublishEventNotifierTest.java
@@ -33,4 +33,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/management/SpringPublishEventNotifierTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/pollingconsumer/FileConsumerSpringSchedulerTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/pollingconsumer/FileConsumerSpringSchedulerTest.java
index 6029f82..90df9df 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/pollingconsumer/FileConsumerSpringSchedulerTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/pollingconsumer/FileConsumerSpringSchedulerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.pollingconsumer;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.spring.SpringTestSupport;
 import org.junit.Before;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringAggregateFromWireTapTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringAggregateFromWireTapTest.java
index 5e73212..1b555fb 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringAggregateFromWireTapTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringAggregateFromWireTapTest.java
@@ -26,4 +26,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringAggregateFromWireTapTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringAggregatorWithCustomStrategyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringAggregatorWithCustomStrategyTest.java
index a62ea719..ad2ce11 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringAggregatorWithCustomStrategyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringAggregatorWithCustomStrategyTest.java
@@ -44,4 +44,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator-custom-strategy.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringBatchResequencerAllowDuplicatesTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringBatchResequencerAllowDuplicatesTest.java
index 6cd5e28..a6a73db 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringBatchResequencerAllowDuplicatesTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringBatchResequencerAllowDuplicatesTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/BatchResequencerAllowDuplicatesTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringBatchResequencerJMSPriorityTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringBatchResequencerJMSPriorityTest.java
index a307b24..904ccb8 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringBatchResequencerJMSPriorityTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringBatchResequencerJMSPriorityTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/BatchResequencerJMSPriorityTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringCBRHeaderPredicateTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringCBRHeaderPredicateTest.java
index 23729f7..2a64044 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringCBRHeaderPredicateTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringCBRHeaderPredicateTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/CBRHeaderPredicateTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringChoiceTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringChoiceTest.java
index 014ab6e..e7cef2b 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringChoiceTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringChoiceTest.java
@@ -26,4 +26,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/choice.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipGetAndRemoveSetTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipGetAndRemoveSetTest.java
index 994fdfb..536b57a 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipGetAndRemoveSetTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipGetAndRemoveSetTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ClaimCheckEipGetAndRemoveSetTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipGetSetTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipGetSetTest.java
index ecdd702..69a8f93 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipGetSetTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipGetSetTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ClaimCheckEipGetSetTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopBodyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopBodyTest.java
index e083c7a..9c7f925 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopBodyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopBodyTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ClaimCheckEipPushPopBodyTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopHeadersPatternTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopHeadersPatternTest.java
index 8f8ccf5..bd8fedd 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopHeadersPatternTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopHeadersPatternTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ClaimCheckEipPushPopHeadersPatternTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopHeadersTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopHeadersTest.java
index a5249d7..d8aa554 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopHeadersTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopHeadersTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ClaimCheckEipPushPopHeadersTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopRemoveHeaderTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopRemoveHeaderTest.java
index 91f3110..6c60dd3 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopRemoveHeaderTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopRemoveHeaderTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ClaimCheckEipPushPopRemoveHeaderTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopTest.java
index d032d5a..1442bc2 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringClaimCheckEipPushPopTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ClaimCheckEipPushPopTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringCustomProcessorFactoryTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringCustomProcessorFactoryTest.java
index c8ae645..7882278 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringCustomProcessorFactoryTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringCustomProcessorFactoryTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/CustomProcessorFactoryTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDeadLetterChannelLogExhaustedMessageHistoryTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDeadLetterChannelLogExhaustedMessageHistoryTest.java
index a45faa0..0f8fce9 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDeadLetterChannelLogExhaustedMessageHistoryTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDeadLetterChannelLogExhaustedMessageHistoryTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/DeadLetterChannelLogExhaustedMessageHistoryTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDeadLetterChannelNoRedeliveryTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDeadLetterChannelNoRedeliveryTest.java
index da52841..97fe629 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDeadLetterChannelNoRedeliveryTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDeadLetterChannelNoRedeliveryTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringDeadLetterChannelNoRedeliveryTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDeadLetterChannelUseOriginalBodyWithFileTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDeadLetterChannelUseOriginalBodyWithFileTest.java
index fcb43a7..667010a 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDeadLetterChannelUseOriginalBodyWithFileTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDeadLetterChannelUseOriginalBodyWithFileTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringDeadLetterChannelUseOriginalExchangeWithFileTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerExchangeFormatterRefTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerExchangeFormatterRefTest.java
index a75876b..dbdeed9 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerExchangeFormatterRefTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerExchangeFormatterRefTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/DefaultErrorHandlerExchangeFormatterRefTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerLogExhaustedMessageHistoryTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerLogExhaustedMessageHistoryTest.java
index 1eb984c..c3cc9b2 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerLogExhaustedMessageHistoryTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerLogExhaustedMessageHistoryTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/DefaultErrorHandlerLogExhaustedMessageHistoryTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerRetryWhileTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerRetryWhileTest.java
index 6de091e..522f044 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerRetryWhileTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDefaultErrorHandlerRetryWhileTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/DefaultErrorHandlerRetryWhileTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDelayerPerRouteTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDelayerPerRouteTest.java
index b268b4f..e05fed8 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDelayerPerRouteTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDelayerPerRouteTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/delayerperroute.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDoubleLoadBalancerMisconfigurationTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDoubleLoadBalancerMisconfigurationTest.java
index 466a7a5..d6c6d27 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDoubleLoadBalancerMisconfigurationTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDoubleLoadBalancerMisconfigurationTest.java
@@ -48,4 +48,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/DoubleLoadBalancerMisconfigurationTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDynamicRouterTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDynamicRouterTest.java
index 0c60570..3de9081 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDynamicRouterTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringDynamicRouterTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this,
                 "org/apache/camel/spring/processor/SpringDynamicRouterTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEnrichExpressionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEnrichExpressionTest.java
index 44d7882..9b3fee5 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEnrichExpressionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEnrichExpressionTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/enrichExpressionTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEnricherRefTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEnricherRefTest.java
index 368ff94..2d04f76 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEnricherRefTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEnricherRefTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.processor;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -46,4 +47,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/enricherref.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEnricherTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEnricherTest.java
index cc4349b..3937489 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEnricherTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEnricherTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.processor;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEventNotifierExchangeSentExampleTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEventNotifierExchangeSentExampleTest.java
index bac276a4..26ebb7e 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEventNotifierExchangeSentExampleTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringEventNotifierExchangeSentExampleTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/EventNotifierExchangeSentExampleTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailoverMaximumFailoverAttemptsTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailoverMaximumFailoverAttemptsTest.java
index bdaa624..883ac2e 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailoverMaximumFailoverAttemptsTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailoverMaximumFailoverAttemptsTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/FailoverMaximumFailoverAttemptsTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailoverRoundRobinStickyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailoverRoundRobinStickyTest.java
index b322a88..a563342 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailoverRoundRobinStickyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailoverRoundRobinStickyTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/FailoverRoundRobinStickyTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailoverRoundRobinTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailoverRoundRobinTest.java
index 2c272c6..954c4f6 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailoverRoundRobinTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFailoverRoundRobinTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/FailoverRoundRobinTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFromEndpointTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFromEndpointTest.java
index da98f6f..33433c4 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFromEndpointTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFromEndpointTest.java
@@ -26,4 +26,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/fromEndpointTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFromMultipleEndpointTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFromMultipleEndpointTest.java
index 7123e11..69d07a0 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFromMultipleEndpointTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringFromMultipleEndpointTest.java
@@ -26,4 +26,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/fromMultipleEndpointTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInheritErrorHandlerDefaultTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInheritErrorHandlerDefaultTest.java
index 14c4bd9..2e8fdfe 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInheritErrorHandlerDefaultTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInheritErrorHandlerDefaultTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/InheritErrorHandlerDefaultTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInheritErrorHandlerFalseTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInheritErrorHandlerFalseTest.java
index df0b0b0..e4f18ab 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInheritErrorHandlerFalseTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInheritErrorHandlerFalseTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/InheritErrorHandlerFalseTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInheritErrorHandlerTrueTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInheritErrorHandlerTrueTest.java
index 73ee581..60c8126 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInheritErrorHandlerTrueTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInheritErrorHandlerTrueTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/InheritErrorHandlerTrueTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromUriRegexTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromUriRegexTest.java
index 0d8ac9b..78d9e3b 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromUriRegexTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromUriRegexTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.spring.processor;
 
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.processor.intercept.InterceptFromUriRegexTest;
 
@@ -34,4 +33,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringInterceptFromUriRegexTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromUriSimpleLogTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromUriSimpleLogTest.java
index 030bb24..19d0a55 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromUriSimpleLogTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromUriSimpleLogTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.spring.processor;
 
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.processor.intercept.InterceptFromUriSimpleLogTest;
 
@@ -34,4 +33,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringInterceptFromUriSimpleLogTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromUriWildcardTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromUriWildcardTest.java
index 4a2231f..6f7ab2f 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromUriWildcardTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromUriWildcardTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.spring.processor;
 
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.processor.intercept.InterceptFromUriWildcardTest;
 
@@ -34,4 +33,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringInterceptFromUriWildcardTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromWhenNoStopTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromWhenNoStopTest.java
index 30b720f..7c8a871 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromWhenNoStopTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromWhenNoStopTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringInterceptFromWhenNoStopTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromWhenTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromWhenTest.java
index 9c7cf89..832d136 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromWhenTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromWhenTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringInterceptFromWhenTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromWhenWithChoiceTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromWhenWithChoiceTest.java
index f8ea094..db8b27e 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromWhenWithChoiceTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptFromWhenWithChoiceTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringInterceptFromWhenWithChoiceTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointDynamicTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointDynamicTest.java
index 7606442..ce03e87 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointDynamicTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointDynamicTest.java
@@ -50,4 +50,4 @@
         assertMockEndpointsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointSkipTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointSkipTest.java
index 37cf5fa..e65d12c 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointSkipTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointSkipTest.java
@@ -42,4 +42,4 @@
         assertMockEndpointsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointTest.java
index c4e6e7f..caad870 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointTest.java
@@ -41,4 +41,4 @@
         assertMockEndpointsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointWhenTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointWhenTest.java
index 3c52f78..656afea 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointWhenTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSendToEndpointWhenTest.java
@@ -42,4 +42,4 @@
         assertMockEndpointsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteStopTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteStopTest.java
index a3e57cc..1b2d5b5 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteStopTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteStopTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.spring.processor;
 
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.processor.intercept.InterceptSimpleRouteStopTest;
 
@@ -34,4 +33,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringInterceptSimpleRouteStopTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteTest.java
index d53ae60..385dda6 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteTest.java
@@ -33,4 +33,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringInterceptSimpleRouteTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteWhenStopTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteWhenStopTest.java
index bae64e9..3a5c408 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteWhenStopTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteWhenStopTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.spring.processor;
 
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.processor.intercept.InterceptSimpleRouteWhenStopTest;
 
@@ -34,4 +33,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringInterceptSimpleRouteWhenStopTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteWhenTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteWhenTest.java
index 828f418..f0809b7 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteWhenTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringInterceptSimpleRouteWhenTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.spring.processor;
 
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.processor.intercept.InterceptSimpleRouteWhenTest;
 
@@ -34,4 +33,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringInterceptSimpleRouteWhenTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringLogProcessorTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringLogProcessorTest.java
index e7c03b3..d4a049c 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringLogProcessorTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringLogProcessorTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this,
                 "org/apache/camel/spring/processor/logProcessorTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringLogProcessorWithProvidedLoggerTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringLogProcessorWithProvidedLoggerTest.java
index 7eab17f..66afff2 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringLogProcessorWithProvidedLoggerTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringLogProcessorWithProvidedLoggerTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this,
             "org/apache/camel/spring/processor/logProcessorWithProvidedLoggerTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMarkRollbackOnlyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMarkRollbackOnlyTest.java
index 9c77ea3..5c71ba9 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMarkRollbackOnlyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMarkRollbackOnlyTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/markrollbackonly.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMessageHistoryDumpRoutingTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMessageHistoryDumpRoutingTest.java
index c2beaa7..80ee1b3 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMessageHistoryDumpRoutingTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMessageHistoryDumpRoutingTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/MessageHistoryDumpRoutingTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastNoStopOnExceptionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastNoStopOnExceptionTest.java
index 26a9199..446d35f 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastNoStopOnExceptionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastNoStopOnExceptionTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringMulticastNoStopOnExceptionTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastOnPrepareTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastOnPrepareTest.java
index e21f46a..b70929d 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastOnPrepareTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastOnPrepareTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/MulticastOnPrepareTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastStopOnExceptionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastStopOnExceptionTest.java
index 7e6a813..29c8013 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastStopOnExceptionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastStopOnExceptionTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringMulticastStopOnExceptionTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastSubUnitOfWorkTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastSubUnitOfWorkTest.java
index 4e840be..ed308e5 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastSubUnitOfWorkTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastSubUnitOfWorkTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringMulticastSubUnitOfWorkTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringNestedChoiceIssueTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringNestedChoiceIssueTest.java
index 7a8a557..7f4d3c5 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringNestedChoiceIssueTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringNestedChoiceIssueTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringNestedChoiceIssueTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptAndOnExceptionGlobalTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptAndOnExceptionGlobalTest.java
index 76eaa7f..d15b841 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptAndOnExceptionGlobalTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptAndOnExceptionGlobalTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringOnCompletionAndInterceptAndOnExceptionGlobalTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptGlobalTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptGlobalTest.java
index b84f717..2fc7740 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptGlobalTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptGlobalTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringOnCompletionAndInterceptGlobalTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptTest.java
index b7b19ca..cb378ae 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionAndInterceptTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringOnCompletionAndInterceptTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionGlobalTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionGlobalTest.java
index f2e1d87..2c82cf0 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionGlobalTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionGlobalTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringOnCompletionGlobalTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionModeTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionModeTest.java
index bd9fba1..fe66658 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionModeTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionModeTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringOnCompletionModeTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionOnCompleteOnlyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionOnCompleteOnlyTest.java
index 787ec6a..d2fb567 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionOnCompleteOnlyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionOnCompleteOnlyTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringOnCompletionOnCompleteOnlyTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionOnFailureOnlyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionOnFailureOnlyTest.java
index 6f4e3df..7343b70 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionOnFailureOnlyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionOnFailureOnlyTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringOnCompletionOnFailureOnlyTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionRouteScopeOverrideGlobalScopeTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionRouteScopeOverrideGlobalScopeTest.java
index 767589d..7bec343 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionRouteScopeOverrideGlobalScopeTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionRouteScopeOverrideGlobalScopeTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringOnCompletionRouteScopeOverrideGlobalScopeTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionTest.java
index 8d79227..f815208 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringOnCompletionTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionUseOriginalBodyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionUseOriginalBodyTest.java
index d6a63a6..a70a60f 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionUseOriginalBodyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionUseOriginalBodyTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringOnCompletionUseOriginalBodyTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionWhenTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionWhenTest.java
index 14b43c4..6c55651 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionWhenTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnCompletionWhenTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringOnCompletionWhenTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnExceptionContinueToRouteTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnExceptionContinueToRouteTest.java
index 619dbcf..035ca4b 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnExceptionContinueToRouteTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringOnExceptionContinueToRouteTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/OnExceptionContinueToRouteTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPolicyPerProcessorTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPolicyPerProcessorTest.java
index 68e1158..1f9573b 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPolicyPerProcessorTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPolicyPerProcessorTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/PolicyPerProcessorTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPolicyPerRouteTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPolicyPerRouteTest.java
index 097f269..96208e4 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPolicyPerRouteTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPolicyPerRouteTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/PolicyPerRouteTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPollEnrichExpressionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPollEnrichExpressionTest.java
index e2f710c..b2fe190 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPollEnrichExpressionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPollEnrichExpressionTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/pollEnrichExpressionTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPollEnricherRefTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPollEnricherRefTest.java
index c3bab49..7d43e7d 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPollEnricherRefTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPollEnricherRefTest.java
@@ -30,4 +30,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/pollEnricherRef.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPollEnricherTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPollEnricherTest.java
index aa00ef8..3a3416c 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPollEnricherTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringPollEnricherTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/pollEnricher.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRandomLoadBalanceTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRandomLoadBalanceTest.java
index 413b312..7906470 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRandomLoadBalanceTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRandomLoadBalanceTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/randomLoadBalance.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListAggregationStrategyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListAggregationStrategyTest.java
index bea44d3..dbb9c83 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListAggregationStrategyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListAggregationStrategyTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this,
                 "org/apache/camel/spring/processor/RecipientListAggregationStrategyTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListDoNotStopOnExceptionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListDoNotStopOnExceptionTest.java
index 7c7927d..9d802be 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListDoNotStopOnExceptionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListDoNotStopOnExceptionTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this,
                 "org/apache/camel/spring/processor/RecipientListDoNotStopOnExceptionTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListIgnoreInvalidEndpointsTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListIgnoreInvalidEndpointsTest.java
index 3e0c4b9..a3e5770 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListIgnoreInvalidEndpointsTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListIgnoreInvalidEndpointsTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/recipientListIgnoreInvalidEndpoints.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListOnPrepareTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListOnPrepareTest.java
index 21ad8c3..b80e78f 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListOnPrepareTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListOnPrepareTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/RecipientListOnPrepareTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListParallelOptionalPropertiesTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListParallelOptionalPropertiesTest.java
index 1854c6b..1d34bc3 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListParallelOptionalPropertiesTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListParallelOptionalPropertiesTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this,
                 "org/apache/camel/spring/processor/SpringRecipientListParallelOptionalPropertiesTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListParallelStreamingTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListParallelStreamingTest.java
index 693a45f..f7c5b8f 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListParallelStreamingTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListParallelStreamingTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this,
                 "org/apache/camel/spring/processor/SpringRecipientListParallelStreamingTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListParallelTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListParallelTest.java
index 3395c56..5ce9f40 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListParallelTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListParallelTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this,
                 "org/apache/camel/spring/processor/SpringRecipientListParallelTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListStopOnExceptionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListStopOnExceptionTest.java
index 773a2f9..2b67c58 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListStopOnExceptionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListStopOnExceptionTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this,
                 "org/apache/camel/spring/processor/RecipientListStopOnExceptionTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListSubUnitOfWorkTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListSubUnitOfWorkTest.java
index d1750f7..12738e0 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListSubUnitOfWorkTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListSubUnitOfWorkTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringRecipientListSubUnitOfWorkTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
index 27954d1..6a95caa 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
@@ -27,4 +27,4 @@
         return createSpringCamelContext(this,
                 "org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedPropertyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedPropertyTest.java
index 183b85c..c8ea436 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedPropertyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedPropertyTest.java
@@ -27,4 +27,4 @@
         return createSpringCamelContext(this,
                 "org/apache/camel/spring/processor/recipientListWithStringDelimitedProperty.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRedeliverToSubRouteTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRedeliverToSubRouteTest.java
index 7dfd148..930af6c 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRedeliverToSubRouteTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRedeliverToSubRouteTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/RedeliverToSubRouteTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRedeliveryErrorHandlerNoRedeliveryOnShutdownTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRedeliveryErrorHandlerNoRedeliveryOnShutdownTest.java
index a95f0c9..8d1b76f 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRedeliveryErrorHandlerNoRedeliveryOnShutdownTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRedeliveryErrorHandlerNoRedeliveryOnShutdownTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringRedeliveryErrorHandlerNoRedeliveryOnShutdownTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersExcludeTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersExcludeTest.java
index aa4d4a1..31aa34f 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersExcludeTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersExcludeTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/removeHeadersExclude.xml");
     }
     
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersTest.java
index d075f3d..59a3d97 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRemoveHeadersTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/removeHeaders.xml");
     }
     
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringResequenceStreamRejectOldExchangesTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringResequenceStreamRejectOldExchangesTest.java
index e35513c..d3481603 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringResequenceStreamRejectOldExchangesTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringResequenceStreamRejectOldExchangesTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/resequencerRejectOld.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringResequencerTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringResequencerTest.java
index f5a4bca..9ed5c37 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringResequencerTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringResequencerTest.java
@@ -26,4 +26,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/resequencer.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRollbackTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRollbackTest.java
index cc524f5..5845d79 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRollbackTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRollbackTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/rollback.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteNoAutoStartupTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteNoAutoStartupTest.java
index ca919f2..6f793e1 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteNoAutoStartupTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteNoAutoStartupTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/RouteNoAutoStartupTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStartupOrderSimpleTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStartupOrderSimpleTest.java
index 8a189ff..a2cdb20 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStartupOrderSimpleTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStartupOrderSimpleTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/RouteStartupOrderSimpleTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStartupOrderTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStartupOrderTest.java
index aaae3e5..fdb7bf9 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStartupOrderTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStartupOrderTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/RouteStartupOrderTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStartupOrderWithDefaultTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStartupOrderWithDefaultTest.java
index 8587969..6b0c8cb 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStartupOrderWithDefaultTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStartupOrderWithDefaultTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/RouteStartupOrderWithDefaultTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStopTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStopTest.java
index 04cc5e2..2a11bf3 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStopTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteStopTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.spring.processor;
 
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.processor.RouteStopTest;
 
@@ -34,4 +33,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringRouteStopTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteTopLevelMisconfiguredTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteTopLevelMisconfiguredTest.java
index 0461831..7b68b31 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteTopLevelMisconfiguredTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteTopLevelMisconfiguredTest.java
@@ -61,4 +61,4 @@
         // noop
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteWithConstantFieldFromExchangeFailTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteWithConstantFieldFromExchangeFailTest.java
index 7565461..d6659fd 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteWithConstantFieldFromExchangeFailTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteWithConstantFieldFromExchangeFailTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/RouteWithConstantFieldFromExchangeFailTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteWithConstantFieldFromExchangeTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteWithConstantFieldFromExchangeTest.java
index 1d3bc72..118c964 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteWithConstantFieldFromExchangeTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRouteWithConstantFieldFromExchangeTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/RouteWithConstantFieldFromExchangeTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringScriptExternalTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringScriptExternalTest.java
index f2ea96f..ff513e3 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringScriptExternalTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringScriptExternalTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.processor;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -48,4 +49,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/script-external.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringScriptTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringScriptTest.java
index c2437b49..9430284 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringScriptTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringScriptTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.processor;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -48,4 +49,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/script.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetExchangePatternTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetExchangePatternTest.java
index 74839ce..5f83e4f 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetExchangePatternTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetExchangePatternTest.java
@@ -16,13 +16,11 @@
  */
 package org.apache.camel.spring.processor;
 
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.processor.SetExchangePatternTest;
 
 import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
 
-
 public class SpringSetExchangePatternTest extends SetExchangePatternTest {
     
     @Override
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringShutdownCompleteAllTasksTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringShutdownCompleteAllTasksTest.java
index f4fb852..547eacc 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringShutdownCompleteAllTasksTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringShutdownCompleteAllTasksTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ShutdownCompleteAllTasksTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringShutdownCompleteCurrentTaskOnlyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringShutdownCompleteCurrentTaskOnlyTest.java
index 6419d93..4f8458d 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringShutdownCompleteCurrentTaskOnlyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringShutdownCompleteCurrentTaskOnlyTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ShutdownCompleteCurrentTaskOnlyTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSortBodyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSortBodyTest.java
index 925d850..c027a90 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSortBodyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSortBodyTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/sortBodyTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSortExpressionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSortExpressionTest.java
index c2944c6..39dc6aa 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSortExpressionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSortExpressionTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/sortExpressionTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitCustomExpressionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitCustomExpressionTest.java
index 864c140..85c3a64 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitCustomExpressionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitCustomExpressionTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SplitCustomExpressionTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitGroupMultiLinesTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitGroupMultiLinesTest.java
index 72becc3..f8afb7e 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitGroupMultiLinesTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitGroupMultiLinesTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SplitGroupMultiLinesTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitGroupSkipFirstTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitGroupSkipFirstTest.java
index 6aa889b..e185d4c 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitGroupSkipFirstTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitGroupSkipFirstTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SplitGroupSkipFirstTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitSubUnitOfWorkTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitSubUnitOfWorkTest.java
index b47b8d3..bcc82bb 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitSubUnitOfWorkTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitSubUnitOfWorkTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringSplitSubUnitOfWorkTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitTokenizerGroupDynamicTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitTokenizerGroupDynamicTest.java
index f99e5d8..b5beba5 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitTokenizerGroupDynamicTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitTokenizerGroupDynamicTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringSplitTokenizerGroupDynamicTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterMethodCallTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterMethodCallTest.java
index 9ef27eb..4d3bec1 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterMethodCallTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterMethodCallTest.java
@@ -26,4 +26,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/splitterMethodCallTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterNoStopOnExceptionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterNoStopOnExceptionTest.java
index 0ee490b..239ade7 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterNoStopOnExceptionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterNoStopOnExceptionTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringSplitterNoStopOnExceptionTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterOnPrepareTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterOnPrepareTest.java
index 2f90e93..3775237 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterOnPrepareTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterOnPrepareTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SplitterOnPrepareTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterWithCustomThreadPoolExecutorTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterWithCustomThreadPoolExecutorTest.java
index 0bdea58..1ffcdcd 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterWithCustomThreadPoolExecutorTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSplitterWithCustomThreadPoolExecutorTest.java
@@ -34,4 +34,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/splitterWithCustomThreadPoolExecutor.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStaticRecipientListTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStaticRecipientListTest.java
index ee28490..4a8c5b1 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStaticRecipientListTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStaticRecipientListTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.spring.processor;
 
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.processor.StaticRecipientListTest;
 
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStepTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStepTest.java
index 4cb14ca..9f79188 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStepTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStepTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/step.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStickyLoadBalanceTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStickyLoadBalanceTest.java
index da5dbd5..c79023b 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStickyLoadBalanceTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStickyLoadBalanceTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/stickyLoadBalance.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStreamCachingPerRouteTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStreamCachingPerRouteTest.java
index ce753b4..479ff8a 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStreamCachingPerRouteTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStreamCachingPerRouteTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/streamcachingperroute.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStreamCachingStrategyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStreamCachingStrategyTest.java
index 49dbcc3..381c02a 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStreamCachingStrategyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringStreamCachingStrategyTest.java
@@ -38,4 +38,4 @@
         assertEquals(Long.valueOf(8192).longValue(), context.getStreamCachingStrategy().getSpoolThreshold());
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsCoreAndMaxPoolKeepAliveTimeTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsCoreAndMaxPoolKeepAliveTimeTest.java
index cc22fdb..d6214ab 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsCoreAndMaxPoolKeepAliveTimeTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsCoreAndMaxPoolKeepAliveTimeTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ThreadsCoreAndMaxPoolKeepAliveTimeTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsCoreAndMaxPoolTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsCoreAndMaxPoolTest.java
index 50dd9fb..3d95a8d 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsCoreAndMaxPoolTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsCoreAndMaxPoolTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ThreadsCoreAndMaxPoolTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsCorePoolTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsCorePoolTest.java
index fcc0dc7..c2caf31 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsCorePoolTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsCorePoolTest.java
@@ -47,4 +47,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ThreadsCorePoolTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsDefaultTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsDefaultTest.java
index ad9ed19..ee18d04 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsDefaultTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsDefaultTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ThreadsDefaultTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsExternalThreadPoolFactoryBeanTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsExternalThreadPoolFactoryBeanTest.java
index 5317657..a6fd4e2 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsExternalThreadPoolFactoryBeanTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsExternalThreadPoolFactoryBeanTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ThreadsExternalThreadPoolFactoryBeanTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsThreadPoolFactoryBeanTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsThreadPoolFactoryBeanTest.java
index bbb31e3..cec2909 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsThreadPoolFactoryBeanTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThreadsThreadPoolFactoryBeanTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ThreadsThreadPoolFactoryBeanTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThrottlingInflightRoutePolicyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThrottlingInflightRoutePolicyTest.java
index f7dc81e..97547b6 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThrottlingInflightRoutePolicyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThrottlingInflightRoutePolicyTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ThrottlingInflightRoutePolicyTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThrowExceptionMessageTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThrowExceptionMessageTest.java
index 5b1252d..e2336dd 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThrowExceptionMessageTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThrowExceptionMessageTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringThrowExceptionMessageTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThrowExceptionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThrowExceptionTest.java
index eec0150..a28f0dc 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThrowExceptionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringThrowExceptionTest.java
@@ -20,7 +20,7 @@
 import org.apache.camel.processor.ThrowExceptionTest;
 
 import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
-                                  
+
 public class SpringThrowExceptionTest extends ThrowExceptionTest {
 
     @Override
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringThrowExceptionTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTokenizerTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTokenizerTest.java
index 05b2d09..96b62da 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTokenizerTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTokenizerTest.java
@@ -26,4 +26,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/splitterTokenizerTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTopicLoadBalanceTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTopicLoadBalanceTest.java
index 856ddf2..52a8e35 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTopicLoadBalanceTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTopicLoadBalanceTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/topicLoadBalance.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTransformTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTransformTest.java
index 11a1af5..dfd1a48 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTransformTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTransformTest.java
@@ -39,4 +39,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/transform.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.java
index 69e7efd..5e28922 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.java
@@ -54,4 +54,4 @@
         // noop
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.java
index 7c7fa8e..054d516 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.java
@@ -45,4 +45,4 @@
         // noop
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryProcessorMultipleExceptionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryProcessorMultipleExceptionTest.java
index ad5e1b6..719e6c5 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryProcessorMultipleExceptionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryProcessorMultipleExceptionTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringTryProcessorMultipleExceptionTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryProcessorOnWhenTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryProcessorOnWhenTest.java
index b4d29e5..5b9e807 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryProcessorOnWhenTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryProcessorOnWhenTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringTryProcessorOnWhenTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateRegExpTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateRegExpTest.java
index 9498b04..05b77c3 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateRegExpTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateRegExpTest.java
@@ -20,9 +20,10 @@
 import org.apache.camel.processor.ValidateRegExpTest;
 
 import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
+
 public class SpringValidateRegExpTest extends ValidateRegExpTest {
     @Override
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/validate.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateSimpleTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateSimpleTest.java
index 643226f..7c06822 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateSimpleTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringValidateSimpleTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/ValidateSimpleTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWeightedRandomLoadBalanceTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWeightedRandomLoadBalanceTest.java
index 34da16a..ada6f08 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWeightedRandomLoadBalanceTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWeightedRandomLoadBalanceTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/weightedRandomLoadBalance.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWeightedRoundRobinLoadBalanceTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWeightedRoundRobinLoadBalanceTest.java
index d87c3d7..1b97d20 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWeightedRoundRobinLoadBalanceTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWeightedRoundRobinLoadBalanceTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/weightedRoundRobinLoadBalance.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapOnPrepareTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapOnPrepareTest.java
index ac5f6fd..4039aa0 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapOnPrepareTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapOnPrepareTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/WireTapOnPrepareTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapTest.java
index 6748f55..31ca903 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringWireTapTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetCopyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetCopyTest.java
index eb7eb30..d1de86b 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetCopyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetCopyTest.java
@@ -91,4 +91,4 @@
     }
     // END SNIPPET: e1
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetTest.java
index bae7411..66280536 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetTest.java
@@ -90,4 +90,4 @@
     }
     // END SNIPPET: e1
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapVoidBeanTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapVoidBeanTest.java
index 2940626..d07d58c 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapVoidBeanTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringWireTapVoidBeanTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringWireTapVoidBeanTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathFilterWithNamespaceOnImportRouteContextTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathFilterWithNamespaceOnImportRouteContextTest.java
index e0b7fcc..9cf1414 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathFilterWithNamespaceOnImportRouteContextTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathFilterWithNamespaceOnImportRouteContextTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.processor;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.processor.XPathFilterTest;
 import org.junit.Before;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathFilterWithNamespaceOnRouteContextTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathFilterWithNamespaceOnRouteContextTest.java
index da0235f..10e83a4 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathFilterWithNamespaceOnRouteContextTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathFilterWithNamespaceOnRouteContextTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.processor;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.processor.XPathFilterTest;
 import org.junit.Before;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathFilterWithNamespaceTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathFilterWithNamespaceTest.java
index dbfac5d..0d180a7 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathFilterWithNamespaceTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathFilterWithNamespaceTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.processor;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.processor.XPathFilterTest;
 import org.junit.Before;
@@ -33,4 +34,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/xpathFilterWithNamespace.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathHeaderTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathHeaderTest.java
index 5616062..274a525 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathHeaderTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringXPathHeaderTest.java
@@ -22,6 +22,7 @@
 import org.junit.Test;
 
 import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
+
 /**
  * Spring basesd XPathHeaderTest.
  */
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/TransformWithExpressionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/TransformWithExpressionTest.java
index 7dddec9..b0b38b1 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/TransformWithExpressionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/TransformWithExpressionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.processor;
+
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringTestSupport;
 import org.junit.Before;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateCompletionIntervalTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateCompletionIntervalTest.java
index 53b5087..ff575ed7 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateCompletionIntervalTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateCompletionIntervalTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregateCompletionIntervalTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionSizeFallbackTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionSizeFallbackTest.java
index 1be41a6..6ed7e1f 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionSizeFallbackTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionSizeFallbackTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionSizeFallbackTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionSizeTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionSizeTest.java
index 83c8b2b..9829d83 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionSizeTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionSizeTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionSizeTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutFallbackTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutFallbackTest.java
index 0efe728..3fe4f1b 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutFallbackTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutFallbackTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutFallbackTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutPerGroupTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutPerGroupTest.java
index a6d6134..5b64dd8 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutPerGroupTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutPerGroupTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutPerGroupTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutTest.java
index 78c3d01..3e8839c 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregateExpressionTimeoutTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateForceCompletionOnStopTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateForceCompletionOnStopTest.java
index 450a91a..352afe3 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateForceCompletionOnStopTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateForceCompletionOnStopTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregateForceCompletionOnStopTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateGroupedExchangeCompletionExpressionSizeTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateGroupedExchangeCompletionExpressionSizeTest.java
index 093cd94..7e16681 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateGroupedExchangeCompletionExpressionSizeTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateGroupedExchangeCompletionExpressionSizeTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregateGroupedExchangeCompletionExpressionSizeTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateSimplePredicateEagerTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateSimplePredicateEagerTest.java
index 41dd6f3..d89e14f 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateSimplePredicateEagerTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateSimplePredicateEagerTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregateSimplePredicateEagerTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateSimplePredicateTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateSimplePredicateTest.java
index 44abd4f..1bf42d6 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateSimplePredicateTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateSimplePredicateTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregateSimplePredicateTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateThreadPoolProfileTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateThreadPoolProfileTest.java
index 4be12ab..ad54846 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateThreadPoolProfileTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregateThreadPoolProfileTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregateThreadPoolProfileTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterAllowNullTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterAllowNullTest.java
index 239a155..261c22f 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterAllowNullTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterAllowNullTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterAllowNullTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterRefMethodNameTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterRefMethodNameTest.java
index 1ad21ab..20a2798 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterRefMethodNameTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterRefMethodNameTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterRefMethodNameTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterRefTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterRefTest.java
index da29437..bb0d9e3 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterRefTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterRefTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator/SpringAggregationStrategyBeanAdapterRefTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregatorTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregatorTest.java
index 9496e28..9632bc7 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregatorTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/aggregator/SpringAggregatorTest.java
@@ -27,4 +27,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/aggregator.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/idempotent/FileConsumerIdempotentLoadStoreTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/idempotent/FileConsumerIdempotentLoadStoreTest.java
index 4bef28c..9cee49c 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/idempotent/FileConsumerIdempotentLoadStoreTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/idempotent/FileConsumerIdempotentLoadStoreTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.processor.idempotent;
+
 import java.io.File;
 import java.io.FileOutputStream;
 
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/idempotent/FileConsumerIdempotentTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/idempotent/FileConsumerIdempotentTest.java
index 6efca6f..0c4035d 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/idempotent/FileConsumerIdempotentTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/idempotent/FileConsumerIdempotentTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.processor.idempotent;
+
 import java.io.File;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/DeadLetterChannelHandledExampleTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/DeadLetterChannelHandledExampleTest.java
index 1fff3c0..c49a911 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/DeadLetterChannelHandledExampleTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/DeadLetterChannelHandledExampleTest.java
@@ -62,4 +62,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "/org/apache/camel/spring/processor/onexception/deadLetterChannelHandledExampleTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/RedeliveryPolicyReTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/RedeliveryPolicyReTest.java
index 69ae65d..5d8d449 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/RedeliveryPolicyReTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/RedeliveryPolicyReTest.java
@@ -30,4 +30,4 @@
         return createSpringCamelContext(this,
                 "/org/apache/camel/spring/processor/onexception/RedeliveryPolicyRefTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringContextScopeOnExceptionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringContextScopeOnExceptionTest.java
index 4cb68ea..7016675 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringContextScopeOnExceptionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringContextScopeOnExceptionTest.java
@@ -68,4 +68,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "/org/apache/camel/spring/processor/onexception/SpringContextScopeOnExceptionTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringDeadLetterChannelOnExceptionOnRedeliveryTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringDeadLetterChannelOnExceptionOnRedeliveryTest.java
index d640483..8834982 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringDeadLetterChannelOnExceptionOnRedeliveryTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringDeadLetterChannelOnExceptionOnRedeliveryTest.java
@@ -31,4 +31,4 @@
         return createSpringCamelContext(this,
                 "/org/apache/camel/spring/processor/onexception/DeadLetterChannelOnExceptionOnRedeliveryTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionContinueSubRouteTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionContinueSubRouteTest.java
index d717eac..1c93ccd 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionContinueSubRouteTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionContinueSubRouteTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/onexception/OnExceptionContinueSubRouteTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionContinueSubSubRouteTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionContinueSubSubRouteTest.java
index 0b3d683..490e95b 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionContinueSubSubRouteTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionContinueSubSubRouteTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/onexception/OnExceptionContinueSubSubRouteTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionContinueTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionContinueTest.java
index 3f08b6a..05e1072 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionContinueTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionContinueTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/onexception/OnExceptionContinueTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionLoadBalancerDoubleIssueTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionLoadBalancerDoubleIssueTest.java
index 146ec1b..c0e49e8 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionLoadBalancerDoubleIssueTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionLoadBalancerDoubleIssueTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/onexception/OnExceptionLoadBalancerDoubleIssueTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionNotNormalizedClassNameTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionNotNormalizedClassNameTest.java
index 4230e2d..952b643 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionNotNormalizedClassNameTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionNotNormalizedClassNameTest.java
@@ -46,4 +46,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "/org/apache/camel/spring/processor/onexception/onExceptionNotNormalizedClassNameTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionOccurredProcessorOnExceptionTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionOccurredProcessorOnExceptionTest.java
index 318e563..ea7f23a 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionOccurredProcessorOnExceptionTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionOccurredProcessorOnExceptionTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/onexception/OnExceptionOccurredProcessorOnExceptionTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionOccurredProcessorTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionOccurredProcessorTest.java
index 505920b..3a49cf1 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionOccurredProcessorTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionOccurredProcessorTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/onexception/OnExceptionOccurredProcessorTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionSubRouteTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionSubRouteTest.java
index 9bf6703..5459417 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionSubRouteTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionSubRouteTest.java
@@ -89,4 +89,4 @@
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this, "/org/apache/camel/spring/processor/onexception/onExceptionSubRouteTest.xml");
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionUseOriginalBodyTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionUseOriginalBodyTest.java
index 19e68f1..ddf7ebf 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionUseOriginalBodyTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionUseOriginalBodyTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/onexception/SpringOnExceptionUseOriginalBodyTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionUseOriginalMessageTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionUseOriginalMessageTest.java
index 7d5c6ce..2e14201 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionUseOriginalMessageTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionUseOriginalMessageTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/onexception/SpringOnExceptionUseOriginalMessageTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionWithRouteAndContinueTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionWithRouteAndContinueTest.java
index 20022f9..d289bbd 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionWithRouteAndContinueTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringOnExceptionWithRouteAndContinueTest.java
@@ -28,4 +28,4 @@
         return createSpringCamelContext(this, "org/apache/camel/spring/processor/onexception/OnExceptionWithRouteAndContinueTest.xml");
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/MyMultiArgumentService.java b/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/MyMultiArgumentService.java
index 7a69ecb..b123ed5 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/MyMultiArgumentService.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/remoting/MyMultiArgumentService.java
@@ -16,10 +16,10 @@
  */
 package org.apache.camel.spring.remoting;
 
-import static junit.framework.TestCase.assertEquals;
-
 import org.apache.camel.Consume;
 
+import static junit.framework.TestCase.assertEquals;
+
 public class MyMultiArgumentService implements MyMultiArgumentServiceInterface {
 
     @Override
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PatternBasedPackageScanFilterTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PatternBasedPackageScanFilterTest.java
index 7c035cf..3fa3074 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PatternBasedPackageScanFilterTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PatternBasedPackageScanFilterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.spring.scan;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.RandomAccessFile;
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java
index 4b03152..8ac0f3e 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java
@@ -23,6 +23,7 @@
 import java.sql.Statement;
 import java.util.List;
 import java.util.Map;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.Component;
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java
index 2ecbf6d..cbf66bb 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlComponent.java
@@ -18,6 +18,7 @@
 
 import java.util.Map;
 import java.util.Set;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/BatchCallableStatementCreatorFactory.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/BatchCallableStatementCreatorFactory.java
index 6b916af..b1e6bb0 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/BatchCallableStatementCreatorFactory.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/BatchCallableStatementCreatorFactory.java
@@ -29,7 +29,6 @@
 import org.springframework.jdbc.core.SqlParameter;
 import org.springframework.jdbc.core.StatementCreatorUtils;
 
-
 public class BatchCallableStatementCreatorFactory {
 
     final CallableStatementCreatorFactory callableStatementCreatorFactory;
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java
index c7acc91..caab2d9 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java
@@ -18,6 +18,7 @@
 
 import java.util.Map;
 import java.util.Set;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.Endpoint;
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParser.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParser.java
index 776e3a8..2f95611 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParser.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/generated/SSPTParser.java
@@ -17,6 +17,8 @@
 /* Generated By:JavaCC: Do not edit this line. SSPTParser.java */
 package org.apache.camel.component.sql.stored.template.generated;
 
+import java.io.Reader;
+
 import org.apache.camel.component.sql.stored.template.ast.InOutParameter;
 import org.apache.camel.component.sql.stored.template.ast.InParameter;
 import org.apache.camel.component.sql.stored.template.ast.OutParameter;
@@ -24,8 +26,6 @@
 import org.apache.camel.component.sql.stored.template.ast.Template;
 import org.apache.camel.spi.ClassResolver;
 
-import java.io.Reader;
-
 public class SSPTParser implements SSPTParserConstants {
    int parameterNameCounter = 0;
 
diff --git a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java b/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java
index 90a76f87..d8eacdf 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java
@@ -25,6 +25,7 @@
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepository.java b/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepository.java
index 03d1e04..2e305a9 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepository.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/processor/idempotent/jdbc/JdbcMessageIdRepository.java
@@ -17,6 +17,7 @@
 package org.apache.camel.processor.idempotent.jdbc;
 
 import java.sql.Timestamp;
+
 import javax.sql.DataSource;
 
 import org.springframework.dao.DataAccessException;
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlDataSourceRefTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlDataSourceRefTest.java
index b2f42b0..9307e74 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlDataSourceRefTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlDataSourceRefTest.java
@@ -19,7 +19,6 @@
 import java.util.List;
 import java.util.Map;
 
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.Registry;
@@ -95,4 +94,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlDataSourceTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlDataSourceTest.java
index 1b65d30..366ff06 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlDataSourceTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlDataSourceTest.java
@@ -19,7 +19,6 @@
 import java.util.List;
 import java.util.Map;
 
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.Registry;
@@ -85,4 +84,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerExpressionParameterTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerExpressionParameterTest.java
index f23c0c0..17932e4 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerExpressionParameterTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlProducerExpressionParameterTest.java
@@ -18,6 +18,7 @@
 
 import java.util.List;
 import java.util.Map;
+
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/DefaultSqlPrepareStatementStrategyTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/DefaultSqlPrepareStatementStrategyTest.java
index 3d4e5c9..6fe4fad 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/DefaultSqlPrepareStatementStrategyTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/DefaultSqlPrepareStatementStrategyTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.sql.stored;
 
 import java.sql.SQLException;
+
 import org.apache.camel.component.sql.DefaultSqlPrepareStatementStrategy;
 import org.junit.Test;
 
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerUseMessageBodyForTemplateTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerUseMessageBodyForTemplateTest.java
index 08541d9..42562a9 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerUseMessageBodyForTemplateTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ProducerUseMessageBodyForTemplateTest.java
@@ -30,7 +30,6 @@
 import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
 import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
 
-
 public class ProducerUseMessageBodyForTemplateTest extends CamelTestSupport {
 
     private EmbeddedDatabase db;
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlFunctionDataSourceTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlFunctionDataSourceTest.java
index 5a696f3..7bd65f2 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlFunctionDataSourceTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlFunctionDataSourceTest.java
@@ -30,7 +30,6 @@
 import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
 import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
 
-
 public class SqlFunctionDataSourceTest extends CamelTestSupport {
 
     private EmbeddedDatabase db;
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlStoredDataSourceTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlStoredDataSourceTest.java
index 7cdec16..a9c28ae 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlStoredDataSourceTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/SqlStoredDataSourceTest.java
@@ -28,7 +28,6 @@
 import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
 import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
 
-
 public class SqlStoredDataSourceTest extends CamelTestSupport {
 
     private EmbeddedDatabase db;
diff --git a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateLoadAndRecoverTest.java b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateLoadAndRecoverTest.java
index e26915e..a629444 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateLoadAndRecoverTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateLoadAndRecoverTest.java
@@ -96,4 +96,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateLoadConcurrentTest.java b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateLoadConcurrentTest.java
index ff9ebf3..f549e78 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateLoadConcurrentTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateLoadConcurrentTest.java
@@ -79,4 +79,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateLoadTest.java b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateLoadTest.java
index ea5a336..81d274b 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateLoadTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateLoadTest.java
@@ -63,4 +63,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateSerializedHeadersTest.java b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateSerializedHeadersTest.java
index 1778ce9..97ea838 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateSerializedHeadersTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateSerializedHeadersTest.java
@@ -65,4 +65,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateStoreAsTextTest.java b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateStoreAsTextTest.java
index f3167e0..549f9d5 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateStoreAsTextTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateStoreAsTextTest.java
@@ -19,6 +19,7 @@
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.sql.DataSource;
 
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/ResourceBasedSSHKeyVerifier.java b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/ResourceBasedSSHKeyVerifier.java
index a47a9eb..5be20e3 100644
--- a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/ResourceBasedSSHKeyVerifier.java
+++ b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/ResourceBasedSSHKeyVerifier.java
@@ -1,193 +1,193 @@
-/*
- * 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.component.ssh;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.security.NoSuchAlgorithmException;
-import java.security.PublicKey;
-import java.security.spec.InvalidKeySpecException;
-import java.util.Base64;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.support.ResourceHelper;
-import org.apache.camel.util.IOHelper;
-import org.apache.sshd.client.keyverifier.ServerKeyVerifier;
-import org.apache.sshd.client.session.ClientSession;
-import org.bouncycastle.util.Arrays;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * ServerKeyVerifier that takes a camel resource as input file to validate the server key against.
- *
- */
-public class ResourceBasedSSHKeyVerifier implements ServerKeyVerifier {
-    protected final Logger log = LoggerFactory.getLogger(getClass());
-
-    private CamelContext camelContext;
-    private boolean failOnUnknownHost;
-    private String knownHostsResource;
-
-    public ResourceBasedSSHKeyVerifier(CamelContext camelContext, String knownHostsResource) {
-        this(camelContext, knownHostsResource, false);
-    }
-    
-    public ResourceBasedSSHKeyVerifier(CamelContext camelContext, String knownHostsResource,
-            boolean failOnUnknownHost) {
-        this.camelContext = camelContext;
-        this.knownHostsResource = knownHostsResource;
-        this.failOnUnknownHost = failOnUnknownHost;
-    }
-
-    @Override
-    public boolean verifyServerKey(ClientSession sshClientSession, SocketAddress remoteAddress, PublicKey serverKey) {
-        log.debug("Trying to find known_hosts file %s", knownHostsResource);
-        InputStream knownHostsInputStream = null;
-        try {
-            knownHostsInputStream = ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext,
-                    knownHostsResource);
-            List<String> possibleTokens = getKnownHostsFileTokensForSocketAddress(remoteAddress);
-            log.debug("Trying to mach PublicKey against provided known_hosts file");
-            PublicKey matchingKey = findKeyForServerToken(knownHostsInputStream, possibleTokens);
-            if (matchingKey != null) {
-                log.debug("Found PublicKey match for server");
-                boolean match = Arrays.areEqual(matchingKey.getEncoded(), serverKey.getEncoded());
-                return match;
-            }
-        } catch (IOException ioException) {
-            log.debug(String.format("Could not find known_hosts file %s", knownHostsResource), ioException);
-        } finally {
-            IOHelper.close(knownHostsInputStream);
-        }
-        if (failOnUnknownHost) {
-            log.warn("Could not find matching key for client session, connection will fail due to configuration");
-            return false;
-        } else {
-            log.warn(
-                    "Could not find matching key for client session, connection will continue anyway due to configuration");
-            return true;
-        }
-    }
-
-    private PublicKey findKeyForServerToken(InputStream knownHostsInputStream, List<String> possibleTokens) {
-        String knowHostsLines = camelContext.getTypeConverter().convertTo(String.class, knownHostsInputStream);
-        if (knowHostsLines == null) {
-            log.warn("Could not read from the known_hosts file input stream");
-            return null;
-        }
-
-        for (String s : knowHostsLines.split("\n")) {
-            String[] parts = s.split(" ");
-            if (parts.length != 3) {
-                log.warn("Found malformed entry in known_hosts file");
-                continue;
-            }
-            String entry = parts[0];
-            String key = parts[2];
-            for (String serverToken : possibleTokens) {
-                if (entry.contains(serverToken)) {
-                    try {
-                        return loadKey(key);
-                    } catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
-                        log.warn(String.format("Could not load key for server token %s", entry), e);
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
-    private List<String> getKnownHostsFileTokensForSocketAddress(SocketAddress remoteAddress) {
-        List<String> returnList = new LinkedList<>();
-        if (remoteAddress instanceof InetSocketAddress) {
-            InetSocketAddress inetSocketAddress = (InetSocketAddress) remoteAddress;
-
-            String hostName = inetSocketAddress.getHostName();
-            String ipAddress = inetSocketAddress.getAddress().getHostAddress();
-            String remotePort = String.valueOf(inetSocketAddress.getPort());
-
-            returnList.add(hostName);
-            returnList.add("[" + hostName + "]:" + remotePort);
-            returnList.add(ipAddress);
-            returnList.add("[" + ipAddress + "]:" + remotePort);
-        }
-
-        return returnList;
-    }
-
-    /*
-     * Decode the public key string, which is a base64 encoded string that consists
-     * of multiple parts: 1. public key type (ssh-rsa, ssh-dss, ...) 2. binary key
-     * data (May consists of multiple parts)
-     * 
-     * Each part is composed by two sub-parts 1. Length of the part (4 bytes) 2.
-     * Binary part (length as defined by 1.)
-     * 
-     * Uses SSHPublicKeyHolder to construct the actual PublicKey Object
-     * 
-     * Note: Currently only supports RSA and DSA Public keys as required by
-     * https://tools.ietf.org/html/rfc4253#section-6.6
-     * 
-     */
-    private PublicKey loadKey(String key) throws NoSuchAlgorithmException, InvalidKeySpecException {
-        SSHPublicKeyHolder sshPublicKeyHolder = new SSHPublicKeyHolder();
-
-        byte[] keyByteArray = Base64.getDecoder().decode(key);
-        int keyByteArrayCursor = 0;
-
-        byte[] tmpData = new byte[4];
-        int tmpCursor = 0;
-
-        boolean getLengthMode = true;
-        while (keyByteArrayCursor < keyByteArray.length) {
-            if (getLengthMode) {
-                if (tmpCursor < 4) {
-                    tmpData[tmpCursor] = keyByteArray[keyByteArrayCursor];
-                    tmpCursor++;
-                    keyByteArrayCursor++;
-                    continue;
-                } else {
-                    tmpCursor = 0;
-                    getLengthMode = false;
-                    tmpData = new byte[byteArrayToInt(tmpData)];
-                }
-            }
-            tmpData[tmpCursor] = keyByteArray[keyByteArrayCursor];
-            tmpCursor++;
-            keyByteArrayCursor++;
-            if (tmpCursor == tmpData.length) {
-                sshPublicKeyHolder.push(tmpData);
-                getLengthMode = true;
-                tmpData = new byte[4];
-                tmpCursor = 0;
-            }
-        }
-
-        return sshPublicKeyHolder.toPublicKey();
-    }
-
-    private int byteArrayToInt(byte[] tmpData) {
-        return new BigInteger(tmpData).intValue();
-    }
-
-}
+/*
+ * 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.component.ssh;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigInteger;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.security.NoSuchAlgorithmException;
+import java.security.PublicKey;
+import java.security.spec.InvalidKeySpecException;
+import java.util.Base64;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.support.ResourceHelper;
+import org.apache.camel.util.IOHelper;
+import org.apache.sshd.client.keyverifier.ServerKeyVerifier;
+import org.apache.sshd.client.session.ClientSession;
+import org.bouncycastle.util.Arrays;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * ServerKeyVerifier that takes a camel resource as input file to validate the server key against.
+ *
+ */
+public class ResourceBasedSSHKeyVerifier implements ServerKeyVerifier {
+    protected final Logger log = LoggerFactory.getLogger(getClass());
+
+    private CamelContext camelContext;
+    private boolean failOnUnknownHost;
+    private String knownHostsResource;
+
+    public ResourceBasedSSHKeyVerifier(CamelContext camelContext, String knownHostsResource) {
+        this(camelContext, knownHostsResource, false);
+    }
+    
+    public ResourceBasedSSHKeyVerifier(CamelContext camelContext, String knownHostsResource,
+            boolean failOnUnknownHost) {
+        this.camelContext = camelContext;
+        this.knownHostsResource = knownHostsResource;
+        this.failOnUnknownHost = failOnUnknownHost;
+    }
+
+    @Override
+    public boolean verifyServerKey(ClientSession sshClientSession, SocketAddress remoteAddress, PublicKey serverKey) {
+        log.debug("Trying to find known_hosts file %s", knownHostsResource);
+        InputStream knownHostsInputStream = null;
+        try {
+            knownHostsInputStream = ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext,
+                    knownHostsResource);
+            List<String> possibleTokens = getKnownHostsFileTokensForSocketAddress(remoteAddress);
+            log.debug("Trying to mach PublicKey against provided known_hosts file");
+            PublicKey matchingKey = findKeyForServerToken(knownHostsInputStream, possibleTokens);
+            if (matchingKey != null) {
+                log.debug("Found PublicKey match for server");
+                boolean match = Arrays.areEqual(matchingKey.getEncoded(), serverKey.getEncoded());
+                return match;
+            }
+        } catch (IOException ioException) {
+            log.debug(String.format("Could not find known_hosts file %s", knownHostsResource), ioException);
+        } finally {
+            IOHelper.close(knownHostsInputStream);
+        }
+        if (failOnUnknownHost) {
+            log.warn("Could not find matching key for client session, connection will fail due to configuration");
+            return false;
+        } else {
+            log.warn(
+                    "Could not find matching key for client session, connection will continue anyway due to configuration");
+            return true;
+        }
+    }
+
+    private PublicKey findKeyForServerToken(InputStream knownHostsInputStream, List<String> possibleTokens) {
+        String knowHostsLines = camelContext.getTypeConverter().convertTo(String.class, knownHostsInputStream);
+        if (knowHostsLines == null) {
+            log.warn("Could not read from the known_hosts file input stream");
+            return null;
+        }
+
+        for (String s : knowHostsLines.split("\n")) {
+            String[] parts = s.split(" ");
+            if (parts.length != 3) {
+                log.warn("Found malformed entry in known_hosts file");
+                continue;
+            }
+            String entry = parts[0];
+            String key = parts[2];
+            for (String serverToken : possibleTokens) {
+                if (entry.contains(serverToken)) {
+                    try {
+                        return loadKey(key);
+                    } catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
+                        log.warn(String.format("Could not load key for server token %s", entry), e);
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    private List<String> getKnownHostsFileTokensForSocketAddress(SocketAddress remoteAddress) {
+        List<String> returnList = new LinkedList<>();
+        if (remoteAddress instanceof InetSocketAddress) {
+            InetSocketAddress inetSocketAddress = (InetSocketAddress) remoteAddress;
+
+            String hostName = inetSocketAddress.getHostName();
+            String ipAddress = inetSocketAddress.getAddress().getHostAddress();
+            String remotePort = String.valueOf(inetSocketAddress.getPort());
+
+            returnList.add(hostName);
+            returnList.add("[" + hostName + "]:" + remotePort);
+            returnList.add(ipAddress);
+            returnList.add("[" + ipAddress + "]:" + remotePort);
+        }
+
+        return returnList;
+    }
+
+    /*
+     * Decode the public key string, which is a base64 encoded string that consists
+     * of multiple parts: 1. public key type (ssh-rsa, ssh-dss, ...) 2. binary key
+     * data (May consists of multiple parts)
+     * 
+     * Each part is composed by two sub-parts 1. Length of the part (4 bytes) 2.
+     * Binary part (length as defined by 1.)
+     * 
+     * Uses SSHPublicKeyHolder to construct the actual PublicKey Object
+     * 
+     * Note: Currently only supports RSA and DSA Public keys as required by
+     * https://tools.ietf.org/html/rfc4253#section-6.6
+     * 
+     */
+    private PublicKey loadKey(String key) throws NoSuchAlgorithmException, InvalidKeySpecException {
+        SSHPublicKeyHolder sshPublicKeyHolder = new SSHPublicKeyHolder();
+
+        byte[] keyByteArray = Base64.getDecoder().decode(key);
+        int keyByteArrayCursor = 0;
+
+        byte[] tmpData = new byte[4];
+        int tmpCursor = 0;
+
+        boolean getLengthMode = true;
+        while (keyByteArrayCursor < keyByteArray.length) {
+            if (getLengthMode) {
+                if (tmpCursor < 4) {
+                    tmpData[tmpCursor] = keyByteArray[keyByteArrayCursor];
+                    tmpCursor++;
+                    keyByteArrayCursor++;
+                    continue;
+                } else {
+                    tmpCursor = 0;
+                    getLengthMode = false;
+                    tmpData = new byte[byteArrayToInt(tmpData)];
+                }
+            }
+            tmpData[tmpCursor] = keyByteArray[keyByteArrayCursor];
+            tmpCursor++;
+            keyByteArrayCursor++;
+            if (tmpCursor == tmpData.length) {
+                sshPublicKeyHolder.push(tmpData);
+                getLengthMode = true;
+                tmpData = new byte[4];
+                tmpCursor = 0;
+            }
+        }
+
+        return sshPublicKeyHolder.toPublicKey();
+    }
+
+    private int byteArrayToInt(byte[] tmpData) {
+        return new BigInteger(tmpData).intValue();
+    }
+
+}
diff --git a/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXProcessor.java b/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXProcessor.java
index 3034a13..0b8c1a6 100644
--- a/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXProcessor.java
+++ b/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXProcessor.java
@@ -22,7 +22,6 @@
 import org.xml.sax.InputSource;
 
 import com.ctc.wstx.sr.ValidatingStreamReader;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.support.ExchangeHelper;
diff --git a/components/camel-stax/src/main/java/org/apache/camel/component/stax/StaxStreamXMLReader.java b/components/camel-stax/src/main/java/org/apache/camel/component/stax/StaxStreamXMLReader.java
index 751382c..bca1630 100644
--- a/components/camel-stax/src/main/java/org/apache/camel/component/stax/StaxStreamXMLReader.java
+++ b/components/camel-stax/src/main/java/org/apache/camel/component/stax/StaxStreamXMLReader.java
@@ -49,540 +49,540 @@
 // CHECKSTYLE:OFF
 public class StaxStreamXMLReader implements XMLReader {
 
-	private static final String DEFAULT_XML_VERSION = "1.0";
+  private static final String DEFAULT_XML_VERSION = "1.0";
 
     private static final String NAMESPACES_FEATURE_NAME = "http://xml.org/sax/features/namespaces";
 
-	private static final String NAMESPACE_PREFIXES_FEATURE_NAME = "http://xml.org/sax/features/namespace-prefixes";
+  private static final String NAMESPACE_PREFIXES_FEATURE_NAME = "http://xml.org/sax/features/namespace-prefixes";
 
-	private static final String IS_STANDALONE_FEATURE_NAME = "http://xml.org/sax/features/is-standalone";
+  private static final String IS_STANDALONE_FEATURE_NAME = "http://xml.org/sax/features/is-standalone";
 
     private DTDHandler dtdHandler;
 
-	private ContentHandler contentHandler;
+  private ContentHandler contentHandler;
 
-	private EntityResolver entityResolver;
+  private EntityResolver entityResolver;
 
-	private ErrorHandler errorHandler;
+  private ErrorHandler errorHandler;
 
-	private LexicalHandler lexicalHandler;
+  private LexicalHandler lexicalHandler;
 
-	private boolean namespacesFeature = true;
+  private boolean namespacesFeature = true;
 
-	private boolean namespacePrefixesFeature = false;
+  private boolean namespacePrefixesFeature = false;
 
-	private Boolean isStandalone;
+  private Boolean isStandalone;
 
-	private final Map<String, String> namespaces = new LinkedHashMap<>();
+  private final Map<String, String> namespaces = new LinkedHashMap<>();
 
-	private final XMLStreamReader reader;
+  private final XMLStreamReader reader;
 
-	private String xmlVersion = DEFAULT_XML_VERSION;
+  private String xmlVersion = DEFAULT_XML_VERSION;
 
-	private String encoding;
+  private String encoding;
 
-	/**
-	 * Constructs a new instance of the <code>StaxStreamXmlReader</code> that reads from the given
-	 * <code>XMLStreamReader</code>.  The supplied stream reader must be in <code>XMLStreamConstants.START_DOCUMENT</code>
-	 * or <code>XMLStreamConstants.START_ELEMENT</code> state.
-	 *
-	 * @param reader the <code>XMLEventReader</code> to read from
-	 * @throws IllegalStateException if the reader is not at the start of a document or element
-	 */
-	StaxStreamXMLReader(XMLStreamReader reader) {
-		if (reader == null) {
+  /**
+   * Constructs a new instance of the <code>StaxStreamXmlReader</code> that reads from the given
+   * <code>XMLStreamReader</code>.  The supplied stream reader must be in <code>XMLStreamConstants.START_DOCUMENT</code>
+   * or <code>XMLStreamConstants.START_ELEMENT</code> state.
+   *
+   * @param reader the <code>XMLEventReader</code> to read from
+   * @throws IllegalStateException if the reader is not at the start of a document or element
+   */
+  StaxStreamXMLReader(XMLStreamReader reader) {
+    if (reader == null) {
             throw new IllegalArgumentException("'reader' must not be null");
         }
-		int event = reader.getEventType();
-		if (!(event == XMLStreamConstants.START_DOCUMENT || event == XMLStreamConstants.START_ELEMENT)) {
-			throw new IllegalStateException("XMLEventReader not at start of document or element");
-		}
-		this.reader = reader;
-	}
+    int event = reader.getEventType();
+    if (!(event == XMLStreamConstants.START_DOCUMENT || event == XMLStreamConstants.START_ELEMENT)) {
+      throw new IllegalStateException("XMLEventReader not at start of document or element");
+    }
+    this.reader = reader;
+  }
 
-	protected void parseInternal() throws SAXException, XMLStreamException {
-		boolean documentStarted = false;
-		boolean documentEnded = false;
-		int elementDepth = 0;
-		int eventType = reader.getEventType();
-		while (true) {
-			if (eventType != XMLStreamConstants.START_DOCUMENT && eventType != XMLStreamConstants.END_DOCUMENT &&
-					!documentStarted) {
-				handleStartDocument();
-				documentStarted = true;
-			}
-			switch (eventType) {
-				case XMLStreamConstants.START_ELEMENT:
-					elementDepth++;
-					handleStartElement();
-					break;
-				case XMLStreamConstants.END_ELEMENT:
-					elementDepth--;
-					if (elementDepth >= 0) {
-						handleEndElement();
-					}
-					break;
-				case XMLStreamConstants.PROCESSING_INSTRUCTION:
-					handleProcessingInstruction();
-					break;
-				case XMLStreamConstants.CHARACTERS:
-				case XMLStreamConstants.SPACE:
-				case XMLStreamConstants.CDATA:
-					handleCharacters();
-					break;
-				case XMLStreamConstants.START_DOCUMENT:
-					handleStartDocument();
-					documentStarted = true;
-					break;
-				case XMLStreamConstants.END_DOCUMENT:
-					handleEndDocument();
-					documentEnded = true;
-					break;
-				case XMLStreamConstants.COMMENT:
-					handleComment();
-					break;
-				case XMLStreamConstants.DTD:
-					handleDtd();
-					break;
-				case XMLStreamConstants.ENTITY_REFERENCE:
-					handleEntityReference();
-					break;
-			}
-			if (reader.hasNext() && elementDepth >= 0) {
-				eventType = reader.next();
-			}
-			else {
-				break;
-			}
-		}
-		if (!documentEnded) {
-			handleEndDocument();
-		}
-	}
+  protected void parseInternal() throws SAXException, XMLStreamException {
+    boolean documentStarted = false;
+    boolean documentEnded = false;
+    int elementDepth = 0;
+    int eventType = reader.getEventType();
+    while (true) {
+      if (eventType != XMLStreamConstants.START_DOCUMENT && eventType != XMLStreamConstants.END_DOCUMENT &&
+          !documentStarted) {
+        handleStartDocument();
+        documentStarted = true;
+      }
+      switch (eventType) {
+        case XMLStreamConstants.START_ELEMENT:
+          elementDepth++;
+          handleStartElement();
+          break;
+        case XMLStreamConstants.END_ELEMENT:
+          elementDepth--;
+          if (elementDepth >= 0) {
+            handleEndElement();
+          }
+          break;
+        case XMLStreamConstants.PROCESSING_INSTRUCTION:
+          handleProcessingInstruction();
+          break;
+        case XMLStreamConstants.CHARACTERS:
+        case XMLStreamConstants.SPACE:
+        case XMLStreamConstants.CDATA:
+          handleCharacters();
+          break;
+        case XMLStreamConstants.START_DOCUMENT:
+          handleStartDocument();
+          documentStarted = true;
+          break;
+        case XMLStreamConstants.END_DOCUMENT:
+          handleEndDocument();
+          documentEnded = true;
+          break;
+        case XMLStreamConstants.COMMENT:
+          handleComment();
+          break;
+        case XMLStreamConstants.DTD:
+          handleDtd();
+          break;
+        case XMLStreamConstants.ENTITY_REFERENCE:
+          handleEntityReference();
+          break;
+      }
+      if (reader.hasNext() && elementDepth >= 0) {
+        eventType = reader.next();
+      }
+      else {
+        break;
+      }
+    }
+    if (!documentEnded) {
+      handleEndDocument();
+    }
+  }
 
-	private void handleStartDocument() throws SAXException {
-		if (XMLStreamConstants.START_DOCUMENT == reader.getEventType()) {
-			String xmlVersion = reader.getVersion();
-			if (ObjectHelper.isNotEmpty(xmlVersion)) {
-				this.xmlVersion = xmlVersion;
-			}
-			this.encoding = reader.getCharacterEncodingScheme();
-		}
+  private void handleStartDocument() throws SAXException {
+    if (XMLStreamConstants.START_DOCUMENT == reader.getEventType()) {
+      String xmlVersion = reader.getVersion();
+      if (ObjectHelper.isNotEmpty(xmlVersion)) {
+        this.xmlVersion = xmlVersion;
+      }
+      this.encoding = reader.getCharacterEncodingScheme();
+    }
 
-		if (getContentHandler() != null) {
-			final Location location = reader.getLocation();
+    if (getContentHandler() != null) {
+      final Location location = reader.getLocation();
 
-			getContentHandler().setDocumentLocator(new Locator2() {
+      getContentHandler().setDocumentLocator(new Locator2() {
 
-				public int getColumnNumber() {
-					return location != null ? location.getColumnNumber() : -1;
-				}
+        public int getColumnNumber() {
+          return location != null ? location.getColumnNumber() : -1;
+        }
 
-				public int getLineNumber() {
-					return location != null ? location.getLineNumber() : -1;
-				}
+        public int getLineNumber() {
+          return location != null ? location.getLineNumber() : -1;
+        }
 
-				public String getPublicId() {
-					return location != null ? location.getPublicId() : null;
-				}
+        public String getPublicId() {
+          return location != null ? location.getPublicId() : null;
+        }
 
-				public String getSystemId() {
-					return location != null ? location.getSystemId() : null;
-				}
+        public String getSystemId() {
+          return location != null ? location.getSystemId() : null;
+        }
 
-				public String getXMLVersion() {
-					return xmlVersion;
-				}
+        public String getXMLVersion() {
+          return xmlVersion;
+        }
 
-				public String getEncoding() {
-					return encoding;
-				}
-			});
-			getContentHandler().startDocument();
-			if (reader.standaloneSet()) {
-				setStandalone(reader.isStandalone());
-			}
-		}
-	}
+        public String getEncoding() {
+          return encoding;
+        }
+      });
+      getContentHandler().startDocument();
+      if (reader.standaloneSet()) {
+        setStandalone(reader.isStandalone());
+      }
+    }
+  }
 
-	private void handleStartElement() throws SAXException {
-		if (getContentHandler() != null) {
-			QName qName = reader.getName();
-			if (hasNamespacesFeature()) {
-				for (int i = 0; i < reader.getNamespaceCount(); i++) {
-					startPrefixMapping(reader.getNamespacePrefix(i), reader.getNamespaceURI(i));
-				}
-				for (int i = 0; i < reader.getAttributeCount(); i++) {
-					String prefix = reader.getAttributePrefix(i);
-					String namespace = reader.getAttributeNamespace(i);
-					if (ObjectHelper.isNotEmpty(namespace)) {
-						startPrefixMapping(prefix, namespace);
-					}
-				}
-				getContentHandler().startElement(qName.getNamespaceURI(), qName.getLocalPart(), toQualifiedName(qName),
-						getAttributes());
-			}
-			else {
-				getContentHandler().startElement("", "", toQualifiedName(qName), getAttributes());
-			}
-		}
-	}
+  private void handleStartElement() throws SAXException {
+    if (getContentHandler() != null) {
+      QName qName = reader.getName();
+      if (hasNamespacesFeature()) {
+        for (int i = 0; i < reader.getNamespaceCount(); i++) {
+          startPrefixMapping(reader.getNamespacePrefix(i), reader.getNamespaceURI(i));
+        }
+        for (int i = 0; i < reader.getAttributeCount(); i++) {
+          String prefix = reader.getAttributePrefix(i);
+          String namespace = reader.getAttributeNamespace(i);
+          if (ObjectHelper.isNotEmpty(namespace)) {
+            startPrefixMapping(prefix, namespace);
+          }
+        }
+        getContentHandler().startElement(qName.getNamespaceURI(), qName.getLocalPart(), toQualifiedName(qName),
+            getAttributes());
+      }
+      else {
+        getContentHandler().startElement("", "", toQualifiedName(qName), getAttributes());
+      }
+    }
+  }
 
-	private void handleEndElement() throws SAXException {
-		if (getContentHandler() != null) {
-			QName qName = reader.getName();
-			if (hasNamespacesFeature()) {
-				getContentHandler().endElement(qName.getNamespaceURI(), qName.getLocalPart(), toQualifiedName(qName));
-				for (int i = 0; i < reader.getNamespaceCount(); i++) {
-					String prefix = reader.getNamespacePrefix(i);
-					if (prefix == null) {
-						prefix = "";
-					}
-					endPrefixMapping(prefix);
-				}
-			}
-			else {
-				getContentHandler().endElement("", "", toQualifiedName(qName));
-			}
-		}
-	}
+  private void handleEndElement() throws SAXException {
+    if (getContentHandler() != null) {
+      QName qName = reader.getName();
+      if (hasNamespacesFeature()) {
+        getContentHandler().endElement(qName.getNamespaceURI(), qName.getLocalPart(), toQualifiedName(qName));
+        for (int i = 0; i < reader.getNamespaceCount(); i++) {
+          String prefix = reader.getNamespacePrefix(i);
+          if (prefix == null) {
+            prefix = "";
+          }
+          endPrefixMapping(prefix);
+        }
+      }
+      else {
+        getContentHandler().endElement("", "", toQualifiedName(qName));
+      }
+    }
+  }
 
-	private void handleCharacters() throws SAXException {
-		if (getContentHandler() != null && reader.isWhiteSpace()) {
-			getContentHandler()
-					.ignorableWhitespace(reader.getTextCharacters(), reader.getTextStart(), reader.getTextLength());
-			return;
-		}
-		if (XMLStreamConstants.CDATA == reader.getEventType() && getLexicalHandler() != null) {
-			getLexicalHandler().startCDATA();
-		}
-		if (getContentHandler() != null) {
-			getContentHandler().characters(reader.getTextCharacters(), reader.getTextStart(), reader.getTextLength());
-		}
-		if (XMLStreamConstants.CDATA == reader.getEventType() && getLexicalHandler() != null) {
-			getLexicalHandler().endCDATA();
-		}
-	}
+  private void handleCharacters() throws SAXException {
+    if (getContentHandler() != null && reader.isWhiteSpace()) {
+      getContentHandler()
+          .ignorableWhitespace(reader.getTextCharacters(), reader.getTextStart(), reader.getTextLength());
+      return;
+    }
+    if (XMLStreamConstants.CDATA == reader.getEventType() && getLexicalHandler() != null) {
+      getLexicalHandler().startCDATA();
+    }
+    if (getContentHandler() != null) {
+      getContentHandler().characters(reader.getTextCharacters(), reader.getTextStart(), reader.getTextLength());
+    }
+    if (XMLStreamConstants.CDATA == reader.getEventType() && getLexicalHandler() != null) {
+      getLexicalHandler().endCDATA();
+    }
+  }
 
-	private void handleComment() throws SAXException {
-		if (getLexicalHandler() != null) {
-			getLexicalHandler().comment(reader.getTextCharacters(), reader.getTextStart(), reader.getTextLength());
-		}
-	}
+  private void handleComment() throws SAXException {
+    if (getLexicalHandler() != null) {
+      getLexicalHandler().comment(reader.getTextCharacters(), reader.getTextStart(), reader.getTextLength());
+    }
+  }
 
-	private void handleDtd() throws SAXException {
-		if (getLexicalHandler() != null) {
-			javax.xml.stream.Location location = reader.getLocation();
-			getLexicalHandler().startDTD(null, location.getPublicId(), location.getSystemId());
-		}
-		if (getLexicalHandler() != null) {
-			getLexicalHandler().endDTD();
-		}
-	}
+  private void handleDtd() throws SAXException {
+    if (getLexicalHandler() != null) {
+      javax.xml.stream.Location location = reader.getLocation();
+      getLexicalHandler().startDTD(null, location.getPublicId(), location.getSystemId());
+    }
+    if (getLexicalHandler() != null) {
+      getLexicalHandler().endDTD();
+    }
+  }
 
-	private void handleEntityReference() throws SAXException {
-		if (getLexicalHandler() != null) {
-			getLexicalHandler().startEntity(reader.getLocalName());
-		}
-		if (getLexicalHandler() != null) {
-			getLexicalHandler().endEntity(reader.getLocalName());
-		}
-	}
+  private void handleEntityReference() throws SAXException {
+    if (getLexicalHandler() != null) {
+      getLexicalHandler().startEntity(reader.getLocalName());
+    }
+    if (getLexicalHandler() != null) {
+      getLexicalHandler().endEntity(reader.getLocalName());
+    }
+  }
 
-	private void handleEndDocument() throws SAXException {
-		if (getContentHandler() != null) {
-			getContentHandler().endDocument();
-		}
-	}
+  private void handleEndDocument() throws SAXException {
+    if (getContentHandler() != null) {
+      getContentHandler().endDocument();
+    }
+  }
 
-	private void handleProcessingInstruction() throws SAXException {
-		if (getContentHandler() != null) {
-			getContentHandler().processingInstruction(reader.getPITarget(), reader.getPIData());
-		}
-	}
+  private void handleProcessingInstruction() throws SAXException {
+    if (getContentHandler() != null) {
+      getContentHandler().processingInstruction(reader.getPITarget(), reader.getPIData());
+    }
+  }
 
-	private Attributes getAttributes() {
-		AttributesImpl attributes = new AttributesImpl();
+  private Attributes getAttributes() {
+    AttributesImpl attributes = new AttributesImpl();
 
-		for (int i = 0; i < reader.getAttributeCount(); i++) {
-			String namespace = reader.getAttributeNamespace(i);
-			if (namespace == null || !hasNamespacesFeature()) {
-				namespace = "";
-			}
-			String type = reader.getAttributeType(i);
-			if (type == null) {
-				type = "CDATA";
-			}
-			attributes.addAttribute(namespace, reader.getAttributeLocalName(i),
-					toQualifiedName(reader.getAttributeName(i)), type, reader.getAttributeValue(i));
-		}
-		if (hasNamespacePrefixesFeature()) {
-			for (int i = 0; i < reader.getNamespaceCount(); i++) {
-				String prefix = reader.getNamespacePrefix(i);
-				String namespaceUri = reader.getNamespaceURI(i);
-				String qName;
-				if (ObjectHelper.isNotEmpty(prefix)) {
-					qName = "xmlns:" + prefix;
-				}
-				else {
-					qName = "xmlns";
-				}
-				attributes.addAttribute("", "", qName, "CDATA", namespaceUri);
-			}
-		}
+    for (int i = 0; i < reader.getAttributeCount(); i++) {
+      String namespace = reader.getAttributeNamespace(i);
+      if (namespace == null || !hasNamespacesFeature()) {
+        namespace = "";
+      }
+      String type = reader.getAttributeType(i);
+      if (type == null) {
+        type = "CDATA";
+      }
+      attributes.addAttribute(namespace, reader.getAttributeLocalName(i),
+          toQualifiedName(reader.getAttributeName(i)), type, reader.getAttributeValue(i));
+    }
+    if (hasNamespacePrefixesFeature()) {
+      for (int i = 0; i < reader.getNamespaceCount(); i++) {
+        String prefix = reader.getNamespacePrefix(i);
+        String namespaceUri = reader.getNamespaceURI(i);
+        String qName;
+        if (ObjectHelper.isNotEmpty(prefix)) {
+          qName = "xmlns:" + prefix;
+        }
+        else {
+          qName = "xmlns";
+        }
+        attributes.addAttribute("", "", qName, "CDATA", namespaceUri);
+      }
+    }
 
-		return attributes;
-	}
+    return attributes;
+  }
 
     // AbstractStaxXmlReader
     @Override
-	public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
-		if (NAMESPACES_FEATURE_NAME.equals(name)) {
-			return this.namespacesFeature;
-		}
-		else if (NAMESPACE_PREFIXES_FEATURE_NAME.equals(name)) {
-			return this.namespacePrefixesFeature;
-		}
-		else if (IS_STANDALONE_FEATURE_NAME.equals(name)) {
-			if (this.isStandalone != null) {
-				return this.isStandalone;
-			}
-			else {
-				throw new SAXNotSupportedException("startDocument() callback not completed yet");
-			}
-		}
-		else {
-			throw new SAXNotRecognizedException(name);
-		}
-	}
+  public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
+    if (NAMESPACES_FEATURE_NAME.equals(name)) {
+      return this.namespacesFeature;
+    }
+    else if (NAMESPACE_PREFIXES_FEATURE_NAME.equals(name)) {
+      return this.namespacePrefixesFeature;
+    }
+    else if (IS_STANDALONE_FEATURE_NAME.equals(name)) {
+      if (this.isStandalone != null) {
+        return this.isStandalone;
+      }
+      else {
+        throw new SAXNotSupportedException("startDocument() callback not completed yet");
+      }
+    }
+    else {
+      throw new SAXNotRecognizedException(name);
+    }
+  }
 
-	@Override
-	public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException {
-		if (NAMESPACES_FEATURE_NAME.equals(name)) {
-			this.namespacesFeature = value;
-		}
-		else if (NAMESPACE_PREFIXES_FEATURE_NAME.equals(name)) {
-			this.namespacePrefixesFeature = value;
-		}
-		else {
-			throw new SAXNotRecognizedException(name);
-		}
-	}
+  @Override
+  public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException {
+    if (NAMESPACES_FEATURE_NAME.equals(name)) {
+      this.namespacesFeature = value;
+    }
+    else if (NAMESPACE_PREFIXES_FEATURE_NAME.equals(name)) {
+      this.namespacePrefixesFeature = value;
+    }
+    else {
+      throw new SAXNotRecognizedException(name);
+    }
+  }
 
-	protected void setStandalone(boolean standalone) {
-		this.isStandalone = standalone;
-	}
+  protected void setStandalone(boolean standalone) {
+    this.isStandalone = standalone;
+  }
 
-	/**
-	 * Indicates whether the SAX feature <code>http://xml.org/sax/features/namespaces</code> is turned on.
-	 */
-	protected boolean hasNamespacesFeature() {
-		return this.namespacesFeature;
-	}
+  /**
+   * Indicates whether the SAX feature <code>http://xml.org/sax/features/namespaces</code> is turned on.
+   */
+  protected boolean hasNamespacesFeature() {
+    return this.namespacesFeature;
+  }
 
-	/**
-	 * Indicates whether the SAX feature <code>http://xml.org/sax/features/namespaces-prefixes</code> is turned on.
-	 */
-	protected boolean hasNamespacePrefixesFeature() {
-		return this.namespacePrefixesFeature;
-	}
+  /**
+   * Indicates whether the SAX feature <code>http://xml.org/sax/features/namespaces-prefixes</code> is turned on.
+   */
+  protected boolean hasNamespacePrefixesFeature() {
+    return this.namespacePrefixesFeature;
+  }
 
-	/**
-	 * Convert a <code>QName</code> to a qualified name, as used by DOM and SAX.
-	 * The returned string has a format of <code>prefix:localName</code> if the
-	 * prefix is set, or just <code>localName</code> if not.
-	 * @param qName the <code>QName</code>
-	 * @return the qualified name
-	 */
-	protected String toQualifiedName(QName qName) {
-		String prefix = qName.getPrefix();
-		if (!ObjectHelper.isNotEmpty(prefix)) {
-			return qName.getLocalPart();
-		}
-		else {
-			return prefix + ":" + qName.getLocalPart();
-		}
-	}
+  /**
+   * Convert a <code>QName</code> to a qualified name, as used by DOM and SAX.
+   * The returned string has a format of <code>prefix:localName</code> if the
+   * prefix is set, or just <code>localName</code> if not.
+   * @param qName the <code>QName</code>
+   * @return the qualified name
+   */
+  protected String toQualifiedName(QName qName) {
+    String prefix = qName.getPrefix();
+    if (!ObjectHelper.isNotEmpty(prefix)) {
+      return qName.getLocalPart();
+    }
+    else {
+      return prefix + ":" + qName.getLocalPart();
+    }
+  }
 
 
-	/**
-	 * Parse the StAX XML reader passed at construction-time.
-	 * <p><b>NOTE:</b>: The given <code>InputSource</code> is not read, but ignored.
-	 * @param ignored is ignored
-	 * @throws SAXException a SAX exception, possibly wrapping a <code>XMLStreamException</code>
-	 */
-	@Override
+  /**
+   * Parse the StAX XML reader passed at construction-time.
+   * <p><b>NOTE:</b>: The given <code>InputSource</code> is not read, but ignored.
+   * @param ignored is ignored
+   * @throws SAXException a SAX exception, possibly wrapping a <code>XMLStreamException</code>
+   */
+  @Override
     public final void parse(InputSource ignored) throws SAXException {
-		parse();
-	}
+    parse();
+  }
 
-	/**
-	 * Parse the StAX XML reader passed at construction-time.
-	 * <p><b>NOTE:</b>: The given system identifier is not read, but ignored.
-	 * @param ignored is ignored
-	 * @throws SAXException A SAX exception, possibly wrapping a <code>XMLStreamException</code>
-	 */
-	@Override
+  /**
+   * Parse the StAX XML reader passed at construction-time.
+   * <p><b>NOTE:</b>: The given system identifier is not read, but ignored.
+   * @param ignored is ignored
+   * @throws SAXException A SAX exception, possibly wrapping a <code>XMLStreamException</code>
+   */
+  @Override
     public final void parse(String ignored) throws SAXException {
-		parse();
-	}
+    parse();
+  }
 
-	private void parse() throws SAXException {
-		try {
-			parseInternal();
-		} catch (XMLStreamException ex) {
-			Locator locator = null;
-			if (ex.getLocation() != null) {
-				locator = new StaxLocator(ex.getLocation());
-			}
-			SAXParseException saxException = new SAXParseException(ex.getMessage(), locator, ex);
-			if (getErrorHandler() != null) {
-				getErrorHandler().fatalError(saxException);
-			}
-			else {
-				throw saxException;
-			}
-		}
-	}
+  private void parse() throws SAXException {
+    try {
+      parseInternal();
+    } catch (XMLStreamException ex) {
+      Locator locator = null;
+      if (ex.getLocation() != null) {
+        locator = new StaxLocator(ex.getLocation());
+      }
+      SAXParseException saxException = new SAXParseException(ex.getMessage(), locator, ex);
+      if (getErrorHandler() != null) {
+        getErrorHandler().fatalError(saxException);
+      }
+      else {
+        throw saxException;
+      }
+    }
+  }
 
-	/**
-	 * Starts the prefix mapping for the given prefix.
-	 * @see org.xml.sax.ContentHandler#startPrefixMapping(String, String)
-	 */
-	protected void startPrefixMapping(String prefix, String namespace) throws SAXException {
-		if (getContentHandler() != null) {
-			if (prefix == null) {
-				prefix = "";
-			}
-			if (!ObjectHelper.isNotEmpty(namespace)) {
-				return;
-			}
-			if (!namespace.equals(namespaces.get(prefix))) {
-				getContentHandler().startPrefixMapping(prefix, namespace);
-				namespaces.put(prefix, namespace);
-			}
-		}
-	}
+  /**
+   * Starts the prefix mapping for the given prefix.
+   * @see org.xml.sax.ContentHandler#startPrefixMapping(String, String)
+   */
+  protected void startPrefixMapping(String prefix, String namespace) throws SAXException {
+    if (getContentHandler() != null) {
+      if (prefix == null) {
+        prefix = "";
+      }
+      if (!ObjectHelper.isNotEmpty(namespace)) {
+        return;
+      }
+      if (!namespace.equals(namespaces.get(prefix))) {
+        getContentHandler().startPrefixMapping(prefix, namespace);
+        namespaces.put(prefix, namespace);
+      }
+    }
+  }
 
-	/**
-	 * Ends the prefix mapping for the given prefix.
-	 * @see org.xml.sax.ContentHandler#endPrefixMapping(String)
-	 */
-	protected void endPrefixMapping(String prefix) throws SAXException {
-		if (getContentHandler() != null) {
-			if (namespaces.containsKey(prefix)) {
-				getContentHandler().endPrefixMapping(prefix);
-				namespaces.remove(prefix);
-			}
-		}
-	}
+  /**
+   * Ends the prefix mapping for the given prefix.
+   * @see org.xml.sax.ContentHandler#endPrefixMapping(String)
+   */
+  protected void endPrefixMapping(String prefix) throws SAXException {
+    if (getContentHandler() != null) {
+      if (namespaces.containsKey(prefix)) {
+        getContentHandler().endPrefixMapping(prefix);
+        namespaces.remove(prefix);
+      }
+    }
+  }
 
-	/**
-	 * Implementation of the <code>Locator</code> interface that is based on a StAX <code>Location</code>.
-	 * @see Locator
-	 * @see Location
-	 */
-	private static class StaxLocator implements Locator {
+  /**
+   * Implementation of the <code>Locator</code> interface that is based on a StAX <code>Location</code>.
+   * @see Locator
+   * @see Location
+   */
+  private static class StaxLocator implements Locator {
 
-		private Location location;
+    private Location location;
 
-		protected StaxLocator(Location location) {
-			this.location = location;
-		}
+    protected StaxLocator(Location location) {
+      this.location = location;
+    }
 
-		@Override
+    @Override
         public String getPublicId() {
-			return location.getPublicId();
-		}
+      return location.getPublicId();
+    }
 
-		@Override
+    @Override
         public String getSystemId() {
-			return location.getSystemId();
-		}
+      return location.getSystemId();
+    }
 
-		@Override
+    @Override
         public int getLineNumber() {
-			return location.getLineNumber();
-		}
+      return location.getLineNumber();
+    }
 
-		@Override
+    @Override
         public int getColumnNumber() {
-			return location.getColumnNumber();
-		}
-	}
+      return location.getColumnNumber();
+    }
+  }
 
     // AbstractXMLReader
 
     @Override
     public ContentHandler getContentHandler() {
-		return contentHandler;
-	}
+    return contentHandler;
+  }
 
-	@Override
+  @Override
     public void setContentHandler(ContentHandler contentHandler) {
-		this.contentHandler = contentHandler;
-	}
+    this.contentHandler = contentHandler;
+  }
 
-	@Override
+  @Override
     public void setDTDHandler(DTDHandler dtdHandler) {
-		this.dtdHandler = dtdHandler;
-	}
+    this.dtdHandler = dtdHandler;
+  }
 
-	@Override
+  @Override
     public DTDHandler getDTDHandler() {
-		return dtdHandler;
-	}
+    return dtdHandler;
+  }
 
-	@Override
+  @Override
     public EntityResolver getEntityResolver() {
-		return entityResolver;
-	}
+    return entityResolver;
+  }
 
-	@Override
+  @Override
     public void setEntityResolver(EntityResolver entityResolver) {
-		this.entityResolver = entityResolver;
-	}
+    this.entityResolver = entityResolver;
+  }
 
-	@Override
+  @Override
     public ErrorHandler getErrorHandler() {
-		return errorHandler;
-	}
+    return errorHandler;
+  }
 
-	@Override
+  @Override
     public void setErrorHandler(ErrorHandler errorHandler) {
-		this.errorHandler = errorHandler;
-	}
+    this.errorHandler = errorHandler;
+  }
 
-	protected LexicalHandler getLexicalHandler() {
-		return lexicalHandler;
-	}
+  protected LexicalHandler getLexicalHandler() {
+    return lexicalHandler;
+  }
 
-	/**
-	 * Throws a <code>SAXNotRecognizedException</code> exception when the given property does not signify a lexical
-	 * handler. The property name for a lexical handler is <code>http://xml.org/sax/properties/lexical-handler</code>.
-	 */
-	@Override
+  /**
+   * Throws a <code>SAXNotRecognizedException</code> exception when the given property does not signify a lexical
+   * handler. The property name for a lexical handler is <code>http://xml.org/sax/properties/lexical-handler</code>.
+   */
+  @Override
     public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
-		if ("http://xml.org/sax/properties/lexical-handler".equals(name)) {
-			return lexicalHandler;
-		}
-		else {
-			throw new SAXNotRecognizedException(name);
-		}
-	}
+    if ("http://xml.org/sax/properties/lexical-handler".equals(name)) {
+      return lexicalHandler;
+    }
+    else {
+      throw new SAXNotRecognizedException(name);
+    }
+  }
 
-	/**
-	 * Throws a <code>SAXNotRecognizedException</code> exception when the given property does not signify a lexical
-	 * handler. The property name for a lexical handler is <code>http://xml.org/sax/properties/lexical-handler</code>.
-	 */
-	@Override
+  /**
+   * Throws a <code>SAXNotRecognizedException</code> exception when the given property does not signify a lexical
+   * handler. The property name for a lexical handler is <code>http://xml.org/sax/properties/lexical-handler</code>.
+   */
+  @Override
     public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException {
-		if ("http://xml.org/sax/properties/lexical-handler".equals(name)) {
-			lexicalHandler = (LexicalHandler) value;
-		}
-		else {
-			throw new SAXNotRecognizedException(name);
-		}
-	}
+    if ("http://xml.org/sax/properties/lexical-handler".equals(name)) {
+      lexicalHandler = (LexicalHandler) value;
+    }
+    else {
+      throw new SAXNotRecognizedException(name);
+    }
+  }
 }
 // CHECKSTYLE:ON
diff --git a/components/camel-stax/src/test/java/org/apache/camel/component/stax/IssueWithWrongEncodingTest.java b/components/camel-stax/src/test/java/org/apache/camel/component/stax/IssueWithWrongEncodingTest.java
index b4f2337..3c3c314 100644
--- a/components/camel-stax/src/test/java/org/apache/camel/component/stax/IssueWithWrongEncodingTest.java
+++ b/components/camel-stax/src/test/java/org/apache/camel/component/stax/IssueWithWrongEncodingTest.java
@@ -17,10 +17,8 @@
 package org.apache.camel.component.stax;
 
 import java.io.File;
-import java.nio.charset.StandardCharsets;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.stax.model.Product;
diff --git a/components/camel-stax/src/test/java/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.java b/components/camel-stax/src/test/java/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.java
index bd2b4e2..8ad7b37 100644
--- a/components/camel-stax/src/test/java/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.java
+++ b/components/camel-stax/src/test/java/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.stax;
+
 import org.apache.camel.EndpointInject;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.stax.model.Record;
diff --git a/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXComponentTest.java b/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXComponentTest.java
index 7246530..26c735b 100644
--- a/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXComponentTest.java
+++ b/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXComponentTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.stax;
+
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java b/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java
index ef261e2b..6f16693 100644
--- a/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java
+++ b/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.stax;
+
 import org.apache.camel.EndpointInject;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXXPathSplitChoicePerformanceTest.java b/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXXPathSplitChoicePerformanceTest.java
index 0b7b1ed..4c81acc 100644
--- a/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXXPathSplitChoicePerformanceTest.java
+++ b/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXXPathSplitChoicePerformanceTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.stax;
+
 import java.io.File;
 import java.io.FileOutputStream;
 import java.util.concurrent.TimeUnit;
diff --git a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
index 9093258..1c22bd8 100644
--- a/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
+++ b/components/camel-stomp/src/test/java/org/apache/camel/component/stomp/StompBaseTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.stomp;
+
 import javax.net.ssl.SSLContext;
 
 import org.apache.activemq.broker.BrokerService;
diff --git a/components/camel-stream/src/main/java/org/apache/camel/component/stream/FileWatcherStrategy.java b/components/camel-stream/src/main/java/org/apache/camel/component/stream/FileWatcherStrategy.java
index 2f6fdbb..454ff04 100644
--- a/components/camel-stream/src/main/java/org/apache/camel/component/stream/FileWatcherStrategy.java
+++ b/components/camel-stream/src/main/java/org/apache/camel/component/stream/FileWatcherStrategy.java
@@ -26,9 +26,6 @@
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
 
-import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
-import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.RuntimeCamelException;
@@ -38,6 +35,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
+import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
+
 /**
  * To watch for file changes/rollover via JDK file watcher API.
  * This is used to know for example of streaming from a file, that gets rolled-over, so we know about this,
diff --git a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java
index c29bf8f..2e39d66 100644
--- a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java
+++ b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java
@@ -70,7 +70,7 @@
         // use file watch service if we read from file
         if (endpoint.isFileWatcher()) {
             String dir = new File(endpoint.getFileName()).getParent();
-            fileWatcher = new FileWatcherStrategy(dir, (file) -> {
+            fileWatcher = new FileWatcherStrategy(dir, file -> {
                 String onlyName = file.getName();
                 String target = FileUtil.stripPath(endpoint.getFileName());
                 log.trace("File changed: {}", onlyName);
diff --git a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamEndpoint.java b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamEndpoint.java
index 533859e..253a8e5 100644
--- a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamEndpoint.java
+++ b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamEndpoint.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.stream;
 
 import java.nio.charset.Charset;
-import java.util.Map;
 
 import org.apache.camel.Component;
 import org.apache.camel.Consumer;
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
index 5933300..532c1ab 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java
@@ -29,8 +29,6 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import static java.lang.invoke.MethodHandles.publicLookup;
-
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.models.ArrayModel;
 import io.swagger.models.Model;
@@ -80,6 +78,8 @@
 import org.apache.camel.support.ObjectHelper;
 import org.apache.camel.util.FileUtil;
 
+import static java.lang.invoke.MethodHandles.publicLookup;
+
 /**
  * A Camel REST-DSL swagger reader that parse the rest-dsl into a swagger model representation.
  * <p/>
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
index 23ecb76..fe32ed2 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
@@ -27,6 +27,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
+
 import javax.management.AttributeNotFoundException;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/ParameterAssert.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/ParameterAssert.java
index b2e7135..4f56c0e 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/ParameterAssert.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/ParameterAssert.java
@@ -19,15 +19,14 @@
 import java.lang.invoke.MethodType;
 import java.util.List;
 
-import static java.lang.invoke.MethodHandles.publicLookup;
-
 import io.swagger.models.parameters.Parameter;
 import io.swagger.models.parameters.SerializableParameter;
 import io.swagger.models.properties.Property;
-
 import org.assertj.core.api.Assertions;
 import org.assertj.core.api.ObjectAssert;
 
+import static java.lang.invoke.MethodHandles.publicLookup;
+
 public final class ParameterAssert extends ObjectAssert<Parameter> {
 
     private ParameterAssert(final Parameter actual) {
@@ -111,4 +110,4 @@
             throw new AssertionError(e);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerArrayEnumTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerArrayEnumTest.java
index 13e5266..bfba159 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerArrayEnumTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerArrayEnumTest.java
@@ -25,7 +25,6 @@
 import io.swagger.models.Path;
 import io.swagger.models.Swagger;
 import io.swagger.models.parameters.Parameter;
-
 import org.apache.camel.impl.engine.DefaultClassResolver;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestParamType;
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsOverrideTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsOverrideTest.java
index e044b29..aac699f 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsOverrideTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsOverrideTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.databind.SerializationFeature;
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.models.Swagger;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.engine.DefaultClassResolver;
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsTest.java
index 73bfc82..322d00c 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderApiDocsTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.databind.SerializationFeature;
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.models.Swagger;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.engine.DefaultClassResolver;
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderDayOfWeekTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderDayOfWeekTest.java
index 83ef33c..6f013a6 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderDayOfWeekTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderDayOfWeekTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.databind.SerializationFeature;
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.models.Swagger;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.engine.DefaultClassResolver;
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderEnableVendorExtensionTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderEnableVendorExtensionTest.java
index c4fa429..d4fc26c 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderEnableVendorExtensionTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderEnableVendorExtensionTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.databind.SerializationFeature;
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.models.Swagger;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.engine.DefaultClassResolver;
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelApiSecurityTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelApiSecurityTest.java
index 8374fda..2dab809 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelApiSecurityTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelApiSecurityTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.databind.SerializationFeature;
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.models.Swagger;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.engine.DefaultClassResolver;
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelBookOrderTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelBookOrderTest.java
index 8961b7c..7efc197 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelBookOrderTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelBookOrderTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.databind.SerializationFeature;
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.models.Swagger;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.engine.DefaultClassResolver;
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java
index 89ff690..33b1a92 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderModelTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.databind.SerializationFeature;
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.models.Swagger;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.engine.DefaultClassResolver;
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderPropertyPlaceholderTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderPropertyPlaceholderTest.java
index 966e88a..8c6d218 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderPropertyPlaceholderTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderPropertyPlaceholderTest.java
@@ -24,7 +24,6 @@
 import com.fasterxml.jackson.databind.SerializationFeature;
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.models.Swagger;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.engine.DefaultClassResolver;
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderTest.java
index add70e6..0071d7d 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderTest.java
@@ -21,7 +21,6 @@
 import com.fasterxml.jackson.databind.SerializationFeature;
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.models.Swagger;
-
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.engine.DefaultClassResolver;
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerSupportTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerSupportTest.java
index efbdf82..d9042e5 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerSupportTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerSupportTest.java
@@ -23,7 +23,6 @@
 
 import io.swagger.models.Scheme;
 import io.swagger.models.Swagger;
-
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
diff --git a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/netty/Rfc5425Encoder.java b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/netty/Rfc5425Encoder.java
index a18b855..094be85 100644
--- a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/netty/Rfc5425Encoder.java
+++ b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/netty/Rfc5425Encoder.java
@@ -26,7 +26,6 @@
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.handler.codec.MessageToMessageEncoder;
 
-
 @Sharable
 public class Rfc5425Encoder extends MessageToMessageEncoder<ByteBuf> {
 
diff --git a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/AutomatedConversionTest.java b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/AutomatedConversionTest.java
index 0e68fa2..03afc76 100644
--- a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/AutomatedConversionTest.java
+++ b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/AutomatedConversionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.syslog;
+
 import java.io.IOException;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
diff --git a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaDataFormatTest.java b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaDataFormatTest.java
index fc886c4..b8f1c3f 100644
--- a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaDataFormatTest.java
+++ b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaDataFormatTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.syslog;
+
 import java.io.IOException;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
diff --git a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaManyUDPMessagesTest.java b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaManyUDPMessagesTest.java
index 2bedbfc..414f285 100644
--- a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaManyUDPMessagesTest.java
+++ b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/MinaManyUDPMessagesTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.syslog;
+
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.InetAddress;
diff --git a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyDataFormatTest.java b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyDataFormatTest.java
index 244089e..d75de05 100644
--- a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyDataFormatTest.java
+++ b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyDataFormatTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.syslog;
+
 import java.io.IOException;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
diff --git a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyManyUDPMessagesTest.java b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyManyUDPMessagesTest.java
index 48cb9aa..c8f4032 100644
--- a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyManyUDPMessagesTest.java
+++ b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyManyUDPMessagesTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.syslog;
+
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.InetAddress;
diff --git a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425LongMessageTest.java b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425LongMessageTest.java
index 35715c9..42d7ed6 100644
--- a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425LongMessageTest.java
+++ b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425LongMessageTest.java
@@ -15,8 +15,8 @@
  * limitations under the License.
  */
 package org.apache.camel.component.syslog;
-import io.netty.buffer.ByteBuf;
 
+import io.netty.buffer.ByteBuf;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425Test.java b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425Test.java
index f99fb9a..bc4043f 100644
--- a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425Test.java
+++ b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/NettyRfc5425Test.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.syslog;
+
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
diff --git a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringMinaTest.java b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringMinaTest.java
index d3b7a09..ee2c4f7 100644
--- a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringMinaTest.java
+++ b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringMinaTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.syslog;
+
 import java.io.IOException;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
diff --git a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringNettyTest.java b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringNettyTest.java
index df2859e..4d788fe 100644
--- a/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringNettyTest.java
+++ b/components/camel-syslog/src/test/java/org/apache/camel/component/syslog/SyslogSpringNettyTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.syslog;
+
 import java.io.IOException;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
diff --git a/components/camel-tagsoup/src/test/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormatAsStringTest.java b/components/camel-tagsoup/src/test/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormatAsStringTest.java
index 204fd33..4d96509 100644
--- a/components/camel-tagsoup/src/test/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormatAsStringTest.java
+++ b/components/camel-tagsoup/src/test/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormatAsStringTest.java
@@ -28,7 +28,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 public class TidyMarkupDataFormatAsStringTest extends CamelTestSupport {
    
     @Test
diff --git a/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarIterator.java b/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarIterator.java
index 43f118a..92aa119 100644
--- a/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarIterator.java
+++ b/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarIterator.java
@@ -176,4 +176,4 @@
     public void setAllowEmptyDirectory(boolean allowEmptyDirectory) {
         this.allowEmptyDirectory = allowEmptyDirectory;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/SpringTarFileDataFormatTest.java b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/SpringTarFileDataFormatTest.java
index 824079a..f5e68d9 100644
--- a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/SpringTarFileDataFormatTest.java
+++ b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/SpringTarFileDataFormatTest.java
@@ -15,12 +15,10 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.tarfile;
+
 import java.io.File;
 import java.util.concurrent.TimeUnit;
 
-import static java.nio.charset.StandardCharsets.UTF_8;
-import static java.util.Collections.singletonList;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.NotifyBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -29,6 +27,8 @@
 import org.junit.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.Collections.singletonList;
 import static org.apache.camel.Exchange.FILE_NAME;
 import static org.apache.camel.dataformat.tarfile.TarUtils.TEXT;
 import static org.apache.camel.dataformat.tarfile.TarUtils.getBytes;
diff --git a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileDataFormatTest.java b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileDataFormatTest.java
index b062d1c..9b55902 100644
--- a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileDataFormatTest.java
+++ b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileDataFormatTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.tarfile;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
diff --git a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileSplitAndDeleteTest.java b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileSplitAndDeleteTest.java
index f4aaf8b..e451655 100644
--- a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileSplitAndDeleteTest.java
+++ b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileSplitAndDeleteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.tarfile;
+
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
diff --git a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarSplitterRouteIssueTest.java b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarSplitterRouteIssueTest.java
index 5cc599a..046017c 100644
--- a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarSplitterRouteIssueTest.java
+++ b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarSplitterRouteIssueTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.tarfile;
+
 import java.io.File;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-tarfile/src/test/java/org/apache/camel/processor/aggregate/tarfile/AggregationStrategyWithFilenameHeaderTest.java b/components/camel-tarfile/src/test/java/org/apache/camel/processor/aggregate/tarfile/AggregationStrategyWithFilenameHeaderTest.java
index 3a7ae86..25775a7 100644
--- a/components/camel-tarfile/src/test/java/org/apache/camel/processor/aggregate/tarfile/AggregationStrategyWithFilenameHeaderTest.java
+++ b/components/camel-tarfile/src/test/java/org/apache/camel/processor/aggregate/tarfile/AggregationStrategyWithFilenameHeaderTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.aggregate.tarfile;
+
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
diff --git a/components/camel-tarfile/src/test/java/org/apache/camel/processor/aggregate/tarfile/AggregationStrategyWithPreservationTest.java b/components/camel-tarfile/src/test/java/org/apache/camel/processor/aggregate/tarfile/AggregationStrategyWithPreservationTest.java
index 23770fa..69f883c 100644
--- a/components/camel-tarfile/src/test/java/org/apache/camel/processor/aggregate/tarfile/AggregationStrategyWithPreservationTest.java
+++ b/components/camel-tarfile/src/test/java/org/apache/camel/processor/aggregate/tarfile/AggregationStrategyWithPreservationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.aggregate.tarfile;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.Arrays;
diff --git a/components/camel-tarfile/src/test/java/org/apache/camel/processor/aggregate/tarfile/TarAggregationStrategyTest.java b/components/camel-tarfile/src/test/java/org/apache/camel/processor/aggregate/tarfile/TarAggregationStrategyTest.java
index b26cde2..fdef4cf 100644
--- a/components/camel-tarfile/src/test/java/org/apache/camel/processor/aggregate/tarfile/TarAggregationStrategyTest.java
+++ b/components/camel-tarfile/src/test/java/org/apache/camel/processor/aggregate/tarfile/TarAggregationStrategyTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.aggregate.tarfile;
+
 import java.io.File;
 import java.io.FileInputStream;
 
diff --git a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramEndpoint.java b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramEndpoint.java
index 4396f6e..45d7815 100644
--- a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramEndpoint.java
+++ b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/TelegramEndpoint.java
@@ -34,6 +34,7 @@
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import static org.apache.camel.component.telegram.util.TelegramMessageHelper.populateExchange;
 
 /**
diff --git a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/UnixTimestampDeserializer.java b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/UnixTimestampDeserializer.java
index 0b29906..9951fbf 100644
--- a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/UnixTimestampDeserializer.java
+++ b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/model/UnixTimestampDeserializer.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.telegram.model;
 
-
 import java.io.IOException;
 import java.time.Instant;
 
diff --git a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/RestBotAPI.java b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/RestBotAPI.java
index 88325df..d6b491a 100644
--- a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/RestBotAPI.java
+++ b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/RestBotAPI.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.telegram.service;
 
 import java.util.List;
+
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
@@ -115,4 +116,4 @@
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
     MessageResult sendVenue(@PathParam("authorizationToken") String authorizationToken, SendVenueMessage location);
-}
\ No newline at end of file
+}
diff --git a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/TelegramServiceRestBotAPIAdapter.java b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/TelegramServiceRestBotAPIAdapter.java
index 483bbb3..333c6d9 100644
--- a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/TelegramServiceRestBotAPIAdapter.java
+++ b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/service/TelegramServiceRestBotAPIAdapter.java
@@ -20,6 +20,7 @@
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
+
 import javax.ws.rs.core.MultivaluedHashMap;
 import javax.ws.rs.core.MultivaluedMap;
 
diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramChatBotTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramChatBotTest.java
index fc97188..8f87935 100644
--- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramChatBotTest.java
+++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramChatBotTest.java
@@ -35,7 +35,6 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-
 /**
  * Tests a chain made of a consumer and a producer to create a direct chat-bot.
  */
@@ -58,7 +57,7 @@
         when(service.getUpdates(any(), any(), any(), any()))
                 .thenReturn(request)
                 .thenReturn(request2)
-                .thenAnswer((i) -> defaultRes);
+                .thenAnswer(i -> defaultRes);
     }
 
     @Test
diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerChannelPostTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerChannelPostTest.java
index 32e0928..983a064 100644
--- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerChannelPostTest.java
+++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerChannelPostTest.java
@@ -29,10 +29,10 @@
 import org.apache.camel.component.telegram.util.TelegramTestSupport;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
 
-
 /**
  * 
  * Test channel data updates are converted by camel application.
@@ -51,7 +51,7 @@
 
         UpdateResult defaultRes = getJSONResource("messages/updates-empty.json", UpdateResult.class);
 
-        when(api.getUpdates(any(), any(), any(), any())).thenReturn(res1).thenAnswer((i) -> defaultRes);
+        when(api.getUpdates(any(), any(), any(), any())).thenReturn(res1).thenAnswer(i -> defaultRes);
     }
     
     @Test
diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerEmptyResponseTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerEmptyResponseTest.java
index 6aeeab7..97ed018 100644
--- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerEmptyResponseTest.java
+++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerEmptyResponseTest.java
@@ -42,7 +42,7 @@
 
         UpdateResult defaultRes = getJSONResource("messages/updates-empty.json", UpdateResult.class);
 
-        when(api.getUpdates(any(), any(), any(), any())).thenAnswer((i) -> defaultRes);
+        when(api.getUpdates(any(), any(), any(), any())).thenAnswer(i -> defaultRes);
     }
 
     @Test(expected = AssertionError.class)
diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMappingTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMappingTest.java
index 7986e30..61a6b0b 100644
--- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMappingTest.java
+++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMappingTest.java
@@ -52,7 +52,7 @@
 
         UpdateResult defaultRes = getJSONResource("messages/updates-empty.json", UpdateResult.class);
 
-        when(api.getUpdates(any(), any(), any(), any())).thenReturn(res1).thenAnswer((i) -> defaultRes);
+        when(api.getUpdates(any(), any(), any(), any())).thenReturn(res1).thenAnswer(i -> defaultRes);
     }
 
     @Test
diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaDocumentTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaDocumentTest.java
index 0efcdf3..175efe1 100644
--- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaDocumentTest.java
+++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaDocumentTest.java
@@ -49,7 +49,7 @@
 
         when(api.getUpdates(any(), any(), any(), any()))
                 .thenReturn(res)
-                .thenAnswer((i) -> defaultRes);
+                .thenAnswer(i -> defaultRes);
     }
 
     @Test
diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaPhotoTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaPhotoTest.java
index c1b678f..7ee7f60 100644
--- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaPhotoTest.java
+++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaPhotoTest.java
@@ -48,7 +48,7 @@
 
         when(api.getUpdates(any(), any(), any(), any()))
                 .thenReturn(res)
-                .thenAnswer((i) -> defaultRes);
+                .thenAnswer(i -> defaultRes);
     }
 
     @Test
diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaVideoTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaVideoTest.java
index a904eef..7f59fb7 100644
--- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaVideoTest.java
+++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMediaVideoTest.java
@@ -50,7 +50,7 @@
 
         when(api.getUpdates(any(), any(), any(), any()))
                 .thenReturn(res)
-                .thenAnswer((i) -> defaultRes);
+                .thenAnswer(i -> defaultRes);
     }
 
     @Test
diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMultipleTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMultipleTest.java
index e694397..ec3e6c5 100644
--- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMultipleTest.java
+++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerMultipleTest.java
@@ -49,7 +49,7 @@
 
         UpdateResult defaultRes = getJSONResource("messages/updates-empty.json", UpdateResult.class);
 
-        when(api.getUpdates(any(), any(), any(), any())).thenReturn(res1).thenReturn(res2).thenAnswer((i) -> defaultRes);
+        when(api.getUpdates(any(), any(), any(), any())).thenReturn(res1).thenReturn(res2).thenAnswer(i -> defaultRes);
     }
 
     @Test
diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerServiceErrorTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerServiceErrorTest.java
index f6aa98d..b04e1f8 100644
--- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerServiceErrorTest.java
+++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerServiceErrorTest.java
@@ -52,7 +52,7 @@
                 .thenThrow(new RuntimeException("Service exception"))
                 .thenReturn(logicalErrorRes)
                 .thenReturn(res1)
-                .thenAnswer((i) -> defaultRes);
+                .thenAnswer(i -> defaultRes);
     }
 
     @Test
diff --git a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerSingleTest.java b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerSingleTest.java
index 16ddb62..42ccafe 100644
--- a/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerSingleTest.java
+++ b/components/camel-telegram/src/test/java/org/apache/camel/component/telegram/TelegramConsumerSingleTest.java
@@ -47,7 +47,7 @@
         res2.getUpdates().get(0).getMessage().setText("message2");
 
         UpdateResult defaultRes = getJSONResource("messages/updates-empty.json", UpdateResult.class);
-        when(api.getUpdates(any(), any(), any(), any())).thenReturn(res1).thenReturn(res2).thenAnswer((i) -> defaultRes);
+        when(api.getUpdates(any(), any(), any(), any())).thenReturn(res1).thenReturn(res2).thenAnswer(i -> defaultRes);
     }
 
     @Test
diff --git a/components/camel-test-blueprint/src/main/java/org/apache/camel/test/blueprint/CamelBlueprintTestSupport.java b/components/camel-test-blueprint/src/main/java/org/apache/camel/test/blueprint/CamelBlueprintTestSupport.java
index b55536b..c691415 100644
--- a/components/camel-test-blueprint/src/main/java/org/apache/camel/test/blueprint/CamelBlueprintTestSupport.java
+++ b/components/camel-test-blueprint/src/main/java/org/apache/camel/test/blueprint/CamelBlueprintTestSupport.java
@@ -33,6 +33,7 @@
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 
diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadConfigurationFileNotFoundTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadConfigurationFileNotFoundTest.java
index 1dc0ec75..091ef01 100644
--- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadConfigurationFileNotFoundTest.java
+++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadConfigurationFileNotFoundTest.java
@@ -15,8 +15,8 @@
  * limitations under the License.
  */
 package org.apache.camel.test.blueprint;
-import org.junit.Before;
 
+import org.junit.Before;
 import org.junit.Test;
 
 /**
diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminNoDefaultValuesBlueprintCreationTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminNoDefaultValuesBlueprintCreationTest.java
index 86cb18a..8dbe971 100644
--- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminNoDefaultValuesBlueprintCreationTest.java
+++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminNoDefaultValuesBlueprintCreationTest.java
@@ -15,8 +15,8 @@
  * limitations under the License.
  */
 package org.apache.camel.test.blueprint;
-import org.junit.Before;
 
+import org.junit.Before;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.equalTo;
diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MainNoPidTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MainNoPidTest.java
index d5504d8..a27cc22 100644
--- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MainNoPidTest.java
+++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MainNoPidTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.test.blueprint;
 
-
 import org.apache.camel.ProducerTemplate;
 import org.junit.Test;
 
diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MainNoReloadTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MainNoReloadTest.java
index e2ed5b2..3a37388 100644
--- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MainNoReloadTest.java
+++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MainNoReloadTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.test.blueprint;
 
-
 import org.apache.camel.ProducerTemplate;
 import org.junit.Test;
 
diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MainTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MainTest.java
index 5845b17..dd0dd24 100644
--- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MainTest.java
+++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/MainTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.test.blueprint;
 
-
 import java.io.File;
 import java.io.FileOutputStream;
 import java.net.URL;
@@ -31,7 +30,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-
 public class MainTest {
 
     private static final String SYMBOLIC_NAME = "testMainWithoutIncludingTestBundle";
diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java
index 383c8c3..45ff7b5 100644
--- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java
+++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.test.blueprint.component.rest;
+
 import java.util.Arrays;
 
 import org.apache.camel.model.ToDefinition;
diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedEndpointInjectRefEndpointTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedEndpointInjectRefEndpointTest.java
index bce9a1b..a69fc04 100644
--- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedEndpointInjectRefEndpointTest.java
+++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedEndpointInjectRefEndpointTest.java
@@ -19,6 +19,7 @@
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedRefEndpointTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedRefEndpointTest.java
index 3552670..0623f28 100644
--- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedRefEndpointTest.java
+++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/management/ManagedRefEndpointTest.java
@@ -19,6 +19,7 @@
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnnotatedDecorator.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnnotatedDecorator.java
index 6a9d449..c6ad955 100644
--- a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnnotatedDecorator.java
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnnotatedDecorator.java
@@ -21,6 +21,7 @@
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+
 import javax.enterprise.inject.spi.Annotated;
 
 class AnnotatedDecorator implements Annotated {
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnnotatedMethodDecorator.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnnotatedMethodDecorator.java
index 767cb8bc..fb12dbc 100644
--- a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnnotatedMethodDecorator.java
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnnotatedMethodDecorator.java
@@ -20,6 +20,7 @@
 import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.List;
+
 import javax.enterprise.inject.spi.AnnotatedMethod;
 import javax.enterprise.inject.spi.AnnotatedParameter;
 import javax.enterprise.inject.spi.AnnotatedType;
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnnotatedTypeDecorator.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnnotatedTypeDecorator.java
index 3e753ec..9295da0 100644
--- a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnnotatedTypeDecorator.java
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/AnnotatedTypeDecorator.java
@@ -20,6 +20,7 @@
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+
 import javax.enterprise.inject.spi.AnnotatedConstructor;
 import javax.enterprise.inject.spi.AnnotatedField;
 import javax.enterprise.inject.spi.AnnotatedMethod;
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiContext.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiContext.java
index 9260d9b..2b7d386 100644
--- a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiContext.java
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiContext.java
@@ -17,6 +17,7 @@
 package org.apache.camel.test.cdi;
 
 import java.util.concurrent.atomic.AtomicReference;
+
 import javax.enterprise.inject.spi.BeanManager;
 
 final class CamelCdiContext {
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiRunner.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiRunner.java
index f297843..669f06b 100644
--- a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiRunner.java
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiRunner.java
@@ -21,6 +21,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 
@@ -93,4 +94,4 @@
     protected Statement methodInvoker(FrameworkMethod method, Object test) {
         return new FrameworkMethodCdiInjection(method, test, context);
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiTestExtension.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiTestExtension.java
index 2c7104a..79de3bc 100644
--- a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiTestExtension.java
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/CamelCdiTestExtension.java
@@ -19,6 +19,7 @@
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
+
 import javax.annotation.Priority;
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Alternative;
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkAnnotatedParameter.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkAnnotatedParameter.java
index 2c8478c..dee1121 100644
--- a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkAnnotatedParameter.java
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkAnnotatedParameter.java
@@ -23,6 +23,7 @@
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+
 import javax.enterprise.inject.spi.AnnotatedCallable;
 import javax.enterprise.inject.spi.AnnotatedParameter;
 import javax.enterprise.inject.spi.BeanManager;
@@ -87,4 +88,4 @@
     public boolean isAnnotationPresent(Class<? extends Annotation> type) {
         return getAnnotation(type) != null;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodCdiInjection.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodCdiInjection.java
index 8a90374..2b2a210 100644
--- a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodCdiInjection.java
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/FrameworkMethodCdiInjection.java
@@ -17,6 +17,7 @@
 package org.apache.camel.test.cdi;
 
 import java.lang.reflect.Type;
+
 import javax.enterprise.inject.spi.BeanManager;
 
 import org.junit.runners.model.FrameworkMethod;
diff --git a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/Order.java b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/Order.java
index aee491f..4acf98c 100644
--- a/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/Order.java
+++ b/components/camel-test-cdi/src/main/java/org/apache/camel/test/cdi/Order.java
@@ -27,5 +27,6 @@
 @Target(ElementType.METHOD)
 public @interface Order {
 
-   int value();
+    int value();
+
 }
diff --git a/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/AbstractFeatureTest.java b/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/AbstractFeatureTest.java
index 690e1f9..4297bdb 100644
--- a/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/AbstractFeatureTest.java
+++ b/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/AbstractFeatureTest.java
@@ -32,6 +32,7 @@
 import java.util.Locale;
 import java.util.Properties;
 import java.util.function.Consumer;
+
 import javax.inject.Inject;
 
 import org.apache.camel.CamelContext;
diff --git a/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/CamelKarafTestSupport.java b/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/CamelKarafTestSupport.java
index 066b7f1..992af1e 100644
--- a/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/CamelKarafTestSupport.java
+++ b/components/camel-test-karaf/src/main/java/org/apache/camel/test/karaf/CamelKarafTestSupport.java
@@ -35,6 +35,7 @@
 import java.util.concurrent.Executors;
 import java.util.concurrent.FutureTask;
 import java.util.concurrent.TimeUnit;
+
 import javax.inject.Inject;
 import javax.management.remote.JMXConnector;
 import javax.management.remote.JMXConnectorFactory;
diff --git a/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelSpringTestHelper.java b/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelSpringTestHelper.java
index 1c8e91a..8d12f93 100644
--- a/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelSpringTestHelper.java
+++ b/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelSpringTestHelper.java
@@ -25,7 +25,6 @@
 import java.util.Set;
 
 import org.apache.camel.spring.SpringCamelContext;
-
 import org.springframework.context.ApplicationContext;
 import org.springframework.test.context.TestContext;
 
diff --git a/components/camel-test-spring-junit5/src/test/java/org/apache/camel/test/patterns/DebugSpringCamelContextTest.java b/components/camel-test-spring-junit5/src/test/java/org/apache/camel/test/patterns/DebugSpringCamelContextTest.java
index 3be8b2e..618b0b1 100644
--- a/components/camel-test-spring-junit5/src/test/java/org/apache/camel/test/patterns/DebugSpringCamelContextTest.java
+++ b/components/camel-test-spring-junit5/src/test/java/org/apache/camel/test/patterns/DebugSpringCamelContextTest.java
@@ -20,7 +20,6 @@
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class DebugSpringCamelContextTest extends DebugSpringTest {
 
     @Override
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringTestHelper.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringTestHelper.java
index 7242054..4418b15 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringTestHelper.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelSpringTestHelper.java
@@ -25,7 +25,6 @@
 import java.util.Set;
 
 import org.apache.camel.spring.SpringCamelContext;
-
 import org.springframework.context.ApplicationContext;
 import org.springframework.test.context.TestContext;
 
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/patterns/DebugSpringCamelContextTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/patterns/DebugSpringCamelContextTest.java
index ccac96f..179a214 100644
--- a/components/camel-test-spring/src/test/java/org/apache/camel/test/patterns/DebugSpringCamelContextTest.java
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/patterns/DebugSpringCamelContextTest.java
@@ -20,7 +20,6 @@
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-
 public class DebugSpringCamelContextTest extends DebugSpringTest {
 
     @Override
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerDisableJmxInheritedOverrideTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerDisableJmxInheritedOverrideTest.java
index e53e8e9..3c9c7f1 100644
--- a/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerDisableJmxInheritedOverrideTest.java
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerDisableJmxInheritedOverrideTest.java
@@ -17,8 +17,8 @@
 package org.apache.camel.test.spring;
 
 import org.apache.camel.impl.engine.DefaultManagementStrategy;
-
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 @DisableJmx
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerProvidesBreakpointTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerProvidesBreakpointTest.java
index 3a89e1e..a51c7b4 100644
--- a/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerProvidesBreakpointTest.java
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerProvidesBreakpointTest.java
@@ -21,8 +21,8 @@
 import org.apache.camel.Processor;
 import org.apache.camel.processor.interceptor.BreakpointSupport;
 import org.apache.camel.spi.Breakpoint;
-
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerShutdownTimeoutInheritedOverrideTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerShutdownTimeoutInheritedOverrideTest.java
index 0d19466..bf27a30 100644
--- a/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerShutdownTimeoutInheritedOverrideTest.java
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerShutdownTimeoutInheritedOverrideTest.java
@@ -19,6 +19,7 @@
 import java.util.concurrent.TimeUnit;
 
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 @ShutdownTimeout
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerShutdownTimeoutTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerShutdownTimeoutTest.java
index 3b33cb7..7fa58ae 100644
--- a/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerShutdownTimeoutTest.java
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerShutdownTimeoutTest.java
@@ -19,6 +19,7 @@
 import java.util.concurrent.TimeUnit;
 
 import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 @ShutdownTimeout(value = 11, timeUnit = TimeUnit.MILLISECONDS)
diff --git a/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java b/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java
index f5f0f32..39d7ea7 100644
--- a/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java
+++ b/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java
@@ -34,6 +34,7 @@
 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;
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/patterns/IsMockEndpointsFileTest.java
index 9df144b..d58078e 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/patterns/IsMockEndpointsFileTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.test.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/MockEndpointFailNoHeaderTest.java b/components/camel-test/src/test/java/org/apache/camel/test/patterns/MockEndpointFailNoHeaderTest.java
index c878091..c9dd28a 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/patterns/MockEndpointFailNoHeaderTest.java
@@ -23,6 +23,7 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
+
 public class MockEndpointFailNoHeaderTest extends CamelTestSupport {
 
     @EndpointInject("mock:result")
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/patterns/RouteBuilderConfigureExceptionTest.java
index 033d64c..f2569e1 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/patterns/RouteBuilderConfigureExceptionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.test.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/patterns/RouteProcessorDumpRouteCoverageTest.java
index 675c14e..12963bc 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/patterns/RouteProcessorDumpRouteCoverageTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.test.patterns;
+
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
diff --git a/components/camel-testcontainers-junit5/src/main/java/org/apache/camel/test/testcontainers/junit5/Containers.java b/components/camel-testcontainers-junit5/src/main/java/org/apache/camel/test/testcontainers/junit5/Containers.java
index 7e26024..138f5f9 100644
--- a/components/camel-testcontainers-junit5/src/main/java/org/apache/camel/test/testcontainers/junit5/Containers.java
+++ b/components/camel-testcontainers-junit5/src/main/java/org/apache/camel/test/testcontainers/junit5/Containers.java
@@ -20,8 +20,6 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import static java.util.stream.Collectors.joining;
-
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -29,6 +27,8 @@
 import org.testcontainers.containers.Network;
 import org.testcontainers.containers.output.Slf4jLogConsumer;
 
+import static java.util.stream.Collectors.joining;
+
 public final class Containers {
     private static final Logger LOGGER = LoggerFactory.getLogger(Containers.class);
 
diff --git a/components/camel-testcontainers/src/main/java/org/apache/camel/test/testcontainers/Containers.java b/components/camel-testcontainers/src/main/java/org/apache/camel/test/testcontainers/Containers.java
index 1d56aed..ed8afb4 100644
--- a/components/camel-testcontainers/src/main/java/org/apache/camel/test/testcontainers/Containers.java
+++ b/components/camel-testcontainers/src/main/java/org/apache/camel/test/testcontainers/Containers.java
@@ -20,8 +20,6 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import static java.util.stream.Collectors.joining;
-
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -29,6 +27,8 @@
 import org.testcontainers.containers.Network;
 import org.testcontainers.containers.output.Slf4jLogConsumer;
 
+import static java.util.stream.Collectors.joining;
+
 public final class Containers {
     private static final Logger LOGGER = LoggerFactory.getLogger(Containers.class);
 
diff --git a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/server/ThriftThreadPoolServer.java b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/server/ThriftThreadPoolServer.java
index b979a8f..b82475c 100644
--- a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/server/ThriftThreadPoolServer.java
+++ b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/server/ThriftThreadPoolServer.java
@@ -22,7 +22,6 @@
 import org.apache.thrift.server.TThreadPoolServer;
 import org.apache.thrift.transport.TServerTransport;
 
-
 /*
  * Thrift ThreadPoolServer implementation with executors controlled by the Camel Executor Service Manager
  */
diff --git a/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftConsumerConcurrentTest.java b/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftConsumerConcurrentTest.java
index 1653135..5de4e51 100644
--- a/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftConsumerConcurrentTest.java
+++ b/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftConsumerConcurrentTest.java
@@ -23,7 +23,6 @@
 
 import com.googlecode.junittoolbox.MultithreadingTester;
 import com.googlecode.junittoolbox.RunnableAssert;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.thrift.generated.Calculator;
 import org.apache.camel.component.thrift.generated.Operation;
diff --git a/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftConsumerSecurityTest.java b/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftConsumerSecurityTest.java
index 74626cd..afa9179 100644
--- a/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftConsumerSecurityTest.java
+++ b/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftConsumerSecurityTest.java
@@ -151,4 +151,4 @@
             return work.deepCopy();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftConsumerZlibCompressionTest.java b/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftConsumerZlibCompressionTest.java
index e6376e1..12c3859 100644
--- a/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftConsumerZlibCompressionTest.java
+++ b/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftConsumerZlibCompressionTest.java
@@ -123,4 +123,4 @@
             return work.deepCopy();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftProducerAsyncTest.java b/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftProducerAsyncTest.java
index a562b3a..0949ed0 100644
--- a/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftProducerAsyncTest.java
+++ b/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftProducerAsyncTest.java
@@ -30,7 +30,6 @@
 import org.apache.camel.component.thrift.generated.Operation;
 import org.apache.camel.component.thrift.generated.Work;
 import org.apache.camel.support.SynchronizationAdapter;
-
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftProducerSyncTest.java b/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftProducerSyncTest.java
index 2cbae4c..96a4ac7 100644
--- a/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftProducerSyncTest.java
+++ b/components/camel-thrift/src/test/java/org/apache/camel/component/thrift/ThriftProducerSyncTest.java
@@ -27,7 +27,6 @@
 import org.apache.camel.component.thrift.generated.InvalidOperation;
 import org.apache.camel.component.thrift.generated.Operation;
 import org.apache.camel.component.thrift.generated.Work;
-
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/components/camel-tika/src/test/java/org/apache/camel/component/tika/TikaDetectTest.java b/components/camel-tika/src/test/java/org/apache/camel/component/tika/TikaDetectTest.java
index b130c89..6295141 100644
--- a/components/camel-tika/src/test/java/org/apache/camel/component/tika/TikaDetectTest.java
+++ b/components/camel-tika/src/test/java/org/apache/camel/component/tika/TikaDetectTest.java
@@ -1,85 +1,84 @@
-/*
- * 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.component.tika;
-
-import java.io.File;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.Exchange;
-import org.apache.camel.Predicate;
-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 static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.instanceOf;
-
-public class TikaDetectTest extends CamelTestSupport {
-
-    @EndpointInject("mock:result")
-    protected MockEndpoint resultEndpoint;
-
-    @Test
-    public void testDocumentDetect() throws Exception {
-        File document = new File("src/test/resources/test.doc");
-        template.sendBody("direct:start", document);
-
-        resultEndpoint.setExpectedMessageCount(1);
-
-        resultEndpoint.expectedMessagesMatches(new Predicate() {
-            @Override
-            public boolean matches(Exchange exchange) {
-                Object body = exchange.getIn().getBody(String.class);
-                assertThat(body, instanceOf(String.class));
-                assertThat((String) body, containsString("application/x-tika-msoffice"));
-                return true;
-            }
-        });
-        resultEndpoint.assertIsSatisfied();
-    }
-
-    @Test
-    public void testImageDetect() throws Exception {
-        File document = new File("src/test/resources/testGIF.gif");
-        template.sendBody("direct:start", document);
-
-        resultEndpoint.setExpectedMessageCount(1);
-
-        resultEndpoint.expectedMessagesMatches(new Predicate() {
-            @Override
-            public boolean matches(Exchange exchange) {
-                Object body = exchange.getIn().getBody(String.class);
-                assertThat(body, instanceOf(String.class));
-                assertThat((String) body, containsString("image/gif"));
-                return true;
-            }
-        });
-        resultEndpoint.assertIsSatisfied();
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                from("direct:start").to("tika:detect").to("mock:result");
-            }
-        };
-    }
-}
+/*
+ * 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.component.tika;
+
+import java.io.File;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.Predicate;
+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 static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.instanceOf;
+
+public class TikaDetectTest extends CamelTestSupport {
+
+    @EndpointInject("mock:result")
+    protected MockEndpoint resultEndpoint;
+
+    @Test
+    public void testDocumentDetect() throws Exception {
+        File document = new File("src/test/resources/test.doc");
+        template.sendBody("direct:start", document);
+
+        resultEndpoint.setExpectedMessageCount(1);
+
+        resultEndpoint.expectedMessagesMatches(new Predicate() {
+            @Override
+            public boolean matches(Exchange exchange) {
+                Object body = exchange.getIn().getBody(String.class);
+                assertThat(body, instanceOf(String.class));
+                assertThat((String) body, containsString("application/x-tika-msoffice"));
+                return true;
+            }
+        });
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testImageDetect() throws Exception {
+        File document = new File("src/test/resources/testGIF.gif");
+        template.sendBody("direct:start", document);
+
+        resultEndpoint.setExpectedMessageCount(1);
+
+        resultEndpoint.expectedMessagesMatches(new Predicate() {
+            @Override
+            public boolean matches(Exchange exchange) {
+                Object body = exchange.getIn().getBody(String.class);
+                assertThat(body, instanceOf(String.class));
+                assertThat((String) body, containsString("image/gif"));
+                return true;
+            }
+        });
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to("tika:detect").to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-tika/src/test/java/org/apache/camel/component/tika/TikaParseTest.java b/components/camel-tika/src/test/java/org/apache/camel/component/tika/TikaParseTest.java
index d1d6169..b2d73de 100644
--- a/components/camel-tika/src/test/java/org/apache/camel/component/tika/TikaParseTest.java
+++ b/components/camel-tika/src/test/java/org/apache/camel/component/tika/TikaParseTest.java
@@ -1,197 +1,197 @@
-/*
- * 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.component.tika;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.Exchange;
-import org.apache.camel.Predicate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spi.Registry;
-import org.apache.camel.support.SimpleRegistry;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.apache.tika.metadata.Metadata;
-import org.apache.tika.parser.txt.UniversalEncodingDetector;
-import org.junit.Test;
-
-import static org.hamcrest.Matchers.*;
-
-public class TikaParseTest extends CamelTestSupport {
-
-    @EndpointInject("mock:result")
-    protected MockEndpoint resultEndpoint;
-
-    @Test
-    public void testDocumentParse() throws Exception {
-
-        File document = new File("src/test/resources/test.doc");
-        template.sendBody("direct:start", document);
-
-        resultEndpoint.setExpectedMessageCount(1);
-
-        resultEndpoint.expectedMessagesMatches(new Predicate() {
-            @Override
-            public boolean matches(Exchange exchange) {
-                Object body = exchange.getIn().getBody(String.class);
-                Map<String, Object> headerMap = exchange.getIn().getHeaders();
-                assertThat(body, instanceOf(String.class));
-
-                Charset detectedCharset = null;
-                try {
-                    InputStream bodyIs = new ByteArrayInputStream(((String)body).getBytes());
-                    UniversalEncodingDetector encodingDetector = new UniversalEncodingDetector();
-                    detectedCharset = encodingDetector.detect(bodyIs, new Metadata());
-                } catch (IOException e1) {
-                    fail();
-                }
-
-
-                assertThat(detectedCharset.name(), startsWith(Charset.defaultCharset().name()));
-
-                assertThat((String) body, containsString("test"));
-                assertThat(headerMap.get(Exchange.CONTENT_TYPE), equalTo("application/msword"));
-                return true;
-            }
-        });
-        resultEndpoint.assertIsSatisfied();
-    }
-
-    @Test
-    public void testDocumentParseWithEncoding() throws Exception {
-
-        File document = new File("src/test/resources/testOpenOffice2.odt");
-        template.sendBody("direct:start4", document);
-
-        resultEndpoint.setExpectedMessageCount(1);
-
-        resultEndpoint.expectedMessagesMatches(new Predicate() {
-            @Override
-            public boolean matches(Exchange exchange) {
-                Object body = exchange.getIn().getBody(String.class);
-                Map<String, Object> headerMap = exchange.getIn().getHeaders();
-                assertThat(body, instanceOf(String.class));
-
-                Charset detectedCharset = null;
-                try {
-                    InputStream bodyIs = new ByteArrayInputStream(((String)body).getBytes(StandardCharsets.UTF_16));
-                    UniversalEncodingDetector encodingDetector = new UniversalEncodingDetector();
-                    detectedCharset = encodingDetector.detect(bodyIs, new Metadata());
-                } catch (IOException e1) {
-                    fail();
-                }
-
-
-                assertThat(detectedCharset.name(), startsWith(StandardCharsets.UTF_16.name()));
-                assertThat(headerMap.get(Exchange.CONTENT_TYPE), equalTo("application/vnd.oasis.opendocument.text"));
-                return true;
-            }
-        });
-        resultEndpoint.assertIsSatisfied();
-    }
-
-    @Test
-    public void testImageParse() throws Exception {
-        File document = new File("src/test/resources/testGIF.gif");
-        template.sendBody("direct:start", document);
-
-        resultEndpoint.setExpectedMessageCount(1);
-
-        resultEndpoint.expectedMessagesMatches(new Predicate() {
-            @Override
-            public boolean matches(Exchange exchange) {
-                Object body = exchange.getIn().getBody(String.class);
-                Map<String, Object> headerMap = exchange.getIn().getHeaders();
-                assertThat(body, instanceOf(String.class));
-                assertThat((String) body, containsString("<body/>"));
-                assertThat(headerMap.get(Exchange.CONTENT_TYPE), equalTo("image/gif"));
-                return true;
-            }
-        });
-        resultEndpoint.assertIsSatisfied();
-    }
-
-    @Test
-    public void testEmptyConfigDocumentParse() throws Exception {
-        File document = new File("src/test/resources/test.doc");
-        template.sendBody("direct:start3", document);
-
-        resultEndpoint.setExpectedMessageCount(1);
-
-        resultEndpoint.expectedMessagesMatches(new Predicate() {
-            @Override
-            public boolean matches(Exchange exchange) {
-                Object body = exchange.getIn().getBody(String.class);
-                Map<String, Object> headerMap = exchange.getIn().getHeaders();
-                assertThat(body, instanceOf(String.class));
-                assertThat((String) body, containsString("<body/>"));
-                assertThat(headerMap.get(Exchange.CONTENT_TYPE), equalTo("application/msword"));
-                return true;
-            }
-        });
-        resultEndpoint.assertIsSatisfied();
-    }
-
-    @Test
-    public void testRegistryConfigDocumentParse() throws Exception {
-        File document = new File("src/test/resources/test.doc");
-        template.sendBody("direct:start3", document);
-
-        resultEndpoint.setExpectedMessageCount(1);
-
-        resultEndpoint.expectedMessagesMatches(new Predicate() {
-            @Override
-            public boolean matches(Exchange exchange) {
-                Object body = exchange.getIn().getBody(String.class);
-                Map<String, Object> headerMap = exchange.getIn().getHeaders();
-                assertThat(body, instanceOf(String.class));
-                assertThat((String) body, containsString("<body/>"));
-                assertThat(headerMap.get(Exchange.CONTENT_TYPE), equalTo("application/msword"));
-                return true;
-            }
-        });
-        resultEndpoint.assertIsSatisfied();
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                from("direct:start").to("tika:parse").to("mock:result");
-                from("direct:start2").to("tika:parse?tikaConfigUri=src/test/resources/tika-empty.xml")
-                        .to("mock:result");
-                from("direct:start3").to("tika:parse?tikaConfig=#testConfig").to("mock:result");
-                from("direct:start4").to("tika:parse?tikaParseOutputEncoding=" + StandardCharsets.UTF_16.name()).to("mock:result");
-            }
-        };
-    }
-
-    @Override
-    protected Registry createCamelRegistry() throws Exception {
-        Registry reg = new SimpleRegistry();
-        reg.bind("testConfig", new TikaEmptyConfig());
-        return reg;
-    }
-}
+/*
+ * 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.component.tika;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.Predicate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spi.Registry;
+import org.apache.camel.support.SimpleRegistry;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.parser.txt.UniversalEncodingDetector;
+import org.junit.Test;
+
+import static org.hamcrest.Matchers.*;
+
+public class TikaParseTest extends CamelTestSupport {
+
+    @EndpointInject("mock:result")
+    protected MockEndpoint resultEndpoint;
+
+    @Test
+    public void testDocumentParse() throws Exception {
+
+        File document = new File("src/test/resources/test.doc");
+        template.sendBody("direct:start", document);
+
+        resultEndpoint.setExpectedMessageCount(1);
+
+        resultEndpoint.expectedMessagesMatches(new Predicate() {
+            @Override
+            public boolean matches(Exchange exchange) {
+                Object body = exchange.getIn().getBody(String.class);
+                Map<String, Object> headerMap = exchange.getIn().getHeaders();
+                assertThat(body, instanceOf(String.class));
+
+                Charset detectedCharset = null;
+                try {
+                    InputStream bodyIs = new ByteArrayInputStream(((String)body).getBytes());
+                    UniversalEncodingDetector encodingDetector = new UniversalEncodingDetector();
+                    detectedCharset = encodingDetector.detect(bodyIs, new Metadata());
+                } catch (IOException e1) {
+                    fail();
+                }
+
+
+                assertThat(detectedCharset.name(), startsWith(Charset.defaultCharset().name()));
+
+                assertThat((String) body, containsString("test"));
+                assertThat(headerMap.get(Exchange.CONTENT_TYPE), equalTo("application/msword"));
+                return true;
+            }
+        });
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testDocumentParseWithEncoding() throws Exception {
+
+        File document = new File("src/test/resources/testOpenOffice2.odt");
+        template.sendBody("direct:start4", document);
+
+        resultEndpoint.setExpectedMessageCount(1);
+
+        resultEndpoint.expectedMessagesMatches(new Predicate() {
+            @Override
+            public boolean matches(Exchange exchange) {
+                Object body = exchange.getIn().getBody(String.class);
+                Map<String, Object> headerMap = exchange.getIn().getHeaders();
+                assertThat(body, instanceOf(String.class));
+
+                Charset detectedCharset = null;
+                try {
+                    InputStream bodyIs = new ByteArrayInputStream(((String)body).getBytes(StandardCharsets.UTF_16));
+                    UniversalEncodingDetector encodingDetector = new UniversalEncodingDetector();
+                    detectedCharset = encodingDetector.detect(bodyIs, new Metadata());
+                } catch (IOException e1) {
+                    fail();
+                }
+
+
+                assertThat(detectedCharset.name(), startsWith(StandardCharsets.UTF_16.name()));
+                assertThat(headerMap.get(Exchange.CONTENT_TYPE), equalTo("application/vnd.oasis.opendocument.text"));
+                return true;
+            }
+        });
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testImageParse() throws Exception {
+        File document = new File("src/test/resources/testGIF.gif");
+        template.sendBody("direct:start", document);
+
+        resultEndpoint.setExpectedMessageCount(1);
+
+        resultEndpoint.expectedMessagesMatches(new Predicate() {
+            @Override
+            public boolean matches(Exchange exchange) {
+                Object body = exchange.getIn().getBody(String.class);
+                Map<String, Object> headerMap = exchange.getIn().getHeaders();
+                assertThat(body, instanceOf(String.class));
+                assertThat((String) body, containsString("<body/>"));
+                assertThat(headerMap.get(Exchange.CONTENT_TYPE), equalTo("image/gif"));
+                return true;
+            }
+        });
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testEmptyConfigDocumentParse() throws Exception {
+        File document = new File("src/test/resources/test.doc");
+        template.sendBody("direct:start3", document);
+
+        resultEndpoint.setExpectedMessageCount(1);
+
+        resultEndpoint.expectedMessagesMatches(new Predicate() {
+            @Override
+            public boolean matches(Exchange exchange) {
+                Object body = exchange.getIn().getBody(String.class);
+                Map<String, Object> headerMap = exchange.getIn().getHeaders();
+                assertThat(body, instanceOf(String.class));
+                assertThat((String) body, containsString("<body/>"));
+                assertThat(headerMap.get(Exchange.CONTENT_TYPE), equalTo("application/msword"));
+                return true;
+            }
+        });
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Test
+    public void testRegistryConfigDocumentParse() throws Exception {
+        File document = new File("src/test/resources/test.doc");
+        template.sendBody("direct:start3", document);
+
+        resultEndpoint.setExpectedMessageCount(1);
+
+        resultEndpoint.expectedMessagesMatches(new Predicate() {
+            @Override
+            public boolean matches(Exchange exchange) {
+                Object body = exchange.getIn().getBody(String.class);
+                Map<String, Object> headerMap = exchange.getIn().getHeaders();
+                assertThat(body, instanceOf(String.class));
+                assertThat((String) body, containsString("<body/>"));
+                assertThat(headerMap.get(Exchange.CONTENT_TYPE), equalTo("application/msword"));
+                return true;
+            }
+        });
+        resultEndpoint.assertIsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start").to("tika:parse").to("mock:result");
+                from("direct:start2").to("tika:parse?tikaConfigUri=src/test/resources/tika-empty.xml")
+                        .to("mock:result");
+                from("direct:start3").to("tika:parse?tikaConfig=#testConfig").to("mock:result");
+                from("direct:start4").to("tika:parse?tikaParseOutputEncoding=" + StandardCharsets.UTF_16.name()).to("mock:result");
+            }
+        };
+    }
+
+    @Override
+    protected Registry createCamelRegistry() throws Exception {
+        Registry reg = new SimpleRegistry();
+        reg.bind("testConfig", new TikaEmptyConfig());
+        return reg;
+    }
+}
diff --git a/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioConfiguration.java b/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioConfiguration.java
index 3314383..41859f8 100644
--- a/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioConfiguration.java
+++ b/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioConfiguration.java
@@ -19,7 +19,6 @@
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.twilio.internal.TwilioApiName;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
 import org.apache.camel.spi.UriPath;
 
diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/AbstractTwitterComponent.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/AbstractTwitterComponent.java
index c17cc92..9d8c5a1 100644
--- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/AbstractTwitterComponent.java
+++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/AbstractTwitterComponent.java
@@ -23,6 +23,7 @@
 import org.apache.camel.component.extension.ComponentVerifierExtension;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.support.DefaultComponent;
+
 /**
  * Base Twitter component
  */
diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/AbstractTwitterConsumerHandler.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/AbstractTwitterConsumerHandler.java
index 067ab19..214464d 100644
--- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/AbstractTwitterConsumerHandler.java
+++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/AbstractTwitterConsumerHandler.java
@@ -26,7 +26,6 @@
 import twitter4j.Twitter;
 import twitter4j.TwitterException;
 
-
 public abstract class AbstractTwitterConsumerHandler {
 
     protected final Logger log = LoggerFactory.getLogger(this.getClass());
diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/directmessage/DirectMessageProducer.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/directmessage/DirectMessageProducer.java
index 0422805..62d2ae2 100644
--- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/directmessage/DirectMessageProducer.java
+++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/directmessage/DirectMessageProducer.java
@@ -22,7 +22,6 @@
 import org.apache.camel.component.twitter.TwitterEndpoint;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.camel.util.ObjectHelper;
-
 import twitter4j.User;
 
 /**
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierExtensionTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierExtensionTest.java
index ff21836..5294ae2 100644
--- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierExtensionTest.java
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierExtensionTest.java
@@ -23,7 +23,6 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-
 public abstract class AbstractComponentVerifierExtensionTest extends CamelTwitterTestSupport {
 
     protected abstract String getComponentScheme();
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierTest.java
index b1180a1..b937d74 100644
--- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierTest.java
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/AbstractComponentVerifierTest.java
@@ -22,7 +22,6 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-
 public abstract class AbstractComponentVerifierTest extends CamelTwitterTestSupport {
 
     protected abstract String getComponentScheme();
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/DirectMessageDirectTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/DirectMessageDirectTest.java
index f1b5fb4..89d33de 100644
--- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/DirectMessageDirectTest.java
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/DirectMessageDirectTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.twitter;
+
 import org.junit.Before;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/DirectMessagePollingTest.java b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/DirectMessagePollingTest.java
index 4e66756..f5f49f4 100644
--- a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/DirectMessagePollingTest.java
+++ b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/DirectMessagePollingTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.twitter;
+
 import org.junit.Before;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java
index 2d91f74..ef4d6e7 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/DefaultUndertowHttpBinding.java
@@ -28,6 +28,7 @@
 import java.util.Iterator;
 import java.util.Locale;
 import java.util.Map;
+
 import javax.activation.FileDataSource;
 
 import io.undertow.client.ClientExchange;
@@ -42,7 +43,6 @@
 import io.undertow.util.Headers;
 import io.undertow.util.HttpString;
 import io.undertow.util.Methods;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.TypeConverter;
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowClientCallback.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowClientCallback.java
index 794df38..5d275c6 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowClientCallback.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowClientCallback.java
@@ -227,7 +227,7 @@
                     // using Message versus clientExchange as its header values have extra formatting
                     final Map<String, String> headers = result.getHeaders().entrySet()
                             .stream()
-                            .collect(Collectors.toMap(Map.Entry::getKey, (entry) -> entry.getValue().toString()));
+                            .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().toString()));
 
                     // Since result (Message) isn't associated with an Exchange yet, you can not use result.getBody(String.class)
                     final String bodyText = ExchangeHelper.convertToType(exchange, String.class, result.getBody());
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
index de7b3f4..3e7a4cb 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowComponent.java
@@ -24,6 +24,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+
 import javax.net.ssl.SSLContext;
 
 import io.undertow.server.HttpHandler;
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
index 6ec1981..552ea13 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
@@ -37,7 +37,6 @@
 import io.undertow.util.StatusCodes;
 import io.undertow.websockets.core.WebSocketChannel;
 import io.undertow.websockets.spi.WebSocketHttpExchange;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java
index b4fc5aa..3575ce3 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java
@@ -19,6 +19,7 @@
 import java.net.URI;
 import java.util.Locale;
 import java.util.Map;
+
 import javax.net.ssl.SSLContext;
 
 import io.undertow.server.HttpServerExchange;
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowProducer.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowProducer.java
index f70b4f3d..0f18fa2 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowProducer.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowProducer.java
@@ -26,6 +26,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+
 import javax.net.ssl.SSLContext;
 
 import io.undertow.client.ClientRequest;
diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/handlers/CamelWebSocketHandler.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/handlers/CamelWebSocketHandler.java
index 5016286..efac884 100644
--- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/handlers/CamelWebSocketHandler.java
+++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/handlers/CamelWebSocketHandler.java
@@ -44,7 +44,6 @@
 import io.undertow.websockets.core.WebSocketChannel;
 import io.undertow.websockets.core.WebSockets;
 import io.undertow.websockets.spi.WebSocketHttpExchange;
-
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.CamelExchangeException;
 import org.apache.camel.Exchange;
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/DefaultUndertowHttpBindingTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/DefaultUndertowHttpBindingTest.java
index b49d742..a1b1116 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/DefaultUndertowHttpBindingTest.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/DefaultUndertowHttpBindingTest.java
@@ -152,4 +152,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/MapIdentityManager.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/MapIdentityManager.java
index 4580e31..9f73304 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/MapIdentityManager.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/MapIdentityManager.java
@@ -24,8 +24,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import static java.nio.charset.StandardCharsets.UTF_8;
-
 import io.undertow.security.idm.Account;
 import io.undertow.security.idm.Credential;
 import io.undertow.security.idm.DigestCredential;
@@ -33,6 +31,8 @@
 import io.undertow.security.idm.PasswordCredential;
 import io.undertow.util.HexConverter;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+
 class MapIdentityManager implements IdentityManager {
 
     private final Map<String, char[]> users;
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowBasicAuthHandler.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowBasicAuthHandler.java
index 1e1f5a7..eac598c 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowBasicAuthHandler.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowBasicAuthHandler.java
@@ -21,7 +21,6 @@
 import java.util.List;
 import java.util.Map;
 
-
 import io.undertow.security.api.AuthenticationMechanism;
 import io.undertow.security.api.AuthenticationMode;
 import io.undertow.security.handlers.AuthenticationCallHandler;
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHandlersSpringTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHandlersSpringTest.java
index f3f719d..04c0795 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHandlersSpringTest.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHandlersSpringTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.undertow;
+
 import java.net.URL;
 
 import javax.annotation.Resource;
@@ -25,7 +26,6 @@
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.http.common.HttpOperationFailedException;
-
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHttpProducerSessionTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHttpProducerSessionTest.java
index 8488519..edaff80 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHttpProducerSessionTest.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHttpProducerSessionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.undertow;
+
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHttpProxyPreserveHostTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHttpProxyPreserveHostTest.java
index 4e33528..ae504fc 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHttpProxyPreserveHostTest.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHttpProxyPreserveHostTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.undertow;
+
 import io.undertow.util.Headers;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHttpsSpringTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHttpsSpringTest.java
index 37a82e5..4ea5732 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHttpsSpringTest.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowHttpsSpringTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.undertow;
+
 import java.net.URL;
 
 import javax.annotation.Resource;
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowMethodRestricTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowMethodRestricTest.java
index 1ca5741..fd20903 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowMethodRestricTest.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/UndertowMethodRestricTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.undertow;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/ws/UndertowWsConsumerRouteTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/ws/UndertowWsConsumerRouteTest.java
index e81ce77..8b2bb5c 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/ws/UndertowWsConsumerRouteTest.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/ws/UndertowWsConsumerRouteTest.java
@@ -31,7 +31,6 @@
 
 import io.undertow.websockets.core.WebSocketChannel;
 import io.undertow.websockets.spi.WebSocketHttpExchange;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
diff --git a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/ws/UndertowWssRouteTest.java b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/ws/UndertowWssRouteTest.java
index ba7b204..a3aa405 100644
--- a/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/ws/UndertowWssRouteTest.java
+++ b/components/camel-undertow/src/test/java/org/apache/camel/component/undertow/ws/UndertowWssRouteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.undertow.ws;
+
 import java.io.IOException;
 import java.net.URL;
 import java.security.GeneralSecurityException;
diff --git a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/AbstractUniVocityDataFormat.java b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/AbstractUniVocityDataFormat.java
index b03b1de..d53f33e 100644
--- a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/AbstractUniVocityDataFormat.java
+++ b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/AbstractUniVocityDataFormat.java
@@ -1,606 +1,606 @@
-/*
- * 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.dataformat.univocity;
-
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-import java.io.Writer;
-
-import com.univocity.parsers.common.AbstractParser;
-import com.univocity.parsers.common.AbstractWriter;
-import com.univocity.parsers.common.CommonParserSettings;
-import com.univocity.parsers.common.CommonSettings;
-import com.univocity.parsers.common.CommonWriterSettings;
-import com.univocity.parsers.common.Format;
-import org.apache.camel.Exchange;
-import org.apache.camel.spi.DataFormat;
-import org.apache.camel.spi.DataFormatName;
-import org.apache.camel.support.service.ServiceSupport;
-
-import static org.apache.camel.support.ExchangeHelper.getCharsetName;
-
-/**
- * This abstract class contains all the common parts for all the uniVocity parsers.
- * <p/>
- *
- * @param <F>   uniVocity format class
- * @param <CWS> uniVocity writer settings class
- * @param <W>   uniVocity writer class
- * @param <CPS> uniVocity parser settings class
- * @param <P>   uniVocity parser class
- * @param <DF>  the data format class (for providing a fluent API)
- */
-public abstract class AbstractUniVocityDataFormat<F extends Format, CWS extends CommonWriterSettings<F>,
-        W extends AbstractWriter<CWS>, CPS extends CommonParserSettings<F>, P extends AbstractParser<CPS>, DF extends AbstractUniVocityDataFormat<F, CWS, W, CPS, P, DF>>
-        extends ServiceSupport implements DataFormat, DataFormatName {
-    protected String nullValue;
-    protected Boolean skipEmptyLines;
-    protected Boolean ignoreTrailingWhitespaces;
-    protected Boolean ignoreLeadingWhitespaces;
-    protected boolean headersDisabled;
-    protected String[] headers;
-    protected Boolean headerExtractionEnabled;
-    protected Integer numberOfRecordsToRead;
-    protected String emptyValue;
-    protected String lineSeparator;
-    protected Character normalizedLineSeparator;
-    protected Character comment;
-    protected boolean lazyLoad;
-    protected boolean asMap;
-
-    private volatile CWS writerSettings;
-    private final Object writerSettingsToken = new Object();
-    private volatile Marshaller<W> marshaller;
-
-    // We're using a ThreadLocal for the parser settings because in order to retrieve the headers we need to change the
-    // settings each time we're parsing
-    private volatile ThreadLocal<CPS> parserSettings;
-    private final Object parserSettingsToken = new Object();
-    private volatile Unmarshaller<P> unmarshaller;
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void marshal(Exchange exchange, Object body, OutputStream stream) throws Exception {
-        if (writerSettings == null) {
-            synchronized (writerSettingsToken) {
-                if (writerSettings == null) {
-                    writerSettings = createAndConfigureWriterSettings();
-                    marshaller = new Marshaller<>(headers, headers == null);
-                }
-            }
-        }
-
-        Writer writer = new OutputStreamWriter(stream, getCharsetName(exchange));
-        try {
-            marshaller.marshal(exchange, body, createWriter(writer, writerSettings));
-        } finally {
-            writer.close();
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
-        if (parserSettings == null) {
-            synchronized (parserSettingsToken) {
-                if (parserSettings == null) {
-                    parserSettings = new ThreadLocal<CPS>() {
-                        @Override
-                        protected CPS initialValue() {
-                            return createAndConfigureParserSettings();
-                        }
-                    };
-                    unmarshaller = new Unmarshaller<>(lazyLoad, asMap);
-                }
-            }
-        }
-
-        HeaderRowProcessor headerRowProcessor = new HeaderRowProcessor();
-        CPS settings = parserSettings.get();
-        settings.setProcessor(headerRowProcessor);
-        P parser = createParser(settings);
-        // univocity-parsers is responsible for closing the reader, even in case of error
-        Reader reader = new InputStreamReader(stream, getCharsetName(exchange));
-        return unmarshaller.unmarshal(reader, parser, headerRowProcessor);
-    }
-
-    /**
-     * Gets the String representation of a null value.
-     * If {@code null} then the default settings value is used.
-     *
-     * @return the String representation of a null value
-     * @see com.univocity.parsers.common.CommonSettings#getNullValue()
-     */
-    public String getNullValue() {
-        return nullValue;
-    }
-
-    /**
-     * Sets the String representation of a null value.
-     * If {@code null} then the default settings value is used.
-     *
-     * @param nullValue the String representation of a null value
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.common.CommonSettings#setNullValue(String)
-     */
-    public DF setNullValue(String nullValue) {
-        this.nullValue = nullValue;
-        return self();
-    }
-
-    /**
-     * Gets whether or not empty lines should be ignored.
-     * If {@code null} then the default settings value is used.
-     *
-     * @return whether or not empty lines should be ignored
-     * @see com.univocity.parsers.common.CommonSettings#getSkipEmptyLines()
-     */
-    public Boolean getSkipEmptyLines() {
-        return skipEmptyLines;
-    }
-
-    /**
-     * Sets whether or not empty lines should be ignored.
-     * If {@code null} then the default settings value is used.
-     *
-     * @param skipEmptyLines whether or not empty lines should be ignored
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.common.CommonSettings#setSkipEmptyLines(boolean)
-     */
-    public DF setSkipEmptyLines(Boolean skipEmptyLines) {
-        this.skipEmptyLines = skipEmptyLines;
-        return self();
-    }
-
-    /**
-     * Gets whether or not trailing whitespaces should be ignored.
-     * If {@code null} then the default settings value is used.
-     *
-     * @return whether or not trailing whitespaces should be ignored
-     * @see com.univocity.parsers.common.CommonSettings#getIgnoreTrailingWhitespaces()
-     */
-    public Boolean getIgnoreTrailingWhitespaces() {
-        return ignoreTrailingWhitespaces;
-    }
-
-    /**
-     * Sets whether or not trailing whitespaces should be ignored.
-     * If {@code null} then the default settings value is used.
-     *
-     * @param ignoreTrailingWhitespaces whether or not trailing whitespaces should be ignored
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.common.CommonSettings#setIgnoreTrailingWhitespaces(boolean)
-     */
-    public DF setIgnoreTrailingWhitespaces(Boolean ignoreTrailingWhitespaces) {
-        this.ignoreTrailingWhitespaces = ignoreTrailingWhitespaces;
-        return self();
-    }
-
-    /**
-     * Gets whether or not leading whitespaces should be ignored.
-     * If {@code null} then the default settings value is used.
-     *
-     * @return whether or not leading whitespaces should be ignored
-     * @see com.univocity.parsers.common.CommonSettings#getIgnoreLeadingWhitespaces()
-     */
-    public Boolean getIgnoreLeadingWhitespaces() {
-        return ignoreLeadingWhitespaces;
-    }
-
-    /**
-     * Sets whether or not leading whitespaces should be ignored.
-     * If {@code null} then the default settings value is used.
-     *
-     * @param ignoreLeadingWhitespaces whether or not leading whitespaces should be ignored
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.common.CommonSettings#setIgnoreLeadingWhitespaces(boolean)
-     */
-    public DF setIgnoreLeadingWhitespaces(Boolean ignoreLeadingWhitespaces) {
-        this.ignoreLeadingWhitespaces = ignoreLeadingWhitespaces;
-        return self();
-    }
-
-    /**
-     * Gets whether or not headers are disabled.
-     * If {@code true} then it passes {@code null} to
-     * {@link com.univocity.parsers.common.CommonSettings#setHeaders(String...)} in order to disabled them.
-     *
-     * @return whether or not headers are disabled
-     * @see com.univocity.parsers.common.CommonSettings#getHeaders()
-     */
-    public boolean isHeadersDisabled() {
-        return headersDisabled;
-    }
-
-    /**
-     * Sets whether or not headers are disabled.
-     * If {@code true} then it passes {@code null} to
-     * {@link com.univocity.parsers.common.CommonSettings#setHeaders(String...)} in order to disabled them.
-     *
-     * @param headersDisabled whether or not headers are disabled
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.common.CommonSettings#setHeaders(String...)
-     */
-    public DF setHeadersDisabled(boolean headersDisabled) {
-        this.headersDisabled = headersDisabled;
-        return self();
-    }
-
-    /**
-     * Gets the headers.
-     * If {@code null} then the default settings value is used.
-     *
-     * @return the headers
-     * @see com.univocity.parsers.common.CommonSettings#getHeaders()
-     */
-    public String[] getHeaders() {
-        return headers;
-    }
-
-    /**
-     * Sets the headers.
-     * If {@code null} then the default settings value is used.
-     *
-     * @param headers the headers
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.common.CommonSettings#setHeaders(String...)
-     */
-    public DF setHeaders(String[] headers) {
-        this.headers = headers;
-        return self();
-    }
-
-    /**
-     * Gets whether or not the header extraction is enabled.
-     * If {@code null} then the default settings value is used.
-     *
-     * @return whether or not the header extraction is enabled
-     * @see com.univocity.parsers.common.CommonParserSettings#isHeaderExtractionEnabled()
-     */
-    public Boolean getHeaderExtractionEnabled() {
-        return headerExtractionEnabled;
-    }
-
-    /**
-     * Sets whether or not the header extraction is enabled.
-     * If {@code null} then the default settings value is used.
-     *
-     * @param headerExtractionEnabled whether or not the header extraction is enabled
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.common.CommonParserSettings#setHeaderExtractionEnabled(boolean)
-     */
-    public DF setHeaderExtractionEnabled(Boolean headerExtractionEnabled) {
-        this.headerExtractionEnabled = headerExtractionEnabled;
-        return self();
-    }
-
-    /**
-     * Gets the number of records to read.
-     * If {@code null} then the default settings value is used.
-     *
-     * @return the number of records to read
-     * @see com.univocity.parsers.common.CommonParserSettings#getNumberOfRecordsToRead()
-     */
-    public Integer getNumberOfRecordsToRead() {
-        return numberOfRecordsToRead;
-    }
-
-    /**
-     * Sets the number of records to read.
-     * If {@code null} then the default settings value is used.
-     *
-     * @param numberOfRecordsToRead the number of records to read
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.common.CommonParserSettings#setNumberOfRecordsToRead(long)
-     */
-    public DF setNumberOfRecordsToRead(Integer numberOfRecordsToRead) {
-        this.numberOfRecordsToRead = numberOfRecordsToRead;
-        return self();
-    }
-
-    /**
-     * Gets the String representation of an empty value.
-     * If {@code null} then the default settings value is used.
-     *
-     * @return the String representation of an empty value
-     * @see com.univocity.parsers.common.CommonWriterSettings#getEmptyValue()
-     */
-    public String getEmptyValue() {
-        return emptyValue;
-    }
-
-    /**
-     * Sets the String representation of an empty value.
-     * If {@code null} then the default settings value is used.
-     *
-     * @param emptyValue the String representation of an empty value
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.common.CommonWriterSettings#setEmptyValue(String)
-     */
-    public DF setEmptyValue(String emptyValue) {
-        this.emptyValue = emptyValue;
-        return self();
-    }
-
-    /**
-     * Gets the line separator.
-     * If {@code null} then the default format value is used.
-     *
-     * @return the line separator
-     * @see com.univocity.parsers.common.Format#getLineSeparatorString()
-     */
-    public String getLineSeparator() {
-        return lineSeparator;
-    }
-
-    /**
-     * Sets the line separator.
-     * If {@code null} then the default format value is used.
-     *
-     * @param lineSeparator the line separator
-     * @return current data format instance, fluent API
-     * @see Format#setLineSeparator(String)
-     */
-    public DF setLineSeparator(String lineSeparator) {
-        this.lineSeparator = lineSeparator;
-        return self();
-    }
-
-    /**
-     * Gets the normalized line separator.
-     * If {@code null} then the default format value is used.
-     *
-     * @return the normalized line separator
-     * @see com.univocity.parsers.common.Format#getNormalizedNewline()
-     */
-    public Character getNormalizedLineSeparator() {
-        return normalizedLineSeparator;
-    }
-
-    /**
-     * Sets the normalized line separator.
-     * If {@code null} then the default format value is used.
-     *
-     * @param normalizedLineSeparator the normalized line separator
-     * @return current data format instance, fluent API
-     * @see Format#setNormalizedNewline(char)
-     */
-    public DF setNormalizedLineSeparator(Character normalizedLineSeparator) {
-        this.normalizedLineSeparator = normalizedLineSeparator;
-        return self();
-    }
-
-    /**
-     * Gets the comment symbol.
-     * If {@code null} then the default format value is used.
-     *
-     * @return the comment symbol
-     * @see com.univocity.parsers.common.Format#getComment()
-     */
-    public Character getComment() {
-        return comment;
-    }
-
-    /**
-     * Gets the comment symbol.
-     * If {@code null} then the default format value is used.
-     *
-     * @param comment the comment symbol
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.common.Format#setComment(char)
-     */
-    public DF setComment(Character comment) {
-        this.comment = comment;
-        return self();
-    }
-
-    /**
-     * Gets whether or not the unmarshalling should read lines lazily.
-     *
-     * @return whether or not the unmarshalling should read lines lazily
-     */
-    public boolean isLazyLoad() {
-        return lazyLoad;
-    }
-
-    /**
-     * Sets whether or not the unmarshalling should read lines lazily.
-     *
-     * @param lazyLoad whether or not the unmarshalling should read lines lazily
-     * @return current data format instance, fluent API
-     */
-    public DF setLazyLoad(boolean lazyLoad) {
-        this.lazyLoad = lazyLoad;
-        return self();
-    }
-
-    /**
-     * Gets whether or not the unmarshalling should produces maps instead of lists.
-     *
-     * @return whether or not the unmarshalling should produces maps instead of lists
-     */
-    public boolean isAsMap() {
-        return asMap;
-    }
-
-    /**
-     * Sets whether or not the unmarshalling should produces maps instead of lists.
-     *
-     * @param asMap whether or not the unmarshalling should produces maps instead of lists
-     * @return current data format instance, fluent API
-     */
-    public DF setAsMap(boolean asMap) {
-        this.asMap = asMap;
-        return self();
-    }
-
-    /**
-     * Creates a new instance of the writer settings.
-     *
-     * @return New instance of the writer settings
-     */
-    protected abstract CWS createWriterSettings();
-
-    /**
-     * Configures the writer settings.
-     *
-     * @param settings Writer settings to configure
-     */
-    protected void configureWriterSettings(CWS settings) {
-        configureCommonSettings(settings);
-
-        if (emptyValue != null) {
-            settings.setEmptyValue(emptyValue);
-        }
-    }
-
-    /**
-     * Creates a new instance of the uniVocity writer.
-     *
-     * @param writer   Output writer to use
-     * @param settings Writer settings to use
-     * @return New uinstance of the uniVocity writer
-     */
-    protected abstract W createWriter(Writer writer, CWS settings);
-
-    /**
-     * Creates a new instance of the parser settings.
-     *
-     * @return New instance of the parser settings
-     */
-    protected abstract CPS createParserSettings();
-
-    /**
-     * Configure the parser settings.
-     *
-     * @param settings Parser settings to configure
-     */
-    protected void configureParserSettings(CPS settings) {
-        configureCommonSettings(settings);
-
-        if (headerExtractionEnabled != null) {
-            settings.setHeaderExtractionEnabled(headerExtractionEnabled);
-        }
-        if (numberOfRecordsToRead != null) {
-            settings.setNumberOfRecordsToRead(numberOfRecordsToRead);
-        }
-    }
-
-    /**
-     * Creates a new instance of the uniVocity parser.
-     *
-     * @param settings Parser settings to use
-     * @return New instance of the uniVocity parser
-     */
-    protected abstract P createParser(CPS settings);
-
-    /**
-     * Configures the format.
-     *
-     * @param format format to configure
-     */
-    protected void configureFormat(F format) {
-        if (lineSeparator != null) {
-            format.setLineSeparator(lineSeparator);
-        }
-        if (normalizedLineSeparator != null) {
-            format.setNormalizedNewline(normalizedLineSeparator);
-        }
-        if (comment != null) {
-            format.setComment(comment);
-        }
-    }
-
-    /**
-     * Creates and configures the writer settings.
-     *
-     * @return new configured instance of the writer settings
-     */
-    final CWS createAndConfigureWriterSettings() {
-        CWS settings = createWriterSettings();
-        configureWriterSettings(settings);
-        configureFormat(settings.getFormat());
-        return settings;
-    }
-
-    /**
-     * Creates and configures the parser settings.
-     *
-     * @return new configured instance of the parser settings
-     */
-    final CPS createAndConfigureParserSettings() {
-        CPS settings = createParserSettings();
-        configureParserSettings(settings);
-        configureFormat(settings.getFormat());
-        return settings;
-    }
-
-    /**
-     * Configures the common settings shared by parser and writer.
-     *
-     * @param settings settings to configure
-     */
-    private void configureCommonSettings(CommonSettings<F> settings) {
-        if (nullValue != null) {
-            settings.setNullValue(nullValue);
-        }
-        if (skipEmptyLines != null) {
-            settings.setSkipEmptyLines(skipEmptyLines);
-        }
-        if (ignoreTrailingWhitespaces != null) {
-            settings.setIgnoreTrailingWhitespaces(ignoreTrailingWhitespaces);
-        }
-        if (ignoreLeadingWhitespaces != null) {
-            settings.setIgnoreLeadingWhitespaces(ignoreLeadingWhitespaces);
-        }
-        if (headersDisabled) {
-            settings.setHeaders((String[]) null);
-        } else if (headers != null) {
-            settings.setHeaders(headers);
-        }
-    }
-
-    /**
-     * Returns {@code this} as the proper data format type. It helps the fluent API with inheritance.
-     *
-     * @return {@code this} as the proper data format type
-     */
-    @SuppressWarnings("unchecked")
-    private DF self() {
-        return (DF) this;
-    }
-
-    @Override
-    protected void doStart() throws Exception {
-        writerSettings = null;
-        marshaller = null;
-        parserSettings = null;
-        unmarshaller = null;
-    }
-
-    @Override
-    protected void doStop() throws Exception {
-        // noop
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
+
+import com.univocity.parsers.common.AbstractParser;
+import com.univocity.parsers.common.AbstractWriter;
+import com.univocity.parsers.common.CommonParserSettings;
+import com.univocity.parsers.common.CommonSettings;
+import com.univocity.parsers.common.CommonWriterSettings;
+import com.univocity.parsers.common.Format;
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatName;
+import org.apache.camel.support.service.ServiceSupport;
+
+import static org.apache.camel.support.ExchangeHelper.getCharsetName;
+
+/**
+ * This abstract class contains all the common parts for all the uniVocity parsers.
+ * <p/>
+ *
+ * @param <F>   uniVocity format class
+ * @param <CWS> uniVocity writer settings class
+ * @param <W>   uniVocity writer class
+ * @param <CPS> uniVocity parser settings class
+ * @param <P>   uniVocity parser class
+ * @param <DF>  the data format class (for providing a fluent API)
+ */
+public abstract class AbstractUniVocityDataFormat<F extends Format, CWS extends CommonWriterSettings<F>,
+        W extends AbstractWriter<CWS>, CPS extends CommonParserSettings<F>, P extends AbstractParser<CPS>, DF extends AbstractUniVocityDataFormat<F, CWS, W, CPS, P, DF>>
+        extends ServiceSupport implements DataFormat, DataFormatName {
+    protected String nullValue;
+    protected Boolean skipEmptyLines;
+    protected Boolean ignoreTrailingWhitespaces;
+    protected Boolean ignoreLeadingWhitespaces;
+    protected boolean headersDisabled;
+    protected String[] headers;
+    protected Boolean headerExtractionEnabled;
+    protected Integer numberOfRecordsToRead;
+    protected String emptyValue;
+    protected String lineSeparator;
+    protected Character normalizedLineSeparator;
+    protected Character comment;
+    protected boolean lazyLoad;
+    protected boolean asMap;
+
+    private volatile CWS writerSettings;
+    private final Object writerSettingsToken = new Object();
+    private volatile Marshaller<W> marshaller;
+
+    // We're using a ThreadLocal for the parser settings because in order to retrieve the headers we need to change the
+    // settings each time we're parsing
+    private volatile ThreadLocal<CPS> parserSettings;
+    private final Object parserSettingsToken = new Object();
+    private volatile Unmarshaller<P> unmarshaller;
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void marshal(Exchange exchange, Object body, OutputStream stream) throws Exception {
+        if (writerSettings == null) {
+            synchronized (writerSettingsToken) {
+                if (writerSettings == null) {
+                    writerSettings = createAndConfigureWriterSettings();
+                    marshaller = new Marshaller<>(headers, headers == null);
+                }
+            }
+        }
+
+        Writer writer = new OutputStreamWriter(stream, getCharsetName(exchange));
+        try {
+            marshaller.marshal(exchange, body, createWriter(writer, writerSettings));
+        } finally {
+            writer.close();
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
+        if (parserSettings == null) {
+            synchronized (parserSettingsToken) {
+                if (parserSettings == null) {
+                    parserSettings = new ThreadLocal<CPS>() {
+                        @Override
+                        protected CPS initialValue() {
+                            return createAndConfigureParserSettings();
+                        }
+                    };
+                    unmarshaller = new Unmarshaller<>(lazyLoad, asMap);
+                }
+            }
+        }
+
+        HeaderRowProcessor headerRowProcessor = new HeaderRowProcessor();
+        CPS settings = parserSettings.get();
+        settings.setProcessor(headerRowProcessor);
+        P parser = createParser(settings);
+        // univocity-parsers is responsible for closing the reader, even in case of error
+        Reader reader = new InputStreamReader(stream, getCharsetName(exchange));
+        return unmarshaller.unmarshal(reader, parser, headerRowProcessor);
+    }
+
+    /**
+     * Gets the String representation of a null value.
+     * If {@code null} then the default settings value is used.
+     *
+     * @return the String representation of a null value
+     * @see com.univocity.parsers.common.CommonSettings#getNullValue()
+     */
+    public String getNullValue() {
+        return nullValue;
+    }
+
+    /**
+     * Sets the String representation of a null value.
+     * If {@code null} then the default settings value is used.
+     *
+     * @param nullValue the String representation of a null value
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.common.CommonSettings#setNullValue(String)
+     */
+    public DF setNullValue(String nullValue) {
+        this.nullValue = nullValue;
+        return self();
+    }
+
+    /**
+     * Gets whether or not empty lines should be ignored.
+     * If {@code null} then the default settings value is used.
+     *
+     * @return whether or not empty lines should be ignored
+     * @see com.univocity.parsers.common.CommonSettings#getSkipEmptyLines()
+     */
+    public Boolean getSkipEmptyLines() {
+        return skipEmptyLines;
+    }
+
+    /**
+     * Sets whether or not empty lines should be ignored.
+     * If {@code null} then the default settings value is used.
+     *
+     * @param skipEmptyLines whether or not empty lines should be ignored
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.common.CommonSettings#setSkipEmptyLines(boolean)
+     */
+    public DF setSkipEmptyLines(Boolean skipEmptyLines) {
+        this.skipEmptyLines = skipEmptyLines;
+        return self();
+    }
+
+    /**
+     * Gets whether or not trailing whitespaces should be ignored.
+     * If {@code null} then the default settings value is used.
+     *
+     * @return whether or not trailing whitespaces should be ignored
+     * @see com.univocity.parsers.common.CommonSettings#getIgnoreTrailingWhitespaces()
+     */
+    public Boolean getIgnoreTrailingWhitespaces() {
+        return ignoreTrailingWhitespaces;
+    }
+
+    /**
+     * Sets whether or not trailing whitespaces should be ignored.
+     * If {@code null} then the default settings value is used.
+     *
+     * @param ignoreTrailingWhitespaces whether or not trailing whitespaces should be ignored
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.common.CommonSettings#setIgnoreTrailingWhitespaces(boolean)
+     */
+    public DF setIgnoreTrailingWhitespaces(Boolean ignoreTrailingWhitespaces) {
+        this.ignoreTrailingWhitespaces = ignoreTrailingWhitespaces;
+        return self();
+    }
+
+    /**
+     * Gets whether or not leading whitespaces should be ignored.
+     * If {@code null} then the default settings value is used.
+     *
+     * @return whether or not leading whitespaces should be ignored
+     * @see com.univocity.parsers.common.CommonSettings#getIgnoreLeadingWhitespaces()
+     */
+    public Boolean getIgnoreLeadingWhitespaces() {
+        return ignoreLeadingWhitespaces;
+    }
+
+    /**
+     * Sets whether or not leading whitespaces should be ignored.
+     * If {@code null} then the default settings value is used.
+     *
+     * @param ignoreLeadingWhitespaces whether or not leading whitespaces should be ignored
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.common.CommonSettings#setIgnoreLeadingWhitespaces(boolean)
+     */
+    public DF setIgnoreLeadingWhitespaces(Boolean ignoreLeadingWhitespaces) {
+        this.ignoreLeadingWhitespaces = ignoreLeadingWhitespaces;
+        return self();
+    }
+
+    /**
+     * Gets whether or not headers are disabled.
+     * If {@code true} then it passes {@code null} to
+     * {@link com.univocity.parsers.common.CommonSettings#setHeaders(String...)} in order to disabled them.
+     *
+     * @return whether or not headers are disabled
+     * @see com.univocity.parsers.common.CommonSettings#getHeaders()
+     */
+    public boolean isHeadersDisabled() {
+        return headersDisabled;
+    }
+
+    /**
+     * Sets whether or not headers are disabled.
+     * If {@code true} then it passes {@code null} to
+     * {@link com.univocity.parsers.common.CommonSettings#setHeaders(String...)} in order to disabled them.
+     *
+     * @param headersDisabled whether or not headers are disabled
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.common.CommonSettings#setHeaders(String...)
+     */
+    public DF setHeadersDisabled(boolean headersDisabled) {
+        this.headersDisabled = headersDisabled;
+        return self();
+    }
+
+    /**
+     * Gets the headers.
+     * If {@code null} then the default settings value is used.
+     *
+     * @return the headers
+     * @see com.univocity.parsers.common.CommonSettings#getHeaders()
+     */
+    public String[] getHeaders() {
+        return headers;
+    }
+
+    /**
+     * Sets the headers.
+     * If {@code null} then the default settings value is used.
+     *
+     * @param headers the headers
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.common.CommonSettings#setHeaders(String...)
+     */
+    public DF setHeaders(String[] headers) {
+        this.headers = headers;
+        return self();
+    }
+
+    /**
+     * Gets whether or not the header extraction is enabled.
+     * If {@code null} then the default settings value is used.
+     *
+     * @return whether or not the header extraction is enabled
+     * @see com.univocity.parsers.common.CommonParserSettings#isHeaderExtractionEnabled()
+     */
+    public Boolean getHeaderExtractionEnabled() {
+        return headerExtractionEnabled;
+    }
+
+    /**
+     * Sets whether or not the header extraction is enabled.
+     * If {@code null} then the default settings value is used.
+     *
+     * @param headerExtractionEnabled whether or not the header extraction is enabled
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.common.CommonParserSettings#setHeaderExtractionEnabled(boolean)
+     */
+    public DF setHeaderExtractionEnabled(Boolean headerExtractionEnabled) {
+        this.headerExtractionEnabled = headerExtractionEnabled;
+        return self();
+    }
+
+    /**
+     * Gets the number of records to read.
+     * If {@code null} then the default settings value is used.
+     *
+     * @return the number of records to read
+     * @see com.univocity.parsers.common.CommonParserSettings#getNumberOfRecordsToRead()
+     */
+    public Integer getNumberOfRecordsToRead() {
+        return numberOfRecordsToRead;
+    }
+
+    /**
+     * Sets the number of records to read.
+     * If {@code null} then the default settings value is used.
+     *
+     * @param numberOfRecordsToRead the number of records to read
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.common.CommonParserSettings#setNumberOfRecordsToRead(long)
+     */
+    public DF setNumberOfRecordsToRead(Integer numberOfRecordsToRead) {
+        this.numberOfRecordsToRead = numberOfRecordsToRead;
+        return self();
+    }
+
+    /**
+     * Gets the String representation of an empty value.
+     * If {@code null} then the default settings value is used.
+     *
+     * @return the String representation of an empty value
+     * @see com.univocity.parsers.common.CommonWriterSettings#getEmptyValue()
+     */
+    public String getEmptyValue() {
+        return emptyValue;
+    }
+
+    /**
+     * Sets the String representation of an empty value.
+     * If {@code null} then the default settings value is used.
+     *
+     * @param emptyValue the String representation of an empty value
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.common.CommonWriterSettings#setEmptyValue(String)
+     */
+    public DF setEmptyValue(String emptyValue) {
+        this.emptyValue = emptyValue;
+        return self();
+    }
+
+    /**
+     * Gets the line separator.
+     * If {@code null} then the default format value is used.
+     *
+     * @return the line separator
+     * @see com.univocity.parsers.common.Format#getLineSeparatorString()
+     */
+    public String getLineSeparator() {
+        return lineSeparator;
+    }
+
+    /**
+     * Sets the line separator.
+     * If {@code null} then the default format value is used.
+     *
+     * @param lineSeparator the line separator
+     * @return current data format instance, fluent API
+     * @see Format#setLineSeparator(String)
+     */
+    public DF setLineSeparator(String lineSeparator) {
+        this.lineSeparator = lineSeparator;
+        return self();
+    }
+
+    /**
+     * Gets the normalized line separator.
+     * If {@code null} then the default format value is used.
+     *
+     * @return the normalized line separator
+     * @see com.univocity.parsers.common.Format#getNormalizedNewline()
+     */
+    public Character getNormalizedLineSeparator() {
+        return normalizedLineSeparator;
+    }
+
+    /**
+     * Sets the normalized line separator.
+     * If {@code null} then the default format value is used.
+     *
+     * @param normalizedLineSeparator the normalized line separator
+     * @return current data format instance, fluent API
+     * @see Format#setNormalizedNewline(char)
+     */
+    public DF setNormalizedLineSeparator(Character normalizedLineSeparator) {
+        this.normalizedLineSeparator = normalizedLineSeparator;
+        return self();
+    }
+
+    /**
+     * Gets the comment symbol.
+     * If {@code null} then the default format value is used.
+     *
+     * @return the comment symbol
+     * @see com.univocity.parsers.common.Format#getComment()
+     */
+    public Character getComment() {
+        return comment;
+    }
+
+    /**
+     * Gets the comment symbol.
+     * If {@code null} then the default format value is used.
+     *
+     * @param comment the comment symbol
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.common.Format#setComment(char)
+     */
+    public DF setComment(Character comment) {
+        this.comment = comment;
+        return self();
+    }
+
+    /**
+     * Gets whether or not the unmarshalling should read lines lazily.
+     *
+     * @return whether or not the unmarshalling should read lines lazily
+     */
+    public boolean isLazyLoad() {
+        return lazyLoad;
+    }
+
+    /**
+     * Sets whether or not the unmarshalling should read lines lazily.
+     *
+     * @param lazyLoad whether or not the unmarshalling should read lines lazily
+     * @return current data format instance, fluent API
+     */
+    public DF setLazyLoad(boolean lazyLoad) {
+        this.lazyLoad = lazyLoad;
+        return self();
+    }
+
+    /**
+     * Gets whether or not the unmarshalling should produces maps instead of lists.
+     *
+     * @return whether or not the unmarshalling should produces maps instead of lists
+     */
+    public boolean isAsMap() {
+        return asMap;
+    }
+
+    /**
+     * Sets whether or not the unmarshalling should produces maps instead of lists.
+     *
+     * @param asMap whether or not the unmarshalling should produces maps instead of lists
+     * @return current data format instance, fluent API
+     */
+    public DF setAsMap(boolean asMap) {
+        this.asMap = asMap;
+        return self();
+    }
+
+    /**
+     * Creates a new instance of the writer settings.
+     *
+     * @return New instance of the writer settings
+     */
+    protected abstract CWS createWriterSettings();
+
+    /**
+     * Configures the writer settings.
+     *
+     * @param settings Writer settings to configure
+     */
+    protected void configureWriterSettings(CWS settings) {
+        configureCommonSettings(settings);
+
+        if (emptyValue != null) {
+            settings.setEmptyValue(emptyValue);
+        }
+    }
+
+    /**
+     * Creates a new instance of the uniVocity writer.
+     *
+     * @param writer   Output writer to use
+     * @param settings Writer settings to use
+     * @return New uinstance of the uniVocity writer
+     */
+    protected abstract W createWriter(Writer writer, CWS settings);
+
+    /**
+     * Creates a new instance of the parser settings.
+     *
+     * @return New instance of the parser settings
+     */
+    protected abstract CPS createParserSettings();
+
+    /**
+     * Configure the parser settings.
+     *
+     * @param settings Parser settings to configure
+     */
+    protected void configureParserSettings(CPS settings) {
+        configureCommonSettings(settings);
+
+        if (headerExtractionEnabled != null) {
+            settings.setHeaderExtractionEnabled(headerExtractionEnabled);
+        }
+        if (numberOfRecordsToRead != null) {
+            settings.setNumberOfRecordsToRead(numberOfRecordsToRead);
+        }
+    }
+
+    /**
+     * Creates a new instance of the uniVocity parser.
+     *
+     * @param settings Parser settings to use
+     * @return New instance of the uniVocity parser
+     */
+    protected abstract P createParser(CPS settings);
+
+    /**
+     * Configures the format.
+     *
+     * @param format format to configure
+     */
+    protected void configureFormat(F format) {
+        if (lineSeparator != null) {
+            format.setLineSeparator(lineSeparator);
+        }
+        if (normalizedLineSeparator != null) {
+            format.setNormalizedNewline(normalizedLineSeparator);
+        }
+        if (comment != null) {
+            format.setComment(comment);
+        }
+    }
+
+    /**
+     * Creates and configures the writer settings.
+     *
+     * @return new configured instance of the writer settings
+     */
+    final CWS createAndConfigureWriterSettings() {
+        CWS settings = createWriterSettings();
+        configureWriterSettings(settings);
+        configureFormat(settings.getFormat());
+        return settings;
+    }
+
+    /**
+     * Creates and configures the parser settings.
+     *
+     * @return new configured instance of the parser settings
+     */
+    final CPS createAndConfigureParserSettings() {
+        CPS settings = createParserSettings();
+        configureParserSettings(settings);
+        configureFormat(settings.getFormat());
+        return settings;
+    }
+
+    /**
+     * Configures the common settings shared by parser and writer.
+     *
+     * @param settings settings to configure
+     */
+    private void configureCommonSettings(CommonSettings<F> settings) {
+        if (nullValue != null) {
+            settings.setNullValue(nullValue);
+        }
+        if (skipEmptyLines != null) {
+            settings.setSkipEmptyLines(skipEmptyLines);
+        }
+        if (ignoreTrailingWhitespaces != null) {
+            settings.setIgnoreTrailingWhitespaces(ignoreTrailingWhitespaces);
+        }
+        if (ignoreLeadingWhitespaces != null) {
+            settings.setIgnoreLeadingWhitespaces(ignoreLeadingWhitespaces);
+        }
+        if (headersDisabled) {
+            settings.setHeaders((String[]) null);
+        } else if (headers != null) {
+            settings.setHeaders(headers);
+        }
+    }
+
+    /**
+     * Returns {@code this} as the proper data format type. It helps the fluent API with inheritance.
+     *
+     * @return {@code this} as the proper data format type
+     */
+    @SuppressWarnings("unchecked")
+    private DF self() {
+        return (DF) this;
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        writerSettings = null;
+        marshaller = null;
+        parserSettings = null;
+        unmarshaller = null;
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        // noop
+    }
+}
diff --git a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java
index fe75dac..41ffa86 100644
--- a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java
+++ b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Marshaller.java
@@ -1,117 +1,116 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-
-import com.univocity.parsers.common.AbstractWriter;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.NoTypeConversionAvailableException;
-
-import static org.apache.camel.support.ExchangeHelper.convertToMandatoryType;
-import static org.apache.camel.support.ExchangeHelper.convertToType;
-
-/**
- * This class marshalls the exchange body using an uniVocity writer. It can
- * automatically generates headers and keep their order in memory.
- *
- * @param <W> Writer class
- */
-final class Marshaller<W extends AbstractWriter<?>> {
-    private final LinkedHashSet<String> headers = new LinkedHashSet<>();
-    private final boolean adaptHeaders;
-
-    /**
-     * Creates a new instance.
-     *
-     * @param headers the base headers to use
-     * @param adaptHeaders whether or not we can add headers on the fly
-     *            depending on the data
-     */
-    Marshaller(String[] headers, boolean adaptHeaders) {
-        if (headers != null) {
-            this.headers.addAll(Arrays.asList(headers));
-        }
-        this.adaptHeaders = adaptHeaders;
-    }
-
-    /**
-     * Marshals the given body.
-     *
-     * @param exchange exchange to use (for type conversion)
-     * @param body body to marshal
-     * @param writer uniVocity writer to use
-     * @throws NoTypeConversionAvailableException when it's not possible to
-     *             convert the body as list and maps.
-     */
-    public void marshal(Exchange exchange, Object body, W writer) throws NoTypeConversionAvailableException {
-        try {
-            List<?> list = convertToType(exchange, List.class, body);
-            if (list != null) {
-                for (Object row : list) {
-                    writeRow(exchange, row, writer);
-                }
-            } else {
-                writeRow(exchange, body, writer);
-            }
-        } finally {
-            writer.close();
-        }
-    }
-
-    /**
-     * Writes the given row.
-     *
-     * @param exchange exchange to use (for type conversion)
-     * @param row row to write
-     * @param writer uniVocity writer to use
-     * @throws NoTypeConversionAvailableException when it's not possible to
-     *             convert the row as map.
-     */
-    private void writeRow(Exchange exchange, Object row, W writer) throws NoTypeConversionAvailableException {
-        Map<?, ?> map = convertToMandatoryType(exchange, Map.class, row);
-        if (adaptHeaders) {
-            synchronized (headers) {
-                for (Object key : map.keySet()) {
-                    headers.add(convertToMandatoryType(exchange, String.class, key));
-                }
-                writeRow(map, writer);
-            }
-        } else {
-            writeRow(map, writer);
-        }
-    }
-
-    /**
-     * Writes the given map as row.
-     * 
-     * @param map row values by header
-     * @param writer uniVocity writer to use
-     */
-    private void writeRow(Map<?, ?> map, W writer) {
-        Object[] values = new Object[headers.size()];
-        int index = 0;
-        for (String header : headers) {
-            values[index++] = map.get(header);
-        }
-        writer.writeRow(values);
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+
+import com.univocity.parsers.common.AbstractWriter;
+import org.apache.camel.Exchange;
+import org.apache.camel.NoTypeConversionAvailableException;
+
+import static org.apache.camel.support.ExchangeHelper.convertToMandatoryType;
+import static org.apache.camel.support.ExchangeHelper.convertToType;
+
+/**
+ * This class marshalls the exchange body using an uniVocity writer. It can
+ * automatically generates headers and keep their order in memory.
+ *
+ * @param <W> Writer class
+ */
+final class Marshaller<W extends AbstractWriter<?>> {
+    private final LinkedHashSet<String> headers = new LinkedHashSet<>();
+    private final boolean adaptHeaders;
+
+    /**
+     * Creates a new instance.
+     *
+     * @param headers the base headers to use
+     * @param adaptHeaders whether or not we can add headers on the fly
+     *            depending on the data
+     */
+    Marshaller(String[] headers, boolean adaptHeaders) {
+        if (headers != null) {
+            this.headers.addAll(Arrays.asList(headers));
+        }
+        this.adaptHeaders = adaptHeaders;
+    }
+
+    /**
+     * Marshals the given body.
+     *
+     * @param exchange exchange to use (for type conversion)
+     * @param body body to marshal
+     * @param writer uniVocity writer to use
+     * @throws NoTypeConversionAvailableException when it's not possible to
+     *             convert the body as list and maps.
+     */
+    public void marshal(Exchange exchange, Object body, W writer) throws NoTypeConversionAvailableException {
+        try {
+            List<?> list = convertToType(exchange, List.class, body);
+            if (list != null) {
+                for (Object row : list) {
+                    writeRow(exchange, row, writer);
+                }
+            } else {
+                writeRow(exchange, body, writer);
+            }
+        } finally {
+            writer.close();
+        }
+    }
+
+    /**
+     * Writes the given row.
+     *
+     * @param exchange exchange to use (for type conversion)
+     * @param row row to write
+     * @param writer uniVocity writer to use
+     * @throws NoTypeConversionAvailableException when it's not possible to
+     *             convert the row as map.
+     */
+    private void writeRow(Exchange exchange, Object row, W writer) throws NoTypeConversionAvailableException {
+        Map<?, ?> map = convertToMandatoryType(exchange, Map.class, row);
+        if (adaptHeaders) {
+            synchronized (headers) {
+                for (Object key : map.keySet()) {
+                    headers.add(convertToMandatoryType(exchange, String.class, key));
+                }
+                writeRow(map, writer);
+            }
+        } else {
+            writeRow(map, writer);
+        }
+    }
+
+    /**
+     * Writes the given map as row.
+     * 
+     * @param map row values by header
+     * @param writer uniVocity writer to use
+     */
+    private void writeRow(Map<?, ?> map, W writer) {
+        Object[] values = new Object[headers.size()];
+        int index = 0;
+        for (String header : headers) {
+            values[index++] = map.get(header);
+        }
+        writer.writeRow(values);
+    }
+}
diff --git a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormat.java b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormat.java
index 506de28..270a392 100644
--- a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormat.java
+++ b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormat.java
@@ -1,212 +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.dataformat.univocity;
-
-import java.io.Writer;
-
-import com.univocity.parsers.csv.CsvFormat;
-import com.univocity.parsers.csv.CsvParser;
-import com.univocity.parsers.csv.CsvParserSettings;
-import com.univocity.parsers.csv.CsvWriter;
-import com.univocity.parsers.csv.CsvWriterSettings;
-import org.apache.camel.spi.annotations.Dataformat;
-
-/**
- * This class is the data format that uses the CSV uniVocity parser.
- */
-@Dataformat("univocity-csv")
-public class UniVocityCsvDataFormat extends AbstractUniVocityDataFormat<CsvFormat, CsvWriterSettings, CsvWriter, CsvParserSettings, CsvParser, UniVocityCsvDataFormat> {
-    protected Boolean quoteAllFields;
-    protected Character quote;
-    protected Character quoteEscape;
-    protected Character delimiter;
-
-    /**
-     * Gets whether or not all fields must be quoted.
-     * If {@code null} then the default settings value is used.
-     *
-     * @return whether or not all fields must be quoted
-     * @see com.univocity.parsers.csv.CsvWriterSettings#getQuoteAllFields()
-     */
-    public Boolean getQuoteAllFields() {
-        return quoteAllFields;
-    }
-
-    /**
-     * Gets whether or not all fields must be quoted.
-     * If {@code null} then the default settings value is used.
-     *
-     * @param quoteAllFields whether or not all fields must be quoted
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.csv.CsvWriterSettings#setQuoteAllFields(boolean)
-     */
-    public UniVocityCsvDataFormat setQuoteAllFields(Boolean quoteAllFields) {
-        this.quoteAllFields = quoteAllFields;
-        return this;
-    }
-
-    /**
-     * Gets the quote symbol.
-     * If {@code null} then the default format value is used.
-     *
-     * @return the quote symbol
-     * @see com.univocity.parsers.csv.CsvFormat#getQuote()
-     */
-    public Character getQuote() {
-        return quote;
-    }
-
-    /**
-     * Sets the quote symbol.
-     * If {@code null} then the default format value is used.
-     *
-     * @param quote the quote symbol
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.csv.CsvFormat#setQuote(char)
-     */
-    public UniVocityCsvDataFormat setQuote(Character quote) {
-        this.quote = quote;
-        return this;
-    }
-
-    /**
-     * Gets the quote escape symbol.
-     * If {@code null} then the default format value is used.
-     *
-     * @return the quote escape symbol
-     * @see com.univocity.parsers.csv.CsvFormat#getQuoteEscape()
-     */
-    public Character getQuoteEscape() {
-        return quoteEscape;
-    }
-
-    /**
-     * Sets the quote escape symbol.
-     * If {@code null} then the default format value is used.
-     *
-     * @param quoteEscape the quote escape symbol
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.csv.CsvFormat#setQuoteEscape(char)
-     */
-    public UniVocityCsvDataFormat setQuoteEscape(Character quoteEscape) {
-        this.quoteEscape = quoteEscape;
-        return this;
-    }
-
-    /**
-     * Gets the delimiter symbol.
-     * If {@code null} then the default format value is used.
-     *
-     * @return the delimiter symbol
-     * @see com.univocity.parsers.csv.CsvFormat#getDelimiter()
-     */
-    public Character getDelimiter() {
-        return delimiter;
-    }
-
-    /**
-     * Sets the delimiter symbol.
-     * If {@code null} then the default format value is used.
-     *
-     * @param delimiter the delimiter symbol
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.csv.CsvFormat#setDelimiter(char)
-     */
-    public UniVocityCsvDataFormat setDelimiter(Character delimiter) {
-        this.delimiter = delimiter;
-        return this;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected CsvWriterSettings createWriterSettings() {
-        return new CsvWriterSettings();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected void configureWriterSettings(CsvWriterSettings settings) {
-        super.configureWriterSettings(settings);
-
-        if (quoteAllFields != null) {
-            settings.setQuoteAllFields(quoteAllFields);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected CsvWriter createWriter(Writer writer, CsvWriterSettings settings) {
-        return new CsvWriter(writer, settings);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected CsvParserSettings createParserSettings() {
-        return new CsvParserSettings();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected void configureParserSettings(CsvParserSettings settings) {
-        super.configureParserSettings(settings);
-
-        if (emptyValue != null) {
-            settings.setEmptyValue(emptyValue);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected CsvParser createParser(CsvParserSettings settings) {
-        return new CsvParser(settings);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected void configureFormat(CsvFormat format) {
-        super.configureFormat(format);
-
-        if (quote != null) {
-            format.setQuote(quote);
-        }
-        if (quoteEscape != null) {
-            format.setQuoteEscape(quoteEscape);
-        }
-        if (delimiter != null) {
-            format.setDelimiter(delimiter);
-        }
-    }
-
-    @Override
-    public String getDataFormatName() {
-        return "univocity-csv";
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.io.Writer;
+
+import com.univocity.parsers.csv.CsvFormat;
+import com.univocity.parsers.csv.CsvParser;
+import com.univocity.parsers.csv.CsvParserSettings;
+import com.univocity.parsers.csv.CsvWriter;
+import com.univocity.parsers.csv.CsvWriterSettings;
+import org.apache.camel.spi.annotations.Dataformat;
+
+/**
+ * This class is the data format that uses the CSV uniVocity parser.
+ */
+@Dataformat("univocity-csv")
+public class UniVocityCsvDataFormat extends AbstractUniVocityDataFormat<CsvFormat, CsvWriterSettings, CsvWriter, CsvParserSettings, CsvParser, UniVocityCsvDataFormat> {
+    protected Boolean quoteAllFields;
+    protected Character quote;
+    protected Character quoteEscape;
+    protected Character delimiter;
+
+    /**
+     * Gets whether or not all fields must be quoted.
+     * If {@code null} then the default settings value is used.
+     *
+     * @return whether or not all fields must be quoted
+     * @see com.univocity.parsers.csv.CsvWriterSettings#getQuoteAllFields()
+     */
+    public Boolean getQuoteAllFields() {
+        return quoteAllFields;
+    }
+
+    /**
+     * Gets whether or not all fields must be quoted.
+     * If {@code null} then the default settings value is used.
+     *
+     * @param quoteAllFields whether or not all fields must be quoted
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.csv.CsvWriterSettings#setQuoteAllFields(boolean)
+     */
+    public UniVocityCsvDataFormat setQuoteAllFields(Boolean quoteAllFields) {
+        this.quoteAllFields = quoteAllFields;
+        return this;
+    }
+
+    /**
+     * Gets the quote symbol.
+     * If {@code null} then the default format value is used.
+     *
+     * @return the quote symbol
+     * @see com.univocity.parsers.csv.CsvFormat#getQuote()
+     */
+    public Character getQuote() {
+        return quote;
+    }
+
+    /**
+     * Sets the quote symbol.
+     * If {@code null} then the default format value is used.
+     *
+     * @param quote the quote symbol
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.csv.CsvFormat#setQuote(char)
+     */
+    public UniVocityCsvDataFormat setQuote(Character quote) {
+        this.quote = quote;
+        return this;
+    }
+
+    /**
+     * Gets the quote escape symbol.
+     * If {@code null} then the default format value is used.
+     *
+     * @return the quote escape symbol
+     * @see com.univocity.parsers.csv.CsvFormat#getQuoteEscape()
+     */
+    public Character getQuoteEscape() {
+        return quoteEscape;
+    }
+
+    /**
+     * Sets the quote escape symbol.
+     * If {@code null} then the default format value is used.
+     *
+     * @param quoteEscape the quote escape symbol
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.csv.CsvFormat#setQuoteEscape(char)
+     */
+    public UniVocityCsvDataFormat setQuoteEscape(Character quoteEscape) {
+        this.quoteEscape = quoteEscape;
+        return this;
+    }
+
+    /**
+     * Gets the delimiter symbol.
+     * If {@code null} then the default format value is used.
+     *
+     * @return the delimiter symbol
+     * @see com.univocity.parsers.csv.CsvFormat#getDelimiter()
+     */
+    public Character getDelimiter() {
+        return delimiter;
+    }
+
+    /**
+     * Sets the delimiter symbol.
+     * If {@code null} then the default format value is used.
+     *
+     * @param delimiter the delimiter symbol
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.csv.CsvFormat#setDelimiter(char)
+     */
+    public UniVocityCsvDataFormat setDelimiter(Character delimiter) {
+        this.delimiter = delimiter;
+        return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected CsvWriterSettings createWriterSettings() {
+        return new CsvWriterSettings();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected void configureWriterSettings(CsvWriterSettings settings) {
+        super.configureWriterSettings(settings);
+
+        if (quoteAllFields != null) {
+            settings.setQuoteAllFields(quoteAllFields);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected CsvWriter createWriter(Writer writer, CsvWriterSettings settings) {
+        return new CsvWriter(writer, settings);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected CsvParserSettings createParserSettings() {
+        return new CsvParserSettings();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected void configureParserSettings(CsvParserSettings settings) {
+        super.configureParserSettings(settings);
+
+        if (emptyValue != null) {
+            settings.setEmptyValue(emptyValue);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected CsvParser createParser(CsvParserSettings settings) {
+        return new CsvParser(settings);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected void configureFormat(CsvFormat format) {
+        super.configureFormat(format);
+
+        if (quote != null) {
+            format.setQuote(quote);
+        }
+        if (quoteEscape != null) {
+            format.setQuoteEscape(quoteEscape);
+        }
+        if (delimiter != null) {
+            format.setDelimiter(delimiter);
+        }
+    }
+
+    @Override
+    public String getDataFormatName() {
+        return "univocity-csv";
+    }
+}
diff --git a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormat.java b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormat.java
index 3c428bd..cf01ff4 100644
--- a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormat.java
+++ b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormat.java
@@ -1,222 +1,222 @@
-/*
- * 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.dataformat.univocity;
-
-import java.io.Writer;
-import java.util.LinkedHashMap;
-
-import com.univocity.parsers.fixed.FixedWidthFields;
-import com.univocity.parsers.fixed.FixedWidthFormat;
-import com.univocity.parsers.fixed.FixedWidthParser;
-import com.univocity.parsers.fixed.FixedWidthParserSettings;
-import com.univocity.parsers.fixed.FixedWidthWriter;
-import com.univocity.parsers.fixed.FixedWidthWriterSettings;
-import org.apache.camel.spi.annotations.Dataformat;
-
-/**
- * This class is the data format that uses the fixed-width uniVocity parser.
- */
-@Dataformat("univocity-fixed")
-public class UniVocityFixedWidthDataFormat extends AbstractUniVocityDataFormat<FixedWidthFormat, FixedWidthWriterSettings,
-        FixedWidthWriter, FixedWidthParserSettings, FixedWidthParser, UniVocityFixedWidthDataFormat> {
-    protected int[] fieldLengths;
-    protected Boolean skipTrailingCharsUntilNewline;
-    protected Boolean recordEndsOnNewline;
-    protected Character padding;
-
-    /**
-     * Gets the field lengths.
-     * It's used to construct uniVocity {@link com.univocity.parsers.fixed.FixedWidthFields} instance.
-     *
-     * @return the field lengths
-     */
-    public int[] getFieldLengths() {
-        return fieldLengths;
-    }
-
-    /**
-     * Sets the field lengths
-     * It's used to construct uniVocity {@link com.univocity.parsers.fixed.FixedWidthFields} instance.
-     *
-     * @param fieldLengths the field length
-     * @return current data format instance, fluent API
-     */
-    public UniVocityFixedWidthDataFormat setFieldLengths(int[] fieldLengths) {
-        this.fieldLengths = fieldLengths;
-        return this;
-    }
-
-    /**
-     * Gets whether or not trailing characters until new line must be ignored.
-     *
-     * @return whether or not trailing characters until new line must be ignored
-     * @see com.univocity.parsers.fixed.FixedWidthParserSettings#getSkipTrailingCharsUntilNewline()
-     */
-    public Boolean getSkipTrailingCharsUntilNewline() {
-        return skipTrailingCharsUntilNewline;
-    }
-
-    /**
-     * Sets whether or not trailing characters until new line must be ignored.
-     *
-     * @param skipTrailingCharsUntilNewline whether or not trailing characters until new line must be ignored
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.fixed.FixedWidthParserSettings#setSkipTrailingCharsUntilNewline(boolean)
-     */
-    public UniVocityFixedWidthDataFormat setSkipTrailingCharsUntilNewline(Boolean skipTrailingCharsUntilNewline) {
-        this.skipTrailingCharsUntilNewline = skipTrailingCharsUntilNewline;
-        return this;
-    }
-
-    /**
-     * Gets whether or not the record ends on new line.
-     *
-     * @return whether or not the record ends on new line
-     * @see com.univocity.parsers.fixed.FixedWidthParserSettings#getRecordEndsOnNewline()
-     */
-    public Boolean getRecordEndsOnNewline() {
-        return recordEndsOnNewline;
-    }
-
-    /**
-     * Sets whether or not the record ends on new line
-     *
-     * @param recordEndsOnNewline whether or not the record ends on new line
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.fixed.FixedWidthParserSettings#setRecordEndsOnNewline(boolean)
-     */
-    public UniVocityFixedWidthDataFormat setRecordEndsOnNewline(Boolean recordEndsOnNewline) {
-        this.recordEndsOnNewline = recordEndsOnNewline;
-        return this;
-    }
-
-    /**
-     * Gets the padding symbol.
-     * If {@code null} then the default format value is used.
-     *
-     * @return the padding symbol
-     * @see com.univocity.parsers.fixed.FixedWidthFormat#getPadding()
-     */
-    public Character getPadding() {
-        return padding;
-    }
-
-    /**
-     * Sets the padding symbol.
-     * If {@code null} then the default format value is used.
-     *
-     * @param padding the padding symbol
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.fixed.FixedWidthFormat#setPadding(char)
-     */
-    public UniVocityFixedWidthDataFormat setPadding(Character padding) {
-        this.padding = padding;
-        return this;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected FixedWidthWriterSettings createWriterSettings() {
-        return new FixedWidthWriterSettings(createFixedWidthFields());
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected FixedWidthWriter createWriter(Writer writer, FixedWidthWriterSettings settings) {
-        return new FixedWidthWriter(writer, settings);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected FixedWidthParserSettings createParserSettings() {
-        return new FixedWidthParserSettings(createFixedWidthFields());
-    }
-
-    @Override
-    protected void configureParserSettings(FixedWidthParserSettings settings) {
-        super.configureParserSettings(settings);
-
-        if (skipTrailingCharsUntilNewline != null) {
-            settings.setSkipTrailingCharsUntilNewline(skipTrailingCharsUntilNewline);
-        }
-        if (recordEndsOnNewline != null) {
-            settings.setRecordEndsOnNewline(true);
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected FixedWidthParser createParser(FixedWidthParserSettings settings) {
-        return new FixedWidthParser(settings);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected void configureFormat(FixedWidthFormat format) {
-        super.configureFormat(format);
-
-        if (padding != null) {
-            format.setPadding(padding);
-        }
-    }
-
-    /**
-     * Creates the {@link com.univocity.parsers.fixed.FixedWidthFields} instance based on the headers and field
-     * lengths.
-     *
-     * @return new {@code FixedWidthFields} based on the header and field lengths.
-     */
-    private FixedWidthFields createFixedWidthFields() {
-        // Ensure that the field lengths have been defined.
-        if (fieldLengths == null) {
-            throw new IllegalArgumentException("The fieldLengths must have been defined in order to use the fixed-width format.");
-        }
-
-        // If there's no header then we only use their length
-        if (headers == null) {
-            return new FixedWidthFields(fieldLengths);
-        }
-
-        // Use both headers and field lengths (same size and no duplicate headers)
-        if (fieldLengths.length != headers.length) {
-            throw new IllegalArgumentException("The headers and fieldLengths must have the same number of element in order to use the fixed-width format.");
-        }
-        LinkedHashMap<String, Integer> fields = new LinkedHashMap<>();
-        for (int i = 0; i < headers.length; i++) {
-            fields.put(headers[i], fieldLengths[i]);
-        }
-        if (fields.size() != headers.length) {
-            throw new IllegalArgumentException("The headers cannot have duplicates in order to use the fixed-width format.");
-        }
-        return new FixedWidthFields(fields);
-    }
-
-    @Override
-    public String getDataFormatName() {
-        return "univocity-fixed";
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.io.Writer;
+import java.util.LinkedHashMap;
+
+import com.univocity.parsers.fixed.FixedWidthFields;
+import com.univocity.parsers.fixed.FixedWidthFormat;
+import com.univocity.parsers.fixed.FixedWidthParser;
+import com.univocity.parsers.fixed.FixedWidthParserSettings;
+import com.univocity.parsers.fixed.FixedWidthWriter;
+import com.univocity.parsers.fixed.FixedWidthWriterSettings;
+import org.apache.camel.spi.annotations.Dataformat;
+
+/**
+ * This class is the data format that uses the fixed-width uniVocity parser.
+ */
+@Dataformat("univocity-fixed")
+public class UniVocityFixedWidthDataFormat extends AbstractUniVocityDataFormat<FixedWidthFormat, FixedWidthWriterSettings,
+        FixedWidthWriter, FixedWidthParserSettings, FixedWidthParser, UniVocityFixedWidthDataFormat> {
+    protected int[] fieldLengths;
+    protected Boolean skipTrailingCharsUntilNewline;
+    protected Boolean recordEndsOnNewline;
+    protected Character padding;
+
+    /**
+     * Gets the field lengths.
+     * It's used to construct uniVocity {@link com.univocity.parsers.fixed.FixedWidthFields} instance.
+     *
+     * @return the field lengths
+     */
+    public int[] getFieldLengths() {
+        return fieldLengths;
+    }
+
+    /**
+     * Sets the field lengths
+     * It's used to construct uniVocity {@link com.univocity.parsers.fixed.FixedWidthFields} instance.
+     *
+     * @param fieldLengths the field length
+     * @return current data format instance, fluent API
+     */
+    public UniVocityFixedWidthDataFormat setFieldLengths(int[] fieldLengths) {
+        this.fieldLengths = fieldLengths;
+        return this;
+    }
+
+    /**
+     * Gets whether or not trailing characters until new line must be ignored.
+     *
+     * @return whether or not trailing characters until new line must be ignored
+     * @see com.univocity.parsers.fixed.FixedWidthParserSettings#getSkipTrailingCharsUntilNewline()
+     */
+    public Boolean getSkipTrailingCharsUntilNewline() {
+        return skipTrailingCharsUntilNewline;
+    }
+
+    /**
+     * Sets whether or not trailing characters until new line must be ignored.
+     *
+     * @param skipTrailingCharsUntilNewline whether or not trailing characters until new line must be ignored
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.fixed.FixedWidthParserSettings#setSkipTrailingCharsUntilNewline(boolean)
+     */
+    public UniVocityFixedWidthDataFormat setSkipTrailingCharsUntilNewline(Boolean skipTrailingCharsUntilNewline) {
+        this.skipTrailingCharsUntilNewline = skipTrailingCharsUntilNewline;
+        return this;
+    }
+
+    /**
+     * Gets whether or not the record ends on new line.
+     *
+     * @return whether or not the record ends on new line
+     * @see com.univocity.parsers.fixed.FixedWidthParserSettings#getRecordEndsOnNewline()
+     */
+    public Boolean getRecordEndsOnNewline() {
+        return recordEndsOnNewline;
+    }
+
+    /**
+     * Sets whether or not the record ends on new line
+     *
+     * @param recordEndsOnNewline whether or not the record ends on new line
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.fixed.FixedWidthParserSettings#setRecordEndsOnNewline(boolean)
+     */
+    public UniVocityFixedWidthDataFormat setRecordEndsOnNewline(Boolean recordEndsOnNewline) {
+        this.recordEndsOnNewline = recordEndsOnNewline;
+        return this;
+    }
+
+    /**
+     * Gets the padding symbol.
+     * If {@code null} then the default format value is used.
+     *
+     * @return the padding symbol
+     * @see com.univocity.parsers.fixed.FixedWidthFormat#getPadding()
+     */
+    public Character getPadding() {
+        return padding;
+    }
+
+    /**
+     * Sets the padding symbol.
+     * If {@code null} then the default format value is used.
+     *
+     * @param padding the padding symbol
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.fixed.FixedWidthFormat#setPadding(char)
+     */
+    public UniVocityFixedWidthDataFormat setPadding(Character padding) {
+        this.padding = padding;
+        return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected FixedWidthWriterSettings createWriterSettings() {
+        return new FixedWidthWriterSettings(createFixedWidthFields());
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected FixedWidthWriter createWriter(Writer writer, FixedWidthWriterSettings settings) {
+        return new FixedWidthWriter(writer, settings);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected FixedWidthParserSettings createParserSettings() {
+        return new FixedWidthParserSettings(createFixedWidthFields());
+    }
+
+    @Override
+    protected void configureParserSettings(FixedWidthParserSettings settings) {
+        super.configureParserSettings(settings);
+
+        if (skipTrailingCharsUntilNewline != null) {
+            settings.setSkipTrailingCharsUntilNewline(skipTrailingCharsUntilNewline);
+        }
+        if (recordEndsOnNewline != null) {
+            settings.setRecordEndsOnNewline(true);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected FixedWidthParser createParser(FixedWidthParserSettings settings) {
+        return new FixedWidthParser(settings);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected void configureFormat(FixedWidthFormat format) {
+        super.configureFormat(format);
+
+        if (padding != null) {
+            format.setPadding(padding);
+        }
+    }
+
+    /**
+     * Creates the {@link com.univocity.parsers.fixed.FixedWidthFields} instance based on the headers and field
+     * lengths.
+     *
+     * @return new {@code FixedWidthFields} based on the header and field lengths.
+     */
+    private FixedWidthFields createFixedWidthFields() {
+        // Ensure that the field lengths have been defined.
+        if (fieldLengths == null) {
+            throw new IllegalArgumentException("The fieldLengths must have been defined in order to use the fixed-width format.");
+        }
+
+        // If there's no header then we only use their length
+        if (headers == null) {
+            return new FixedWidthFields(fieldLengths);
+        }
+
+        // Use both headers and field lengths (same size and no duplicate headers)
+        if (fieldLengths.length != headers.length) {
+            throw new IllegalArgumentException("The headers and fieldLengths must have the same number of element in order to use the fixed-width format.");
+        }
+        LinkedHashMap<String, Integer> fields = new LinkedHashMap<>();
+        for (int i = 0; i < headers.length; i++) {
+            fields.put(headers[i], fieldLengths[i]);
+        }
+        if (fields.size() != headers.length) {
+            throw new IllegalArgumentException("The headers cannot have duplicates in order to use the fixed-width format.");
+        }
+        return new FixedWidthFields(fields);
+    }
+
+    @Override
+    public String getDataFormatName() {
+        return "univocity-fixed";
+    }
+}
diff --git a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormat.java b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormat.java
index 126ce4f..09e7077 100644
--- a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormat.java
+++ b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormat.java
@@ -1,107 +1,107 @@
-/*
- * 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.dataformat.univocity;
-
-import java.io.Writer;
-
-import com.univocity.parsers.tsv.TsvFormat;
-import com.univocity.parsers.tsv.TsvParser;
-import com.univocity.parsers.tsv.TsvParserSettings;
-import com.univocity.parsers.tsv.TsvWriter;
-import com.univocity.parsers.tsv.TsvWriterSettings;
-import org.apache.camel.spi.annotations.Dataformat;
-
-/**
- * This class is the data format that uses the TSV uniVocity parser.
- */
-@Dataformat("univocity-tsv")
-public class UniVocityTsvDataFormat extends AbstractUniVocityDataFormat<TsvFormat, TsvWriterSettings, TsvWriter, TsvParserSettings, TsvParser, UniVocityTsvDataFormat> {
-    protected Character escapeChar;
-
-    /**
-     * Gets the escape character symbol.
-     * If {@code null} then the default format value is used.
-     *
-     * @return the escape character symbol
-     * @see com.univocity.parsers.tsv.TsvFormat#getEscapeChar()
-     */
-    public Character getEscapeChar() {
-        return escapeChar;
-    }
-
-    /**
-     * Sets the escape character symbol.
-     * If {@code null} then the default settings value is used.
-     *
-     * @param escapeChar the escape character symbol
-     * @return current data format instance, fluent API
-     * @see com.univocity.parsers.tsv.TsvFormat#setEscapeChar(char)
-     */
-    public UniVocityTsvDataFormat setEscapeChar(Character escapeChar) {
-        this.escapeChar = escapeChar;
-        return this;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected TsvWriterSettings createWriterSettings() {
-        return new TsvWriterSettings();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected TsvWriter createWriter(Writer writer, TsvWriterSettings settings) {
-        return new TsvWriter(writer, settings);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected TsvParserSettings createParserSettings() {
-        return new TsvParserSettings();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected TsvParser createParser(TsvParserSettings settings) {
-        return new TsvParser(settings);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected void configureFormat(TsvFormat format) {
-        super.configureFormat(format);
-
-        if (escapeChar != null) {
-            format.setEscapeChar(escapeChar);
-        }
-    }
-
-    @Override
-    public String getDataFormatName() {
-        return "univocity-tsv";
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.io.Writer;
+
+import com.univocity.parsers.tsv.TsvFormat;
+import com.univocity.parsers.tsv.TsvParser;
+import com.univocity.parsers.tsv.TsvParserSettings;
+import com.univocity.parsers.tsv.TsvWriter;
+import com.univocity.parsers.tsv.TsvWriterSettings;
+import org.apache.camel.spi.annotations.Dataformat;
+
+/**
+ * This class is the data format that uses the TSV uniVocity parser.
+ */
+@Dataformat("univocity-tsv")
+public class UniVocityTsvDataFormat extends AbstractUniVocityDataFormat<TsvFormat, TsvWriterSettings, TsvWriter, TsvParserSettings, TsvParser, UniVocityTsvDataFormat> {
+    protected Character escapeChar;
+
+    /**
+     * Gets the escape character symbol.
+     * If {@code null} then the default format value is used.
+     *
+     * @return the escape character symbol
+     * @see com.univocity.parsers.tsv.TsvFormat#getEscapeChar()
+     */
+    public Character getEscapeChar() {
+        return escapeChar;
+    }
+
+    /**
+     * Sets the escape character symbol.
+     * If {@code null} then the default settings value is used.
+     *
+     * @param escapeChar the escape character symbol
+     * @return current data format instance, fluent API
+     * @see com.univocity.parsers.tsv.TsvFormat#setEscapeChar(char)
+     */
+    public UniVocityTsvDataFormat setEscapeChar(Character escapeChar) {
+        this.escapeChar = escapeChar;
+        return this;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected TsvWriterSettings createWriterSettings() {
+        return new TsvWriterSettings();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected TsvWriter createWriter(Writer writer, TsvWriterSettings settings) {
+        return new TsvWriter(writer, settings);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected TsvParserSettings createParserSettings() {
+        return new TsvParserSettings();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected TsvParser createParser(TsvParserSettings settings) {
+        return new TsvParser(settings);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected void configureFormat(TsvFormat format) {
+        super.configureFormat(format);
+
+        if (escapeChar != null) {
+            format.setEscapeChar(escapeChar);
+        }
+    }
+
+    @Override
+    public String getDataFormatName() {
+        return "univocity-tsv";
+    }
+}
diff --git a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Unmarshaller.java b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Unmarshaller.java
index eab47a8..d73036f 100644
--- a/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Unmarshaller.java
+++ b/components/camel-univocity-parsers/src/main/java/org/apache/camel/dataformat/univocity/Unmarshaller.java
@@ -1,197 +1,196 @@
-/*
- * 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.dataformat.univocity;
-
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-
-import com.univocity.parsers.common.AbstractParser;
-
-
-/**
- * This class unmarshalls the exchange body using an uniVocity parser.
- *
- * @param <P> Parser class
- */
-final class Unmarshaller<P extends AbstractParser<?>> {
-    private final boolean lazyLoad;
-    private final boolean asMap;
-
-    /**
-     * Creates a new instance.
-     *
-     * @param lazyLoad whether or not the lines must be lazily read
-     * @param asMap    whether or not we must produce maps instead of lists for each row
-     */
-    Unmarshaller(boolean lazyLoad, boolean asMap) {
-        this.lazyLoad = lazyLoad;
-        this.asMap = asMap;
-    }
-
-    /**
-     * Unmarshal from the given reader.
-     *
-     * @param reader             reader to read from
-     * @param parser             uniVocity parser to use
-     * @param headerRowProcessor Row processor that retrieves the header
-     * @return Unmarshalled data
-     */
-    public Object unmarshal(Reader reader, P parser, HeaderRowProcessor headerRowProcessor) {
-        parser.beginParsing(reader);
-        Iterator<?> iterator = asMap ? new MapRowIterator<>(parser, headerRowProcessor) : new ListRowIterator<>(parser);
-        return lazyLoad ? iterator : convertToList(iterator);
-    }
-
-    /**
-     * Converts the given iterator into a list.
-     *
-     * @param iterator iterator to convert
-     * @param <T>      item class
-     * @return a list that contains all the items of the iterator
-     */
-    private static <T> List<T> convertToList(Iterator<T> iterator) {
-        List<T> result = new ArrayList<>();
-        while (iterator.hasNext()) {
-            result.add(iterator.next());
-        }
-        return result;
-    }
-
-    /**
-     * This abstract class helps iterating over the rows using uniVocity.
-     *
-     * @param <E> Row class
-     * @param <P> Parser class
-     */
-    private abstract static class RowIterator<E, P extends AbstractParser<?>> implements Iterator<E> {
-        private final P parser;
-        private String[] row;
-
-        /**
-         * Creates a new instance.
-         *
-         * @param parser parser to use
-         */
-        protected RowIterator(P parser) {
-            this.parser = parser;
-            row = this.parser.parseNext();
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        @Override
-        public final boolean hasNext() {
-            return row != null;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        @Override
-        public final E next() {
-            if (row == null) {
-                throw new NoSuchElementException();
-            }
-
-            E result = convertRow(row);
-            row = parser.parseNext();
-            return result;
-        }
-
-        /**
-         * Warning: it always throws an {@code UnsupportedOperationException}
-         */
-        @Override
-        public final void remove() {
-            throw new UnsupportedOperationException();
-        }
-
-        /**
-         * Converts the rows into the expected object.
-         *
-         * @param row row to convert
-         * @return converted row
-         */
-        protected abstract E convertRow(String[] row);
-    }
-
-    /**
-     * This class is an iterator that transforms each row into a List.
-     *
-     * @param <P> Parser class
-     */
-    private static final class ListRowIterator<P extends AbstractParser<?>> extends RowIterator<List<String>, P> {
-        /**
-         * Creates a new instance.
-         *
-         * @param parser parser to use
-         */
-        protected ListRowIterator(P parser) {
-            super(parser);
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        @Override
-        protected List<String> convertRow(String[] row) {
-            return Arrays.asList(row);
-        }
-    }
-
-    /**
-     * This class is an iterator that transform each row into a Map.
-     *
-     * @param <P> Parser class
-     */
-    private static class MapRowIterator<P extends AbstractParser<?>> extends RowIterator<Map<String, String>, P> {
-        private final HeaderRowProcessor headerRowProcessor;
-
-        /**
-         * Creates a new instance
-         *
-         * @param parser             parser to use
-         * @param headerRowProcessor row processor to use in order to retrieve the headers
-         */
-        protected MapRowIterator(P parser, HeaderRowProcessor headerRowProcessor) {
-            super(parser);
-            this.headerRowProcessor = headerRowProcessor;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
-        @Override
-        protected Map<String, String> convertRow(String[] row) {
-            String[] headers = headerRowProcessor.getHeaders();
-
-            int size = Math.min(row.length, headers.length);
-            Map<String, String> result = new LinkedHashMap<>(size);
-            for (int i = 0; i < size; i++) {
-                result.put(headers[i], row[i]);
-            }
-            return result;
-        }
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+import com.univocity.parsers.common.AbstractParser;
+
+/**
+ * This class unmarshalls the exchange body using an uniVocity parser.
+ *
+ * @param <P> Parser class
+ */
+final class Unmarshaller<P extends AbstractParser<?>> {
+    private final boolean lazyLoad;
+    private final boolean asMap;
+
+    /**
+     * Creates a new instance.
+     *
+     * @param lazyLoad whether or not the lines must be lazily read
+     * @param asMap    whether or not we must produce maps instead of lists for each row
+     */
+    Unmarshaller(boolean lazyLoad, boolean asMap) {
+        this.lazyLoad = lazyLoad;
+        this.asMap = asMap;
+    }
+
+    /**
+     * Unmarshal from the given reader.
+     *
+     * @param reader             reader to read from
+     * @param parser             uniVocity parser to use
+     * @param headerRowProcessor Row processor that retrieves the header
+     * @return Unmarshalled data
+     */
+    public Object unmarshal(Reader reader, P parser, HeaderRowProcessor headerRowProcessor) {
+        parser.beginParsing(reader);
+        Iterator<?> iterator = asMap ? new MapRowIterator<>(parser, headerRowProcessor) : new ListRowIterator<>(parser);
+        return lazyLoad ? iterator : convertToList(iterator);
+    }
+
+    /**
+     * Converts the given iterator into a list.
+     *
+     * @param iterator iterator to convert
+     * @param <T>      item class
+     * @return a list that contains all the items of the iterator
+     */
+    private static <T> List<T> convertToList(Iterator<T> iterator) {
+        List<T> result = new ArrayList<>();
+        while (iterator.hasNext()) {
+            result.add(iterator.next());
+        }
+        return result;
+    }
+
+    /**
+     * This abstract class helps iterating over the rows using uniVocity.
+     *
+     * @param <E> Row class
+     * @param <P> Parser class
+     */
+    private abstract static class RowIterator<E, P extends AbstractParser<?>> implements Iterator<E> {
+        private final P parser;
+        private String[] row;
+
+        /**
+         * Creates a new instance.
+         *
+         * @param parser parser to use
+         */
+        protected RowIterator(P parser) {
+            this.parser = parser;
+            row = this.parser.parseNext();
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public final boolean hasNext() {
+            return row != null;
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        public final E next() {
+            if (row == null) {
+                throw new NoSuchElementException();
+            }
+
+            E result = convertRow(row);
+            row = parser.parseNext();
+            return result;
+        }
+
+        /**
+         * Warning: it always throws an {@code UnsupportedOperationException}
+         */
+        @Override
+        public final void remove() {
+            throw new UnsupportedOperationException();
+        }
+
+        /**
+         * Converts the rows into the expected object.
+         *
+         * @param row row to convert
+         * @return converted row
+         */
+        protected abstract E convertRow(String[] row);
+    }
+
+    /**
+     * This class is an iterator that transforms each row into a List.
+     *
+     * @param <P> Parser class
+     */
+    private static final class ListRowIterator<P extends AbstractParser<?>> extends RowIterator<List<String>, P> {
+        /**
+         * Creates a new instance.
+         *
+         * @param parser parser to use
+         */
+        protected ListRowIterator(P parser) {
+            super(parser);
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        protected List<String> convertRow(String[] row) {
+            return Arrays.asList(row);
+        }
+    }
+
+    /**
+     * This class is an iterator that transform each row into a Map.
+     *
+     * @param <P> Parser class
+     */
+    private static class MapRowIterator<P extends AbstractParser<?>> extends RowIterator<Map<String, String>, P> {
+        private final HeaderRowProcessor headerRowProcessor;
+
+        /**
+         * Creates a new instance
+         *
+         * @param parser             parser to use
+         * @param headerRowProcessor row processor to use in order to retrieve the headers
+         */
+        protected MapRowIterator(P parser, HeaderRowProcessor headerRowProcessor) {
+            super(parser);
+            this.headerRowProcessor = headerRowProcessor;
+        }
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        protected Map<String, String> convertRow(String[] row) {
+            String[] headers = headerRowProcessor.getHeaders();
+
+            int size = Math.min(row.length, headers.length);
+            Map<String, String> result = new LinkedHashMap<>(size);
+            for (int i = 0; i < size; i++) {
+                result.put(headers[i], row[i]);
+            }
+            return result;
+        }
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatMarshalSpringTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatMarshalSpringTest.java
index 0674888..10fa767 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatMarshalSpringTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatMarshalSpringTest.java
@@ -1,128 +1,127 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
-import org.junit.jupiter.api.Test;
-import org.springframework.context.support.AbstractApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-
-/**
- * This class tests the marshalling of {@link org.apache.camel.dataformat.univocity.UniVocityCsvDataFormat} using the
- * Spring DSL.
- */
-public final class UniVocityCsvDataFormatMarshalSpringTest extends CamelSpringTestSupport {
-    @EndpointInject("mock:result")
-    MockEndpoint result;
-
-    /**
-     * Tests that we can marshal CSV with the default configuration.
-     */
-    @Test
-    public void shouldMarshalWithDefaultConfiguration() throws Exception {
-        template.sendBody("direct:default", Arrays.asList(
-                asMap("A", "1", "B", "2", "C", "3"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1,2,3", "one,two,three"), body);
-    }
-
-    /**
-     * Tests that we can marshal a single line with CSV.
-     */
-    @Test
-    public void shouldMarshalSingleLine() throws Exception {
-        template.sendBody("direct:default", asMap("A", "1", "B", "2", "C", "3"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1,2,3"), body);
-    }
-
-    /**
-     * Tests that the marshalling adds new columns on the fly and keep its order
-     */
-    @Test
-    public void shouldMarshalAndAddNewColumns() throws Exception {
-        template.sendBody("direct:default", Arrays.asList(
-                asMap("A", "1", "B", "2"),
-                asMap("C", "three", "A", "one", "B", "two")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1,2", "one,two,three"), body);
-    }
-
-    /**
-     * Tests that we can marshal CSV with specific headers
-     */
-    @Test
-    public void shouldMarshalWithSpecificHeaders() throws Exception {
-        template.sendBody("direct:header", Arrays.asList(
-                asMap("A", "1", "B", "2", "C", "3"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1,3", "one,three"), body);
-    }
-
-    /**
-     * Tests that we can marshal CSV using and advanced configuration
-     */
-    @Test
-    public void shouldMarshalUsingAdvancedConfiguration() throws Exception {
-        template.sendBody("direct:advanced", Arrays.asList(
-                asMap("A", null, "B", "", "C", "_"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("_N/A_;_empty_;_-__", "_one_;_two_;_three_"), body);
-    }
-
-    @Override
-    protected AbstractApplicationContext createApplicationContext() {
-        return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatMarshalSpringTest.xml");
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
+import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * This class tests the marshalling of {@link org.apache.camel.dataformat.univocity.UniVocityCsvDataFormat} using the
+ * Spring DSL.
+ */
+public final class UniVocityCsvDataFormatMarshalSpringTest extends CamelSpringTestSupport {
+    @EndpointInject("mock:result")
+    MockEndpoint result;
+
+    /**
+     * Tests that we can marshal CSV with the default configuration.
+     */
+    @Test
+    public void shouldMarshalWithDefaultConfiguration() throws Exception {
+        template.sendBody("direct:default", Arrays.asList(
+                asMap("A", "1", "B", "2", "C", "3"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1,2,3", "one,two,three"), body);
+    }
+
+    /**
+     * Tests that we can marshal a single line with CSV.
+     */
+    @Test
+    public void shouldMarshalSingleLine() throws Exception {
+        template.sendBody("direct:default", asMap("A", "1", "B", "2", "C", "3"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1,2,3"), body);
+    }
+
+    /**
+     * Tests that the marshalling adds new columns on the fly and keep its order
+     */
+    @Test
+    public void shouldMarshalAndAddNewColumns() throws Exception {
+        template.sendBody("direct:default", Arrays.asList(
+                asMap("A", "1", "B", "2"),
+                asMap("C", "three", "A", "one", "B", "two")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1,2", "one,two,three"), body);
+    }
+
+    /**
+     * Tests that we can marshal CSV with specific headers
+     */
+    @Test
+    public void shouldMarshalWithSpecificHeaders() throws Exception {
+        template.sendBody("direct:header", Arrays.asList(
+                asMap("A", "1", "B", "2", "C", "3"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1,3", "one,three"), body);
+    }
+
+    /**
+     * Tests that we can marshal CSV using and advanced configuration
+     */
+    @Test
+    public void shouldMarshalUsingAdvancedConfiguration() throws Exception {
+        template.sendBody("direct:advanced", Arrays.asList(
+                asMap("A", null, "B", "", "C", "_"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("_N/A_;_empty_;_-__", "_one_;_two_;_three_"), body);
+    }
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatMarshalSpringTest.xml");
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatMarshalTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatMarshalTest.java
index 62b219c..2cdf04b 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatMarshalTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatMarshalTest.java
@@ -1,154 +1,154 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-import java.util.HashMap;
-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.spi.DataFormat;
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Test;
-
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * This class tests the marshalling of {@link org.apache.camel.dataformat.univocity.UniVocityCsvDataFormat}.
- */
-public final class UniVocityCsvDataFormatMarshalTest extends CamelTestSupport {
-    @EndpointInject("mock:result")
-    MockEndpoint result;
-
-    /**
-     * Tests that we can marshal CSV with the default configuration.
-     */
-    @Test
-    public void shouldMarshalWithDefaultConfiguration() throws Exception {
-        template.sendBody("direct:default", Arrays.asList(
-                asMap("A", "1", "B", "2", "C", "3"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1,2,3", "one,two,three"), body);
-    }
-
-    /**
-     * Tests that we can marshal a single line with CSV.
-     */
-    @Test
-    public void shouldMarshalSingleLine() throws Exception {
-        template.sendBody("direct:default", asMap("A", "1", "B", "2", "C", "3"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1,2,3"), body);
-    }
-
-    /**
-     * Tests that the marshalling adds new columns on the fly and keep its order
-     */
-    @Test
-    public void shouldMarshalAndAddNewColumns() throws Exception {
-        template.sendBody("direct:default", Arrays.asList(
-                asMap("A", "1", "B", "2"),
-                asMap("C", "three", "A", "one", "B", "two")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1,2", "one,two,three"), body);
-    }
-
-    /**
-     * Tests that we can marshal CSV with specific headers
-     */
-    @Test
-    public void shouldMarshalWithSpecificHeaders() throws Exception {
-        template.sendBody("direct:header", Arrays.asList(
-                asMap("A", "1", "B", "2", "C", "3"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1,3", "one,three"), body);
-    }
-
-    /**
-     * Tests that we can marshal CSV using and advanced configuration
-     */
-    @Test
-    public void shouldMarshalUsingAdvancedConfiguration() throws Exception {
-        template.sendBody("direct:advanced", Arrays.asList(
-                asMap("A", null, "B", "", "C", "_"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("_N/A_;_empty_;_-__", "_one_;_two_;_three_"), body);
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        final Map<String, DataFormat> tests = new HashMap<>();
-
-        // Default writing of CSV
-        tests.put("default", new UniVocityCsvDataFormat());
-
-        // Write a CSV with specific headers
-        tests.put("header", new UniVocityCsvDataFormat()
-                .setHeaders(new String[]{"A", "C"}));
-
-        // Write a CSV with an advanced configuration
-        tests.put("advanced", new UniVocityCsvDataFormat()
-                        .setNullValue("N/A")
-                        .setEmptyValue("empty")
-                        .setQuote('_')
-                        .setQuoteAllFields(true)
-                        .setQuoteEscape('-')
-                        .setDelimiter(';')
-        );
-
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                for (Map.Entry<String, DataFormat> test : tests.entrySet()) {
-                    from("direct:" + test.getKey()).marshal(test.getValue()).convertBodyTo(String.class).to("mock:result");
-                }
-            }
-        };
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+import java.util.HashMap;
+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.spi.DataFormat;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
+import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * This class tests the marshalling of {@link org.apache.camel.dataformat.univocity.UniVocityCsvDataFormat}.
+ */
+public final class UniVocityCsvDataFormatMarshalTest extends CamelTestSupport {
+    @EndpointInject("mock:result")
+    MockEndpoint result;
+
+    /**
+     * Tests that we can marshal CSV with the default configuration.
+     */
+    @Test
+    public void shouldMarshalWithDefaultConfiguration() throws Exception {
+        template.sendBody("direct:default", Arrays.asList(
+                asMap("A", "1", "B", "2", "C", "3"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1,2,3", "one,two,three"), body);
+    }
+
+    /**
+     * Tests that we can marshal a single line with CSV.
+     */
+    @Test
+    public void shouldMarshalSingleLine() throws Exception {
+        template.sendBody("direct:default", asMap("A", "1", "B", "2", "C", "3"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1,2,3"), body);
+    }
+
+    /**
+     * Tests that the marshalling adds new columns on the fly and keep its order
+     */
+    @Test
+    public void shouldMarshalAndAddNewColumns() throws Exception {
+        template.sendBody("direct:default", Arrays.asList(
+                asMap("A", "1", "B", "2"),
+                asMap("C", "three", "A", "one", "B", "two")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1,2", "one,two,three"), body);
+    }
+
+    /**
+     * Tests that we can marshal CSV with specific headers
+     */
+    @Test
+    public void shouldMarshalWithSpecificHeaders() throws Exception {
+        template.sendBody("direct:header", Arrays.asList(
+                asMap("A", "1", "B", "2", "C", "3"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1,3", "one,three"), body);
+    }
+
+    /**
+     * Tests that we can marshal CSV using and advanced configuration
+     */
+    @Test
+    public void shouldMarshalUsingAdvancedConfiguration() throws Exception {
+        template.sendBody("direct:advanced", Arrays.asList(
+                asMap("A", null, "B", "", "C", "_"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("_N/A_;_empty_;_-__", "_one_;_two_;_three_"), body);
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        final Map<String, DataFormat> tests = new HashMap<>();
+
+        // Default writing of CSV
+        tests.put("default", new UniVocityCsvDataFormat());
+
+        // Write a CSV with specific headers
+        tests.put("header", new UniVocityCsvDataFormat()
+                .setHeaders(new String[]{"A", "C"}));
+
+        // Write a CSV with an advanced configuration
+        tests.put("advanced", new UniVocityCsvDataFormat()
+                        .setNullValue("N/A")
+                        .setEmptyValue("empty")
+                        .setQuote('_')
+                        .setQuoteAllFields(true)
+                        .setQuoteEscape('-')
+                        .setDelimiter(';')
+        );
+
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                for (Map.Entry<String, DataFormat> test : tests.entrySet()) {
+                    from("direct:" + test.getKey()).marshal(test.getValue()).convertBodyTo(String.class).to("mock:result");
+                }
+            }
+        };
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatTest.java
index c8a52d9..748b084 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatTest.java
@@ -1,202 +1,202 @@
-/*
- * 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.dataformat.univocity;
-
-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.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-/**
- * This class tests the options of {@link org.apache.camel.dataformat.univocity.UniVocityCsvDataFormat}.
- */
-public final class UniVocityCsvDataFormatTest {
-    @Test
-    public void shouldConfigureNullValue() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setNullValue("N/A");
-
-        assertEquals("N/A", dataFormat.getNullValue());
-        assertEquals("N/A", dataFormat.createAndConfigureWriterSettings().getNullValue());
-        assertEquals("N/A", dataFormat.createAndConfigureParserSettings().getNullValue());
-    }
-
-    @Test
-    public void shouldConfigureSkipEmptyLines() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setSkipEmptyLines(true);
-
-        assertTrue(dataFormat.getSkipEmptyLines());
-        assertTrue(dataFormat.createAndConfigureWriterSettings().getSkipEmptyLines());
-        assertTrue(dataFormat.createAndConfigureParserSettings().getSkipEmptyLines());
-    }
-
-    @Test
-    public void shouldConfigureIgnoreTrailingWhitespaces() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setIgnoreTrailingWhitespaces(true);
-
-        assertTrue(dataFormat.getIgnoreTrailingWhitespaces());
-        assertTrue(dataFormat.createAndConfigureWriterSettings().getIgnoreTrailingWhitespaces());
-        assertTrue(dataFormat.createAndConfigureParserSettings().getIgnoreTrailingWhitespaces());
-    }
-
-    @Test
-    public void shouldConfigureIgnoreLeadingWhitespaces() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setIgnoreLeadingWhitespaces(true);
-
-        assertTrue(dataFormat.getIgnoreLeadingWhitespaces());
-        assertTrue(dataFormat.createAndConfigureWriterSettings().getIgnoreLeadingWhitespaces());
-        assertTrue(dataFormat.createAndConfigureParserSettings().getIgnoreLeadingWhitespaces());
-    }
-
-    @Test
-    public void shouldConfigureHeadersDisabled() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setHeadersDisabled(true);
-
-        assertTrue(dataFormat.isHeadersDisabled());
-        assertNull(dataFormat.createAndConfigureWriterSettings().getHeaders());
-        assertNull(dataFormat.createAndConfigureParserSettings().getHeaders());
-    }
-
-    @Test
-    public void shouldConfigureHeaders() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setHeaders(new String[]{"A", "B", "C"});
-
-        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.getHeaders());
-        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.createAndConfigureWriterSettings().getHeaders());
-        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.createAndConfigureParserSettings().getHeaders());
-    }
-
-    @Test
-    public void shouldConfigureHeaderExtractionEnabled() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setHeaderExtractionEnabled(true);
-
-        assertTrue(dataFormat.getHeaderExtractionEnabled());
-        assertTrue(dataFormat.createAndConfigureParserSettings().isHeaderExtractionEnabled());
-    }
-
-    @Test
-    public void shouldConfigureNumberOfRecordsToRead() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setNumberOfRecordsToRead(42);
-
-        assertEquals(Integer.valueOf(42), dataFormat.getNumberOfRecordsToRead());
-        assertEquals(42, dataFormat.createAndConfigureParserSettings().getNumberOfRecordsToRead());
-    }
-
-    @Test
-    public void shouldConfigureEmptyValue() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setEmptyValue("empty");
-
-        assertEquals("empty", dataFormat.getEmptyValue());
-        assertEquals("empty", dataFormat.createAndConfigureWriterSettings().getEmptyValue());
-        assertEquals("empty", dataFormat.createAndConfigureParserSettings().getEmptyValue());
-    }
-
-    @Test
-    public void shouldConfigureLineSeparator() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setLineSeparator("ls");
-
-        assertEquals("ls", dataFormat.getLineSeparator());
-        assertEquals("ls", dataFormat.createAndConfigureWriterSettings().getFormat().getLineSeparatorString());
-        assertEquals("ls", dataFormat.createAndConfigureParserSettings().getFormat().getLineSeparatorString());
-    }
-
-    @Test
-    public void shouldConfigureNormalizedLineSeparator() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setNormalizedLineSeparator('n');
-
-        assertEquals(Character.valueOf('n'), dataFormat.getNormalizedLineSeparator());
-        assertEquals('n', dataFormat.createAndConfigureWriterSettings().getFormat().getNormalizedNewline());
-        assertEquals('n', dataFormat.createAndConfigureParserSettings().getFormat().getNormalizedNewline());
-    }
-
-    @Test
-    public void shouldConfigureComment() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setComment('c');
-
-        assertEquals(Character.valueOf('c'), dataFormat.getComment());
-        assertEquals('c', dataFormat.createAndConfigureWriterSettings().getFormat().getComment());
-        assertEquals('c', dataFormat.createAndConfigureParserSettings().getFormat().getComment());
-    }
-
-    @Test
-    public void shouldConfigureLazyLoad() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setLazyLoad(true);
-
-        assertTrue(dataFormat.isLazyLoad());
-    }
-
-    @Test
-    public void shouldConfigureAsMap() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setAsMap(true);
-
-        assertTrue(dataFormat.isAsMap());
-    }
-
-    @Test
-    public void shouldConfigureQuoteAllFields() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setQuoteAllFields(true);
-
-        assertTrue(dataFormat.getQuoteAllFields());
-        assertTrue(dataFormat.createAndConfigureWriterSettings().getQuoteAllFields());
-    }
-
-    @Test
-    public void shouldConfigureQuote() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setQuote('q');
-
-        assertEquals(Character.valueOf('q'), dataFormat.getQuote());
-        assertEquals('q', dataFormat.createAndConfigureWriterSettings().getFormat().getQuote());
-        assertEquals('q', dataFormat.createAndConfigureParserSettings().getFormat().getQuote());
-    }
-
-    @Test
-    public void shouldConfigureQuoteEscape() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setQuoteEscape('e');
-
-        assertEquals(Character.valueOf('e'), dataFormat.getQuoteEscape());
-        assertEquals('e', dataFormat.createAndConfigureWriterSettings().getFormat().getQuoteEscape());
-        assertEquals('e', dataFormat.createAndConfigureParserSettings().getFormat().getQuoteEscape());
-    }
-
-    @Test
-    public void shouldConfigureDelimiter() {
-        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
-                .setDelimiter('d');
-
-        assertEquals(Character.valueOf('d'), dataFormat.getDelimiter());
-        assertEquals('d', dataFormat.createAndConfigureWriterSettings().getFormat().getDelimiter());
-        assertEquals('d', dataFormat.createAndConfigureParserSettings().getFormat().getDelimiter());
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+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.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * This class tests the options of {@link org.apache.camel.dataformat.univocity.UniVocityCsvDataFormat}.
+ */
+public final class UniVocityCsvDataFormatTest {
+    @Test
+    public void shouldConfigureNullValue() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setNullValue("N/A");
+
+        assertEquals("N/A", dataFormat.getNullValue());
+        assertEquals("N/A", dataFormat.createAndConfigureWriterSettings().getNullValue());
+        assertEquals("N/A", dataFormat.createAndConfigureParserSettings().getNullValue());
+    }
+
+    @Test
+    public void shouldConfigureSkipEmptyLines() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setSkipEmptyLines(true);
+
+        assertTrue(dataFormat.getSkipEmptyLines());
+        assertTrue(dataFormat.createAndConfigureWriterSettings().getSkipEmptyLines());
+        assertTrue(dataFormat.createAndConfigureParserSettings().getSkipEmptyLines());
+    }
+
+    @Test
+    public void shouldConfigureIgnoreTrailingWhitespaces() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setIgnoreTrailingWhitespaces(true);
+
+        assertTrue(dataFormat.getIgnoreTrailingWhitespaces());
+        assertTrue(dataFormat.createAndConfigureWriterSettings().getIgnoreTrailingWhitespaces());
+        assertTrue(dataFormat.createAndConfigureParserSettings().getIgnoreTrailingWhitespaces());
+    }
+
+    @Test
+    public void shouldConfigureIgnoreLeadingWhitespaces() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setIgnoreLeadingWhitespaces(true);
+
+        assertTrue(dataFormat.getIgnoreLeadingWhitespaces());
+        assertTrue(dataFormat.createAndConfigureWriterSettings().getIgnoreLeadingWhitespaces());
+        assertTrue(dataFormat.createAndConfigureParserSettings().getIgnoreLeadingWhitespaces());
+    }
+
+    @Test
+    public void shouldConfigureHeadersDisabled() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setHeadersDisabled(true);
+
+        assertTrue(dataFormat.isHeadersDisabled());
+        assertNull(dataFormat.createAndConfigureWriterSettings().getHeaders());
+        assertNull(dataFormat.createAndConfigureParserSettings().getHeaders());
+    }
+
+    @Test
+    public void shouldConfigureHeaders() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setHeaders(new String[]{"A", "B", "C"});
+
+        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.getHeaders());
+        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.createAndConfigureWriterSettings().getHeaders());
+        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.createAndConfigureParserSettings().getHeaders());
+    }
+
+    @Test
+    public void shouldConfigureHeaderExtractionEnabled() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setHeaderExtractionEnabled(true);
+
+        assertTrue(dataFormat.getHeaderExtractionEnabled());
+        assertTrue(dataFormat.createAndConfigureParserSettings().isHeaderExtractionEnabled());
+    }
+
+    @Test
+    public void shouldConfigureNumberOfRecordsToRead() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setNumberOfRecordsToRead(42);
+
+        assertEquals(Integer.valueOf(42), dataFormat.getNumberOfRecordsToRead());
+        assertEquals(42, dataFormat.createAndConfigureParserSettings().getNumberOfRecordsToRead());
+    }
+
+    @Test
+    public void shouldConfigureEmptyValue() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setEmptyValue("empty");
+
+        assertEquals("empty", dataFormat.getEmptyValue());
+        assertEquals("empty", dataFormat.createAndConfigureWriterSettings().getEmptyValue());
+        assertEquals("empty", dataFormat.createAndConfigureParserSettings().getEmptyValue());
+    }
+
+    @Test
+    public void shouldConfigureLineSeparator() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setLineSeparator("ls");
+
+        assertEquals("ls", dataFormat.getLineSeparator());
+        assertEquals("ls", dataFormat.createAndConfigureWriterSettings().getFormat().getLineSeparatorString());
+        assertEquals("ls", dataFormat.createAndConfigureParserSettings().getFormat().getLineSeparatorString());
+    }
+
+    @Test
+    public void shouldConfigureNormalizedLineSeparator() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setNormalizedLineSeparator('n');
+
+        assertEquals(Character.valueOf('n'), dataFormat.getNormalizedLineSeparator());
+        assertEquals('n', dataFormat.createAndConfigureWriterSettings().getFormat().getNormalizedNewline());
+        assertEquals('n', dataFormat.createAndConfigureParserSettings().getFormat().getNormalizedNewline());
+    }
+
+    @Test
+    public void shouldConfigureComment() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setComment('c');
+
+        assertEquals(Character.valueOf('c'), dataFormat.getComment());
+        assertEquals('c', dataFormat.createAndConfigureWriterSettings().getFormat().getComment());
+        assertEquals('c', dataFormat.createAndConfigureParserSettings().getFormat().getComment());
+    }
+
+    @Test
+    public void shouldConfigureLazyLoad() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setLazyLoad(true);
+
+        assertTrue(dataFormat.isLazyLoad());
+    }
+
+    @Test
+    public void shouldConfigureAsMap() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setAsMap(true);
+
+        assertTrue(dataFormat.isAsMap());
+    }
+
+    @Test
+    public void shouldConfigureQuoteAllFields() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setQuoteAllFields(true);
+
+        assertTrue(dataFormat.getQuoteAllFields());
+        assertTrue(dataFormat.createAndConfigureWriterSettings().getQuoteAllFields());
+    }
+
+    @Test
+    public void shouldConfigureQuote() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setQuote('q');
+
+        assertEquals(Character.valueOf('q'), dataFormat.getQuote());
+        assertEquals('q', dataFormat.createAndConfigureWriterSettings().getFormat().getQuote());
+        assertEquals('q', dataFormat.createAndConfigureParserSettings().getFormat().getQuote());
+    }
+
+    @Test
+    public void shouldConfigureQuoteEscape() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setQuoteEscape('e');
+
+        assertEquals(Character.valueOf('e'), dataFormat.getQuoteEscape());
+        assertEquals('e', dataFormat.createAndConfigureWriterSettings().getFormat().getQuoteEscape());
+        assertEquals('e', dataFormat.createAndConfigureParserSettings().getFormat().getQuoteEscape());
+    }
+
+    @Test
+    public void shouldConfigureDelimiter() {
+        UniVocityCsvDataFormat dataFormat = new UniVocityCsvDataFormat()
+                .setDelimiter('d');
+
+        assertEquals(Character.valueOf('d'), dataFormat.getDelimiter());
+        assertEquals('d', dataFormat.createAndConfigureWriterSettings().getFormat().getDelimiter());
+        assertEquals('d', dataFormat.createAndConfigureParserSettings().getFormat().getDelimiter());
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatUnmarshalSpringTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatUnmarshalSpringTest.java
index 10b3105..20fb151 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatUnmarshalSpringTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatUnmarshalSpringTest.java
@@ -1,156 +1,156 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
-import org.junit.jupiter.api.Test;
-import org.springframework.context.support.AbstractApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
-
-/**
- * This class tests the unmarshalling of {@link org.apache.camel.dataformat.univocity.UniVocityCsvDataFormat} using the
- * Spring DSL.
- */
-public final class UniVocityCsvDataFormatUnmarshalSpringTest extends CamelSpringTestSupport {
-    @EndpointInject("mock:result")
-    MockEndpoint result;
-
-    /**
-     * Tests that we can unmarshal CSV with the default configuration.
-     */
-    @Test
-    public void shouldUnmarshalWithDefaultConfiguration() throws Exception {
-        template.sendBody("direct:default", join("A,B,C", "1,2,3", "one,two,three"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(3, body.size());
-        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
-        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
-        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
-    }
-
-    /**
-     * Tests that we can unmarshal CSV and produce maps for each row
-     */
-    @Test
-    public void shouldUnmarshalAsMap() throws Exception {
-        template.sendBody("direct:map", join("A,B,C", "1,2,3", "one,two,three"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-    }
-
-    /**
-     * Tests that we can unmarshal CSV and produce maps for each row with the given header
-     */
-    @Test
-    public void shouldUnmarshalAsMapWithHeaders() throws Exception {
-        template.sendBody("direct:mapWithHeaders", join("1,2,3", "one,two,three"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-    }
-
-    /**
-     * Tests that we can unmarshal CSV and produce an Iterator that lazily reads the input
-     */
-    @Test
-    public void shouldUnmarshalUsingIterator() throws Exception {
-        template.sendBody("direct:lazy", join("A,B,C", "1,2,3", "one,two,three"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        Iterator<?> body = assertIsInstanceOf(Iterator.class, result.getExchanges().get(0).getIn().getBody());
-
-        // Read first line
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("A", "B", "C"), body.next());
-
-        // Try to remove the element
-        try {
-            body.remove();
-            fail("Should have thrown a UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            // Success
-        }
-
-        // Read all the lines
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("1", "2", "3"), body.next());
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("one", "two", "three"), body.next());
-        assertFalse(body.hasNext());
-
-        // Try to read one more element
-        try {
-            body.next();
-            fail("Should have thrown a NoSuchElementException");
-        } catch (NoSuchElementException e) {
-            // Success
-        }
-    }
-
-    /**
-     * Tests that we can unmarshal CSV that has lots of configuration options
-     */
-    @Test
-    public void shouldUnmarshalUsingAdvancedConfiguration() throws Exception {
-        template.sendBody("direct:advanced", join("!This is comment", "!This is comment too", "A;B", "", "  ;D  "));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(Arrays.asList("A", "B"), body.get(0));
-        assertEquals(Arrays.asList("N/A", "D  "), body.get(1));
-    }
-
-    @Override
-    protected AbstractApplicationContext createApplicationContext() {
-        return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatUnmarshalSpringTest.xml");
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
+import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+/**
+ * This class tests the unmarshalling of {@link org.apache.camel.dataformat.univocity.UniVocityCsvDataFormat} using the
+ * Spring DSL.
+ */
+public final class UniVocityCsvDataFormatUnmarshalSpringTest extends CamelSpringTestSupport {
+    @EndpointInject("mock:result")
+    MockEndpoint result;
+
+    /**
+     * Tests that we can unmarshal CSV with the default configuration.
+     */
+    @Test
+    public void shouldUnmarshalWithDefaultConfiguration() throws Exception {
+        template.sendBody("direct:default", join("A,B,C", "1,2,3", "one,two,three"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(3, body.size());
+        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
+        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
+        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
+    }
+
+    /**
+     * Tests that we can unmarshal CSV and produce maps for each row
+     */
+    @Test
+    public void shouldUnmarshalAsMap() throws Exception {
+        template.sendBody("direct:map", join("A,B,C", "1,2,3", "one,two,three"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+    }
+
+    /**
+     * Tests that we can unmarshal CSV and produce maps for each row with the given header
+     */
+    @Test
+    public void shouldUnmarshalAsMapWithHeaders() throws Exception {
+        template.sendBody("direct:mapWithHeaders", join("1,2,3", "one,two,three"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+    }
+
+    /**
+     * Tests that we can unmarshal CSV and produce an Iterator that lazily reads the input
+     */
+    @Test
+    public void shouldUnmarshalUsingIterator() throws Exception {
+        template.sendBody("direct:lazy", join("A,B,C", "1,2,3", "one,two,three"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        Iterator<?> body = assertIsInstanceOf(Iterator.class, result.getExchanges().get(0).getIn().getBody());
+
+        // Read first line
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("A", "B", "C"), body.next());
+
+        // Try to remove the element
+        try {
+            body.remove();
+            fail("Should have thrown a UnsupportedOperationException");
+        } catch (UnsupportedOperationException e) {
+            // Success
+        }
+
+        // Read all the lines
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("1", "2", "3"), body.next());
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("one", "two", "three"), body.next());
+        assertFalse(body.hasNext());
+
+        // Try to read one more element
+        try {
+            body.next();
+            fail("Should have thrown a NoSuchElementException");
+        } catch (NoSuchElementException e) {
+            // Success
+        }
+    }
+
+    /**
+     * Tests that we can unmarshal CSV that has lots of configuration options
+     */
+    @Test
+    public void shouldUnmarshalUsingAdvancedConfiguration() throws Exception {
+        template.sendBody("direct:advanced", join("!This is comment", "!This is comment too", "A;B", "", "  ;D  "));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(Arrays.asList("A", "B"), body.get(0));
+        assertEquals(Arrays.asList("N/A", "D  "), body.get(1));
+    }
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatUnmarshalSpringTest.xml");
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatUnmarshalTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatUnmarshalTest.java
index 2147d93..ea1018a 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatUnmarshalTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityCsvDataFormatUnmarshalTest.java
@@ -1,197 +1,197 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spi.DataFormat;
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Test;
-
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
-
-/**
- * This class tests the unmarshalling of {@link org.apache.camel.dataformat.univocity.UniVocityCsvDataFormat} using the
- * Spring DSL.
- */
-public final class UniVocityCsvDataFormatUnmarshalTest extends CamelTestSupport {
-    @EndpointInject("mock:result")
-    MockEndpoint result;
-
-    /**
-     * Tests that we can unmarshal CSV with the default configuration.
-     */
-    @Test
-    public void shouldUnmarshalWithDefaultConfiguration() throws Exception {
-        template.sendBody("direct:default", join("A,B,C", "1,2,3", "one,two,three"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(3, body.size());
-        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
-        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
-        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
-    }
-
-    /**
-     * Tests that we can unmarshal CSV and produce maps for each row
-     */
-    @Test
-    public void shouldUnmarshalAsMap() throws Exception {
-        template.sendBody("direct:map", join("A,B,C", "1,2,3", "one,two,three"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-    }
-
-    /**
-     * Tests that we can unmarshal CSV and produce maps for each row with the given header
-     */
-    @Test
-    public void shouldUnmarshalAsMapWithHeaders() throws Exception {
-        template.sendBody("direct:mapWithHeaders", join("1,2,3", "one,two,three"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-    }
-
-    /**
-     * Tests that we can unmarshal CSV and produce an Iterator that lazily reads the input
-     */
-    @Test
-    public void shouldUnmarshalUsingIterator() throws Exception {
-        template.sendBody("direct:lazy", join("A,B,C", "1,2,3", "one,two,three"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        Iterator<?> body = assertIsInstanceOf(Iterator.class, result.getExchanges().get(0).getIn().getBody());
-
-        // Read first line
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("A", "B", "C"), body.next());
-
-        // Try to remove the element
-        try {
-            body.remove();
-            fail("Should have thrown a UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            // Success
-        }
-
-        // Read all the lines
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("1", "2", "3"), body.next());
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("one", "two", "three"), body.next());
-        assertFalse(body.hasNext());
-
-        // Try to read one more element
-        try {
-            body.next();
-            fail("Should have thrown a NoSuchElementException");
-        } catch (NoSuchElementException e) {
-            // Success
-        }
-    }
-
-    /**
-     * Tests that we can unmarshal CSV that has lots of configuration options
-     */
-    @Test
-    public void shouldUnmarshalUsingAdvancedConfiguration() throws Exception {
-        template.sendBody("direct:advanced", join("!This is comment", "!This is comment too", "A;B", "", "  ;D  "));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(Arrays.asList("A", "B"), body.get(0));
-        assertEquals(Arrays.asList("N/A", "D  "), body.get(1));
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        final Map<String, DataFormat> tests = new HashMap<>();
-
-        // Default reading of CSV
-        tests.put("default", new UniVocityCsvDataFormat());
-
-        // Reading CSV as Map
-        tests.put("map", new UniVocityCsvDataFormat()
-                        .setAsMap(true)
-                        .setHeaderExtractionEnabled(true)
-        );
-
-        // Reading CSV as Map with specific headers
-        tests.put("mapWithHeaders", new UniVocityCsvDataFormat()
-                        .setAsMap(true)
-                        .setHeaders(new String[]{"A", "B", "C"})
-        );
-
-        // Reading CSV using an iterator
-        tests.put("lazy", new UniVocityCsvDataFormat()
-                        .setLazyLoad(true)
-        );
-
-        // Reading CSV using advanced configuration
-        tests.put("advanced", new UniVocityCsvDataFormat()
-                        .setNullValue("N/A")
-                        .setDelimiter(';')
-                        .setIgnoreLeadingWhitespaces(true)
-                        .setIgnoreTrailingWhitespaces(false)
-                        .setComment('!')
-                        .setSkipEmptyLines(true)
-        );
-
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                for (Map.Entry<String, DataFormat> test : tests.entrySet()) {
-                    from("direct:" + test.getKey()).unmarshal(test.getValue()).to("mock:result");
-                }
-            }
-        };
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
+import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+/**
+ * This class tests the unmarshalling of {@link org.apache.camel.dataformat.univocity.UniVocityCsvDataFormat} using the
+ * Spring DSL.
+ */
+public final class UniVocityCsvDataFormatUnmarshalTest extends CamelTestSupport {
+    @EndpointInject("mock:result")
+    MockEndpoint result;
+
+    /**
+     * Tests that we can unmarshal CSV with the default configuration.
+     */
+    @Test
+    public void shouldUnmarshalWithDefaultConfiguration() throws Exception {
+        template.sendBody("direct:default", join("A,B,C", "1,2,3", "one,two,three"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(3, body.size());
+        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
+        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
+        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
+    }
+
+    /**
+     * Tests that we can unmarshal CSV and produce maps for each row
+     */
+    @Test
+    public void shouldUnmarshalAsMap() throws Exception {
+        template.sendBody("direct:map", join("A,B,C", "1,2,3", "one,two,three"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+    }
+
+    /**
+     * Tests that we can unmarshal CSV and produce maps for each row with the given header
+     */
+    @Test
+    public void shouldUnmarshalAsMapWithHeaders() throws Exception {
+        template.sendBody("direct:mapWithHeaders", join("1,2,3", "one,two,three"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+    }
+
+    /**
+     * Tests that we can unmarshal CSV and produce an Iterator that lazily reads the input
+     */
+    @Test
+    public void shouldUnmarshalUsingIterator() throws Exception {
+        template.sendBody("direct:lazy", join("A,B,C", "1,2,3", "one,two,three"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        Iterator<?> body = assertIsInstanceOf(Iterator.class, result.getExchanges().get(0).getIn().getBody());
+
+        // Read first line
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("A", "B", "C"), body.next());
+
+        // Try to remove the element
+        try {
+            body.remove();
+            fail("Should have thrown a UnsupportedOperationException");
+        } catch (UnsupportedOperationException e) {
+            // Success
+        }
+
+        // Read all the lines
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("1", "2", "3"), body.next());
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("one", "two", "three"), body.next());
+        assertFalse(body.hasNext());
+
+        // Try to read one more element
+        try {
+            body.next();
+            fail("Should have thrown a NoSuchElementException");
+        } catch (NoSuchElementException e) {
+            // Success
+        }
+    }
+
+    /**
+     * Tests that we can unmarshal CSV that has lots of configuration options
+     */
+    @Test
+    public void shouldUnmarshalUsingAdvancedConfiguration() throws Exception {
+        template.sendBody("direct:advanced", join("!This is comment", "!This is comment too", "A;B", "", "  ;D  "));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(Arrays.asList("A", "B"), body.get(0));
+        assertEquals(Arrays.asList("N/A", "D  "), body.get(1));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        final Map<String, DataFormat> tests = new HashMap<>();
+
+        // Default reading of CSV
+        tests.put("default", new UniVocityCsvDataFormat());
+
+        // Reading CSV as Map
+        tests.put("map", new UniVocityCsvDataFormat()
+                        .setAsMap(true)
+                        .setHeaderExtractionEnabled(true)
+        );
+
+        // Reading CSV as Map with specific headers
+        tests.put("mapWithHeaders", new UniVocityCsvDataFormat()
+                        .setAsMap(true)
+                        .setHeaders(new String[]{"A", "B", "C"})
+        );
+
+        // Reading CSV using an iterator
+        tests.put("lazy", new UniVocityCsvDataFormat()
+                        .setLazyLoad(true)
+        );
+
+        // Reading CSV using advanced configuration
+        tests.put("advanced", new UniVocityCsvDataFormat()
+                        .setNullValue("N/A")
+                        .setDelimiter(';')
+                        .setIgnoreLeadingWhitespaces(true)
+                        .setIgnoreTrailingWhitespaces(false)
+                        .setComment('!')
+                        .setSkipEmptyLines(true)
+        );
+
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                for (Map.Entry<String, DataFormat> test : tests.entrySet()) {
+                    from("direct:" + test.getKey()).unmarshal(test.getValue()).to("mock:result");
+                }
+            }
+        };
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatMarshalSpringTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatMarshalSpringTest.java
index bbd4815..450b7e9 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatMarshalSpringTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatMarshalSpringTest.java
@@ -1,127 +1,127 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
-import org.junit.jupiter.api.Test;
-import org.springframework.context.support.AbstractApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * This class tests the marshalling of {@link org.apache.camel.dataformat.univocity.UniVocityFixedWidthDataFormat} using
- * the Spring DSL.
- */
-public final class UniVocityFixedWidthDataFormatMarshalSpringTest extends CamelSpringTestSupport {
-    @EndpointInject("mock:result")
-    MockEndpoint result;
-
-    /**
-     * Tests that we can marshal fixed-width with the default configuration.
-     */
-    @Test
-    public void shouldMarshalWithDefaultConfiguration() throws Exception {
-        template.sendBody("direct:default", Arrays.asList(
-                asMap("A", "1", "B", "2", "C", "3"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1  2  3    ", "onetwothree"), body);
-    }
-
-    /**
-     * Tests that we can marshal a single line with fixed-width.
-     */
-    @Test
-    public void shouldMarshalSingleLine() throws Exception {
-        template.sendBody("direct:default", asMap("A", "1", "B", "2", "C", "3"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1  2  3    "), body);
-    }
-
-    /**
-     * Tests that the marshalling adds new columns on the fly and keep its order
-     */
-    @Test
-    public void shouldMarshalAndAddNewColumns() throws Exception {
-        template.sendBody("direct:default", Arrays.asList(
-                asMap("A", "1", "B", "2"),
-                asMap("C", "three", "A", "one", "B", "two")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1  2  ", "onetwothree"), body);
-    }
-
-    /**
-     * Tests that we can marshal fixed-width with specific headers
-     */
-    @Test
-    public void shouldMarshalWithSpecificHeaders() throws Exception {
-        template.sendBody("direct:header", Arrays.asList(
-                asMap("A", "1", "B", "2", "C", "3"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1  3    ", "onethree"), body);
-    }
-
-    /**
-     * Tests that we can marshal fixed-width using and advanced configuration
-     */
-    @Test
-    public void shouldMarshalUsingAdvancedConfiguration() throws Exception {
-        template.sendBody("direct:advanced", Arrays.asList(
-                asMap("A", null, "B", ""),
-                asMap("A", "one", "B", "two")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("N/A__empty", "one__two__"), body);
-    }
-
-    @Override
-    protected AbstractApplicationContext createApplicationContext() {
-        return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatMarshalSpringTest.xml");
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
+import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * This class tests the marshalling of {@link org.apache.camel.dataformat.univocity.UniVocityFixedWidthDataFormat} using
+ * the Spring DSL.
+ */
+public final class UniVocityFixedWidthDataFormatMarshalSpringTest extends CamelSpringTestSupport {
+    @EndpointInject("mock:result")
+    MockEndpoint result;
+
+    /**
+     * Tests that we can marshal fixed-width with the default configuration.
+     */
+    @Test
+    public void shouldMarshalWithDefaultConfiguration() throws Exception {
+        template.sendBody("direct:default", Arrays.asList(
+                asMap("A", "1", "B", "2", "C", "3"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1  2  3    ", "onetwothree"), body);
+    }
+
+    /**
+     * Tests that we can marshal a single line with fixed-width.
+     */
+    @Test
+    public void shouldMarshalSingleLine() throws Exception {
+        template.sendBody("direct:default", asMap("A", "1", "B", "2", "C", "3"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1  2  3    "), body);
+    }
+
+    /**
+     * Tests that the marshalling adds new columns on the fly and keep its order
+     */
+    @Test
+    public void shouldMarshalAndAddNewColumns() throws Exception {
+        template.sendBody("direct:default", Arrays.asList(
+                asMap("A", "1", "B", "2"),
+                asMap("C", "three", "A", "one", "B", "two")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1  2  ", "onetwothree"), body);
+    }
+
+    /**
+     * Tests that we can marshal fixed-width with specific headers
+     */
+    @Test
+    public void shouldMarshalWithSpecificHeaders() throws Exception {
+        template.sendBody("direct:header", Arrays.asList(
+                asMap("A", "1", "B", "2", "C", "3"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1  3    ", "onethree"), body);
+    }
+
+    /**
+     * Tests that we can marshal fixed-width using and advanced configuration
+     */
+    @Test
+    public void shouldMarshalUsingAdvancedConfiguration() throws Exception {
+        template.sendBody("direct:advanced", Arrays.asList(
+                asMap("A", null, "B", ""),
+                asMap("A", "one", "B", "two")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("N/A__empty", "one__two__"), body);
+    }
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatMarshalSpringTest.xml");
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatMarshalTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatMarshalTest.java
index c27921d..ec24365 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatMarshalTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatMarshalTest.java
@@ -1,156 +1,156 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-import java.util.HashMap;
-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.spi.DataFormat;
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Test;
-
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * This class tests the marshalling of {@link org.apache.camel.dataformat.univocity.UniVocityFixedWidthDataFormat}.
- */
-public final class UniVocityFixedWidthDataFormatMarshalTest extends CamelTestSupport {
-    @EndpointInject("mock:result")
-    MockEndpoint result;
-
-    /**
-     * Tests that we can marshal fixed-width with the default configuration.
-     */
-    @Test
-    public void shouldMarshalWithDefaultConfiguration() throws Exception {
-        template.sendBody("direct:default", Arrays.asList(
-                asMap("A", "1", "B", "2", "C", "3"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1  2  3    ", "onetwothree"), body);
-    }
-
-    /**
-     * Tests that we can marshal a single line with fixed-width.
-     */
-    @Test
-    public void shouldMarshalSingleLine() throws Exception {
-        template.sendBody("direct:default", asMap("A", "1", "B", "2", "C", "3"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1  2  3    "), body);
-    }
-
-    /**
-     * Tests that the marshalling adds new columns on the fly and keep its order
-     */
-    @Test
-    public void shouldMarshalAndAddNewColumns() throws Exception {
-        template.sendBody("direct:default", Arrays.asList(
-                asMap("A", "1", "B", "2"),
-                asMap("C", "three", "A", "one", "B", "two")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1  2  ", "onetwothree"), body);
-    }
-
-    /**
-     * Tests that we can marshal fixed-width with specific headers
-     */
-    @Test
-    public void shouldMarshalWithSpecificHeaders() throws Exception {
-        template.sendBody("direct:header", Arrays.asList(
-                asMap("A", "1", "B", "2", "C", "3"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1  3    ", "onethree"), body);
-    }
-
-    /**
-     * Tests that we can marshal fixed-width using and advanced configuration
-     */
-    @Test
-    public void shouldMarshalUsingAdvancedConfiguration() throws Exception {
-        template.sendBody("direct:advanced", Arrays.asList(
-                asMap("A", null, "B", ""),
-                asMap("A", "one", "B", "two")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("N/A__empty", "one__two__"), body);
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        final Map<String, DataFormat> tests = new HashMap<>();
-
-        // Default writing of fixed-width
-        tests.put("default", new UniVocityFixedWidthDataFormat()
-                        .setFieldLengths(new int[]{3, 3, 5})
-        );
-
-        // Write a fixed-width with specific headers
-        tests.put("header", new UniVocityFixedWidthDataFormat()
-                        .setFieldLengths(new int[]{3, 5})
-                        .setHeaders(new String[]{"A", "C"})
-        );
-
-        // Write a fixed-width with an advanced configuration
-        tests.put("advanced", new UniVocityFixedWidthDataFormat()
-                        .setFieldLengths(new int[]{5, 5})
-                        .setNullValue("N/A")
-                        .setEmptyValue("empty")
-                        .setPadding('_')
-        );
-
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                for (Map.Entry<String, DataFormat> test : tests.entrySet()) {
-                    from("direct:" + test.getKey()).marshal(test.getValue()).convertBodyTo(String.class).to("mock:result");
-                }
-            }
-        };
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+import java.util.HashMap;
+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.spi.DataFormat;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
+import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * This class tests the marshalling of {@link org.apache.camel.dataformat.univocity.UniVocityFixedWidthDataFormat}.
+ */
+public final class UniVocityFixedWidthDataFormatMarshalTest extends CamelTestSupport {
+    @EndpointInject("mock:result")
+    MockEndpoint result;
+
+    /**
+     * Tests that we can marshal fixed-width with the default configuration.
+     */
+    @Test
+    public void shouldMarshalWithDefaultConfiguration() throws Exception {
+        template.sendBody("direct:default", Arrays.asList(
+                asMap("A", "1", "B", "2", "C", "3"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1  2  3    ", "onetwothree"), body);
+    }
+
+    /**
+     * Tests that we can marshal a single line with fixed-width.
+     */
+    @Test
+    public void shouldMarshalSingleLine() throws Exception {
+        template.sendBody("direct:default", asMap("A", "1", "B", "2", "C", "3"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1  2  3    "), body);
+    }
+
+    /**
+     * Tests that the marshalling adds new columns on the fly and keep its order
+     */
+    @Test
+    public void shouldMarshalAndAddNewColumns() throws Exception {
+        template.sendBody("direct:default", Arrays.asList(
+                asMap("A", "1", "B", "2"),
+                asMap("C", "three", "A", "one", "B", "two")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1  2  ", "onetwothree"), body);
+    }
+
+    /**
+     * Tests that we can marshal fixed-width with specific headers
+     */
+    @Test
+    public void shouldMarshalWithSpecificHeaders() throws Exception {
+        template.sendBody("direct:header", Arrays.asList(
+                asMap("A", "1", "B", "2", "C", "3"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1  3    ", "onethree"), body);
+    }
+
+    /**
+     * Tests that we can marshal fixed-width using and advanced configuration
+     */
+    @Test
+    public void shouldMarshalUsingAdvancedConfiguration() throws Exception {
+        template.sendBody("direct:advanced", Arrays.asList(
+                asMap("A", null, "B", ""),
+                asMap("A", "one", "B", "two")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("N/A__empty", "one__two__"), body);
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        final Map<String, DataFormat> tests = new HashMap<>();
+
+        // Default writing of fixed-width
+        tests.put("default", new UniVocityFixedWidthDataFormat()
+                        .setFieldLengths(new int[]{3, 3, 5})
+        );
+
+        // Write a fixed-width with specific headers
+        tests.put("header", new UniVocityFixedWidthDataFormat()
+                        .setFieldLengths(new int[]{3, 5})
+                        .setHeaders(new String[]{"A", "C"})
+        );
+
+        // Write a fixed-width with an advanced configuration
+        tests.put("advanced", new UniVocityFixedWidthDataFormat()
+                        .setFieldLengths(new int[]{5, 5})
+                        .setNullValue("N/A")
+                        .setEmptyValue("empty")
+                        .setPadding('_')
+        );
+
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                for (Map.Entry<String, DataFormat> test : tests.entrySet()) {
+                    from("direct:" + test.getKey()).marshal(test.getValue()).convertBodyTo(String.class).to("mock:result");
+                }
+            }
+        };
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatTest.java
index 5c36a40..807c7a4 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatTest.java
@@ -1,260 +1,260 @@
-/*
- * 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.dataformat.univocity;
-
-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.assertNull;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-/**
- * This class tests the options of {@link org.apache.camel.dataformat.univocity.UniVocityFixedWidthDataFormat}.
- */
-public final class UniVocityFixedWidthDataFormatTest {
-    @Test
-    public void shouldConfigureNullValue() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setNullValue("N/A");
-
-        assertEquals("N/A", dataFormat.getNullValue());
-        assertEquals("N/A", dataFormat.createAndConfigureWriterSettings().getNullValue());
-        assertEquals("N/A", dataFormat.createAndConfigureParserSettings().getNullValue());
-    }
-
-    @Test
-    public void shouldConfigureSkipEmptyLines() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setSkipEmptyLines(true);
-
-        assertTrue(dataFormat.getSkipEmptyLines());
-        assertTrue(dataFormat.createAndConfigureWriterSettings().getSkipEmptyLines());
-        assertTrue(dataFormat.createAndConfigureParserSettings().getSkipEmptyLines());
-    }
-
-    @Test
-    public void shouldConfigureIgnoreTrailingWhitespaces() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setIgnoreTrailingWhitespaces(true);
-
-        assertTrue(dataFormat.getIgnoreTrailingWhitespaces());
-        assertTrue(dataFormat.createAndConfigureWriterSettings().getIgnoreTrailingWhitespaces());
-        assertTrue(dataFormat.createAndConfigureParserSettings().getIgnoreTrailingWhitespaces());
-    }
-
-    @Test
-    public void shouldConfigureIgnoreLeadingWhitespaces() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setIgnoreLeadingWhitespaces(true);
-
-        assertTrue(dataFormat.getIgnoreLeadingWhitespaces());
-        assertTrue(dataFormat.createAndConfigureWriterSettings().getIgnoreLeadingWhitespaces());
-        assertTrue(dataFormat.createAndConfigureParserSettings().getIgnoreLeadingWhitespaces());
-    }
-
-    @Test
-    public void shouldConfigureHeadersDisabled() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setHeadersDisabled(true);
-
-        assertTrue(dataFormat.isHeadersDisabled());
-        assertNull(dataFormat.createAndConfigureWriterSettings().getHeaders());
-        assertNull(dataFormat.createAndConfigureParserSettings().getHeaders());
-    }
-
-    @Test
-    public void shouldConfigureHeaders() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setHeaders(new String[]{"A", "B", "C"});
-
-        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.getHeaders());
-        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.createAndConfigureWriterSettings().getHeaders());
-        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.createAndConfigureParserSettings().getHeaders());
-    }
-
-    @Test
-    public void shouldConfigureHeaderExtractionEnabled() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setHeaderExtractionEnabled(true);
-
-        assertTrue(dataFormat.getHeaderExtractionEnabled());
-        assertTrue(dataFormat.createAndConfigureParserSettings().isHeaderExtractionEnabled());
-    }
-
-    @Test
-    public void shouldConfigureNumberOfRecordsToRead() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setNumberOfRecordsToRead(42);
-
-        assertEquals(Integer.valueOf(42), dataFormat.getNumberOfRecordsToRead());
-        assertEquals(42, dataFormat.createAndConfigureParserSettings().getNumberOfRecordsToRead());
-    }
-
-    @Test
-    public void shouldConfigureEmptyValue() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setEmptyValue("empty");
-
-        assertEquals("empty", dataFormat.getEmptyValue());
-        assertEquals("empty", dataFormat.createAndConfigureWriterSettings().getEmptyValue());
-    }
-
-    @Test
-    public void shouldConfigureLineSeparator() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setLineSeparator("ls");
-
-        assertEquals("ls", dataFormat.getLineSeparator());
-        assertEquals("ls", dataFormat.createAndConfigureWriterSettings().getFormat().getLineSeparatorString());
-        assertEquals("ls", dataFormat.createAndConfigureParserSettings().getFormat().getLineSeparatorString());
-    }
-
-    @Test
-    public void shouldConfigureNormalizedLineSeparator() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setNormalizedLineSeparator('n');
-
-        assertEquals(Character.valueOf('n'), dataFormat.getNormalizedLineSeparator());
-        assertEquals('n', dataFormat.createAndConfigureWriterSettings().getFormat().getNormalizedNewline());
-        assertEquals('n', dataFormat.createAndConfigureParserSettings().getFormat().getNormalizedNewline());
-    }
-
-    @Test
-    public void shouldConfigureComment() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setComment('c');
-
-        assertEquals(Character.valueOf('c'), dataFormat.getComment());
-        assertEquals('c', dataFormat.createAndConfigureWriterSettings().getFormat().getComment());
-        assertEquals('c', dataFormat.createAndConfigureParserSettings().getFormat().getComment());
-    }
-
-    @Test
-    public void shouldConfigureLazyLoad() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setLazyLoad(true);
-
-        assertTrue(dataFormat.isLazyLoad());
-    }
-
-    @Test
-    public void shouldConfigureAsMap() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setAsMap(true);
-
-        assertTrue(dataFormat.isAsMap());
-    }
-
-    @Test
-    public void shouldConfigurePadding() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setPadding('p');
-
-        assertEquals(Character.valueOf('p'), dataFormat.getPadding());
-        assertEquals('p', dataFormat.createAndConfigureWriterSettings().getFormat().getPadding());
-        assertEquals('p', dataFormat.createAndConfigureParserSettings().getFormat().getPadding());
-    }
-
-    @Test
-    public void shouldConfigureSkipTrailingCharsUntilNewline() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setSkipTrailingCharsUntilNewline(true);
-
-        assertTrue(dataFormat.getSkipTrailingCharsUntilNewline());
-        assertTrue(dataFormat.createAndConfigureParserSettings().getSkipTrailingCharsUntilNewline());
-    }
-
-    @Test
-    public void shouldConfigureRecordEndsOnNewline() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setRecordEndsOnNewline(true);
-
-        assertTrue(dataFormat.getRecordEndsOnNewline());
-        assertTrue(dataFormat.createAndConfigureParserSettings().getRecordEndsOnNewline());
-    }
-
-    @Test
-    public void shouldConfigureFieldLengthWithLengthsOnly() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3});
-
-        assertArrayEquals(new int[]{1, 2, 3}, dataFormat.getFieldLengths());
-
-        dataFormat.createAndConfigureWriterSettings();
-    }
-
-    @Test
-    public void shouldConfigureFieldLengthWithHeadersAndLengths() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setHeaders(new String[]{"A", "B", "C"});
-
-        assertArrayEquals(new int[]{1, 2, 3}, dataFormat.getFieldLengths());
-        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.getHeaders());
-
-        dataFormat.createAndConfigureWriterSettings();
-    }
-
-    @Test
-    public void shouldNotAllowNoFieldLengths() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat();
-        assertThrows(IllegalArgumentException.class, () -> dataFormat.createAndConfigureWriterSettings());
-    }
-
-    @Test
-    public void shouldNotAllowHeadersAndLengthsOfDifferentSize() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3, 4})
-                .setHeaders(new String[]{"A", "B", "C"});
-
-        assertArrayEquals(new int[]{1, 2, 3, 4}, dataFormat.getFieldLengths());
-        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.getHeaders());
-
-        assertThrows(IllegalArgumentException.class, () -> dataFormat.createAndConfigureWriterSettings());
-    }
-
-    @Test
-    public void shouldNotAllowHeadersWithSameName() {
-        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
-                .setFieldLengths(new int[]{1, 2, 3})
-                .setHeaders(new String[]{"A", "B", "A"});
-
-        assertArrayEquals(new int[]{1, 2, 3}, dataFormat.getFieldLengths());
-        assertArrayEquals(new String[]{"A", "B", "A"}, dataFormat.getHeaders());
-
-        assertThrows(IllegalArgumentException.class, () -> dataFormat.createAndConfigureWriterSettings());
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+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.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * This class tests the options of {@link org.apache.camel.dataformat.univocity.UniVocityFixedWidthDataFormat}.
+ */
+public final class UniVocityFixedWidthDataFormatTest {
+    @Test
+    public void shouldConfigureNullValue() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setNullValue("N/A");
+
+        assertEquals("N/A", dataFormat.getNullValue());
+        assertEquals("N/A", dataFormat.createAndConfigureWriterSettings().getNullValue());
+        assertEquals("N/A", dataFormat.createAndConfigureParserSettings().getNullValue());
+    }
+
+    @Test
+    public void shouldConfigureSkipEmptyLines() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setSkipEmptyLines(true);
+
+        assertTrue(dataFormat.getSkipEmptyLines());
+        assertTrue(dataFormat.createAndConfigureWriterSettings().getSkipEmptyLines());
+        assertTrue(dataFormat.createAndConfigureParserSettings().getSkipEmptyLines());
+    }
+
+    @Test
+    public void shouldConfigureIgnoreTrailingWhitespaces() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setIgnoreTrailingWhitespaces(true);
+
+        assertTrue(dataFormat.getIgnoreTrailingWhitespaces());
+        assertTrue(dataFormat.createAndConfigureWriterSettings().getIgnoreTrailingWhitespaces());
+        assertTrue(dataFormat.createAndConfigureParserSettings().getIgnoreTrailingWhitespaces());
+    }
+
+    @Test
+    public void shouldConfigureIgnoreLeadingWhitespaces() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setIgnoreLeadingWhitespaces(true);
+
+        assertTrue(dataFormat.getIgnoreLeadingWhitespaces());
+        assertTrue(dataFormat.createAndConfigureWriterSettings().getIgnoreLeadingWhitespaces());
+        assertTrue(dataFormat.createAndConfigureParserSettings().getIgnoreLeadingWhitespaces());
+    }
+
+    @Test
+    public void shouldConfigureHeadersDisabled() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setHeadersDisabled(true);
+
+        assertTrue(dataFormat.isHeadersDisabled());
+        assertNull(dataFormat.createAndConfigureWriterSettings().getHeaders());
+        assertNull(dataFormat.createAndConfigureParserSettings().getHeaders());
+    }
+
+    @Test
+    public void shouldConfigureHeaders() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setHeaders(new String[]{"A", "B", "C"});
+
+        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.getHeaders());
+        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.createAndConfigureWriterSettings().getHeaders());
+        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.createAndConfigureParserSettings().getHeaders());
+    }
+
+    @Test
+    public void shouldConfigureHeaderExtractionEnabled() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setHeaderExtractionEnabled(true);
+
+        assertTrue(dataFormat.getHeaderExtractionEnabled());
+        assertTrue(dataFormat.createAndConfigureParserSettings().isHeaderExtractionEnabled());
+    }
+
+    @Test
+    public void shouldConfigureNumberOfRecordsToRead() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setNumberOfRecordsToRead(42);
+
+        assertEquals(Integer.valueOf(42), dataFormat.getNumberOfRecordsToRead());
+        assertEquals(42, dataFormat.createAndConfigureParserSettings().getNumberOfRecordsToRead());
+    }
+
+    @Test
+    public void shouldConfigureEmptyValue() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setEmptyValue("empty");
+
+        assertEquals("empty", dataFormat.getEmptyValue());
+        assertEquals("empty", dataFormat.createAndConfigureWriterSettings().getEmptyValue());
+    }
+
+    @Test
+    public void shouldConfigureLineSeparator() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setLineSeparator("ls");
+
+        assertEquals("ls", dataFormat.getLineSeparator());
+        assertEquals("ls", dataFormat.createAndConfigureWriterSettings().getFormat().getLineSeparatorString());
+        assertEquals("ls", dataFormat.createAndConfigureParserSettings().getFormat().getLineSeparatorString());
+    }
+
+    @Test
+    public void shouldConfigureNormalizedLineSeparator() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setNormalizedLineSeparator('n');
+
+        assertEquals(Character.valueOf('n'), dataFormat.getNormalizedLineSeparator());
+        assertEquals('n', dataFormat.createAndConfigureWriterSettings().getFormat().getNormalizedNewline());
+        assertEquals('n', dataFormat.createAndConfigureParserSettings().getFormat().getNormalizedNewline());
+    }
+
+    @Test
+    public void shouldConfigureComment() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setComment('c');
+
+        assertEquals(Character.valueOf('c'), dataFormat.getComment());
+        assertEquals('c', dataFormat.createAndConfigureWriterSettings().getFormat().getComment());
+        assertEquals('c', dataFormat.createAndConfigureParserSettings().getFormat().getComment());
+    }
+
+    @Test
+    public void shouldConfigureLazyLoad() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setLazyLoad(true);
+
+        assertTrue(dataFormat.isLazyLoad());
+    }
+
+    @Test
+    public void shouldConfigureAsMap() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setAsMap(true);
+
+        assertTrue(dataFormat.isAsMap());
+    }
+
+    @Test
+    public void shouldConfigurePadding() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setPadding('p');
+
+        assertEquals(Character.valueOf('p'), dataFormat.getPadding());
+        assertEquals('p', dataFormat.createAndConfigureWriterSettings().getFormat().getPadding());
+        assertEquals('p', dataFormat.createAndConfigureParserSettings().getFormat().getPadding());
+    }
+
+    @Test
+    public void shouldConfigureSkipTrailingCharsUntilNewline() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setSkipTrailingCharsUntilNewline(true);
+
+        assertTrue(dataFormat.getSkipTrailingCharsUntilNewline());
+        assertTrue(dataFormat.createAndConfigureParserSettings().getSkipTrailingCharsUntilNewline());
+    }
+
+    @Test
+    public void shouldConfigureRecordEndsOnNewline() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setRecordEndsOnNewline(true);
+
+        assertTrue(dataFormat.getRecordEndsOnNewline());
+        assertTrue(dataFormat.createAndConfigureParserSettings().getRecordEndsOnNewline());
+    }
+
+    @Test
+    public void shouldConfigureFieldLengthWithLengthsOnly() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3});
+
+        assertArrayEquals(new int[]{1, 2, 3}, dataFormat.getFieldLengths());
+
+        dataFormat.createAndConfigureWriterSettings();
+    }
+
+    @Test
+    public void shouldConfigureFieldLengthWithHeadersAndLengths() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setHeaders(new String[]{"A", "B", "C"});
+
+        assertArrayEquals(new int[]{1, 2, 3}, dataFormat.getFieldLengths());
+        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.getHeaders());
+
+        dataFormat.createAndConfigureWriterSettings();
+    }
+
+    @Test
+    public void shouldNotAllowNoFieldLengths() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat();
+        assertThrows(IllegalArgumentException.class, () -> dataFormat.createAndConfigureWriterSettings());
+    }
+
+    @Test
+    public void shouldNotAllowHeadersAndLengthsOfDifferentSize() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3, 4})
+                .setHeaders(new String[]{"A", "B", "C"});
+
+        assertArrayEquals(new int[]{1, 2, 3, 4}, dataFormat.getFieldLengths());
+        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.getHeaders());
+
+        assertThrows(IllegalArgumentException.class, () -> dataFormat.createAndConfigureWriterSettings());
+    }
+
+    @Test
+    public void shouldNotAllowHeadersWithSameName() {
+        UniVocityFixedWidthDataFormat dataFormat = new UniVocityFixedWidthDataFormat()
+                .setFieldLengths(new int[]{1, 2, 3})
+                .setHeaders(new String[]{"A", "B", "A"});
+
+        assertArrayEquals(new int[]{1, 2, 3}, dataFormat.getFieldLengths());
+        assertArrayEquals(new String[]{"A", "B", "A"}, dataFormat.getHeaders());
+
+        assertThrows(IllegalArgumentException.class, () -> dataFormat.createAndConfigureWriterSettings());
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatUnmarshalSpringTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatUnmarshalSpringTest.java
index fefcd2f..29660c4 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatUnmarshalSpringTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatUnmarshalSpringTest.java
@@ -1,156 +1,156 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
-import org.junit.jupiter.api.Test;
-import org.springframework.context.support.AbstractApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
-
-/**
- * This class tests the unmarshalling of {@link org.apache.camel.dataformat.univocity.UniVocityFixedWidthDataFormat}
- * using the Spring DSL.
- */
-public final class UniVocityFixedWidthDataFormatUnmarshalSpringTest extends CamelSpringTestSupport {
-    @EndpointInject("mock:result")
-    MockEndpoint result;
-
-    /**
-     * Tests that we can unmarshal fixed-width with the default configuration.
-     */
-    @Test
-    public void shouldUnmarshalWithDefaultConfiguration() throws Exception {
-        template.sendBody("direct:default", join("A  B  C    ", "1  2  3    ", "onetwothree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(3, body.size());
-        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
-        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
-        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
-    }
-
-    /**
-     * Tests that we can unmarshal fixed-width and produce maps for each row
-     */
-    @Test
-    public void shouldUnmarshalAsMap() throws Exception {
-        template.sendBody("direct:map", join("A  B  C    ", "1  2  3    ", "onetwothree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-    }
-
-    /**
-     * Tests that we can unmarshal fixed-width and produce maps for each row with the given header
-     */
-    @Test
-    public void shouldUnmarshalAsMapWithHeaders() throws Exception {
-        template.sendBody("direct:mapWithHeaders", join("1  2  3    ", "onetwothree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-    }
-
-    /**
-     * Tests that we can unmarshal fixed-width and produce an Iterator that lazily reads the input
-     */
-    @Test
-    public void shouldUnmarshalUsingIterator() throws Exception {
-        template.sendBody("direct:lazy", join("A  B  C    ", "1  2  3    ", "onetwothree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        Iterator<?> body = assertIsInstanceOf(Iterator.class, result.getExchanges().get(0).getIn().getBody());
-
-        // Read first line
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("A", "B", "C"), body.next());
-
-        // Try to remove the element
-        try {
-            body.remove();
-            fail("Should have thrown a UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            // Success
-        }
-
-        // Read all the lines
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("1", "2", "3"), body.next());
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("one", "two", "three"), body.next());
-        assertFalse(body.hasNext());
-
-        // Try to read one more element
-        try {
-            body.next();
-            fail("Should have thrown a NoSuchElementException");
-        } catch (NoSuchElementException e) {
-            // Success
-        }
-    }
-
-    /**
-     * Tests that we can unmarshal fixed-width that has lots of configuration options
-     */
-    @Test
-    public void shouldUnmarshalUsingAdvancedConfiguration() throws Exception {
-        template.sendBody("direct:advanced", join("!This is comment", "!This is comment too", "A__B__", "", "___D__"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(Arrays.asList("A", "B"), body.get(0));
-        assertEquals(Arrays.asList("N/A", "D"), body.get(1));
-    }
-
-    @Override
-    protected AbstractApplicationContext createApplicationContext() {
-        return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatUnmarshalSpringTest.xml");
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
+import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+/**
+ * This class tests the unmarshalling of {@link org.apache.camel.dataformat.univocity.UniVocityFixedWidthDataFormat}
+ * using the Spring DSL.
+ */
+public final class UniVocityFixedWidthDataFormatUnmarshalSpringTest extends CamelSpringTestSupport {
+    @EndpointInject("mock:result")
+    MockEndpoint result;
+
+    /**
+     * Tests that we can unmarshal fixed-width with the default configuration.
+     */
+    @Test
+    public void shouldUnmarshalWithDefaultConfiguration() throws Exception {
+        template.sendBody("direct:default", join("A  B  C    ", "1  2  3    ", "onetwothree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(3, body.size());
+        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
+        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
+        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
+    }
+
+    /**
+     * Tests that we can unmarshal fixed-width and produce maps for each row
+     */
+    @Test
+    public void shouldUnmarshalAsMap() throws Exception {
+        template.sendBody("direct:map", join("A  B  C    ", "1  2  3    ", "onetwothree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+    }
+
+    /**
+     * Tests that we can unmarshal fixed-width and produce maps for each row with the given header
+     */
+    @Test
+    public void shouldUnmarshalAsMapWithHeaders() throws Exception {
+        template.sendBody("direct:mapWithHeaders", join("1  2  3    ", "onetwothree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+    }
+
+    /**
+     * Tests that we can unmarshal fixed-width and produce an Iterator that lazily reads the input
+     */
+    @Test
+    public void shouldUnmarshalUsingIterator() throws Exception {
+        template.sendBody("direct:lazy", join("A  B  C    ", "1  2  3    ", "onetwothree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        Iterator<?> body = assertIsInstanceOf(Iterator.class, result.getExchanges().get(0).getIn().getBody());
+
+        // Read first line
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("A", "B", "C"), body.next());
+
+        // Try to remove the element
+        try {
+            body.remove();
+            fail("Should have thrown a UnsupportedOperationException");
+        } catch (UnsupportedOperationException e) {
+            // Success
+        }
+
+        // Read all the lines
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("1", "2", "3"), body.next());
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("one", "two", "three"), body.next());
+        assertFalse(body.hasNext());
+
+        // Try to read one more element
+        try {
+            body.next();
+            fail("Should have thrown a NoSuchElementException");
+        } catch (NoSuchElementException e) {
+            // Success
+        }
+    }
+
+    /**
+     * Tests that we can unmarshal fixed-width that has lots of configuration options
+     */
+    @Test
+    public void shouldUnmarshalUsingAdvancedConfiguration() throws Exception {
+        template.sendBody("direct:advanced", join("!This is comment", "!This is comment too", "A__B__", "", "___D__"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(Arrays.asList("A", "B"), body.get(0));
+        assertEquals(Arrays.asList("N/A", "D"), body.get(1));
+    }
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatUnmarshalSpringTest.xml");
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatUnmarshalTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatUnmarshalTest.java
index f54d242..3efd34a 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatUnmarshalTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityFixedWidthDataFormatUnmarshalTest.java
@@ -1,200 +1,200 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spi.DataFormat;
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Test;
-
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
-
-/**
- * This class tests the unmarshalling of {@link org.apache.camel.dataformat.univocity.UniVocityFixedWidthDataFormat}.
- */
-public final class UniVocityFixedWidthDataFormatUnmarshalTest extends CamelTestSupport {
-    @EndpointInject("mock:result")
-    MockEndpoint result;
-
-    /**
-     * Tests that we can unmarshal fixed-width with the default configuration.
-     */
-    @Test
-    public void shouldUnmarshalWithDefaultConfiguration() throws Exception {
-        template.sendBody("direct:default", join("A  B  C    ", "1  2  3    ", "onetwothree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(3, body.size());
-        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
-        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
-        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
-    }
-
-    /**
-     * Tests that we can unmarshal fixed-width and produce maps for each row
-     */
-    @Test
-    public void shouldUnmarshalAsMap() throws Exception {
-        template.sendBody("direct:map", join("A  B  C    ", "1  2  3    ", "onetwothree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-    }
-
-    /**
-     * Tests that we can unmarshal fixed-width and produce maps for each row with the given header
-     */
-    @Test
-    public void shouldUnmarshalAsMapWithHeaders() throws Exception {
-        template.sendBody("direct:mapWithHeaders", join("1  2  3    ", "onetwothree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-    }
-
-    /**
-     * Tests that we can unmarshal fixed-width and produce an Iterator that lazily reads the input
-     */
-    @Test
-    public void shouldUnmarshalUsingIterator() throws Exception {
-        template.sendBody("direct:lazy", join("A  B  C    ", "1  2  3    ", "onetwothree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        Iterator<?> body = assertIsInstanceOf(Iterator.class, result.getExchanges().get(0).getIn().getBody());
-
-        // Read first line
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("A", "B", "C"), body.next());
-
-        // Try to remove the element
-        try {
-            body.remove();
-            fail("Should have thrown a UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            // Success
-        }
-
-        // Read all the lines
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("1", "2", "3"), body.next());
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("one", "two", "three"), body.next());
-        assertFalse(body.hasNext());
-
-        // Try to read one more element
-        try {
-            body.next();
-            fail("Should have thrown a NoSuchElementException");
-        } catch (NoSuchElementException e) {
-            // Success
-        }
-    }
-
-    /**
-     * Tests that we can unmarshal fixed-width that has lots of configuration options
-     */
-    @Test
-    public void shouldUnmarshalUsingAdvancedConfiguration() throws Exception {
-        template.sendBody("direct:advanced", join("!This is comment", "!This is comment too", "A__B__", "", "___D__"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(Arrays.asList("A", "B"), body.get(0));
-        assertEquals(Arrays.asList("N/A", "D"), body.get(1));
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        final Map<String, DataFormat> tests = new HashMap<>();
-
-        // Default reading of fixed-width
-        tests.put("default", new UniVocityFixedWidthDataFormat()
-                        .setFieldLengths(new int[]{3, 3, 5})
-        );
-
-        // Reading fixed-width as Map
-        tests.put("map", new UniVocityFixedWidthDataFormat()
-                        .setFieldLengths(new int[]{3, 3, 5})
-                        .setAsMap(true)
-                        .setHeaderExtractionEnabled(true)
-        );
-
-        // Reading fixed-width as Map with specific headers
-        tests.put("mapWithHeaders", new UniVocityFixedWidthDataFormat()
-                        .setFieldLengths(new int[]{3, 3, 5})
-                        .setAsMap(true)
-                        .setHeaders(new String[]{"A", "B", "C"})
-        );
-
-        // Reading fixed-width using an iterator
-        tests.put("lazy", new UniVocityFixedWidthDataFormat()
-                        .setFieldLengths(new int[]{3, 3, 5})
-                        .setLazyLoad(true)
-        );
-
-        // Reading fixed-width using advanced configuration
-        tests.put("advanced", new UniVocityFixedWidthDataFormat()
-                        .setFieldLengths(new int[]{3, 3})
-                        .setNullValue("N/A")
-                        .setPadding('_')
-                        .setComment('!')
-                        .setSkipEmptyLines(true)
-        );
-
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                for (Map.Entry<String, DataFormat> test : tests.entrySet()) {
-                    from("direct:" + test.getKey()).unmarshal(test.getValue()).to("mock:result");
-                }
-            }
-        };
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
+import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+/**
+ * This class tests the unmarshalling of {@link org.apache.camel.dataformat.univocity.UniVocityFixedWidthDataFormat}.
+ */
+public final class UniVocityFixedWidthDataFormatUnmarshalTest extends CamelTestSupport {
+    @EndpointInject("mock:result")
+    MockEndpoint result;
+
+    /**
+     * Tests that we can unmarshal fixed-width with the default configuration.
+     */
+    @Test
+    public void shouldUnmarshalWithDefaultConfiguration() throws Exception {
+        template.sendBody("direct:default", join("A  B  C    ", "1  2  3    ", "onetwothree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(3, body.size());
+        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
+        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
+        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
+    }
+
+    /**
+     * Tests that we can unmarshal fixed-width and produce maps for each row
+     */
+    @Test
+    public void shouldUnmarshalAsMap() throws Exception {
+        template.sendBody("direct:map", join("A  B  C    ", "1  2  3    ", "onetwothree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+    }
+
+    /**
+     * Tests that we can unmarshal fixed-width and produce maps for each row with the given header
+     */
+    @Test
+    public void shouldUnmarshalAsMapWithHeaders() throws Exception {
+        template.sendBody("direct:mapWithHeaders", join("1  2  3    ", "onetwothree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+    }
+
+    /**
+     * Tests that we can unmarshal fixed-width and produce an Iterator that lazily reads the input
+     */
+    @Test
+    public void shouldUnmarshalUsingIterator() throws Exception {
+        template.sendBody("direct:lazy", join("A  B  C    ", "1  2  3    ", "onetwothree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        Iterator<?> body = assertIsInstanceOf(Iterator.class, result.getExchanges().get(0).getIn().getBody());
+
+        // Read first line
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("A", "B", "C"), body.next());
+
+        // Try to remove the element
+        try {
+            body.remove();
+            fail("Should have thrown a UnsupportedOperationException");
+        } catch (UnsupportedOperationException e) {
+            // Success
+        }
+
+        // Read all the lines
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("1", "2", "3"), body.next());
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("one", "two", "three"), body.next());
+        assertFalse(body.hasNext());
+
+        // Try to read one more element
+        try {
+            body.next();
+            fail("Should have thrown a NoSuchElementException");
+        } catch (NoSuchElementException e) {
+            // Success
+        }
+    }
+
+    /**
+     * Tests that we can unmarshal fixed-width that has lots of configuration options
+     */
+    @Test
+    public void shouldUnmarshalUsingAdvancedConfiguration() throws Exception {
+        template.sendBody("direct:advanced", join("!This is comment", "!This is comment too", "A__B__", "", "___D__"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(Arrays.asList("A", "B"), body.get(0));
+        assertEquals(Arrays.asList("N/A", "D"), body.get(1));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        final Map<String, DataFormat> tests = new HashMap<>();
+
+        // Default reading of fixed-width
+        tests.put("default", new UniVocityFixedWidthDataFormat()
+                        .setFieldLengths(new int[]{3, 3, 5})
+        );
+
+        // Reading fixed-width as Map
+        tests.put("map", new UniVocityFixedWidthDataFormat()
+                        .setFieldLengths(new int[]{3, 3, 5})
+                        .setAsMap(true)
+                        .setHeaderExtractionEnabled(true)
+        );
+
+        // Reading fixed-width as Map with specific headers
+        tests.put("mapWithHeaders", new UniVocityFixedWidthDataFormat()
+                        .setFieldLengths(new int[]{3, 3, 5})
+                        .setAsMap(true)
+                        .setHeaders(new String[]{"A", "B", "C"})
+        );
+
+        // Reading fixed-width using an iterator
+        tests.put("lazy", new UniVocityFixedWidthDataFormat()
+                        .setFieldLengths(new int[]{3, 3, 5})
+                        .setLazyLoad(true)
+        );
+
+        // Reading fixed-width using advanced configuration
+        tests.put("advanced", new UniVocityFixedWidthDataFormat()
+                        .setFieldLengths(new int[]{3, 3})
+                        .setNullValue("N/A")
+                        .setPadding('_')
+                        .setComment('!')
+                        .setSkipEmptyLines(true)
+        );
+
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                for (Map.Entry<String, DataFormat> test : tests.entrySet()) {
+                    from("direct:" + test.getKey()).unmarshal(test.getValue()).to("mock:result");
+                }
+            }
+        };
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTestHelper.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTestHelper.java
index b3a28d3..27cdab7 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTestHelper.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTestHelper.java
@@ -1,68 +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.dataformat.univocity;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import static java.lang.System.lineSeparator;
-
-/**
- * This class provides utility methods for the unit tests
- */
-final class UniVocityTestHelper {
-
-    private UniVocityTestHelper() {
-        // Helper class
-    }
-
-    /**
-     * Creates a Map with the given key values
-     *
-     * @param keyValues the key values
-     * @return Map with the given key values
-     */
-    public static Map<String, String> asMap(String... keyValues) {
-        if (keyValues == null || keyValues.length % 2 == 1) {
-            throw new IllegalArgumentException("You must specify key values with an even number.");
-        }
-
-        Map<String, String> result = new LinkedHashMap<>(keyValues.length / 2);
-        for (int i = 0; i < keyValues.length; i += 2) {
-            result.put(keyValues[i], keyValues[i + 1]);
-        }
-        return result;
-    }
-
-    /**
-     * Joins the given lines with the platform new line.
-     *
-     * @param lines lines to join
-     * @return joined lines with the platform new line
-     */
-    public static String join(String... lines) {
-        if (lines == null || lines.length == 0) {
-            return "";
-        }
-
-        StringBuilder sb = new StringBuilder();
-        for (String line : lines) {
-            sb.append(line).append(lineSeparator());
-        }
-        return sb.toString();
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import static java.lang.System.lineSeparator;
+
+/**
+ * This class provides utility methods for the unit tests
+ */
+final class UniVocityTestHelper {
+
+    private UniVocityTestHelper() {
+        // Helper class
+    }
+
+    /**
+     * Creates a Map with the given key values
+     *
+     * @param keyValues the key values
+     * @return Map with the given key values
+     */
+    public static Map<String, String> asMap(String... keyValues) {
+        if (keyValues == null || keyValues.length % 2 == 1) {
+            throw new IllegalArgumentException("You must specify key values with an even number.");
+        }
+
+        Map<String, String> result = new LinkedHashMap<>(keyValues.length / 2);
+        for (int i = 0; i < keyValues.length; i += 2) {
+            result.put(keyValues[i], keyValues[i + 1]);
+        }
+        return result;
+    }
+
+    /**
+     * Joins the given lines with the platform new line.
+     *
+     * @param lines lines to join
+     * @return joined lines with the platform new line
+     */
+    public static String join(String... lines) {
+        if (lines == null || lines.length == 0) {
+            return "";
+        }
+
+        StringBuilder sb = new StringBuilder();
+        for (String line : lines) {
+            sb.append(line).append(lineSeparator());
+        }
+        return sb.toString();
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatMarshalSpringTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatMarshalSpringTest.java
index 846e1e9..c3da4da 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatMarshalSpringTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatMarshalSpringTest.java
@@ -1,127 +1,127 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
-import org.junit.jupiter.api.Test;
-import org.springframework.context.support.AbstractApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * This class tests the marshalling of {@link org.apache.camel.dataformat.univocity.UniVocityTsvDataFormat} using the
- * Spring DSL.
- */
-public final class UniVocityTsvDataFormatMarshalSpringTest extends CamelSpringTestSupport {
-    @EndpointInject("mock:result")
-    MockEndpoint result;
-
-    /**
-     * Tests that we can marshal TSV with the default configuration.
-     */
-    @Test
-    public void shouldMarshalWithDefaultConfiguration() throws Exception {
-        template.sendBody("direct:default", Arrays.asList(
-                asMap("A", "1", "B", "2", "C", "3"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1\t2\t3", "one\ttwo\tthree"), body);
-    }
-
-    /**
-     * Tests that we can marshal a single line with TSV.
-     */
-    @Test
-    public void shouldMarshalSingleLine() throws Exception {
-        template.sendBody("direct:default", asMap("A", "1", "B", "2", "C", "3"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1\t2\t3"), body);
-    }
-
-    /**
-     * Tests that the marshalling adds new columns on the fly and keep its order
-     */
-    @Test
-    public void shouldMarshalAndAddNewColumns() throws Exception {
-        template.sendBody("direct:default", Arrays.asList(
-                asMap("A", "1", "B", "2"),
-                asMap("C", "three", "A", "one", "B", "two")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1\t2", "one\ttwo\tthree"), body);
-    }
-
-    /**
-     * Tests that we can marshal TSV with specific headers
-     */
-    @Test
-    public void shouldMarshalWithSpecificHeaders() throws Exception {
-        template.sendBody("direct:header", Arrays.asList(
-                asMap("A", "1", "B", "2", "C", "3"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1\t3", "one\tthree"), body);
-    }
-
-    /**
-     * Tests that we can marshal TSV using and advanced configuration
-     */
-    @Test
-    public void shouldMarshalUsingAdvancedConfiguration() throws Exception {
-        template.sendBody("direct:advanced", Arrays.asList(
-                asMap("A", null, "B", "", "C", "_"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("N/A\tempty\t_", "one\ttwo\tthree"), body);
-    }
-
-    @Override
-    protected AbstractApplicationContext createApplicationContext() {
-        return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatMarshalSpringTest.xml");
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
+import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * This class tests the marshalling of {@link org.apache.camel.dataformat.univocity.UniVocityTsvDataFormat} using the
+ * Spring DSL.
+ */
+public final class UniVocityTsvDataFormatMarshalSpringTest extends CamelSpringTestSupport {
+    @EndpointInject("mock:result")
+    MockEndpoint result;
+
+    /**
+     * Tests that we can marshal TSV with the default configuration.
+     */
+    @Test
+    public void shouldMarshalWithDefaultConfiguration() throws Exception {
+        template.sendBody("direct:default", Arrays.asList(
+                asMap("A", "1", "B", "2", "C", "3"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1\t2\t3", "one\ttwo\tthree"), body);
+    }
+
+    /**
+     * Tests that we can marshal a single line with TSV.
+     */
+    @Test
+    public void shouldMarshalSingleLine() throws Exception {
+        template.sendBody("direct:default", asMap("A", "1", "B", "2", "C", "3"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1\t2\t3"), body);
+    }
+
+    /**
+     * Tests that the marshalling adds new columns on the fly and keep its order
+     */
+    @Test
+    public void shouldMarshalAndAddNewColumns() throws Exception {
+        template.sendBody("direct:default", Arrays.asList(
+                asMap("A", "1", "B", "2"),
+                asMap("C", "three", "A", "one", "B", "two")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1\t2", "one\ttwo\tthree"), body);
+    }
+
+    /**
+     * Tests that we can marshal TSV with specific headers
+     */
+    @Test
+    public void shouldMarshalWithSpecificHeaders() throws Exception {
+        template.sendBody("direct:header", Arrays.asList(
+                asMap("A", "1", "B", "2", "C", "3"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1\t3", "one\tthree"), body);
+    }
+
+    /**
+     * Tests that we can marshal TSV using and advanced configuration
+     */
+    @Test
+    public void shouldMarshalUsingAdvancedConfiguration() throws Exception {
+        template.sendBody("direct:advanced", Arrays.asList(
+                asMap("A", null, "B", "", "C", "_"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("N/A\tempty\t_", "one\ttwo\tthree"), body);
+    }
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatMarshalSpringTest.xml");
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatMarshalTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatMarshalTest.java
index 1d44cf5..722f09b 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatMarshalTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatMarshalTest.java
@@ -1,151 +1,151 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-import java.util.HashMap;
-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.spi.DataFormat;
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Test;
-
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * This class tests the marshalling of {@link org.apache.camel.dataformat.univocity.UniVocityTsvDataFormat}.
- */
-public final class UniVocityTsvDataFormatMarshalTest extends CamelTestSupport {
-    @EndpointInject("mock:result")
-    MockEndpoint result;
-
-    /**
-     * Tests that we can marshal TSV with the default configuration.
-     */
-    @Test
-    public void shouldMarshalWithDefaultConfiguration() throws Exception {
-        template.sendBody("direct:default", Arrays.asList(
-                asMap("A", "1", "B", "2", "C", "3"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1\t2\t3", "one\ttwo\tthree"), body);
-    }
-
-    /**
-     * Tests that we can marshal a single line with TSV.
-     */
-    @Test
-    public void shouldMarshalSingleLine() throws Exception {
-        template.sendBody("direct:default", asMap("A", "1", "B", "2", "C", "3"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1\t2\t3"), body);
-    }
-
-    /**
-     * Tests that the marshalling adds new columns on the fly and keep its order
-     */
-    @Test
-    public void shouldMarshalAndAddNewColumns() throws Exception {
-        template.sendBody("direct:default", Arrays.asList(
-                asMap("A", "1", "B", "2"),
-                asMap("C", "three", "A", "one", "B", "two")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1\t2", "one\ttwo\tthree"), body);
-    }
-
-    /**
-     * Tests that we can marshal TSV with specific headers
-     */
-    @Test
-    public void shouldMarshalWithSpecificHeaders() throws Exception {
-        template.sendBody("direct:header", Arrays.asList(
-                asMap("A", "1", "B", "2", "C", "3"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("1\t3", "one\tthree"), body);
-    }
-
-    /**
-     * Tests that we can marshal TSV using and advanced configuration
-     */
-    @Test
-    public void shouldMarshalUsingAdvancedConfiguration() throws Exception {
-        template.sendBody("direct:advanced", Arrays.asList(
-                asMap("A", null, "B", "", "C", "_"),
-                asMap("A", "one", "B", "two", "C", "three")
-        ));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(join("N/A\tempty\t_", "one\ttwo\tthree"), body);
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        final Map<String, DataFormat> tests = new HashMap<>();
-
-        // Default writing of TSV
-        tests.put("default", new UniVocityTsvDataFormat());
-
-        // Write a TSV with specific headers
-        tests.put("header", new UniVocityTsvDataFormat()
-                        .setHeaders(new String[]{"A", "C"})
-        );
-
-        // Write a TSV with an advanced configuration
-        tests.put("advanced", new UniVocityTsvDataFormat()
-                        .setNullValue("N/A")
-                        .setEmptyValue("empty")
-        );
-
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                for (Map.Entry<String, DataFormat> test : tests.entrySet()) {
-                    from("direct:" + test.getKey()).marshal(test.getValue()).convertBodyTo(String.class).to("mock:result");
-                }
-            }
-        };
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+import java.util.HashMap;
+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.spi.DataFormat;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
+import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * This class tests the marshalling of {@link org.apache.camel.dataformat.univocity.UniVocityTsvDataFormat}.
+ */
+public final class UniVocityTsvDataFormatMarshalTest extends CamelTestSupport {
+    @EndpointInject("mock:result")
+    MockEndpoint result;
+
+    /**
+     * Tests that we can marshal TSV with the default configuration.
+     */
+    @Test
+    public void shouldMarshalWithDefaultConfiguration() throws Exception {
+        template.sendBody("direct:default", Arrays.asList(
+                asMap("A", "1", "B", "2", "C", "3"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1\t2\t3", "one\ttwo\tthree"), body);
+    }
+
+    /**
+     * Tests that we can marshal a single line with TSV.
+     */
+    @Test
+    public void shouldMarshalSingleLine() throws Exception {
+        template.sendBody("direct:default", asMap("A", "1", "B", "2", "C", "3"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1\t2\t3"), body);
+    }
+
+    /**
+     * Tests that the marshalling adds new columns on the fly and keep its order
+     */
+    @Test
+    public void shouldMarshalAndAddNewColumns() throws Exception {
+        template.sendBody("direct:default", Arrays.asList(
+                asMap("A", "1", "B", "2"),
+                asMap("C", "three", "A", "one", "B", "two")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1\t2", "one\ttwo\tthree"), body);
+    }
+
+    /**
+     * Tests that we can marshal TSV with specific headers
+     */
+    @Test
+    public void shouldMarshalWithSpecificHeaders() throws Exception {
+        template.sendBody("direct:header", Arrays.asList(
+                asMap("A", "1", "B", "2", "C", "3"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("1\t3", "one\tthree"), body);
+    }
+
+    /**
+     * Tests that we can marshal TSV using and advanced configuration
+     */
+    @Test
+    public void shouldMarshalUsingAdvancedConfiguration() throws Exception {
+        template.sendBody("direct:advanced", Arrays.asList(
+                asMap("A", null, "B", "", "C", "_"),
+                asMap("A", "one", "B", "two", "C", "three")
+        ));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        String body = assertIsInstanceOf(String.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(join("N/A\tempty\t_", "one\ttwo\tthree"), body);
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        final Map<String, DataFormat> tests = new HashMap<>();
+
+        // Default writing of TSV
+        tests.put("default", new UniVocityTsvDataFormat());
+
+        // Write a TSV with specific headers
+        tests.put("header", new UniVocityTsvDataFormat()
+                        .setHeaders(new String[]{"A", "C"})
+        );
+
+        // Write a TSV with an advanced configuration
+        tests.put("advanced", new UniVocityTsvDataFormat()
+                        .setNullValue("N/A")
+                        .setEmptyValue("empty")
+        );
+
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                for (Map.Entry<String, DataFormat> test : tests.entrySet()) {
+                    from("direct:" + test.getKey()).marshal(test.getValue()).convertBodyTo(String.class).to("mock:result");
+                }
+            }
+        };
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatTest.java
index d1b8f3b..4cd7ff1 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatTest.java
@@ -1,172 +1,172 @@
-/*
- * 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.dataformat.univocity;
-
-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.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-/**
- * This class tests the options of {@link org.apache.camel.dataformat.univocity.UniVocityTsvDataFormat}.
- */
-public final class UniVocityTsvDataFormatTest {
-    @Test
-    public void shouldConfigureNullValue() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setNullValue("N/A");
-
-        assertEquals("N/A", dataFormat.getNullValue());
-        assertEquals("N/A", dataFormat.createAndConfigureWriterSettings().getNullValue());
-        assertEquals("N/A", dataFormat.createAndConfigureParserSettings().getNullValue());
-    }
-
-    @Test
-    public void shouldConfigureSkipEmptyLines() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setSkipEmptyLines(true);
-
-        assertTrue(dataFormat.getSkipEmptyLines());
-        assertTrue(dataFormat.createAndConfigureWriterSettings().getSkipEmptyLines());
-        assertTrue(dataFormat.createAndConfigureParserSettings().getSkipEmptyLines());
-    }
-
-    @Test
-    public void shouldConfigureIgnoreTrailingWhitespaces() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setIgnoreTrailingWhitespaces(true);
-
-        assertTrue(dataFormat.getIgnoreTrailingWhitespaces());
-        assertTrue(dataFormat.createAndConfigureWriterSettings().getIgnoreTrailingWhitespaces());
-        assertTrue(dataFormat.createAndConfigureParserSettings().getIgnoreTrailingWhitespaces());
-    }
-
-    @Test
-    public void shouldConfigureIgnoreLeadingWhitespaces() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setIgnoreLeadingWhitespaces(true);
-
-        assertTrue(dataFormat.getIgnoreLeadingWhitespaces());
-        assertTrue(dataFormat.createAndConfigureWriterSettings().getIgnoreLeadingWhitespaces());
-        assertTrue(dataFormat.createAndConfigureParserSettings().getIgnoreLeadingWhitespaces());
-    }
-
-    @Test
-    public void shouldConfigureHeadersDisabled() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setHeadersDisabled(true);
-
-        assertTrue(dataFormat.isHeadersDisabled());
-        assertNull(dataFormat.createAndConfigureWriterSettings().getHeaders());
-        assertNull(dataFormat.createAndConfigureParserSettings().getHeaders());
-    }
-
-    @Test
-    public void shouldConfigureHeaders() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setHeaders(new String[]{"A", "B", "C"});
-
-        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.getHeaders());
-        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.createAndConfigureWriterSettings().getHeaders());
-        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.createAndConfigureParserSettings().getHeaders());
-    }
-
-    @Test
-    public void shouldConfigureHeaderExtractionEnabled() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setHeaderExtractionEnabled(true);
-
-        assertTrue(dataFormat.getHeaderExtractionEnabled());
-        assertTrue(dataFormat.createAndConfigureParserSettings().isHeaderExtractionEnabled());
-    }
-
-    @Test
-    public void shouldConfigureNumberOfRecordsToRead() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setNumberOfRecordsToRead(42);
-
-        assertEquals(Integer.valueOf(42), dataFormat.getNumberOfRecordsToRead());
-        assertEquals(42, dataFormat.createAndConfigureParserSettings().getNumberOfRecordsToRead());
-    }
-
-    @Test
-    public void shouldConfigureEmptyValue() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setEmptyValue("empty");
-
-        assertEquals("empty", dataFormat.getEmptyValue());
-        assertEquals("empty", dataFormat.createAndConfigureWriterSettings().getEmptyValue());
-    }
-
-    @Test
-    public void shouldConfigureLineSeparator() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setLineSeparator("ls");
-
-        assertEquals("ls", dataFormat.getLineSeparator());
-        assertEquals("ls", dataFormat.createAndConfigureWriterSettings().getFormat().getLineSeparatorString());
-        assertEquals("ls", dataFormat.createAndConfigureParserSettings().getFormat().getLineSeparatorString());
-    }
-
-    @Test
-    public void shouldConfigureNormalizedLineSeparator() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setNormalizedLineSeparator('n');
-
-        assertEquals(Character.valueOf('n'), dataFormat.getNormalizedLineSeparator());
-        assertEquals('n', dataFormat.createAndConfigureWriterSettings().getFormat().getNormalizedNewline());
-        assertEquals('n', dataFormat.createAndConfigureParserSettings().getFormat().getNormalizedNewline());
-    }
-
-    @Test
-    public void shouldConfigureComment() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setComment('c');
-
-        assertEquals(Character.valueOf('c'), dataFormat.getComment());
-        assertEquals('c', dataFormat.createAndConfigureWriterSettings().getFormat().getComment());
-        assertEquals('c', dataFormat.createAndConfigureParserSettings().getFormat().getComment());
-    }
-
-    @Test
-    public void shouldConfigureLazyLoad() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setLazyLoad(true);
-
-        assertTrue(dataFormat.isLazyLoad());
-    }
-
-    @Test
-    public void shouldConfigureAsMap() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setAsMap(true);
-
-        assertTrue(dataFormat.isAsMap());
-    }
-
-    @Test
-    public void shouldConfigureEscapeChar() {
-        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
-                .setEscapeChar('e');
-
-        assertEquals(Character.valueOf('e'), dataFormat.getEscapeChar());
-        assertEquals('e', dataFormat.createAndConfigureWriterSettings().getFormat().getEscapeChar());
-        assertEquals('e', dataFormat.createAndConfigureParserSettings().getFormat().getEscapeChar());
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+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.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * This class tests the options of {@link org.apache.camel.dataformat.univocity.UniVocityTsvDataFormat}.
+ */
+public final class UniVocityTsvDataFormatTest {
+    @Test
+    public void shouldConfigureNullValue() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setNullValue("N/A");
+
+        assertEquals("N/A", dataFormat.getNullValue());
+        assertEquals("N/A", dataFormat.createAndConfigureWriterSettings().getNullValue());
+        assertEquals("N/A", dataFormat.createAndConfigureParserSettings().getNullValue());
+    }
+
+    @Test
+    public void shouldConfigureSkipEmptyLines() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setSkipEmptyLines(true);
+
+        assertTrue(dataFormat.getSkipEmptyLines());
+        assertTrue(dataFormat.createAndConfigureWriterSettings().getSkipEmptyLines());
+        assertTrue(dataFormat.createAndConfigureParserSettings().getSkipEmptyLines());
+    }
+
+    @Test
+    public void shouldConfigureIgnoreTrailingWhitespaces() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setIgnoreTrailingWhitespaces(true);
+
+        assertTrue(dataFormat.getIgnoreTrailingWhitespaces());
+        assertTrue(dataFormat.createAndConfigureWriterSettings().getIgnoreTrailingWhitespaces());
+        assertTrue(dataFormat.createAndConfigureParserSettings().getIgnoreTrailingWhitespaces());
+    }
+
+    @Test
+    public void shouldConfigureIgnoreLeadingWhitespaces() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setIgnoreLeadingWhitespaces(true);
+
+        assertTrue(dataFormat.getIgnoreLeadingWhitespaces());
+        assertTrue(dataFormat.createAndConfigureWriterSettings().getIgnoreLeadingWhitespaces());
+        assertTrue(dataFormat.createAndConfigureParserSettings().getIgnoreLeadingWhitespaces());
+    }
+
+    @Test
+    public void shouldConfigureHeadersDisabled() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setHeadersDisabled(true);
+
+        assertTrue(dataFormat.isHeadersDisabled());
+        assertNull(dataFormat.createAndConfigureWriterSettings().getHeaders());
+        assertNull(dataFormat.createAndConfigureParserSettings().getHeaders());
+    }
+
+    @Test
+    public void shouldConfigureHeaders() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setHeaders(new String[]{"A", "B", "C"});
+
+        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.getHeaders());
+        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.createAndConfigureWriterSettings().getHeaders());
+        assertArrayEquals(new String[]{"A", "B", "C"}, dataFormat.createAndConfigureParserSettings().getHeaders());
+    }
+
+    @Test
+    public void shouldConfigureHeaderExtractionEnabled() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setHeaderExtractionEnabled(true);
+
+        assertTrue(dataFormat.getHeaderExtractionEnabled());
+        assertTrue(dataFormat.createAndConfigureParserSettings().isHeaderExtractionEnabled());
+    }
+
+    @Test
+    public void shouldConfigureNumberOfRecordsToRead() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setNumberOfRecordsToRead(42);
+
+        assertEquals(Integer.valueOf(42), dataFormat.getNumberOfRecordsToRead());
+        assertEquals(42, dataFormat.createAndConfigureParserSettings().getNumberOfRecordsToRead());
+    }
+
+    @Test
+    public void shouldConfigureEmptyValue() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setEmptyValue("empty");
+
+        assertEquals("empty", dataFormat.getEmptyValue());
+        assertEquals("empty", dataFormat.createAndConfigureWriterSettings().getEmptyValue());
+    }
+
+    @Test
+    public void shouldConfigureLineSeparator() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setLineSeparator("ls");
+
+        assertEquals("ls", dataFormat.getLineSeparator());
+        assertEquals("ls", dataFormat.createAndConfigureWriterSettings().getFormat().getLineSeparatorString());
+        assertEquals("ls", dataFormat.createAndConfigureParserSettings().getFormat().getLineSeparatorString());
+    }
+
+    @Test
+    public void shouldConfigureNormalizedLineSeparator() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setNormalizedLineSeparator('n');
+
+        assertEquals(Character.valueOf('n'), dataFormat.getNormalizedLineSeparator());
+        assertEquals('n', dataFormat.createAndConfigureWriterSettings().getFormat().getNormalizedNewline());
+        assertEquals('n', dataFormat.createAndConfigureParserSettings().getFormat().getNormalizedNewline());
+    }
+
+    @Test
+    public void shouldConfigureComment() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setComment('c');
+
+        assertEquals(Character.valueOf('c'), dataFormat.getComment());
+        assertEquals('c', dataFormat.createAndConfigureWriterSettings().getFormat().getComment());
+        assertEquals('c', dataFormat.createAndConfigureParserSettings().getFormat().getComment());
+    }
+
+    @Test
+    public void shouldConfigureLazyLoad() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setLazyLoad(true);
+
+        assertTrue(dataFormat.isLazyLoad());
+    }
+
+    @Test
+    public void shouldConfigureAsMap() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setAsMap(true);
+
+        assertTrue(dataFormat.isAsMap());
+    }
+
+    @Test
+    public void shouldConfigureEscapeChar() {
+        UniVocityTsvDataFormat dataFormat = new UniVocityTsvDataFormat()
+                .setEscapeChar('e');
+
+        assertEquals(Character.valueOf('e'), dataFormat.getEscapeChar());
+        assertEquals('e', dataFormat.createAndConfigureWriterSettings().getFormat().getEscapeChar());
+        assertEquals('e', dataFormat.createAndConfigureParserSettings().getFormat().getEscapeChar());
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatUnmarshalSpringTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatUnmarshalSpringTest.java
index f009421..3d591ba 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatUnmarshalSpringTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatUnmarshalSpringTest.java
@@ -1,156 +1,156 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
-import org.junit.jupiter.api.Test;
-import org.springframework.context.support.AbstractApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
-
-/**
- * This class tests the unmarshalling of {@link org.apache.camel.dataformat.univocity.UniVocityTsvDataFormat} using the
- * Spring DSL.
- */
-public final class UniVocityTsvDataFormatUnmarshalSpringTest extends CamelSpringTestSupport {
-    @EndpointInject("mock:result")
-    MockEndpoint result;
-
-    /**
-     * Tests that we can unmarshal TSV with the default configuration.
-     */
-    @Test
-    public void shouldUnmarshalWithDefaultConfiguration() throws Exception {
-        template.sendBody("direct:default", join("A\tB\tC", "1\t2\t3", "one\ttwo\tthree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(3, body.size());
-        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
-        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
-        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
-    }
-
-    /**
-     * Tests that we can unmarshal TSV and produce maps for each row
-     */
-    @Test
-    public void shouldUnmarshalAsMap() throws Exception {
-        template.sendBody("direct:map", join("A\tB\tC", "1\t2\t3", "one\ttwo\tthree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-    }
-
-    /**
-     * Tests that we can unmarshal TSV and produce maps for each row with the given header
-     */
-    @Test
-    public void shouldUnmarshalAsMapWithHeaders() throws Exception {
-        template.sendBody("direct:mapWithHeaders", join("1\t2\t3", "one\ttwo\tthree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-    }
-
-    /**
-     * Tests that we can unmarshal TSV and produce an Iterator that lazily reads the input
-     */
-    @Test
-    public void shouldUnmarshalUsingIterator() throws Exception {
-        template.sendBody("direct:lazy", join("A\tB\tC", "1\t2\t3", "one\ttwo\tthree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        Iterator<?> body = assertIsInstanceOf(Iterator.class, result.getExchanges().get(0).getIn().getBody());
-
-        // Read first line
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("A", "B", "C"), body.next());
-
-        // Try to remove the element
-        try {
-            body.remove();
-            fail("Should have thrown a UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            // Success
-        }
-
-        // Read all the lines
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("1", "2", "3"), body.next());
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("one", "two", "three"), body.next());
-        assertFalse(body.hasNext());
-
-        // Try to read one more element
-        try {
-            body.next();
-            fail("Should have thrown a NoSuchElementException");
-        } catch (NoSuchElementException e) {
-            // Success
-        }
-    }
-
-    /**
-     * Tests that we can unmarshal TSV that has lots of configuration options
-     */
-    @Test
-    public void shouldUnmarshalUsingAdvancedConfiguration() throws Exception {
-        template.sendBody("direct:advanced", join("!This is comment", "!This is comment too", "A\tB", "", "  \tD  "));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(Arrays.asList("A", "B"), body.get(0));
-        assertEquals(Arrays.asList("N/A", "D  "), body.get(1));
-    }
-
-    @Override
-    protected AbstractApplicationContext createApplicationContext() {
-        return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatUnmarshalSpringTest.xml");
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
+import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+/**
+ * This class tests the unmarshalling of {@link org.apache.camel.dataformat.univocity.UniVocityTsvDataFormat} using the
+ * Spring DSL.
+ */
+public final class UniVocityTsvDataFormatUnmarshalSpringTest extends CamelSpringTestSupport {
+    @EndpointInject("mock:result")
+    MockEndpoint result;
+
+    /**
+     * Tests that we can unmarshal TSV with the default configuration.
+     */
+    @Test
+    public void shouldUnmarshalWithDefaultConfiguration() throws Exception {
+        template.sendBody("direct:default", join("A\tB\tC", "1\t2\t3", "one\ttwo\tthree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(3, body.size());
+        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
+        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
+        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
+    }
+
+    /**
+     * Tests that we can unmarshal TSV and produce maps for each row
+     */
+    @Test
+    public void shouldUnmarshalAsMap() throws Exception {
+        template.sendBody("direct:map", join("A\tB\tC", "1\t2\t3", "one\ttwo\tthree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+    }
+
+    /**
+     * Tests that we can unmarshal TSV and produce maps for each row with the given header
+     */
+    @Test
+    public void shouldUnmarshalAsMapWithHeaders() throws Exception {
+        template.sendBody("direct:mapWithHeaders", join("1\t2\t3", "one\ttwo\tthree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+    }
+
+    /**
+     * Tests that we can unmarshal TSV and produce an Iterator that lazily reads the input
+     */
+    @Test
+    public void shouldUnmarshalUsingIterator() throws Exception {
+        template.sendBody("direct:lazy", join("A\tB\tC", "1\t2\t3", "one\ttwo\tthree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        Iterator<?> body = assertIsInstanceOf(Iterator.class, result.getExchanges().get(0).getIn().getBody());
+
+        // Read first line
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("A", "B", "C"), body.next());
+
+        // Try to remove the element
+        try {
+            body.remove();
+            fail("Should have thrown a UnsupportedOperationException");
+        } catch (UnsupportedOperationException e) {
+            // Success
+        }
+
+        // Read all the lines
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("1", "2", "3"), body.next());
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("one", "two", "three"), body.next());
+        assertFalse(body.hasNext());
+
+        // Try to read one more element
+        try {
+            body.next();
+            fail("Should have thrown a NoSuchElementException");
+        } catch (NoSuchElementException e) {
+            // Success
+        }
+    }
+
+    /**
+     * Tests that we can unmarshal TSV that has lots of configuration options
+     */
+    @Test
+    public void shouldUnmarshalUsingAdvancedConfiguration() throws Exception {
+        template.sendBody("direct:advanced", join("!This is comment", "!This is comment too", "A\tB", "", "  \tD  "));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(Arrays.asList("A", "B"), body.get(0));
+        assertEquals(Arrays.asList("N/A", "D  "), body.get(1));
+    }
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatUnmarshalSpringTest.xml");
+    }
+}
diff --git a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatUnmarshalTest.java b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatUnmarshalTest.java
index 5d27aa1..fe6fd3e 100644
--- a/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatUnmarshalTest.java
+++ b/components/camel-univocity-parsers/src/test/java/org/apache/camel/dataformat/univocity/UniVocityTsvDataFormatUnmarshalTest.java
@@ -1,195 +1,195 @@
-/*
- * 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.dataformat.univocity;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spi.DataFormat;
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Test;
-
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
-import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
-import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
-
-/**
- * This class tests the unmarshalling of {@link org.apache.camel.dataformat.univocity.UniVocityTsvDataFormat}.
- */
-public final class UniVocityTsvDataFormatUnmarshalTest extends CamelTestSupport {
-    @EndpointInject("mock:result")
-    MockEndpoint result;
-
-    /**
-     * Tests that we can unmarshal TSV with the default configuration.
-     */
-    @Test
-    public void shouldUnmarshalWithDefaultConfiguration() throws Exception {
-        template.sendBody("direct:default", join("A\tB\tC", "1\t2\t3", "one\ttwo\tthree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(3, body.size());
-        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
-        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
-        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
-    }
-
-    /**
-     * Tests that we can unmarshal TSV and produce maps for each row
-     */
-    @Test
-    public void shouldUnmarshalAsMap() throws Exception {
-        template.sendBody("direct:map", join("A\tB\tC", "1\t2\t3", "one\ttwo\tthree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-    }
-
-    /**
-     * Tests that we can unmarshal TSV and produce maps for each row with the given header
-     */
-    @Test
-    public void shouldUnmarshalAsMapWithHeaders() throws Exception {
-        template.sendBody("direct:mapWithHeaders", join("1\t2\t3", "one\ttwo\tthree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
-        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
-    }
-
-    /**
-     * Tests that we can unmarshal TSV and produce an Iterator that lazily reads the input
-     */
-    @Test
-    public void shouldUnmarshalUsingIterator() throws Exception {
-        template.sendBody("direct:lazy", join("A\tB\tC", "1\t2\t3", "one\ttwo\tthree"));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        Iterator<?> body = assertIsInstanceOf(Iterator.class, result.getExchanges().get(0).getIn().getBody());
-
-        // Read first line
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("A", "B", "C"), body.next());
-
-        // Try to remove the element
-        try {
-            body.remove();
-            fail("Should have thrown a UnsupportedOperationException");
-        } catch (UnsupportedOperationException e) {
-            // Success
-        }
-
-        // Read all the lines
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("1", "2", "3"), body.next());
-        assertTrue(body.hasNext());
-        assertEquals(Arrays.asList("one", "two", "three"), body.next());
-        assertFalse(body.hasNext());
-
-        // Try to read one more element
-        try {
-            body.next();
-            fail("Should have thrown a NoSuchElementException");
-        } catch (NoSuchElementException e) {
-            // Success
-        }
-    }
-
-    /**
-     * Tests that we can unmarshal TSV that has lots of configuration options
-     */
-    @Test
-    public void shouldUnmarshalUsingAdvancedConfiguration() throws Exception {
-        template.sendBody("direct:advanced", join("!This is comment", "!This is comment too", "A\tB", "", "  \tD  "));
-
-        result.expectedMessageCount(1);
-        result.assertIsSatisfied();
-
-        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
-        assertEquals(2, body.size());
-        assertEquals(Arrays.asList("A", "B"), body.get(0));
-        assertEquals(Arrays.asList("N/A", "D  "), body.get(1));
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        final Map<String, DataFormat> tests = new HashMap<>();
-
-        // Default reading of TSV
-        tests.put("default", new UniVocityTsvDataFormat());
-
-        // Reading TSV as Map
-        tests.put("map", new UniVocityTsvDataFormat()
-                        .setAsMap(true)
-                        .setHeaderExtractionEnabled(true)
-        );
-
-        // Reading TSV as Map with specific headers
-        tests.put("mapWithHeaders", new UniVocityTsvDataFormat()
-                        .setAsMap(true)
-                        .setHeaders(new String[]{"A", "B", "C"})
-        );
-
-        // Reading TSV using an iterator
-        tests.put("lazy", new UniVocityTsvDataFormat()
-                        .setLazyLoad(true)
-        );
-
-        // Reading TSV using advanced configuration
-        tests.put("advanced", new UniVocityTsvDataFormat()
-                        .setNullValue("N/A")
-                        .setIgnoreLeadingWhitespaces(true)
-                        .setIgnoreTrailingWhitespaces(false)
-                        .setComment('!')
-                        .setSkipEmptyLines(true)
-        );
-
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                for (Map.Entry<String, DataFormat> test : tests.entrySet()) {
-                    from("direct:" + test.getKey()).unmarshal(test.getValue()).to("mock:result");
-                }
-            }
-        };
-    }
-}
+/*
+ * 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.dataformat.univocity;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.asMap;
+import static org.apache.camel.dataformat.univocity.UniVocityTestHelper.join;
+import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+/**
+ * This class tests the unmarshalling of {@link org.apache.camel.dataformat.univocity.UniVocityTsvDataFormat}.
+ */
+public final class UniVocityTsvDataFormatUnmarshalTest extends CamelTestSupport {
+    @EndpointInject("mock:result")
+    MockEndpoint result;
+
+    /**
+     * Tests that we can unmarshal TSV with the default configuration.
+     */
+    @Test
+    public void shouldUnmarshalWithDefaultConfiguration() throws Exception {
+        template.sendBody("direct:default", join("A\tB\tC", "1\t2\t3", "one\ttwo\tthree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(3, body.size());
+        assertEquals(Arrays.asList("A", "B", "C"), body.get(0));
+        assertEquals(Arrays.asList("1", "2", "3"), body.get(1));
+        assertEquals(Arrays.asList("one", "two", "three"), body.get(2));
+    }
+
+    /**
+     * Tests that we can unmarshal TSV and produce maps for each row
+     */
+    @Test
+    public void shouldUnmarshalAsMap() throws Exception {
+        template.sendBody("direct:map", join("A\tB\tC", "1\t2\t3", "one\ttwo\tthree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+    }
+
+    /**
+     * Tests that we can unmarshal TSV and produce maps for each row with the given header
+     */
+    @Test
+    public void shouldUnmarshalAsMapWithHeaders() throws Exception {
+        template.sendBody("direct:mapWithHeaders", join("1\t2\t3", "one\ttwo\tthree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(asMap("A", "1", "B", "2", "C", "3"), body.get(0));
+        assertEquals(asMap("A", "one", "B", "two", "C", "three"), body.get(1));
+    }
+
+    /**
+     * Tests that we can unmarshal TSV and produce an Iterator that lazily reads the input
+     */
+    @Test
+    public void shouldUnmarshalUsingIterator() throws Exception {
+        template.sendBody("direct:lazy", join("A\tB\tC", "1\t2\t3", "one\ttwo\tthree"));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        Iterator<?> body = assertIsInstanceOf(Iterator.class, result.getExchanges().get(0).getIn().getBody());
+
+        // Read first line
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("A", "B", "C"), body.next());
+
+        // Try to remove the element
+        try {
+            body.remove();
+            fail("Should have thrown a UnsupportedOperationException");
+        } catch (UnsupportedOperationException e) {
+            // Success
+        }
+
+        // Read all the lines
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("1", "2", "3"), body.next());
+        assertTrue(body.hasNext());
+        assertEquals(Arrays.asList("one", "two", "three"), body.next());
+        assertFalse(body.hasNext());
+
+        // Try to read one more element
+        try {
+            body.next();
+            fail("Should have thrown a NoSuchElementException");
+        } catch (NoSuchElementException e) {
+            // Success
+        }
+    }
+
+    /**
+     * Tests that we can unmarshal TSV that has lots of configuration options
+     */
+    @Test
+    public void shouldUnmarshalUsingAdvancedConfiguration() throws Exception {
+        template.sendBody("direct:advanced", join("!This is comment", "!This is comment too", "A\tB", "", "  \tD  "));
+
+        result.expectedMessageCount(1);
+        result.assertIsSatisfied();
+
+        List<?> body = assertIsInstanceOf(List.class, result.getExchanges().get(0).getIn().getBody());
+        assertEquals(2, body.size());
+        assertEquals(Arrays.asList("A", "B"), body.get(0));
+        assertEquals(Arrays.asList("N/A", "D  "), body.get(1));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        final Map<String, DataFormat> tests = new HashMap<>();
+
+        // Default reading of TSV
+        tests.put("default", new UniVocityTsvDataFormat());
+
+        // Reading TSV as Map
+        tests.put("map", new UniVocityTsvDataFormat()
+                        .setAsMap(true)
+                        .setHeaderExtractionEnabled(true)
+        );
+
+        // Reading TSV as Map with specific headers
+        tests.put("mapWithHeaders", new UniVocityTsvDataFormat()
+                        .setAsMap(true)
+                        .setHeaders(new String[]{"A", "B", "C"})
+        );
+
+        // Reading TSV using an iterator
+        tests.put("lazy", new UniVocityTsvDataFormat()
+                        .setLazyLoad(true)
+        );
+
+        // Reading TSV using advanced configuration
+        tests.put("advanced", new UniVocityTsvDataFormat()
+                        .setNullValue("N/A")
+                        .setIgnoreLeadingWhitespaces(true)
+                        .setIgnoreTrailingWhitespaces(false)
+                        .setComment('!')
+                        .setSkipEmptyLines(true)
+        );
+
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                for (Map.Entry<String, DataFormat> test : tests.entrySet()) {
+                    from("direct:" + test.getKey()).unmarshal(test.getValue()).to("mock:result");
+                }
+            }
+        };
+    }
+}
diff --git a/components/camel-validator/src/main/java/org/apache/camel/component/validator/ValidatorEndpoint.java b/components/camel-validator/src/main/java/org/apache/camel/component/validator/ValidatorEndpoint.java
index 6f1accd..8615116 100644
--- a/components/camel-validator/src/main/java/org/apache/camel/component/validator/ValidatorEndpoint.java
+++ b/components/camel-validator/src/main/java/org/apache/camel/component/validator/ValidatorEndpoint.java
@@ -27,7 +27,6 @@
 import org.apache.camel.Producer;
 import org.apache.camel.api.management.ManagedOperation;
 import org.apache.camel.api.management.ManagedResource;
-
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityEndpoint.java b/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityEndpoint.java
index 90456ec..5d6c21b 100644
--- a/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityEndpoint.java
+++ b/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityEndpoint.java
@@ -41,7 +41,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * Transforms the message using a Velocity template.
  */
diff --git a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherQuery.java b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherQuery.java
index 6232f7b7..3f1ce1f 100644
--- a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherQuery.java
+++ b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherQuery.java
@@ -18,6 +18,7 @@
 
 import org.apache.camel.component.weather.geolocation.GeoLocation;
 import org.apache.camel.component.weather.geolocation.GeoLocationProvider;
+
 import static org.apache.camel.component.weather.WeatherMode.JSON;
 import static org.apache.camel.util.ObjectHelper.isEmpty;
 
diff --git a/components/camel-weather/src/main/java/org/apache/camel/component/weather/geolocation/FreeGeoIpGeoLocationProvider.java b/components/camel-weather/src/main/java/org/apache/camel/component/weather/geolocation/FreeGeoIpGeoLocationProvider.java
index 9114d5c..fe85e46 100644
--- a/components/camel-weather/src/main/java/org/apache/camel/component/weather/geolocation/FreeGeoIpGeoLocationProvider.java
+++ b/components/camel-weather/src/main/java/org/apache/camel/component/weather/geolocation/FreeGeoIpGeoLocationProvider.java
@@ -18,7 +18,6 @@
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.component.weather.WeatherComponent;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpStatus;
diff --git a/components/camel-weather/src/main/java/org/apache/camel/component/weather/http/AuthenticationHttpClientConfigurer.java b/components/camel-weather/src/main/java/org/apache/camel/component/weather/http/AuthenticationHttpClientConfigurer.java
index 51a448c..8f23bf4 100644
--- a/components/camel-weather/src/main/java/org/apache/camel/component/weather/http/AuthenticationHttpClientConfigurer.java
+++ b/components/camel-weather/src/main/java/org/apache/camel/component/weather/http/AuthenticationHttpClientConfigurer.java
@@ -22,7 +22,6 @@
 import org.apache.commons.httpclient.UsernamePasswordCredentials;
 import org.apache.commons.httpclient.auth.AuthScope;
 
-
 public final class AuthenticationHttpClientConfigurer implements HttpClientConfigurer {
 
     private final boolean proxy;
diff --git a/components/camel-weather/src/main/java/org/apache/camel/component/weather/http/HttpClientConfigurer.java b/components/camel-weather/src/main/java/org/apache/camel/component/weather/http/HttpClientConfigurer.java
index 326f644..bddd978 100644
--- a/components/camel-weather/src/main/java/org/apache/camel/component/weather/http/HttpClientConfigurer.java
+++ b/components/camel-weather/src/main/java/org/apache/camel/component/weather/http/HttpClientConfigurer.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.weather.http;
 
-
 import org.apache.commons.httpclient.HttpClient;
 
 /**
diff --git a/components/camel-web3j/src/main/java/org/apache/camel/component/web3j/Web3jProducer.java b/components/camel-web3j/src/main/java/org/apache/camel/component/web3j/Web3jProducer.java
index 6e589c2..4dfe8eb 100644
--- a/components/camel-web3j/src/main/java/org/apache/camel/component/web3j/Web3jProducer.java
+++ b/components/camel-web3j/src/main/java/org/apache/camel/component/web3j/Web3jProducer.java
@@ -24,10 +24,8 @@
 import org.apache.camel.Message;
 import org.apache.camel.spi.InvokeOnHeader;
 import org.apache.camel.support.HeaderSelectorProducer;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import org.web3j.protocol.Web3j;
 import org.web3j.protocol.core.DefaultBlockParameter;
 import org.web3j.protocol.core.Request;
diff --git a/components/camel-web3j/src/test/java/org/apache/camel/component/web3j/Web3jProducerTest.java b/components/camel-web3j/src/test/java/org/apache/camel/component/web3j/Web3jProducerTest.java
index 7ac6bd9..8178e71 100644
--- a/components/camel-web3j/src/test/java/org/apache/camel/component/web3j/Web3jProducerTest.java
+++ b/components/camel-web3j/src/test/java/org/apache/camel/component/web3j/Web3jProducerTest.java
@@ -29,7 +29,6 @@
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-
 import org.web3j.protocol.core.DefaultBlockParameterName;
 import org.web3j.protocol.core.Request;
 import org.web3j.protocol.core.Response;
diff --git a/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/ClientSessions.java b/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/ClientSessions.java
index abd51f8..534450f 100644
--- a/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/ClientSessions.java
+++ b/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/ClientSessions.java
@@ -27,8 +27,6 @@
 import java.util.function.Consumer;
 import java.util.stream.IntStream;
 
-import static java.util.stream.Collectors.toList;
-
 import javax.websocket.ClientEndpointConfig;
 import javax.websocket.CloseReason;
 import javax.websocket.ContainerProvider;
@@ -41,6 +39,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.util.stream.Collectors.toList;
+
 class ClientSessions implements Closeable {
     private final Logger log = LoggerFactory.getLogger(ClientSessions.class);
 
diff --git a/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/JSR356Consumer.java b/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/JSR356Consumer.java
index a7c4b3b..5e1fbb3 100644
--- a/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/JSR356Consumer.java
+++ b/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/JSR356Consumer.java
@@ -19,8 +19,6 @@
 import java.net.URI;
 import java.util.function.BiConsumer;
 
-import static java.util.Optional.ofNullable;
-
 import javax.websocket.ClientEndpointConfig;
 import javax.websocket.Session;
 import javax.websocket.server.ServerEndpointConfig;
@@ -29,6 +27,8 @@
 import org.apache.camel.Processor;
 import org.apache.camel.support.DefaultConsumer;
 
+import static java.util.Optional.ofNullable;
+
 public class JSR356Consumer extends DefaultConsumer {
     private final int sessionCount;
     private ClientSessions manager;
diff --git a/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/JSR356Producer.java b/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/JSR356Producer.java
index a16f6dd..566c3f3 100644
--- a/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/JSR356Producer.java
+++ b/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/JSR356Producer.java
@@ -20,8 +20,6 @@
 import java.net.URI;
 import java.util.function.BiConsumer;
 
-import static java.util.Optional.ofNullable;
-
 import javax.websocket.ClientEndpointConfig;
 import javax.websocket.Session;
 
@@ -29,6 +27,7 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.support.DefaultAsyncProducer;
 
+import static java.util.Optional.ofNullable;
 
 public class JSR356Producer extends DefaultAsyncProducer {
     private final int sessionCount;
diff --git a/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/JSR356WebSocketComponent.java b/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/JSR356WebSocketComponent.java
index 2637042..498437d 100644
--- a/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/JSR356WebSocketComponent.java
+++ b/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/JSR356WebSocketComponent.java
@@ -23,18 +23,17 @@
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-import static java.util.Optional.ofNullable;
-
 import javax.websocket.RemoteEndpoint;
 import javax.websocket.Session;
 import javax.websocket.server.ServerContainer;
 
 import org.apache.camel.Endpoint;
-
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
 import org.apache.camel.util.IOHelper;
 
+import static java.util.Optional.ofNullable;
+
 @Component("websocket-jsr356")
 public class JSR356WebSocketComponent extends DefaultComponent {
     // didn't find a better way to handle that unless we can assume the
diff --git a/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/ServletIntegration.java b/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/ServletIntegration.java
index 3a809b9..8242aad 100644
--- a/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/ServletIntegration.java
+++ b/components/camel-websocket-jsr356/src/main/java/org/apache/camel/websocket/jsr356/ServletIntegration.java
@@ -18,14 +18,14 @@
 
 import java.util.Set;
 
-import static java.util.Optional.ofNullable;
-
 import javax.servlet.ServletContainerInitializer;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
 import javax.websocket.server.ServerContainer;
 
+import static java.util.Optional.ofNullable;
+
 public class ServletIntegration implements ServletContainerInitializer {
     @Override
     public void onStartup(final Set<Class<?>> c, final ServletContext ctx) {
diff --git a/components/camel-websocket-jsr356/src/test/java/org/apache/camel/websocket/jsr356/JSR356ProducerTest.java b/components/camel-websocket-jsr356/src/test/java/org/apache/camel/websocket/jsr356/JSR356ProducerTest.java
index 81976ba..8c2769a 100644
--- a/components/camel-websocket-jsr356/src/test/java/org/apache/camel/websocket/jsr356/JSR356ProducerTest.java
+++ b/components/camel-websocket-jsr356/src/test/java/org/apache/camel/websocket/jsr356/JSR356ProducerTest.java
@@ -20,8 +20,6 @@
 import java.util.Collection;
 import java.util.concurrent.CountDownLatch;
 
-import static java.util.Collections.singletonList;
-
 import javax.enterprise.context.Dependent;
 import javax.websocket.OnMessage;
 import javax.websocket.OnOpen;
@@ -39,6 +37,8 @@
 import org.junit.Test;
 import org.junit.rules.TestName;
 
+import static java.util.Collections.singletonList;
+
 public class JSR356ProducerTest extends CamelTestSupport {
     @Rule
     public final MeecrowaveRule servlet = new MeecrowaveRule(new Meecrowave.Builder() {
diff --git a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketConsumerRouteTest.java b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketConsumerRouteTest.java
index cd8ee99..73b3c67 100644
--- a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketConsumerRouteTest.java
+++ b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketConsumerRouteTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.websocket;
 
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.AvailablePortFinder;
diff --git a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketTwoRoutesExampleTest.java b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketTwoRoutesExampleTest.java
index 9cf4076..bf76a63 100644
--- a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketTwoRoutesExampleTest.java
+++ b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketTwoRoutesExampleTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.websocket;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
diff --git a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketTwoRoutesToSIndividualAndBroadcastEndpointExampleTest.java b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketTwoRoutesToSIndividualAndBroadcastEndpointExampleTest.java
index 96136ad..17403ff 100644
--- a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketTwoRoutesToSIndividualAndBroadcastEndpointExampleTest.java
+++ b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketTwoRoutesToSIndividualAndBroadcastEndpointExampleTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.websocket;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
diff --git a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketTwoRoutesToSameEndpointExampleTest.java b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketTwoRoutesToSameEndpointExampleTest.java
index 5fda655..6d963bc 100644
--- a/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketTwoRoutesToSameEndpointExampleTest.java
+++ b/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketTwoRoutesToSameEndpointExampleTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.websocket;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressAPIConfiguration.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressAPIConfiguration.java
index bbdf3f8..94584ba 100644
--- a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressAPIConfiguration.java
+++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/api/WordpressAPIConfiguration.java
@@ -19,11 +19,10 @@
 import java.io.Serializable;
 import java.util.Objects;
 
-import static java.util.Objects.hash;
-
 import org.apache.camel.component.wordpress.api.auth.WordpressAuthentication;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
+import static java.util.Objects.hash;
 
 /**
  * Model for the API configuration.
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePostsAdapterTest.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePostsAdapterTest.java
index 9f1c7ea..23699a3 100644
--- a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePostsAdapterTest.java
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServicePostsAdapterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.wordpress.api.service.impl;
+
 import java.util.List;
 
 import org.apache.camel.component.wordpress.api.auth.WordpressBasicAuthentication;
diff --git a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceUsersAdapterTest.java b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceUsersAdapterTest.java
index d86a173..9256db7 100644
--- a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceUsersAdapterTest.java
+++ b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/service/impl/WordpressServiceUsersAdapterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.wordpress.api.service.impl;
+
 import java.util.List;
 
 import org.apache.camel.component.wordpress.api.auth.WordpressBasicAuthentication;
diff --git a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChange.java b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChange.java
index 52ca91e..7c8a980 100644
--- a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChange.java
+++ b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChange.java
@@ -27,7 +27,6 @@
 import org.knowm.xchange.service.account.AccountService;
 import org.knowm.xchange.service.marketdata.MarketDataService;
 import org.knowm.xchange.service.trade.TradeService;
-
 import si.mazi.rescu.SynchronizedValueFactory;
 
 // Wraps the exchange to avoid anem collision with the camel exchange
diff --git a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeConfiguration.java b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeConfiguration.java
index 7bb8db4..4e827b1 100644
--- a/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeConfiguration.java
+++ b/components/camel-xchange/src/main/java/org/apache/camel/component/xchange/XChangeConfiguration.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.xchange;
 
-
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonXmlStreamReader.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonXmlStreamReader.java
index 8f2be71..4acbd88 100644
--- a/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonXmlStreamReader.java
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/JsonXmlStreamReader.java
@@ -32,6 +32,7 @@
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
+
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonToken;
 
diff --git a/components/camel-xj/src/main/java/org/apache/camel/component/xj/XmlJsonStreamWriter.java b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XmlJsonStreamWriter.java
index 9449240..d3877d6 100644
--- a/components/camel-xj/src/main/java/org/apache/camel/component/xj/XmlJsonStreamWriter.java
+++ b/components/camel-xj/src/main/java/org/apache/camel/component/xj/XmlJsonStreamWriter.java
@@ -32,6 +32,7 @@
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
+
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonToken;
 
diff --git a/components/camel-xj/src/test/java/org/apache/camel/component/xj/XJTestUtils.java b/components/camel-xj/src/test/java/org/apache/camel/component/xj/XJTestUtils.java
index 6ee6eb8..ac1717b 100644
--- a/components/camel-xj/src/test/java/org/apache/camel/component/xj/XJTestUtils.java
+++ b/components/camel-xj/src/test/java/org/apache/camel/component/xj/XJTestUtils.java
@@ -41,7 +41,6 @@
 import com.fasterxml.jackson.core.JsonFactory;
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonParser;
-
 import org.apache.commons.io.IOUtils;
 import org.junit.Assert;
 import org.skyscreamer.jsonassert.JSONAssert;
diff --git a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/XmlSignatureEndpoint.java b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/XmlSignatureEndpoint.java
index eecd99d..f493b9c 100644
--- a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/XmlSignatureEndpoint.java
+++ b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/XmlSignatureEndpoint.java
@@ -1,158 +1,159 @@
-/*
- * 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.component.xmlsecurity;
-
-import java.util.Map;
-import javax.xml.crypto.URIDereferencer;
-
-import org.apache.camel.Consumer;
-import org.apache.camel.Processor;
-import org.apache.camel.Producer;
-import org.apache.camel.component.xmlsecurity.processor.XmlSignatureConfiguration;
-import org.apache.camel.component.xmlsecurity.processor.XmlSignerConfiguration;
-import org.apache.camel.component.xmlsecurity.processor.XmlVerifierConfiguration;
-import org.apache.camel.spi.Metadata;
-import org.apache.camel.spi.UriEndpoint;
-import org.apache.camel.spi.UriParam;
-import org.apache.camel.spi.UriPath;
-import org.apache.camel.support.DefaultEndpoint;
-
-/**
- * Used to sign and verify exchanges using the XML signature specification.
- */
-@UriEndpoint(firstVersion = "2.12.0", scheme = "xmlsecurity", title = "XML Security", syntax = "xmlsecurity:command:name", producerOnly = true, label = "security,transformation")
-public abstract class XmlSignatureEndpoint extends DefaultEndpoint {
-
-    @UriPath @Metadata(required = true)
-    private XmlCommand command;
-    @UriPath @Metadata(required = true)
-    private String name;
-    // to include both kind of configuration params
-    @UriParam
-    private XmlSignerConfiguration signerConfiguration;
-    @UriParam
-    private XmlVerifierConfiguration verifierConfiguration;
-
-    public XmlSignatureEndpoint(String uri, XmlSignatureComponent component) {
-        super(uri, component);
-    }
-
-    public XmlSignerConfiguration getSignerConfiguration() {
-        return signerConfiguration;
-    }
-
-    public XmlVerifierConfiguration getVerifierConfiguration() {
-        return verifierConfiguration;
-    }
-
-    public XmlCommand getCommand() {
-        return command;
-    }
-
-    /**
-     * Whether to sign or verify.
-     */
-    public void setCommand(XmlCommand command) {
-        this.command = command;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * The name part in the URI can be chosen by the user to distinguish between different signer/verifier endpoints within the camel context.
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @Override
-    public Producer createProducer() {
-        return new XmlSignatureProducer(this, createProcessor());
-    }
-
-    abstract Processor createProcessor();
-
-    @Override
-    public Consumer createConsumer(Processor processor) {
-        throw new UnsupportedOperationException("XML Signature endpoints are not meant to be consumed from.");
-    }
-
-    public Object getManagedObject(XmlSignatureEndpoint endpoint) {
-        return this;
-    }
-
-    public abstract XmlSignatureConfiguration getConfiguration();
-
-    public URIDereferencer getUriDereferencer() {
-        return getConfiguration().getUriDereferencer();
-    }
-
-    public void setUriDereferencer(URIDereferencer uriDereferencer) {
-        getConfiguration().setUriDereferencer(uriDereferencer);
-    }
-
-    public String getBaseUri() {
-        return getConfiguration().getBaseUri();
-    }
-
-    public void setBaseUri(String baseUri) {
-        getConfiguration().setBaseUri(baseUri);
-    }
-
-    public Map<String, ? extends Object> getCryptoContextProperties() {
-        return getConfiguration().getCryptoContextProperties();
-    }
-
-    public void setCryptoContextProperties(Map<String, ? extends Object> cryptoContextProperties) {
-        getConfiguration().setCryptoContextProperties(cryptoContextProperties);
-    }
-
-    public Boolean getDisallowDoctypeDecl() {
-        return getConfiguration().getDisallowDoctypeDecl();
-    }
-
-    public void setDisallowDoctypeDecl(Boolean disallowDoctypeDecl) {
-        getConfiguration().setDisallowDoctypeDecl(disallowDoctypeDecl);
-    }
-
-    public Boolean getOmitXmlDeclaration() {
-        return getConfiguration().getOmitXmlDeclaration();
-    }
-
-    public void setOmitXmlDeclaration(Boolean omitXmlDeclaration) {
-        getConfiguration().setOmitXmlDeclaration(omitXmlDeclaration);
-    }
-    
-    public String getSchemaResourceUri() {
-        return getConfiguration().getSchemaResourceUri();
-    }
-
-    public void setSchemaResourceUri(String schemaResourceUri) {
-        getConfiguration().setSchemaResourceUri(schemaResourceUri);
-    }
-    
-    public String getOutputXmlEncoding() {
-        return getConfiguration().getOutputXmlEncoding();
-    }
-    
-    public void setOutputXmlEncoding(String encoding) {
-        getConfiguration().setOutputXmlEncoding(encoding);
-    }
-    
-}
+/*
+ * 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.component.xmlsecurity;
+
+import java.util.Map;
+
+import javax.xml.crypto.URIDereferencer;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.xmlsecurity.processor.XmlSignatureConfiguration;
+import org.apache.camel.component.xmlsecurity.processor.XmlSignerConfiguration;
+import org.apache.camel.component.xmlsecurity.processor.XmlVerifierConfiguration;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.DefaultEndpoint;
+
+/**
+ * Used to sign and verify exchanges using the XML signature specification.
+ */
+@UriEndpoint(firstVersion = "2.12.0", scheme = "xmlsecurity", title = "XML Security", syntax = "xmlsecurity:command:name", producerOnly = true, label = "security,transformation")
+public abstract class XmlSignatureEndpoint extends DefaultEndpoint {
+
+    @UriPath @Metadata(required = true)
+    private XmlCommand command;
+    @UriPath @Metadata(required = true)
+    private String name;
+    // to include both kind of configuration params
+    @UriParam
+    private XmlSignerConfiguration signerConfiguration;
+    @UriParam
+    private XmlVerifierConfiguration verifierConfiguration;
+
+    public XmlSignatureEndpoint(String uri, XmlSignatureComponent component) {
+        super(uri, component);
+    }
+
+    public XmlSignerConfiguration getSignerConfiguration() {
+        return signerConfiguration;
+    }
+
+    public XmlVerifierConfiguration getVerifierConfiguration() {
+        return verifierConfiguration;
+    }
+
+    public XmlCommand getCommand() {
+        return command;
+    }
+
+    /**
+     * Whether to sign or verify.
+     */
+    public void setCommand(XmlCommand command) {
+        this.command = command;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * The name part in the URI can be chosen by the user to distinguish between different signer/verifier endpoints within the camel context.
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public Producer createProducer() {
+        return new XmlSignatureProducer(this, createProcessor());
+    }
+
+    abstract Processor createProcessor();
+
+    @Override
+    public Consumer createConsumer(Processor processor) {
+        throw new UnsupportedOperationException("XML Signature endpoints are not meant to be consumed from.");
+    }
+
+    public Object getManagedObject(XmlSignatureEndpoint endpoint) {
+        return this;
+    }
+
+    public abstract XmlSignatureConfiguration getConfiguration();
+
+    public URIDereferencer getUriDereferencer() {
+        return getConfiguration().getUriDereferencer();
+    }
+
+    public void setUriDereferencer(URIDereferencer uriDereferencer) {
+        getConfiguration().setUriDereferencer(uriDereferencer);
+    }
+
+    public String getBaseUri() {
+        return getConfiguration().getBaseUri();
+    }
+
+    public void setBaseUri(String baseUri) {
+        getConfiguration().setBaseUri(baseUri);
+    }
+
+    public Map<String, ? extends Object> getCryptoContextProperties() {
+        return getConfiguration().getCryptoContextProperties();
+    }
+
+    public void setCryptoContextProperties(Map<String, ? extends Object> cryptoContextProperties) {
+        getConfiguration().setCryptoContextProperties(cryptoContextProperties);
+    }
+
+    public Boolean getDisallowDoctypeDecl() {
+        return getConfiguration().getDisallowDoctypeDecl();
+    }
+
+    public void setDisallowDoctypeDecl(Boolean disallowDoctypeDecl) {
+        getConfiguration().setDisallowDoctypeDecl(disallowDoctypeDecl);
+    }
+
+    public Boolean getOmitXmlDeclaration() {
+        return getConfiguration().getOmitXmlDeclaration();
+    }
+
+    public void setOmitXmlDeclaration(Boolean omitXmlDeclaration) {
+        getConfiguration().setOmitXmlDeclaration(omitXmlDeclaration);
+    }
+    
+    public String getSchemaResourceUri() {
+        return getConfiguration().getSchemaResourceUri();
+    }
+
+    public void setSchemaResourceUri(String schemaResourceUri) {
+        getConfiguration().setSchemaResourceUri(schemaResourceUri);
+    }
+    
+    public String getOutputXmlEncoding() {
+        return getConfiguration().getOutputXmlEncoding();
+    }
+    
+    public void setOutputXmlEncoding(String encoding) {
+        getConfiguration().setOutputXmlEncoding(encoding);
+    }
+    
+}
diff --git a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/DefaultKeyAccessor.java b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/DefaultKeyAccessor.java
index bccce10..a643788 100644
--- a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/DefaultKeyAccessor.java
+++ b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/DefaultKeyAccessor.java
@@ -1,99 +1,98 @@
-/*
- * 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.component.xmlsecurity.api;
-
-import java.security.KeyStore;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.UUID;
-
-import javax.xml.crypto.KeySelector;
-import javax.xml.crypto.dsig.keyinfo.KeyInfo;
-import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
-import javax.xml.crypto.dsig.keyinfo.X509Data;
-
-import org.w3c.dom.Node;
-
-import org.apache.camel.Message;
-
-
-/**
- * Accesses the public key from a key-store and returns a KeyInfo which
- * contains the X.509 certificate chain corresponding to the public key.
- */
-public class DefaultKeyAccessor extends DefaultKeySelector implements KeyAccessor {
-
-    private String provider;
-
-    public DefaultKeyAccessor() {
-
-    }
-
-    public String getProvider() {
-        return provider;
-    }
-
-    public void setProvider(String provider) {
-        this.provider = provider;
-    }
-
-    @Override
-    public KeySelector getKeySelector(Message message) throws Exception {
-        return this;
-    }
-
-    @Override
-    public KeyInfo getKeyInfo(Message message, Node messageBody, KeyInfoFactory factory) throws Exception {
-        return createKeyInfo(factory);
-    }
-
-    private KeyInfo createKeyInfo(KeyInfoFactory kif) throws Exception {
-
-        X509Certificate[] chain = getCertificateChain();
-        if (chain == null) {
-            return null;
-        }
-        X509Data x509D = kif.newX509Data(Arrays.asList(chain));
-        return kif.newKeyInfo(Collections.singletonList(x509D), "_" + UUID.randomUUID().toString());
-    }
-
-    private X509Certificate[] getCertificateChain() throws Exception {
-        KeyStore keystore = getKeyStore();
-        if (keystore == null) {
-            return null;
-        }
-        String alias = getAlias();
-        if (alias == null) {
-            return null;
-        }
-        Certificate[] certs = keystore.getCertificateChain(alias);
-        if (certs == null) {
-            return null;
-        }
-        ArrayList<X509Certificate> certList = new ArrayList<>(certs.length);
-        for (Certificate cert : certs) {
-            if (cert instanceof X509Certificate) {
-                certList.add((X509Certificate) cert);
-            }
-        }
-        return certList.toArray(new X509Certificate[certList.size()]);
-    }
-
-}
+/*
+ * 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.component.xmlsecurity.api;
+
+import java.security.KeyStore;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.UUID;
+
+import javax.xml.crypto.KeySelector;
+import javax.xml.crypto.dsig.keyinfo.KeyInfo;
+import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
+import javax.xml.crypto.dsig.keyinfo.X509Data;
+
+import org.w3c.dom.Node;
+
+import org.apache.camel.Message;
+
+/**
+ * Accesses the public key from a key-store and returns a KeyInfo which
+ * contains the X.509 certificate chain corresponding to the public key.
+ */
+public class DefaultKeyAccessor extends DefaultKeySelector implements KeyAccessor {
+
+    private String provider;
+
+    public DefaultKeyAccessor() {
+
+    }
+
+    public String getProvider() {
+        return provider;
+    }
+
+    public void setProvider(String provider) {
+        this.provider = provider;
+    }
+
+    @Override
+    public KeySelector getKeySelector(Message message) throws Exception {
+        return this;
+    }
+
+    @Override
+    public KeyInfo getKeyInfo(Message message, Node messageBody, KeyInfoFactory factory) throws Exception {
+        return createKeyInfo(factory);
+    }
+
+    private KeyInfo createKeyInfo(KeyInfoFactory kif) throws Exception {
+
+        X509Certificate[] chain = getCertificateChain();
+        if (chain == null) {
+            return null;
+        }
+        X509Data x509D = kif.newX509Data(Arrays.asList(chain));
+        return kif.newKeyInfo(Collections.singletonList(x509D), "_" + UUID.randomUUID().toString());
+    }
+
+    private X509Certificate[] getCertificateChain() throws Exception {
+        KeyStore keystore = getKeyStore();
+        if (keystore == null) {
+            return null;
+        }
+        String alias = getAlias();
+        if (alias == null) {
+            return null;
+        }
+        Certificate[] certs = keystore.getCertificateChain(alias);
+        if (certs == null) {
+            return null;
+        }
+        ArrayList<X509Certificate> certList = new ArrayList<>(certs.length);
+        for (Certificate cert : certs) {
+            if (cert instanceof X509Certificate) {
+                certList.add((X509Certificate) cert);
+            }
+        }
+        return certList.toArray(new X509Certificate[certList.size()]);
+    }
+
+}
diff --git a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/DefaultXmlSignature2Message.java b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/DefaultXmlSignature2Message.java
index 9a7f3b1..6bc127d 100644
--- a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/DefaultXmlSignature2Message.java
+++ b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/DefaultXmlSignature2Message.java
@@ -41,7 +41,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 /**
  * Maps the XML signature to a camel message. A output node is determined from
  * the XML signature document via a node search and then serialized and set to
diff --git a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/XmlSignatureChecker.java b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/XmlSignatureChecker.java
index 45d6a3b..d0d1699 100644
--- a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/XmlSignatureChecker.java
+++ b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/XmlSignatureChecker.java
@@ -28,7 +28,6 @@
 
 import org.apache.camel.Message;
 
-
 /**
  * This interface gives the application the possibility to check whether the
  * expected parts are signed.
diff --git a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/SantuarioUtil.java b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/SantuarioUtil.java
index 73ed45c..1c0bd26 100644
--- a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/SantuarioUtil.java
+++ b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/SantuarioUtil.java
@@ -26,7 +26,6 @@
 import org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI;
 import org.apache.xml.security.utils.XMLUtils;
 
-
 public final class SantuarioUtil {
     private SantuarioUtil() {
         //Helper class
@@ -80,4 +79,4 @@
         });
     }
     
-}
\ No newline at end of file
+}
diff --git a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/XmlSignatureConfiguration.java b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/XmlSignatureConfiguration.java
index b8a644b..3b7846c 100644
--- a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/XmlSignatureConfiguration.java
+++ b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/XmlSignatureConfiguration.java
@@ -1,191 +1,192 @@
-/*
- * 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.component.xmlsecurity.processor;
-
-import java.util.Map;
-import javax.xml.crypto.URIDereferencer;
-import javax.xml.crypto.XMLCryptoContext;
-import javax.xml.crypto.dsig.XMLSignContext;
-import javax.xml.crypto.dsig.XMLValidateContext;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
-import org.apache.camel.component.xmlsecurity.api.XmlSignatureConstants;
-import org.apache.camel.spi.UriParam;
-import org.apache.camel.spi.UriParams;
-
-@UriParams
-public abstract class XmlSignatureConfiguration implements Cloneable, CamelContextAware {
-
-    private CamelContext context;
-    @UriParam(label = "common")
-    private String baseUri;
-    @UriParam(label = "common")
-    private Map<String, ?> cryptoContextProperties;
-    @UriParam(label = "common", defaultValue = "true")
-    private Boolean disallowDoctypeDecl = Boolean.TRUE;
-    @UriParam(label = "common", defaultValue = "false")
-    private Boolean omitXmlDeclaration = Boolean.FALSE;
-    @UriParam(label = "common", defaultValue = "true")
-    private Boolean clearHeaders = Boolean.TRUE;
-    @UriParam(label = "common")
-    private String schemaResourceUri;
-    @UriParam(label = "common")
-    private String outputXmlEncoding;
-    @UriParam(label = "advanced")
-    private URIDereferencer uriDereferencer;
-
-    public XmlSignatureConfiguration() {
-    }
-
-    @Override
-    public CamelContext getCamelContext() {
-        return context;
-    }
-
-    @Override
-    public void setCamelContext(CamelContext camelContext) {
-        this.context = camelContext;
-    }
-
-    public URIDereferencer getUriDereferencer() {
-        return uriDereferencer;
-    }
-
-    /**
-     * If you want to restrict the remote access via reference URIs, you can set
-     * an own dereferencer. Optional parameter. If not set the provider default
-     * dereferencer is used which can resolve URI fragments, HTTP, file and
-     * XPpointer URIs.
-     * <p>
-     * Attention: The implementation is provider dependent!
-     * 
-     * @see XMLCryptoContext#setURIDereferencer(URIDereferencer)
-     */
-    public void setUriDereferencer(URIDereferencer uriDereferencer) {
-        this.uriDereferencer = uriDereferencer;
-    }
-
-    public String getBaseUri() {
-        return baseUri;
-    }
-
-    /**
-     * You can set a base URI which is used in the URI dereferencing. Relative
-     * URIs are then concatenated with the base URI.
-     *
-     * @see XMLCryptoContext#setBaseURI(String)
-     */
-    public void setBaseUri(String baseUri) {
-        this.baseUri = baseUri;
-    }
-
-    public Map<String, ? extends Object> getCryptoContextProperties() {
-        return cryptoContextProperties;
-    }
-
-    /**
-     * Sets the crypto context properties. See
-     * {@link XMLCryptoContext#setProperty(String, Object)}. Possible properties
-     * are defined in {@link XMLSignContext} an {@link XMLValidateContext} (see
-     * Supported Properties).
-     * <p>
-     * The following properties are set by default to the value
-     * {@link Boolean#TRUE} for the XML validation. If you want to switch these
-     * features off you must set the property value to {@link Boolean#FALSE}.
-     * <ul>
-     * <li><code>"org.jcp.xml.dsig.validateManifests"</code></li>
-     * <li><code>"javax.xml.crypto.dsig.cacheReference"</code></li>
-     * </ul>
-     */
-    public void setCryptoContextProperties(Map<String, ? extends Object> cryptoContextProperties) {
-        this.cryptoContextProperties = cryptoContextProperties;
-    }
-
-    public Boolean getDisallowDoctypeDecl() {
-        return disallowDoctypeDecl;
-    }
-
-    /**
-     * Disallows that the incoming XML document contains DTD DOCTYPE
-     * declaration. The default value is {@link Boolean#TRUE}.
-     * 
-     * @param disallowDoctypeDecl if set to {@link Boolean#FALSE} then DOCTYPE declaration is allowed, otherwise not
-     */
-    public void setDisallowDoctypeDecl(Boolean disallowDoctypeDecl) {
-        this.disallowDoctypeDecl = disallowDoctypeDecl;
-    }
-
-    public Boolean getOmitXmlDeclaration() {
-        return omitXmlDeclaration;
-    }
-
-    /**
-     * Indicator whether the XML declaration in the outgoing message body should
-     * be omitted. Default value is <code>false</code>. Can be overwritten by
-     * the header {@link XmlSignatureConstants#HEADER_OMIT_XML_DECLARATION}.
-     */
-    public void setOmitXmlDeclaration(Boolean omitXmlDeclaration) {
-        this.omitXmlDeclaration = omitXmlDeclaration;
-    }
-
-    /**
-     * Determines if the XML signature specific headers be cleared after signing
-     * and verification. Defaults to true.
-     * 
-     * @return true if the Signature headers should be unset, false otherwise
-     */
-    public Boolean getClearHeaders() {
-        return clearHeaders;
-    }
-
-    /**
-     * Determines if the XML signature specific headers be cleared after signing
-     * and verification. Defaults to true.
-     */
-    public void setClearHeaders(Boolean clearHeaders) {
-        this.clearHeaders = clearHeaders;
-    }
-
-    public String getSchemaResourceUri() {
-        return schemaResourceUri;
-    }
-
-    /**
-     * Classpath to the XML Schema. Must be specified in the detached XML
-     * Signature case for determining the ID attributes, might be set in the
-     * enveloped and enveloping case. If set, then the XML document is validated
-     * with the specified XML schema. The schema resource URI can be overwritten
-     * by the header {@link XmlSignatureConstants#HEADER_SCHEMA_RESOURCE_URI}.
-     */
-    public void setSchemaResourceUri(String schemaResourceUri) {
-        this.schemaResourceUri = schemaResourceUri;
-    }
-    
-    public String getOutputXmlEncoding() {
-        return outputXmlEncoding;
-    }
-
-    /**
-     * The character encoding of the resulting signed XML document. If
-     * <code>null</code> then the encoding of the original XML document is used.
-     */
-    public void setOutputXmlEncoding(String outputXmlEncoding) {
-        this.outputXmlEncoding = outputXmlEncoding;
-    }
-
-}
+/*
+ * 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.component.xmlsecurity.processor;
+
+import java.util.Map;
+
+import javax.xml.crypto.URIDereferencer;
+import javax.xml.crypto.XMLCryptoContext;
+import javax.xml.crypto.dsig.XMLSignContext;
+import javax.xml.crypto.dsig.XMLValidateContext;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.component.xmlsecurity.api.XmlSignatureConstants;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriParams;
+
+@UriParams
+public abstract class XmlSignatureConfiguration implements Cloneable, CamelContextAware {
+
+    private CamelContext context;
+    @UriParam(label = "common")
+    private String baseUri;
+    @UriParam(label = "common")
+    private Map<String, ?> cryptoContextProperties;
+    @UriParam(label = "common", defaultValue = "true")
+    private Boolean disallowDoctypeDecl = Boolean.TRUE;
+    @UriParam(label = "common", defaultValue = "false")
+    private Boolean omitXmlDeclaration = Boolean.FALSE;
+    @UriParam(label = "common", defaultValue = "true")
+    private Boolean clearHeaders = Boolean.TRUE;
+    @UriParam(label = "common")
+    private String schemaResourceUri;
+    @UriParam(label = "common")
+    private String outputXmlEncoding;
+    @UriParam(label = "advanced")
+    private URIDereferencer uriDereferencer;
+
+    public XmlSignatureConfiguration() {
+    }
+
+    @Override
+    public CamelContext getCamelContext() {
+        return context;
+    }
+
+    @Override
+    public void setCamelContext(CamelContext camelContext) {
+        this.context = camelContext;
+    }
+
+    public URIDereferencer getUriDereferencer() {
+        return uriDereferencer;
+    }
+
+    /**
+     * If you want to restrict the remote access via reference URIs, you can set
+     * an own dereferencer. Optional parameter. If not set the provider default
+     * dereferencer is used which can resolve URI fragments, HTTP, file and
+     * XPpointer URIs.
+     * <p>
+     * Attention: The implementation is provider dependent!
+     * 
+     * @see XMLCryptoContext#setURIDereferencer(URIDereferencer)
+     */
+    public void setUriDereferencer(URIDereferencer uriDereferencer) {
+        this.uriDereferencer = uriDereferencer;
+    }
+
+    public String getBaseUri() {
+        return baseUri;
+    }
+
+    /**
+     * You can set a base URI which is used in the URI dereferencing. Relative
+     * URIs are then concatenated with the base URI.
+     *
+     * @see XMLCryptoContext#setBaseURI(String)
+     */
+    public void setBaseUri(String baseUri) {
+        this.baseUri = baseUri;
+    }
+
+    public Map<String, ? extends Object> getCryptoContextProperties() {
+        return cryptoContextProperties;
+    }
+
+    /**
+     * Sets the crypto context properties. See
+     * {@link XMLCryptoContext#setProperty(String, Object)}. Possible properties
+     * are defined in {@link XMLSignContext} an {@link XMLValidateContext} (see
+     * Supported Properties).
+     * <p>
+     * The following properties are set by default to the value
+     * {@link Boolean#TRUE} for the XML validation. If you want to switch these
+     * features off you must set the property value to {@link Boolean#FALSE}.
+     * <ul>
+     * <li><code>"org.jcp.xml.dsig.validateManifests"</code></li>
+     * <li><code>"javax.xml.crypto.dsig.cacheReference"</code></li>
+     * </ul>
+     */
+    public void setCryptoContextProperties(Map<String, ? extends Object> cryptoContextProperties) {
+        this.cryptoContextProperties = cryptoContextProperties;
+    }
+
+    public Boolean getDisallowDoctypeDecl() {
+        return disallowDoctypeDecl;
+    }
+
+    /**
+     * Disallows that the incoming XML document contains DTD DOCTYPE
+     * declaration. The default value is {@link Boolean#TRUE}.
+     * 
+     * @param disallowDoctypeDecl if set to {@link Boolean#FALSE} then DOCTYPE declaration is allowed, otherwise not
+     */
+    public void setDisallowDoctypeDecl(Boolean disallowDoctypeDecl) {
+        this.disallowDoctypeDecl = disallowDoctypeDecl;
+    }
+
+    public Boolean getOmitXmlDeclaration() {
+        return omitXmlDeclaration;
+    }
+
+    /**
+     * Indicator whether the XML declaration in the outgoing message body should
+     * be omitted. Default value is <code>false</code>. Can be overwritten by
+     * the header {@link XmlSignatureConstants#HEADER_OMIT_XML_DECLARATION}.
+     */
+    public void setOmitXmlDeclaration(Boolean omitXmlDeclaration) {
+        this.omitXmlDeclaration = omitXmlDeclaration;
+    }
+
+    /**
+     * Determines if the XML signature specific headers be cleared after signing
+     * and verification. Defaults to true.
+     * 
+     * @return true if the Signature headers should be unset, false otherwise
+     */
+    public Boolean getClearHeaders() {
+        return clearHeaders;
+    }
+
+    /**
+     * Determines if the XML signature specific headers be cleared after signing
+     * and verification. Defaults to true.
+     */
+    public void setClearHeaders(Boolean clearHeaders) {
+        this.clearHeaders = clearHeaders;
+    }
+
+    public String getSchemaResourceUri() {
+        return schemaResourceUri;
+    }
+
+    /**
+     * Classpath to the XML Schema. Must be specified in the detached XML
+     * Signature case for determining the ID attributes, might be set in the
+     * enveloped and enveloping case. If set, then the XML document is validated
+     * with the specified XML schema. The schema resource URI can be overwritten
+     * by the header {@link XmlSignatureConstants#HEADER_SCHEMA_RESOURCE_URI}.
+     */
+    public void setSchemaResourceUri(String schemaResourceUri) {
+        this.schemaResourceUri = schemaResourceUri;
+    }
+    
+    public String getOutputXmlEncoding() {
+        return outputXmlEncoding;
+    }
+
+    /**
+     * The character encoding of the resulting signed XML document. If
+     * <code>null</code> then the encoding of the original XML document is used.
+     */
+    public void setOutputXmlEncoding(String outputXmlEncoding) {
+        this.outputXmlEncoding = outputXmlEncoding;
+    }
+
+}
diff --git a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/XmlSignatureProcessor.java b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/XmlSignatureProcessor.java
index eddebb7..84c0c10 100644
--- a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/XmlSignatureProcessor.java
+++ b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/XmlSignatureProcessor.java
@@ -1,136 +1,136 @@
-/*
- * 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.component.xmlsecurity.processor;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Field;
-import java.util.Map;
-
-import javax.xml.XMLConstants;
-import javax.xml.crypto.XMLCryptoContext;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-
-import org.xml.sax.SAXException;
-
-import org.apache.camel.Message;
-import org.apache.camel.Processor;
-import org.apache.camel.component.validator.DefaultLSResourceResolver;
-import org.apache.camel.component.xmlsecurity.api.XmlSignatureConstants;
-import org.apache.camel.component.xmlsecurity.api.XmlSignatureException;
-import org.apache.camel.support.ResourceHelper;
-import org.apache.camel.util.IOHelper;
-import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.xml.BytesSource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class XmlSignatureProcessor implements Processor {
-
-    private static final Logger LOG = LoggerFactory.getLogger(XmlSignatureProcessor.class);
-
-    static {
-        try {
-            SantuarioUtil.initializeSantuario();
-            SantuarioUtil.addSantuarioJSR105Provider();
-        } catch (Throwable t) { //NOPMD
-            // provider not in classpath, ignore and fall back to jre default
-            LOG.info("Cannot add the SantuarioJSR105Provider due to {0}, fall back to JRE default.", t);
-        }
-    }
-
-    public abstract XmlSignatureConfiguration getConfiguration();
-
-    void setUriDereferencerAndBaseUri(XMLCryptoContext context) {
-        setUriDereferencer(context);
-        setBaseUri(context);
-    }
-
-    private void setUriDereferencer(XMLCryptoContext context) {
-        if (getConfiguration().getUriDereferencer() != null) {
-            context.setURIDereferencer(getConfiguration().getUriDereferencer());
-            LOG.debug("URI dereferencer set");
-        }
-    }
-
-    private void setBaseUri(XMLCryptoContext context) {
-        if (getConfiguration().getBaseUri() != null) {
-            context.setBaseURI(getConfiguration().getBaseUri());
-            LOG.debug("Base URI {} set", context.getBaseURI());
-        }
-    }
-
-    protected void setCryptoContextProperties(XMLCryptoContext cryptoContext) {
-        Map<String, ? extends Object> props = getConfiguration().getCryptoContextProperties();
-        if (props == null) {
-            return;
-        }
-        for (String prop : props.keySet()) {
-            Object val = props.get(prop);
-            cryptoContext.setProperty(prop, val);
-            LOG.debug("Context property {} set to value {}", prop, val);
-        }
-    }
-
-    protected void clearMessageHeaders(Message message) {
-        if (getConfiguration().getClearHeaders() != null && getConfiguration().getClearHeaders()) {
-            Map<String, Object> headers = message.getHeaders();
-            for (Field f : XmlSignatureConstants.class.getFields()) {
-                headers.remove(ObjectHelper.lookupConstantFieldValue(XmlSignatureConstants.class, f.getName()));
-            }
-        }
-    }
-
-    protected Schema getSchema(Message message) throws SAXException, XmlSignatureException, IOException {
-
-        String schemaResourceUri = getSchemaResourceUri(message);
-        if (schemaResourceUri == null || schemaResourceUri.isEmpty()) {
-            return null;
-        }
-        InputStream is = ResourceHelper.resolveResourceAsInputStream(getConfiguration().getCamelContext().getClassResolver(),
-                schemaResourceUri);
-        if (is == null) {
-            throw new XmlSignatureException(
-                    "XML Signature component is wrongly configured: No XML schema found for specified schema resource URI "
-                            + schemaResourceUri);
-        }
-        byte[] bytes;
-        try {
-            bytes = message.getExchange().getContext().getTypeConverter().convertTo(byte[].class, is);
-        } finally {
-            // and make sure to close the input stream after the schema has been loaded
-            IOHelper.close(is);
-        }
-        SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-        schemaFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
-        schemaFactory.setResourceResolver(new DefaultLSResourceResolver(getConfiguration().getCamelContext(), getConfiguration()
-                .getSchemaResourceUri()));
-        LOG.debug("Instantiating schema for validation");
-        return schemaFactory.newSchema(new BytesSource(bytes));
-    }
-
-    protected String getSchemaResourceUri(Message message) {
-        String schemaResourceUri = message.getHeader(XmlSignatureConstants.HEADER_SCHEMA_RESOURCE_URI, String.class);
-        if (schemaResourceUri == null) {
-            schemaResourceUri = getConfiguration().getSchemaResourceUri();
-        }
-        LOG.debug("schema resource URI: {}", getConfiguration().getSchemaResourceUri());
-        return schemaResourceUri;
-    }
-
-}
+/*
+ * 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.component.xmlsecurity.processor;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.util.Map;
+
+import javax.xml.XMLConstants;
+import javax.xml.crypto.XMLCryptoContext;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+
+import org.xml.sax.SAXException;
+
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.component.validator.DefaultLSResourceResolver;
+import org.apache.camel.component.xmlsecurity.api.XmlSignatureConstants;
+import org.apache.camel.component.xmlsecurity.api.XmlSignatureException;
+import org.apache.camel.support.ResourceHelper;
+import org.apache.camel.util.IOHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.xml.BytesSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class XmlSignatureProcessor implements Processor {
+
+    private static final Logger LOG = LoggerFactory.getLogger(XmlSignatureProcessor.class);
+
+    static {
+        try {
+            SantuarioUtil.initializeSantuario();
+            SantuarioUtil.addSantuarioJSR105Provider();
+        } catch (Throwable t) { //NOPMD
+            // provider not in classpath, ignore and fall back to jre default
+            LOG.info("Cannot add the SantuarioJSR105Provider due to {0}, fall back to JRE default.", t);
+        }
+    }
+
+    public abstract XmlSignatureConfiguration getConfiguration();
+
+    void setUriDereferencerAndBaseUri(XMLCryptoContext context) {
+        setUriDereferencer(context);
+        setBaseUri(context);
+    }
+
+    private void setUriDereferencer(XMLCryptoContext context) {
+        if (getConfiguration().getUriDereferencer() != null) {
+            context.setURIDereferencer(getConfiguration().getUriDereferencer());
+            LOG.debug("URI dereferencer set");
+        }
+    }
+
+    private void setBaseUri(XMLCryptoContext context) {
+        if (getConfiguration().getBaseUri() != null) {
+            context.setBaseURI(getConfiguration().getBaseUri());
+            LOG.debug("Base URI {} set", context.getBaseURI());
+        }
+    }
+
+    protected void setCryptoContextProperties(XMLCryptoContext cryptoContext) {
+        Map<String, ? extends Object> props = getConfiguration().getCryptoContextProperties();
+        if (props == null) {
+            return;
+        }
+        for (String prop : props.keySet()) {
+            Object val = props.get(prop);
+            cryptoContext.setProperty(prop, val);
+            LOG.debug("Context property {} set to value {}", prop, val);
+        }
+    }
+
+    protected void clearMessageHeaders(Message message) {
+        if (getConfiguration().getClearHeaders() != null && getConfiguration().getClearHeaders()) {
+            Map<String, Object> headers = message.getHeaders();
+            for (Field f : XmlSignatureConstants.class.getFields()) {
+                headers.remove(ObjectHelper.lookupConstantFieldValue(XmlSignatureConstants.class, f.getName()));
+            }
+        }
+    }
+
+    protected Schema getSchema(Message message) throws SAXException, XmlSignatureException, IOException {
+
+        String schemaResourceUri = getSchemaResourceUri(message);
+        if (schemaResourceUri == null || schemaResourceUri.isEmpty()) {
+            return null;
+        }
+        InputStream is = ResourceHelper.resolveResourceAsInputStream(getConfiguration().getCamelContext().getClassResolver(),
+                schemaResourceUri);
+        if (is == null) {
+            throw new XmlSignatureException(
+                    "XML Signature component is wrongly configured: No XML schema found for specified schema resource URI "
+                            + schemaResourceUri);
+        }
+        byte[] bytes;
+        try {
+            bytes = message.getExchange().getContext().getTypeConverter().convertTo(byte[].class, is);
+        } finally {
+            // and make sure to close the input stream after the schema has been loaded
+            IOHelper.close(is);
+        }
+        SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+        schemaFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
+        schemaFactory.setResourceResolver(new DefaultLSResourceResolver(getConfiguration().getCamelContext(), getConfiguration()
+                .getSchemaResourceUri()));
+        LOG.debug("Instantiating schema for validation");
+        return schemaFactory.newSchema(new BytesSource(bytes));
+    }
+
+    protected String getSchemaResourceUri(Message message) {
+        String schemaResourceUri = message.getHeader(XmlSignatureConstants.HEADER_SCHEMA_RESOURCE_URI, String.class);
+        if (schemaResourceUri == null) {
+            schemaResourceUri = getConfiguration().getSchemaResourceUri();
+        }
+        LOG.debug("schema resource URI: {}", getConfiguration().getSchemaResourceUri());
+        return schemaResourceUri;
+    }
+
+}
diff --git a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/XmlSignerProcessor.java b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/XmlSignerProcessor.java
index 4168fc3..0e6cbe7 100644
--- a/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/XmlSignerProcessor.java
+++ b/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/processor/XmlSignerProcessor.java
@@ -1,1069 +1,1071 @@
-/*
- * 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.component.xmlsecurity.processor;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.security.GeneralSecurityException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-
-import javax.xml.crypto.AlgorithmMethod;
-import javax.xml.crypto.KeySelector;
-import javax.xml.crypto.dom.DOMStructure;
-import javax.xml.crypto.dsig.CanonicalizationMethod;
-import javax.xml.crypto.dsig.DigestMethod;
-import javax.xml.crypto.dsig.Reference;
-import javax.xml.crypto.dsig.SignatureMethod;
-import javax.xml.crypto.dsig.SignedInfo;
-import javax.xml.crypto.dsig.Transform;
-import javax.xml.crypto.dsig.XMLObject;
-import javax.xml.crypto.dsig.XMLSignature;
-import javax.xml.crypto.dsig.XMLSignatureException;
-import javax.xml.crypto.dsig.XMLSignatureFactory;
-import javax.xml.crypto.dsig.dom.DOMSignContext;
-import javax.xml.crypto.dsig.keyinfo.KeyInfo;
-import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
-import javax.xml.crypto.dsig.spec.TransformParameterSpec;
-import javax.xml.crypto.dsig.spec.XPathFilterParameterSpec;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.validation.Schema;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpression;
-import javax.xml.xpath.XPathExpressionException;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.SAXException;
-import org.apache.camel.Exchange;
-import org.apache.camel.Message;
-import org.apache.camel.component.xmlsecurity.api.KeyAccessor;
-import org.apache.camel.component.xmlsecurity.api.SignatureType;
-import org.apache.camel.component.xmlsecurity.api.XmlSignatureConstants;
-import org.apache.camel.component.xmlsecurity.api.XmlSignatureException;
-import org.apache.camel.component.xmlsecurity.api.XmlSignatureFormatException;
-import org.apache.camel.component.xmlsecurity.api.XmlSignatureHelper;
-import org.apache.camel.component.xmlsecurity.api.XmlSignatureInvalidKeyException;
-import org.apache.camel.component.xmlsecurity.api.XmlSignatureNoKeyException;
-import org.apache.camel.component.xmlsecurity.api.XmlSignatureProperties;
-import org.apache.camel.support.processor.validation.DefaultValidationErrorHandler;
-import org.apache.camel.support.processor.validation.ValidatorErrorHandler;
-import org.apache.camel.util.IOHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Creates from the message body a XML signature element which is returned in
- * the message body of the output message. Enveloped, enveloping XML, and
- * detached signatures are supported.
- * <p>
- * In the enveloped XML signature case, the method
- * {@link XmlSignerConfiguration#getParentLocalName()} must not return
- * <code>null</code>. In this case the parent element must be contained in the
- * XML document provided by the message body and the signature element is added
- * as last child element of the parent element. If a KeyInfo instance is
- * provided by the {@link KeyAccessor} and
- * {@link XmlSignerConfiguration#getAddKeyInfoReference()} is <code>true</code>,
- * then also a reference to the KeyInfo element is added. The generated XML
- * signature has the following structure:
- * 
- * <pre>
- * {@code
- * <[parent element]>
- *     ...
- *      <Signature Id="[signature_id]">
- *          <SignedInfo>
- *                <Reference URI=""> 
- *                      <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
- *                      (<Transform>)*
- *                      <DigestMethod>
- *                      <DigestValue>
- *                </Reference>
- *                (<Reference URI="#[keyinfo_Id]">
- *                      <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
- *                      <DigestMethod>
- *                      <DigestValue>
- *                </Reference>)?
- *                <!-- further references possible, see XmlSignerConfiguration#setProperties(XmlSignatureProperties) -->
- *         </SignedInfo>
- *         <SignatureValue>
- *         (<KeyInfo Id="[keyinfo_id]">)?
- *         <!-- Object elements possible, see XmlSignerConfiguration#setProperties(XmlSignatureProperties) -->
- *     </Signature>
- * </[parent element]>
- * }
- * </pre>
- * <p>
- * In the enveloping XML signature case, the generated XML signature has the
- * following structure:
- * 
- * <pre>
- *  {@code
- *  <Signature Id="[signature_id]">
- *     <SignedInfo>
- *            <Reference URI="#[object_id]" type="[optional_type_value]"> 
- *                  (<Transform>)*
- *                  <DigestMethod>
- *                  <DigestValue>
- *            </Reference>
- *            (<Reference URI="#[keyinfo_id]">
- *                  <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
- *                  <DigestMethod>
- *                  <DigestValue>
- *            </Reference>)?
- *             <!-- further references possible, see XmlSignerConfiguration#setProperties(XmlSignatureProperties) -->
- *     </SignedInfo>
- *     <SignatureValue>
- *     (<KeyInfo Id="[keyinfo_id]">)?
- *     <Object Id="[object_id]"/>
- *     <!-- further Object elements possible, see XmlSignerConfiguration#setProperties(XmlSignatureProperties) -->
- * </Signature>   
- *  }
- * </pre>
- * 
- * In the enveloping XML signature case, also message bodies containing plain
- * text are supported. This must be indicated via the header
- * {@link XmlSignatureConstants#HEADER_MESSAGE_IS_PLAIN_TEXT} or via the
- * configuration {@link XmlSignerConfiguration#getPlainText()}.
- * 
- * <p>
- * Detached signatures where the signature element is a sibling element to the
- * signed element are supported. Those elements can be signed which have ID
- * attributes. The elements to be signed must be specified via xpath expressions
- * (see {@link XmlSignerConfiguration#setXpathsToIdAttributes(List)}) and the
- * XML schema must be provided via the schema resource URI (see method
- * {@link XmlSignerConfiguration#setSchemaResourceUri(String)}. Elements with
- * deeper hierarchy level are signed first. This procedure can result in nested
- * signatures.
- * 
- * <p>
- * In all cases, the digest algorithm is either read from the configuration
- * method {@link XmlSignerConfiguration#getDigestAlgorithm()} or calculated from
- * the signature algorithm (
- * {@link XmlSignerConfiguration#getSignatureAlgorithm()}. The optional
- * transforms are read from {@link XmlSignerConfiguration#getTransformMethods()}
- * .
- * <p>
- * In all cases, you can add additional references and objects which contain
- * properties for the XML signature, see
- * {@link XmlSignerConfiguration#setProperties(XmlSignatureProperties)}.
- */
-
-public class XmlSignerProcessor extends XmlSignatureProcessor {
-
-    private static final Logger LOG = LoggerFactory.getLogger(XmlSignerProcessor.class);
-
-    private static final String SHA512 = "sha512";
-    private static final String SHA384 = "sha384";
-    private static final String SHA256 = "sha256";
-    private static final String SHA224 = "sha224";
-    private static final String SHA1 = "sha1";
-    private static final String RIPEMD160 = "ripemd160";
-
-    private static final String HTTP_WWW_W3_ORG_2001_04_XMLDSIG_MORE_SHA224 = 
-        "http://www.w3.org/2001/04/xmldsig-more#sha224"; // see RFC 4051
-    
-    private static final String HTTP_WWW_W3_ORG_2001_04_XMLDSIG_MORE_SHA384 = 
-        "http://www.w3.org/2001/04/xmldsig-more#sha384"; // see RFC 4051
-
-    private final XmlSignerConfiguration config;
-    
-    public XmlSignerProcessor(XmlSignerConfiguration config) {
-        this.config = config;
-    }
-
-    @Override
-    public XmlSignerConfiguration getConfiguration() {
-        return config;
-    }
-
-    @Override
-    public void process(Exchange exchange) throws Exception { //NOPMD
-
-        try {
-            LOG.debug("XML signature generation started using algorithm {} and canonicalization method {}", getConfiguration()
-                    .getSignatureAlgorithm(), getConfiguration().getCanonicalizationMethod().getAlgorithm());
-
-            // lets setup the out message before we invoke the signing
-            // so that it can mutate it if necessary
-            Message out = exchange.getOut();
-            out.copyFrom(exchange.getIn());
-
-            Document outputDoc = sign(out);
-
-            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-            XmlSignatureHelper.transformNonTextNodeToOutputStream(outputDoc, outStream, omitXmlDeclaration(out), getConfiguration().getOutputXmlEncoding());
-            byte[] data = outStream.toByteArray();
-            out.setBody(data);
-            setOutputEncodingToMessageHeader(out);
-            clearMessageHeaders(out);
-            LOG.debug("XML signature generation finished");
-        } catch (Exception e) {
-            // remove OUT message, as an exception occurred
-            exchange.setOut(null);
-            throw e;
-        }
-    }
-
-    protected Document sign(final Message out) throws Exception { //NOPMD
-
-        try {
-            XMLSignatureFactory fac;
-            // Try to install the Santuario Provider - fall back to the JDK provider if this does
-            // not work
-            try {
-                fac = XMLSignatureFactory.getInstance("DOM", "ApacheXMLDSig");
-            } catch (NoSuchProviderException ex) {
-                fac = XMLSignatureFactory.getInstance("DOM");
-            }
-
-            final Node node = getMessageBodyNode(out);
-
-            if (getConfiguration().getKeyAccessor() == null) {
-                throw new XmlSignatureNoKeyException(
-                    "Key accessor is missing for XML signature generation. Specify a key accessor in the configuration.");
-            }
-            
-            final KeySelector keySelector = getConfiguration().getKeyAccessor().getKeySelector(out);
-            if (keySelector == null) {
-                throw new XmlSignatureNoKeyException(
-                        "Key selector is missing for XML signature generation. Specify a key selector in the configuration.");
-            }
-
-            SignatureType signatureType = determineSignatureType(out);
-
-            final List<String> contentReferenceUris = getContentReferenceUris(out, signatureType, node);
-
-            Node lastParent = null;
-            // per content reference URI a signature is built; for enveloped and enveloping there is only one content reference URI;
-            // only in the detached case there can be several
-            for (final String contentReferenceUri : contentReferenceUris) {
-
-                // the method KeyAccessor.getKeyInfo must be called after the method KeyAccessor.getKeySelector, this is part of the interface contract!
-                // and this method must be called within the loop over the content reference URIs, because for each signature the key info ID must be different
-                final KeyInfo keyInfo = getConfiguration().getKeyAccessor().getKeyInfo(out, node, fac.getKeyInfoFactory());
-
-                String signatureId = getConfiguration().getSignatureId();
-                if (signatureId == null) {
-                    signatureId = "_" + UUID.randomUUID().toString();
-                } else if (signatureId.isEmpty()) {
-                    // indicator that no signature Id attribute shall be generated
-                    signatureId = null;
-                }
-
-                // parent only relevant for enveloped or detached signature
-                Node parent = getParentOfSignature(out, node, contentReferenceUri, signatureType);
-
-                if (parent == null) {
-                    // for enveloping signature, create new document 
-                    parent = XmlSignatureHelper.newDocumentBuilder(Boolean.TRUE).newDocument();
-                }
-                lastParent = parent;
-
-                XmlSignatureProperties.Input input = new InputBuilder().contentDigestAlgorithm(getDigestAlgorithmUri()).keyInfo(keyInfo)
-                        .message(out).messageBodyNode(node).parent(parent).signatureAlgorithm(getConfiguration().getSignatureAlgorithm())
-                        .signatureFactory(fac).signatureId(signatureId).contentReferenceUri(contentReferenceUri)
-                        .signatureType(signatureType)
-                        .prefixForXmlSignatureNamespace(getConfiguration().getPrefixForXmlSignatureNamespace()).build();
-
-                XmlSignatureProperties.Output properties = getSignatureProperties(input);
-
-                
-                // the signature properties can overwrite the signature Id
-                if (properties != null && properties.getSignatureId() != null && !properties.getSignatureId().isEmpty()) {
-                    signatureId = properties.getSignatureId();
-                }
-
-                List<? extends XMLObject> objects = getObjects(input, properties);
-                List<? extends Reference> refs = getReferences(input, properties, getKeyInfoId(keyInfo));
-
-                SignedInfo si = createSignedInfo(fac, refs);
-
-                DOMSignContext dsc = createAndConfigureSignContext(parent, keySelector);
-
-                XMLSignature signature = fac.newXMLSignature(si, keyInfo, objects, signatureId, null);
-                // generate the signature
-                signature.sign(dsc);
-            }
-
-            return XmlSignatureHelper.getDocument(lastParent);
-
-        } catch (XMLSignatureException se) {
-            if (se.getCause() instanceof InvalidKeyException) {
-                throw new XmlSignatureInvalidKeyException(se.getMessage(), se);
-            } else {
-                throw new XmlSignatureException(se);
-            }
-        } catch (GeneralSecurityException e) {
-            // like NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException
-            throw new XmlSignatureException(e);
-        }
-
-    }
-
-    private SignatureType determineSignatureType(Message message) throws XmlSignatureException {
-        if (getConfiguration().getParentLocalName() != null && getConfiguration().getParentXpath() != null) {
-            throw new XmlSignatureException(
-                    "The configuration of the XML signer component is wrong. The parent local name "
-                            + getConfiguration().getParentLocalName()
-                            + " and the parent XPath " + getConfiguration().getParentXpath().getXPath() + " are specified. You must not specify both parameters.");
-
-        }
-
-        boolean isEnveloped = getConfiguration().getParentLocalName() != null || getConfiguration().getParentXpath() != null;
-
-        boolean isDetached = getXpathToIdAttributes(message).size() > 0;
-
-        if (isEnveloped && isDetached) {
-            if (getConfiguration().getParentLocalName() != null) {
-                throw new XmlSignatureException(
-                    "The configuration of the XML signer component is wrong. The parent local name "
-                            + getConfiguration().getParentLocalName()
-                            + " for an enveloped signature and the XPATHs to ID attributes for a detached signature are specified. You must not specify both parameters.");
-            } else {
-                throw new XmlSignatureException(
-                        "The configuration of the XML signer component is wrong. The parent XPath "
-                                + getConfiguration().getParentXpath().getXPath()
-                                + " for an enveloped signature and the XPATHs to ID attributes for a detached signature are specified. You must not specify both parameters.");
-
-            }
-        }
-
-        SignatureType result;
-        if (isEnveloped) {
-            result = SignatureType.enveloped;
-        } else if (isDetached) {
-            if (getSchemaResourceUri(message) == null) {
-                throw new XmlSignatureException(
-                        "The configruation of the XML Signature component is wrong: No XML schema specified in the detached case");
-            }
-            result = SignatureType.detached;
-        } else {
-            result = SignatureType.enveloping;
-        }
-
-        LOG.debug("Signature type: {}", result);
-        return result;
-
-    }
-
-    protected List<XPathFilterParameterSpec> getXpathToIdAttributes(Message message) {
-
-        @SuppressWarnings("unchecked")
-        List<XPathFilterParameterSpec> result = (List<XPathFilterParameterSpec>) message
-                .getHeader(XmlSignatureConstants.HEADER_XPATHS_TO_ID_ATTRIBUTES);
-        if (result == null) {
-            result = getConfiguration().getXpathsToIdAttributes();
-        }
-        return result;
-    }
-
-    protected XmlSignatureProperties.Output getSignatureProperties(XmlSignatureProperties.Input input) throws Exception { //NOPMD
-        XmlSignatureProperties propGetter = getConfiguration().getProperties();
-        XmlSignatureProperties.Output propsOutput = null;
-        if (propGetter != null) {
-            propsOutput = propGetter.get(input);
-        }
-        return propsOutput;
-    }
-
-    private DOMSignContext createAndConfigureSignContext(Node parent, KeySelector keySelector) {
-        DOMSignContext dsc = new DOMSignContext(keySelector, parent);
-        // set namespace prefix for "http://www.w3.org/2000/09/xmldsig#" according to best practice described in http://www.w3.org/TR/xmldsig-bestpractices/#signing-xml-without-namespaces
-        if (getConfiguration().getPrefixForXmlSignatureNamespace() != null
-                && !getConfiguration().getPrefixForXmlSignatureNamespace().isEmpty()) {
-            dsc.putNamespacePrefix("http://www.w3.org/2000/09/xmldsig#", getConfiguration().getPrefixForXmlSignatureNamespace());
-        }
-        dsc.putNamespacePrefix("http://www.w3.org/2001/10/xml-exc-c14n#", "ec");
-        setCryptoContextProperties(dsc);
-        setUriDereferencerAndBaseUri(dsc);
-        return dsc;
-    }
-
-    protected Boolean omitXmlDeclaration(Message message) {
-        Boolean omitXmlDeclaration = message.getHeader(XmlSignatureConstants.HEADER_OMIT_XML_DECLARATION, Boolean.class);
-        if (omitXmlDeclaration == null) {
-            omitXmlDeclaration = getConfiguration().getOmitXmlDeclaration();
-        }
-        if (omitXmlDeclaration == null) {
-            omitXmlDeclaration = Boolean.FALSE;
-        }
-        LOG.debug("Omit XML declaration: {}", omitXmlDeclaration);
-        return omitXmlDeclaration;
-    }
-
-    protected SignedInfo createSignedInfo(XMLSignatureFactory fac, List<? extends Reference> refs) throws Exception { //NOPMD
-        return fac.newSignedInfo(fac.newCanonicalizationMethod(getConfiguration().getCanonicalizationMethod().getAlgorithm(),
-                (C14NMethodParameterSpec) getConfiguration().getCanonicalizationMethod().getParameterSpec()),
-                getSignatureMethod(getConfiguration().getSignatureAlgorithm(), fac), refs);
-    }
-
-    private SignatureMethod getSignatureMethod(String signatureAlgorithm, XMLSignatureFactory fac) throws NoSuchAlgorithmException,
-            InvalidAlgorithmParameterException {
-        return fac.newSignatureMethod(signatureAlgorithm, null);
-    }
-
-    protected Node getMessageBodyNode(Message message) throws Exception { //NOPMD
-        InputStream is = message.getMandatoryBody(InputStream.class);
-
-        Boolean isPlainText = isPlainText(message);
-
-        Node node;
-        if (isPlainText != null && isPlainText) {
-            node = getTextNode(message, is);
-        } else {
-            ValidatorErrorHandler errorHandler = new DefaultValidationErrorHandler();
-            Schema schema = getSchemaForSigner(message, errorHandler);
-            Document doc = parseInput(is, getConfiguration().getDisallowDoctypeDecl(), schema, errorHandler);
-            errorHandler.handleErrors(message.getExchange(), schema, null); // throws ValidationException
-            node = doc.getDocumentElement();
-            LOG.debug("Root element of document to be signed: {}", node);
-        }
-        return node;
-    }
-
-    protected Schema getSchemaForSigner(Message message, ValidatorErrorHandler errorHandler) throws XmlSignatureException, SAXException,
-            IOException {
-        Schema schema;
-        String schemaResourceUri = getSchemaResourceUri(message);
-        if (schemaResourceUri == null) {
-            schema = null;
-        } else {
-            schema = getSchema(message);
-        }
-        return schema;
-    }
-
-    protected Boolean isPlainText(Message message) {
-        Boolean isPlainText = message.getHeader(XmlSignatureConstants.HEADER_MESSAGE_IS_PLAIN_TEXT, Boolean.class);
-        if (isPlainText == null) {
-            isPlainText = getConfiguration().getPlainText();
-        }
-        LOG.debug("Is plain text: {}", isPlainText);
-        return isPlainText;
-    }
-
-    protected Element getParentOfSignature(Message inMessage, Node messageBodyNode, String contentReferenceURI, SignatureType sigType)
-        throws Exception { //NOPMD
-        if (SignatureType.enveloping == sigType) {
-            // enveloping case
-            return null;
-        }
-        if (messageBodyNode.getParentNode() == null || messageBodyNode.getParentNode().getNodeType() != Node.DOCUMENT_NODE) {
-            throw new XmlSignatureFormatException(
-                    "Incomming message has wrong format: It is not an XML document. Cannot create an enveloped or detached XML signature.");
-        }
-        Document doc = (Document) messageBodyNode.getParentNode();
-        if (SignatureType.detached == sigType) {
-            return getParentForDetachedCase(doc, inMessage, contentReferenceURI);
-        } else {
-            // enveloped case
-            return getParentForEnvelopedCase(doc, inMessage);
-        }
-
-    }
-    
-    protected Element getParentForEnvelopedCase(Document doc, Message inMessage) throws Exception { //NOPMD
-        if (getConfiguration().getParentXpath() != null) {
-            XPathFilterParameterSpec xp = getConfiguration().getParentXpath();
-            XPathExpression exp;
-            try {
-                exp = XmlSignatureHelper.getXPathExpression(xp);
-            } catch (XPathExpressionException e) {
-                throw new XmlSignatureException("The parent XPath " + getConfiguration().getParentXpath().getXPath() + " is wrongly configured: The XPath " + xp.getXPath() + " is invalid.", e);
-            }
-            NodeList list = (NodeList) exp.evaluate(doc.getDocumentElement(), XPathConstants.NODESET);
-            if (list == null || list.getLength() == 0) {
-                throw new XmlSignatureException("The parent XPath " + xp.getXPath() + " returned no result. Check the configuration of the XML signer component.");
-            }
-            int length = list.getLength();
-            for (int i = 0; i < length; i++) {
-                Node node = list.item(i);
-                if (node.getNodeType() == Node.ELEMENT_NODE) {
-                    // return the first element
-                    return (Element)node;
-                }
-            }
-            throw new XmlSignatureException("The parent XPath " + xp.getXPath() + " returned no element. Check the configuration of the XML signer component.");
-        } else {
-            // parent local name is not null!
-            NodeList parents = doc.getElementsByTagNameNS(getConfiguration().getParentNamespace(), getConfiguration().getParentLocalName());
-            if (parents == null || parents.getLength() == 0) {
-                throw new XmlSignatureFormatException(
-                        String.format(
-                                "Incoming message has wrong format: The parent element with the local name %s and the namespace %s was not found in the message to build an enveloped XML signature.",
-                                getConfiguration().getParentLocalName(), getConfiguration().getParentNamespace()));
-            }
-            // return the first element
-            return (Element) parents.item(0);
-        }
-    }
-
-    private Element getParentForDetachedCase(Document doc, Message inMessage, String referenceUri) throws XmlSignatureException {
-        String elementId = referenceUri;
-        if (elementId.startsWith("#")) {
-            elementId = elementId.substring(1);
-        }
-        Element el = doc.getElementById(elementId);
-        if (el == null) {
-            // should not happen because has been checked before
-            throw new IllegalStateException("No element found for element ID " + elementId);
-        }
-        LOG.debug("Sibling element of the detached XML Signature with reference URI {}: {}  {}",
-                new Object[] {referenceUri, el.getLocalName(), el.getNamespaceURI() });
-        Element result = getParentElement(el);
-        if (result != null) {
-            return result;
-        } else {
-            throw new XmlSignatureException(
-                    "Either the configuration of the XML Signature component is wrong or the incoming document has an invalid structure: The element "
-                            + el.getLocalName() + "{" + el.getNamespaceURI() + "} which is referenced by the reference URI " + referenceUri
-                            + " has no parent element. The element must have a parent element in the configured detached case.");
-        }
-    }
-
-    private Element getParentElement(Node node) {
-        int counter = 0;
-        while (node != null && counter < 10000) {
-            // counter is for avoiding security attacks
-            Node parent = node.getParentNode();
-            if (parent != null && parent.getNodeType() == Node.ELEMENT_NODE) {
-                return (Element) parent;
-            }
-            node = parent;
-            counter++;
-        }
-        return null;
-    }
-
-    protected List<? extends Reference> getReferences(XmlSignatureProperties.Input input, XmlSignatureProperties.Output properties,
-            String keyInfoId) throws Exception { //NOPMD
-
-        String referenceId = properties == null ? null : properties.getContentReferenceId();
-        // Create Reference with URI="#<objectId>" for enveloping signature, URI="" for enveloped signature, and URI = <value from configuration> for detached signature and the transforms
-        Reference ref = createReference(input.getSignatureFactory(), input.getContentReferenceUri(),
-                getContentReferenceType(input.getMessage()), input.getSignatureType(), referenceId, input.getMessage());
-        Reference keyInfoRef = createKeyInfoReference(input.getSignatureFactory(), keyInfoId, input.getContentDigestAlgorithm());
-
-        int propsRefsSize = properties == null || properties.getReferences() == null || properties.getReferences().isEmpty() ? 0
-                : properties.getReferences().size();
-        int size = keyInfoRef == null ? propsRefsSize + 1 : propsRefsSize + 2;
-        List<Reference> referenceList = new ArrayList<>(size);
-        referenceList.add(ref);
-        if (keyInfoRef != null) {
-            referenceList.add(keyInfoRef);
-        }
-        if (properties != null && properties.getReferences() != null && !properties.getReferences().isEmpty()) {
-            referenceList.addAll(properties.getReferences());
-        }
-        return referenceList;
-    }
-
-    protected List<? extends XMLObject> getObjects(XmlSignatureProperties.Input input, XmlSignatureProperties.Output properties)
-        throws Exception { //NOPMD
-
-        if (SignatureType.enveloped == input.getSignatureType() || SignatureType.detached == input.getSignatureType()) {
-            if (properties == null || properties.getObjects() == null) {
-                return Collections.emptyList();
-            }
-            return properties.getObjects();
-        }
-
-        // enveloping signature --> add additional object
-        final String objectId = getConfiguration().getContentObjectId();
-        LOG.debug("Object Content Id {}", objectId);
-
-        XMLObject obj = createXMLObject(input.getSignatureFactory(), input.getMessageBodyNode(), objectId);
-        if (properties == null || properties.getObjects() == null || properties.getObjects().isEmpty()) {
-            return Collections.singletonList(obj);
-        }
-        List<XMLObject> result = new ArrayList<>(properties.getObjects().size() + 1);
-        result.add(obj);
-        result.addAll(properties.getObjects());
-        return result;
-    }
-
-    private Node getTextNode(Message inMessage, InputStream is) throws IOException, ParserConfigurationException, XmlSignatureException {
-        LOG.debug("Message body to be signed is plain text");
-        String encoding = getMessageEncoding(inMessage);
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        IOHelper.copyAndCloseInput(is, bos);
-        try {
-            String text = new String(bos.toByteArray(), encoding);
-            return XmlSignatureHelper.newDocumentBuilder(true).newDocument().createTextNode(text);
-        } catch (UnsupportedEncodingException e) {
-            throw new XmlSignatureException(String.format("The message encoding %s is not supported.", encoding), e);
-        }
-    }
-
-    protected String getMessageEncoding(Message inMessage) {
-        String encoding = inMessage.getHeader(XmlSignatureConstants.HEADER_PLAIN_TEXT_ENCODING, String.class);
-        if (encoding == null) {
-            encoding = getConfiguration().getPlainTextEncoding();
-        }
-        LOG.debug("Messge encoding: {}", encoding);
-        return encoding;
-    }
-
-    protected Document parseInput(InputStream is, Boolean disallowDoctypeDecl, Schema schema, ErrorHandler errorHandler)
-        throws ParserConfigurationException, IOException, XmlSignatureFormatException {
-        try {
-            DocumentBuilder db = XmlSignatureHelper.newDocumentBuilder(disallowDoctypeDecl, schema);
-            db.setErrorHandler(errorHandler);
-            return db.parse(is);
-        } catch (SAXException e) {
-            throw new XmlSignatureFormatException(
-                    "XML signature generation not possible. Sent message is not an XML document. Check the sent message.", e);
-        } finally {
-            IOHelper.close(is, "input stream");
-        }
-    }
-
-    protected Reference createReference(XMLSignatureFactory fac, String uri, String type, SignatureType sigType, String id, Message message)
-        throws InvalidAlgorithmParameterException, XmlSignatureException {
-        try {
-            List<Transform> transforms = getTransforms(fac, sigType, message);
-            Reference ref = fac.newReference(uri, fac.newDigestMethod(getDigestAlgorithmUri(), null), transforms, type, id);
-            return ref;
-        } catch (NoSuchAlgorithmException e) {
-            throw new XmlSignatureException("Wrong algorithm specified in the configuration.", e);
-        }
-    }
-
-    protected String getContentReferenceType(Message message) {
-        String type = message.getHeader(XmlSignatureConstants.HEADER_CONTENT_REFERENCE_TYPE, String.class);
-        if (type == null) {
-            type = getConfiguration().getContentReferenceType();
-        }
-        LOG.debug("Content reference type: {}", type);
-        return type;
-    }
-
-    protected List<String> getContentReferenceUris(Message message, SignatureType signatureType, Node messageBodyNode)
-        throws XmlSignatureException, XPathExpressionException {
-
-        List<String> result;
-        if (SignatureType.enveloping == signatureType) {
-            String uri = "#" + getConfiguration().getContentObjectId();
-            result = Collections.singletonList(uri);
-        } else if (SignatureType.enveloped == signatureType) {
-            // only for enveloped the parameter content reference URI is used
-            String uri = message.getHeader(XmlSignatureConstants.HEADER_CONTENT_REFERENCE_URI, String.class);
-            if (uri == null) {
-                uri = getConfiguration().getContentReferenceUri();
-            }
-            if (uri == null) {
-                uri = "";
-            }
-            result = Collections.singletonList(uri);
-        } else if (SignatureType.detached == signatureType) {
-            result = getContentReferenceUrisForDetachedCase(message, messageBodyNode);
-        } else {
-            // should not occur
-            throw new IllegalStateException("Signature type " + signatureType + " not supported");
-        }
-
-        LOG.debug("Content reference URI(s): {}", result);
-        return result;
-    }
-
-    private List<String> getContentReferenceUrisForDetachedCase(Message message, Node messageBodyNode) throws XmlSignatureException,
-            XPathExpressionException {
-        List<XPathFilterParameterSpec> xpathsToIdAttributes = getXpathToIdAttributes(message);
-        if (xpathsToIdAttributes.isEmpty()) {
-            // should not happen, has already been checked earlier
-            throw new IllegalStateException("List of XPATHs to ID attributes is empty in detached signature case");
-        }
-        List<ComparableNode> result = new ArrayList<>(xpathsToIdAttributes.size());
-        for (XPathFilterParameterSpec xp : xpathsToIdAttributes) {
-            XPathExpression exp;
-            try {
-                exp = XmlSignatureHelper.getXPathExpression(xp);
-            } catch (XPathExpressionException e) {
-                throw new XmlSignatureException("The configured xpath expression " + xp.getXPath() + " is invalid.", e);
-            }
-            NodeList list = (NodeList) exp.evaluate(messageBodyNode, XPathConstants.NODESET);
-            if (list == null) {
-                //assume optional element, XSD validation has been done before
-                LOG.warn("No ID attribute found for xpath expression {}. Therfore this xpath expression will be ignored.", xp.getXPath());
-                continue;
-            }
-            int length = list.getLength();
-            for (int i = 0; i < length; i++) {
-                Node node = list.item(i);
-                if (node.getNodeType() == Node.ATTRIBUTE_NODE) {
-                    Attr attr = (Attr) node;
-                    String value = attr.getValue();
-                    // check that attribute is ID attribute
-                    Element element = messageBodyNode.getOwnerDocument().getElementById(value);
-                    if (element == null) {
-                        throw new XmlSignatureException(
-                                "Wrong configured xpath expression for ID attributes: The evaluation of the xpath expression "
-                                        + xp.getXPath() + " resulted in an attribute which is not of type ID. The attribute value is "
-                                        + value + ".");
-                    }
-                    result.add(new ComparableNode(element, "#" + value));
-                    LOG.debug("ID attribute with value {} found for xpath {}", value, xp.getXPath());
-                } else {
-                    throw new XmlSignatureException(
-                            "Wrong configured xpath expression for ID attributes: The evaluation of the xpath expression " + xp.getXPath()
-                                    + " returned a node which was not of type Attribute.");
-                }
-            }
-        }
-        if (result.size() == 0) {
-            throw new XmlSignatureException(
-                    "No element to sign found in the detached case. No node found for the configured xpath expressions "
-                            + toString(xpathsToIdAttributes)
-                            + ". Either the configuration of the XML signature component is wrong or the incoming message has not the correct structure.");
-        }
-        // sort so that elements with deeper hierarchy level are treated first
-        Collections.sort(result);
-        return ComparableNode.getReferenceUris(result);
-    }
-
-    private String toString(List<XPathFilterParameterSpec> xpathsToIdAttributes) {
-        StringBuilder result = new StringBuilder();
-        int counter = 0;
-        for (XPathFilterParameterSpec xp : xpathsToIdAttributes) {
-            counter++;
-            result.append(xp.getXPath());
-            if (counter < xpathsToIdAttributes.size()) {
-                result.append(", ");
-            }
-        }
-        return result.toString();
-    }
-
-    protected XMLObject createXMLObject(XMLSignatureFactory fac, Node node, String id) {
-        return fac.newXMLObject(Collections.singletonList(new DOMStructure(node)), id, null, null);
-    }
-
-    private List<Transform> getTransforms(XMLSignatureFactory fac, SignatureType sigType, Message message) throws NoSuchAlgorithmException,
-            InvalidAlgorithmParameterException {
-        String transformMethodsHeaderValue = message.getHeader(XmlSignatureConstants.HEADER_TRANSFORM_METHODS, String.class);
-        if (transformMethodsHeaderValue == null) {
-            List<AlgorithmMethod> configuredTrafos = getConfiguration().getTransformMethods();
-            if (SignatureType.enveloped == sigType) {
-                // add enveloped transform if necessary
-                if (configuredTrafos.size() > 0) {
-                    if (!containsEnvelopedTransform(configuredTrafos)) {
-                        configuredTrafos = new ArrayList<>(configuredTrafos.size() + 1);
-                        configuredTrafos.add(XmlSignatureHelper.getEnvelopedTransform());
-                        configuredTrafos.addAll(getConfiguration().getTransformMethods());
-                    }
-                } else {
-                    // add enveloped and C14N trafo
-                    configuredTrafos = new ArrayList<>(2);
-                    configuredTrafos.add(XmlSignatureHelper.getEnvelopedTransform());
-                    configuredTrafos.add(XmlSignatureHelper.getCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE));
-                }
-            }
-
-            List<Transform> transforms = new ArrayList<>(configuredTrafos.size());
-            for (AlgorithmMethod trafo : configuredTrafos) {
-                Transform transform = fac.newTransform(trafo.getAlgorithm(), (TransformParameterSpec) trafo.getParameterSpec());
-                transforms.add(transform);
-                LOG.debug("Transform method: {}", trafo.getAlgorithm());
-            }
-            return transforms;
-        } else {
-            LOG.debug("Header {} with value '{}' found", XmlSignatureConstants.HEADER_TRANSFORM_METHODS, transformMethodsHeaderValue);
-            String[] transformAlgorithms = transformMethodsHeaderValue.split(",");
-            List<Transform> transforms = new ArrayList<>(transformAlgorithms.length);
-            for (String transformAlgorithm : transformAlgorithms) {
-                transformAlgorithm = transformAlgorithm.trim();
-                Transform transform = fac.newTransform(transformAlgorithm, (TransformParameterSpec) null);
-                transforms.add(transform);
-                LOG.debug("Transform method: {}", transformAlgorithm);
-            }
-            return transforms;
-        }
-    }
-
-    private boolean containsEnvelopedTransform(List<AlgorithmMethod> configuredTrafos) {
-        for (AlgorithmMethod m : configuredTrafos) {
-            if (Transform.ENVELOPED.equals(m.getAlgorithm())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    protected String getDigestAlgorithmUri() throws XmlSignatureException {
-
-        String result = getConfiguration().getDigestAlgorithm();
-        if (result == null) {
-            String signatureAlgorithm = getConfiguration().getSignatureAlgorithm();
-            if (signatureAlgorithm != null) {
-                if (signatureAlgorithm.contains(SHA1)) {
-                    result = DigestMethod.SHA1;
-                } else if (signatureAlgorithm.contains(SHA224)) {
-                    result = HTTP_WWW_W3_ORG_2001_04_XMLDSIG_MORE_SHA224;
-                } else if (signatureAlgorithm.contains(SHA256)) {
-                    result = DigestMethod.SHA256;
-                } else if (signatureAlgorithm.contains(SHA384)) {
-                    result = HTTP_WWW_W3_ORG_2001_04_XMLDSIG_MORE_SHA384;
-                } else if (signatureAlgorithm.contains(SHA512)) {
-                    result = DigestMethod.SHA512;
-                } else if (signatureAlgorithm.contains(RIPEMD160)) {
-                    return DigestMethod.RIPEMD160;
-                }
-            }
-        }
-        if (result != null) {
-            LOG.debug("Digest algorithm: {}", result);
-            return result;
-        }
-        throw new XmlSignatureException(
-                "Digest algorithm missing for XML signature generation. Specify the digest algorithm in the configuration.");
-    }
-
-    protected Reference createKeyInfoReference(XMLSignatureFactory fac, String keyInfoId, String digestAlgorithm) throws Exception { //NOPMD
-
-        if (keyInfoId == null) {
-            return null;
-        }
-        if (getConfiguration().getAddKeyInfoReference() == null) {
-            return null;
-        }
-
-        if (!getConfiguration().getAddKeyInfoReference()) {
-            return null;
-        }
-
-        LOG.debug("Creating reference to key info element with Id: {}", keyInfoId);
-        List<Transform> transforms = new ArrayList<>(1);
-        Transform transform = fac.newTransform(CanonicalizationMethod.INCLUSIVE, (TransformParameterSpec) null);
-        transforms.add(transform);
-        return fac.newReference("#" + keyInfoId, fac.newDigestMethod(digestAlgorithm, null), transforms, null, null);
-    }
-
-    private String getKeyInfoId(KeyInfo keyInfo) throws Exception { //NOPMD
-        if (keyInfo == null) {
-            return null;
-        }
-        return keyInfo.getId();
-    }
-    
-    protected void setOutputEncodingToMessageHeader(Message message) {
-        if (getConfiguration().getOutputXmlEncoding() != null) {
-            message.setHeader(Exchange.CHARSET_NAME, getConfiguration().getOutputXmlEncoding());
-        }
-    }
-
-
-    private static class InputBuilder {
-
-        private XMLSignatureFactory signatureFactory;
-
-        private String signatureAlgorithm;
-
-        private Node parent;
-
-        private Node messageBodyNode;
-
-        private Message message;
-
-        private KeyInfo keyInfo;
-
-        private String contentDigestAlgorithm;
-
-        private String signatureId;
-
-        private String contentReferenceUri;
-
-        private SignatureType signatureType;
-
-        private String prefixForXmlSignatureNamespace;
-
-        public InputBuilder signatureFactory(XMLSignatureFactory signatureFactory) {
-            this.signatureFactory = signatureFactory;
-            return this;
-        }
-
-        public InputBuilder signatureAlgorithm(String signatureAlgorithm) {
-            this.signatureAlgorithm = signatureAlgorithm;
-            return this;
-        }
-
-        public InputBuilder parent(Node parent) {
-            this.parent = parent;
-            return this;
-        }
-
-        public InputBuilder messageBodyNode(Node messageBodyNode) {
-            this.messageBodyNode = messageBodyNode;
-            return this;
-        }
-
-        public InputBuilder message(Message message) {
-            this.message = message;
-            return this;
-        }
-
-        public InputBuilder keyInfo(KeyInfo keyInfo) {
-            this.keyInfo = keyInfo;
-            return this;
-        }
-
-        public InputBuilder contentDigestAlgorithm(String contentDigestAlgorithm) {
-            this.contentDigestAlgorithm = contentDigestAlgorithm;
-            return this;
-        }
-
-        public InputBuilder signatureId(String signatureId) {
-            this.signatureId = signatureId;
-            return this;
-        }
-
-        public InputBuilder contentReferenceUri(String contentReferenceUri) {
-            this.contentReferenceUri = contentReferenceUri;
-            return this;
-        }
-
-        public InputBuilder signatureType(SignatureType signatureType) {
-            this.signatureType = signatureType;
-            return this;
-        }
-
-        public InputBuilder prefixForXmlSignatureNamespace(String prefixForXmlSignatureNamespace) {
-            this.prefixForXmlSignatureNamespace = prefixForXmlSignatureNamespace;
-            return this;
-        }
-
-        public XmlSignatureProperties.Input build() {
-            return new XmlSignatureProperties.Input() {
-
-                @Override
-                public XMLSignatureFactory getSignatureFactory() {
-                    return signatureFactory;
-                }
-
-                @Override
-                public String getSignatureAlgorithm() {
-                    return signatureAlgorithm;
-                }
-
-                @Override
-                public Node getParent() {
-                    return parent;
-                }
-
-                @Override
-                public Node getMessageBodyNode() {
-                    return messageBodyNode;
-                }
-
-                @Override
-                public Message getMessage() {
-                    return message;
-                }
-
-                @Override
-                public KeyInfo getKeyInfo() {
-                    return keyInfo;
-                }
-
-                @Override
-                public String getContentDigestAlgorithm() {
-                    return contentDigestAlgorithm;
-                }
-
-                @Override
-                public String getSignatureId() {
-                    return signatureId;
-                }
-
-                @Override
-                public String getContentReferenceUri() {
-                    return contentReferenceUri;
-                }
-
-                @Override
-                public SignatureType getSignatureType() {
-                    return signatureType;
-                }
-
-                @Override
-                public String getPrefixForXmlSignatureNamespace() {
-                    return prefixForXmlSignatureNamespace;
-                }
-
-            };
-        }
-
-    }
-
-    /** Compares nodes by their hierarchy level. */
-    static class ComparableNode implements Comparable<ComparableNode> {
-
-        private final String referenceUri;
-        private final int level;
-
-        ComparableNode(Element node, String referenceUri) {
-            this.referenceUri = referenceUri;
-            level = calculateLevel(node);
-        }
-
-        private int calculateLevel(Element node) {
-            int counter = 0;
-            for (Node n = node; n != null; n = n.getParentNode()) {
-                if (Node.ELEMENT_NODE == n.getNodeType()) {
-                    counter++;
-                    if (counter > 10000) {
-                        // prevent security attack
-                        throw new IllegalStateException("Hierachy level is limited to 10000");
-                    }
-                }
-            }
-            return counter;
-        }
-
-        @Override
-        public int compareTo(ComparableNode o) {
-            return o.level - level;
-        }
-
-        String getReferenceUri() {
-            return referenceUri;
-        }
-
-        static List<String> getReferenceUris(List<ComparableNode> input) {
-            List<String> result = new ArrayList<>(input.size());
-            for (ComparableNode cn : input) {
-                result.add(cn.getReferenceUri());
-            }
-            return result;
-        }
-
-    }
-
-}
+/*
+ * 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.component.xmlsecurity.processor;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.security.GeneralSecurityException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
+
+import javax.xml.crypto.AlgorithmMethod;
+import javax.xml.crypto.KeySelector;
+import javax.xml.crypto.dom.DOMStructure;
+import javax.xml.crypto.dsig.CanonicalizationMethod;
+import javax.xml.crypto.dsig.DigestMethod;
+import javax.xml.crypto.dsig.Reference;
+import javax.xml.crypto.dsig.SignatureMethod;
+import javax.xml.crypto.dsig.SignedInfo;
+import javax.xml.crypto.dsig.Transform;
+import javax.xml.crypto.dsig.XMLObject;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureException;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
+import javax.xml.crypto.dsig.dom.DOMSignContext;
+import javax.xml.crypto.dsig.keyinfo.KeyInfo;
+import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
+import javax.xml.crypto.dsig.spec.TransformParameterSpec;
+import javax.xml.crypto.dsig.spec.XPathFilterParameterSpec;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.validation.Schema;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathExpressionException;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXException;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.component.xmlsecurity.api.KeyAccessor;
+import org.apache.camel.component.xmlsecurity.api.SignatureType;
+import org.apache.camel.component.xmlsecurity.api.XmlSignatureConstants;
+import org.apache.camel.component.xmlsecurity.api.XmlSignatureException;
+import org.apache.camel.component.xmlsecurity.api.XmlSignatureFormatException;
+import org.apache.camel.component.xmlsecurity.api.XmlSignatureHelper;
+import org.apache.camel.component.xmlsecurity.api.XmlSignatureInvalidKeyException;
+import org.apache.camel.component.xmlsecurity.api.XmlSignatureNoKeyException;
+import org.apache.camel.component.xmlsecurity.api.XmlSignatureProperties;
+import org.apache.camel.support.processor.validation.DefaultValidationErrorHandler;
+import org.apache.camel.support.processor.validation.ValidatorErrorHandler;
+import org.apache.camel.util.IOHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Creates from the message body a XML signature element which is returned in
+ * the message body of the output message. Enveloped, enveloping XML, and
+ * detached signatures are supported.
+ * <p>
+ * In the enveloped XML signature case, the method
+ * {@link XmlSignerConfiguration#getParentLocalName()} must not return
+ * <code>null</code>. In this case the parent element must be contained in the
+ * XML document provided by the message body and the signature element is added
+ * as last child element of the parent element. If a KeyInfo instance is
+ * provided by the {@link KeyAccessor} and
+ * {@link XmlSignerConfiguration#getAddKeyInfoReference()} is <code>true</code>,
+ * then also a reference to the KeyInfo element is added. The generated XML
+ * signature has the following structure:
+ * 
+ * <pre>
+ * {@code
+ * <[parent element]>
+ *     ...
+ *      <Signature Id="[signature_id]">
+ *          <SignedInfo>
+ *                <Reference URI=""> 
+ *                      <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
+ *                      (<Transform>)*
+ *                      <DigestMethod>
+ *                      <DigestValue>
+ *                </Reference>
+ *                (<Reference URI="#[keyinfo_Id]">
+ *                      <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
+ *                      <DigestMethod>
+ *                      <DigestValue>
+ *                </Reference>)?
+ *                <!-- further references possible, see XmlSignerConfiguration#setProperties(XmlSignatureProperties) -->
+ *         </SignedInfo>
+ *         <SignatureValue>
+ *         (<KeyInfo Id="[keyinfo_id]">)?
+ *         <!-- Object elements possible, see XmlSignerConfiguration#setProperties(XmlSignatureProperties) -->
+ *     </Signature>
+ * </[parent element]>
+ * }
+ * </pre>
+ * <p>
+ * In the enveloping XML signature case, the generated XML signature has the
+ * following structure:
+ * 
+ * <pre>
+ *  {@code
+ *  <Signature Id="[signature_id]">
+ *     <SignedInfo>
+ *            <Reference URI="#[object_id]" type="[optional_type_value]"> 
+ *                  (<Transform>)*
+ *                  <DigestMethod>
+ *                  <DigestValue>
+ *            </Reference>
+ *            (<Reference URI="#[keyinfo_id]">
+ *                  <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
+ *                  <DigestMethod>
+ *                  <DigestValue>
+ *            </Reference>)?
+ *             <!-- further references possible, see XmlSignerConfiguration#setProperties(XmlSignatureProperties) -->
+ *     </SignedInfo>
+ *     <SignatureValue>
+ *     (<KeyInfo Id="[keyinfo_id]">)?
+ *     <Object Id="[object_id]"/>
+ *     <!-- further Object elements possible, see XmlSignerConfiguration#setProperties(XmlSignatureProperties) -->
+ * </Signature>   
+ *  }
+ * </pre>
+ * 
+ * In the enveloping XML signature case, also message bodies containing plain
+ * text are supported. This must be indicated via the header
+ * {@link XmlSignatureConstants#HEADER_MESSAGE_IS_PLAIN_TEXT} or via the
+ * configuration {@link XmlSignerConfiguration#getPlainText()}.
+ * 
+ * <p>
+ * Detached signatures where the signature element is a sibling element to the
+ * signed element are supported. Those elements can be signed which have ID
+ * attributes. The elements to be signed must be specified via xpath expressions
+ * (see {@link XmlSignerConfiguration#setXpathsToIdAttributes(List)}) and the
+ * XML schema must be provided via the schema resource URI (see method
+ * {@link XmlSignerConfiguration#setSchemaResourceUri(String)}. Elements with
+ * deeper hierarchy level are signed first. This procedure can result in nested
+ * signatures.
+ * 
+ * <p>
+ * In all cases, the digest algorithm is either read from the configuration
+ * method {@link XmlSignerConfiguration#getDigestAlgorithm()} or calculated from
+ * the signature algorithm (
+ * {@link XmlSignerConfiguration#getSignatureAlgorithm()}. The optional
+ * transforms are read from {@link XmlSignerConfiguration#getTransformMethods()}
+ * .
+ * <p>
+ * In all cases, you can add additional references and objects which contain
+ * properties for the XML signature, see
+ * {@link XmlSignerConfiguration#setProperties(XmlSignatureProperties)}.
+ */
+
+public class XmlSignerProcessor extends XmlSignatureProcessor {
+
+    private static final Logger LOG = LoggerFactory.getLogger(XmlSignerProcessor.class);
+
+    private static final String SHA512 = "sha512";
+    private static final String SHA384 = "sha384";
+    private static final String SHA256 = "sha256";
+    private static final String SHA224 = "sha224";
+    private static final String SHA1 = "sha1";
+    private static final String RIPEMD160 = "ripemd160";
+
+    private static final String HTTP_WWW_W3_ORG_2001_04_XMLDSIG_MORE_SHA224 = 
+        "http://www.w3.org/2001/04/xmldsig-more#sha224"; // see RFC 4051
+    
+    private static final String HTTP_WWW_W3_ORG_2001_04_XMLDSIG_MORE_SHA384 = 
+        "http://www.w3.org/2001/04/xmldsig-more#sha384"; // see RFC 4051
+
+    private final XmlSignerConfiguration config;
+    
+    public XmlSignerProcessor(XmlSignerConfiguration config) {
+        this.config = config;
+    }
+
+    @Override
+    public XmlSignerConfiguration getConfiguration() {
+        return config;
+    }
+
+    @Override
+    public void process(Exchange exchange) throws Exception { //NOPMD
+
+        try {
+            LOG.debug("XML signature generation started using algorithm {} and canonicalization method {}", getConfiguration()
+                    .getSignatureAlgorithm(), getConfiguration().getCanonicalizationMethod().getAlgorithm());
+
+            // lets setup the out message before we invoke the signing
+            // so that it can mutate it if necessary
+            Message out = exchange.getOut();
+            out.copyFrom(exchange.getIn());
+
+            Document outputDoc = sign(out);
+
+            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+            XmlSignatureHelper.transformNonTextNodeToOutputStream(outputDoc, outStream, omitXmlDeclaration(out), getConfiguration().getOutputXmlEncoding());
+            byte[] data = outStream.toByteArray();
+            out.setBody(data);
+            setOutputEncodingToMessageHeader(out);
+            clearMessageHeaders(out);
+            LOG.debug("XML signature generation finished");
+        } catch (Exception e) {
+            // remove OUT message, as an exception occurred
+            exchange.setOut(null);
+            throw e;
+        }
+    }
+
+    protected Document sign(final Message out) throws Exception { //NOPMD
+
+        try {
+            XMLSignatureFactory fac;
+            // Try to install the Santuario Provider - fall back to the JDK provider if this does
+            // not work
+            try {
+                fac = XMLSignatureFactory.getInstance("DOM", "ApacheXMLDSig");
+            } catch (NoSuchProviderException ex) {
+                fac = XMLSignatureFactory.getInstance("DOM");
+            }
+
+            final Node node = getMessageBodyNode(out);
+
+            if (getConfiguration().getKeyAccessor() == null) {
+                throw new XmlSignatureNoKeyException(
+                    "Key accessor is missing for XML signature generation. Specify a key accessor in the configuration.");
+            }
+            
+            final KeySelector keySelector = getConfiguration().getKeyAccessor().getKeySelector(out);
+            if (keySelector == null) {
+                throw new XmlSignatureNoKeyException(
+                        "Key selector is missing for XML signature generation. Specify a key selector in the configuration.");
+            }
+
+            SignatureType signatureType = determineSignatureType(out);
+
+            final List<String> contentReferenceUris = getContentReferenceUris(out, signatureType, node);
+
+            Node lastParent = null;
+            // per content reference URI a signature is built; for enveloped and enveloping there is only one content reference URI;
+            // only in the detached case there can be several
+            for (final String contentReferenceUri : contentReferenceUris) {
+
+                // the method KeyAccessor.getKeyInfo must be called after the method KeyAccessor.getKeySelector, this is part of the interface contract!
+                // and this method must be called within the loop over the content reference URIs, because for each signature the key info ID must be different
+                final KeyInfo keyInfo = getConfiguration().getKeyAccessor().getKeyInfo(out, node, fac.getKeyInfoFactory());
+
+                String signatureId = getConfiguration().getSignatureId();
+                if (signatureId == null) {
+                    signatureId = "_" + UUID.randomUUID().toString();
+                } else if (signatureId.isEmpty()) {
+                    // indicator that no signature Id attribute shall be generated
+                    signatureId = null;
+                }
+
+                // parent only relevant for enveloped or detached signature
+                Node parent = getParentOfSignature(out, node, contentReferenceUri, signatureType);
+
+                if (parent == null) {
+                    // for enveloping signature, create new document 
+                    parent = XmlSignatureHelper.newDocumentBuilder(Boolean.TRUE).newDocument();
+                }
+                lastParent = parent;
+
+                XmlSignatureProperties.Input input = new InputBuilder().contentDigestAlgorithm(getDigestAlgorithmUri()).keyInfo(keyInfo)
+                        .message(out).messageBodyNode(node).parent(parent).signatureAlgorithm(getConfiguration().getSignatureAlgorithm())
+                        .signatureFactory(fac).signatureId(signatureId).contentReferenceUri(contentReferenceUri)
+                        .signatureType(signatureType)
+                        .prefixForXmlSignatureNamespace(getConfiguration().getPrefixForXmlSignatureNamespace()).build();
+
+                XmlSignatureProperties.Output properties = getSignatureProperties(input);
+
+                
+                // the signature properties can overwrite the signature Id
+                if (properties != null && properties.getSignatureId() != null && !properties.getSignatureId().isEmpty()) {
+                    signatureId = properties.getSignatureId();
+                }
+
+                List<? extends XMLObject> objects = getObjects(input, properties);
+                List<? extends Reference> refs = getReferences(input, properties, getKeyInfoId(keyInfo));
+
+                SignedInfo si = createSignedInfo(fac, refs);
+
+                DOMSignContext dsc = createAndConfigureSignContext(parent, keySelector);
+
+                XMLSignature signature = fac.newXMLSignature(si, keyInfo, objects, signatureId, null);
+                // generate the signature
+                signature.sign(dsc);
+            }
+
+            return XmlSignatureHelper.getDocument(lastParent);
+
+        } catch (XMLSignatureException se) {
+            if (se.getCause() instanceof InvalidKeyException) {
+                throw new XmlSignatureInvalidKeyException(se.getMessage(), se);
+            } else {
+                throw new XmlSignatureException(se);
+            }
+        } catch (GeneralSecurityException e) {
+            // like NoSuchAlgorithmException, InvalidAlgorithmParameterException, NoSuchProviderException
+            throw new XmlSignatureException(e);
+        }
+
+    }
+
+    private SignatureType determineSignatureType(Message message) throws XmlSignatureException {
+        if (getConfiguration().getParentLocalName() != null && getConfiguration().getParentXpath() != null) {
+            throw new XmlSignatureException(
+                    "The configuration of the XML signer component is wrong. The parent local name "
+                            + getConfiguration().getParentLocalName()
+                            + " and the parent XPath " + getConfiguration().getParentXpath().getXPath() + " are specified. You must not specify both parameters.");
+
+        }
+
+        boolean isEnveloped = getConfiguration().getParentLocalName() != null || getConfiguration().getParentXpath() != null;
+
+        boolean isDetached = getXpathToIdAttributes(message).size() > 0;
+
+        if (isEnveloped && isDetached) {
+            if (getConfiguration().getParentLocalName() != null) {
+                throw new XmlSignatureException(
+                    "The configuration of the XML signer component is wrong. The parent local name "
+                            + getConfiguration().getParentLocalName()
+                            + " for an enveloped signature and the XPATHs to ID attributes for a detached signature are specified. You must not specify both parameters.");
+            } else {
+                throw new XmlSignatureException(
+                        "The configuration of the XML signer component is wrong. The parent XPath "
+                                + getConfiguration().getParentXpath().getXPath()
+                                + " for an enveloped signature and the XPATHs to ID attributes for a detached signature are specified. You must not specify both parameters.");
+
+            }
+        }
+
+        SignatureType result;
+        if (isEnveloped) {
+            result = SignatureType.enveloped;
+        } else if (isDetached) {
+            if (getSchemaResourceUri(message) == null) {
+                throw new XmlSignatureException(
+                        "The configruation of the XML Signature component is wrong: No XML schema specified in the detached case");
+            }
+            result = SignatureType.detached;
+        } else {
+            result = SignatureType.enveloping;
+        }
+
+        LOG.debug("Signature type: {}", result);
+        return result;
+
+    }
+
+    protected List<XPathFilterParameterSpec> getXpathToIdAttributes(Message message) {
+
+        @SuppressWarnings("unchecked")
+        List<XPathFilterParameterSpec> result = (List<XPathFilterParameterSpec>) message
+                .getHeader(XmlSignatureConstants.HEADER_XPATHS_TO_ID_ATTRIBUTES);
+        if (result == null) {
+            result = getConfiguration().getXpathsToIdAttributes();
+        }
+        return result;
+    }
+
+    protected XmlSignatureProperties.Output getSignatureProperties(XmlSignatureProperties.Input input) throws Exception { //NOPMD
+        XmlSignatureProperties propGetter = getConfiguration().getProperties();
+        XmlSignatureProperties.Output propsOutput = null;
+        if (propGetter != null) {
+            propsOutput = propGetter.get(input);
+        }
+        return propsOutput;
+    }
+
+    private DOMSignContext createAndConfigureSignContext(Node parent, KeySelector keySelector) {
+        DOMSignContext dsc = new DOMSignContext(keySelector, parent);
+        // set namespace prefix for "http://www.w3.org/2000/09/xmldsig#" according to best practice described in http://www.w3.org/TR/xmldsig-bestpractices/#signing-xml-without-namespaces
+        if (getConfiguration().getPrefixForXmlSignatureNamespace() != null
+                && !getConfiguration().getPrefixForXmlSignatureNamespace().isEmpty()) {
+            dsc.putNamespacePrefix("http://www.w3.org/2000/09/xmldsig#", getConfiguration().getPrefixForXmlSignatureNamespace());
+        }
+        dsc.putNamespacePrefix("http://www.w3.org/2001/10/xml-exc-c14n#", "ec");
+        setCryptoContextProperties(dsc);
+        setUriDereferencerAndBaseUri(dsc);
+        return dsc;
+    }
+
+    protected Boolean omitXmlDeclaration(Message message) {
+        Boolean omitXmlDeclaration = message.getHeader(XmlSignatureConstants.HEADER_OMIT_XML_DECLARATION, Boolean.class);
+        if (omitXmlDeclaration == null) {
+            omitXmlDeclaration = getConfiguration().getOmitXmlDeclaration();
+        }
+        if (omitXmlDeclaration == null) {
+            omitXmlDeclaration = Boolean.FALSE;
+        }
+        LOG.debug("Omit XML declaration: {}", omitXmlDeclaration);
+        return omitXmlDeclaration;
+    }
+
+    protected SignedInfo createSignedInfo(XMLSignatureFactory fac, List<? extends Reference> refs) throws Exception { //NOPMD
+        return fac.newSignedInfo(fac.newCanonicalizationMethod(getConfiguration().getCanonicalizationMethod().getAlgorithm(),
+                (C14NMethodParameterSpec) getConfiguration().getCanonicalizationMethod().getParameterSpec()),
+                getSignatureMethod(getConfiguration().getSignatureAlgorithm(), fac), refs);
+    }
+
+    private SignatureMethod getSignatureMethod(String signatureAlgorithm, XMLSignatureFactory fac) throws NoSuchAlgorithmException,
+            InvalidAlgorithmParameterException {
+        return fac.newSignatureMethod(signatureAlgorithm, null);
+    }
+
+    protected Node getMessageBodyNode(Message message) throws Exception { //NOPMD
+        InputStream is = message.getMandatoryBody(InputStream.class);
+
+        Boolean isPlainText = isPlainText(message);
+
+        Node node;
+        if (isPlainText != null && isPlainText) {
+            node = getTextNode(message, is);
+        } else {
+            ValidatorErrorHandler errorHandler = new DefaultValidationErrorHandler();
+            Schema schema = getSchemaForSigner(message, errorHandler);
+            Document doc = parseInput(is, getConfiguration().getDisallowDoctypeDecl(), schema, errorHandler);
+            errorHandler.handleErrors(message.getExchange(), schema, null); // throws ValidationException
+            node = doc.getDocumentElement();
+            LOG.debug("Root element of document to be signed: {}", node);
+        }
+        return node;
+    }
+
+    protected Schema getSchemaForSigner(Message message, ValidatorErrorHandler errorHandler) throws XmlSignatureException, SAXException,
+            IOException {
+        Schema schema;
+        String schemaResourceUri = getSchemaResourceUri(message);
+        if (schemaResourceUri == null) {
+            schema = null;
+        } else {
+            schema = getSchema(message);
+        }
+        return schema;
+    }
+
+    protected Boolean isPlainText(Message message) {
+        Boolean isPlainText = message.getHeader(XmlSignatureConstants.HEADER_MESSAGE_IS_PLAIN_TEXT, Boolean.class);
+        if (isPlainText == null) {
+            isPlainText = getConfiguration().getPlainText();
+        }
+        LOG.debug("Is plain text: {}", isPlainText);
+        return isPlainText;
+    }
+
+    protected Element getParentOfSignature(Message inMessage, Node messageBodyNode, String contentReferenceURI, SignatureType sigType)
+        throws Exception { //NOPMD
+        if (SignatureType.enveloping == sigType) {
+            // enveloping case
+            return null;
+        }
+        if (messageBodyNode.getParentNode() == null || messageBodyNode.getParentNode().getNodeType() != Node.DOCUMENT_NODE) {
+            throw new XmlSignatureFormatException(
+                    "Incomming message has wrong format: It is not an XML document. Cannot create an enveloped or detached XML signature.");
+        }
+        Document doc = (Document) messageBodyNode.getParentNode();
+        if (SignatureType.detached == sigType) {
+            return getParentForDetachedCase(doc, inMessage, contentReferenceURI);
+        } else {
+            // enveloped case
+            return getParentForEnvelopedCase(doc, inMessage);
+        }
+
+    }
+    
+    protected Element getParentForEnvelopedCase(Document doc, Message inMessage) throws Exception { //NOPMD
+        if (getConfiguration().getParentXpath() != null) {
+            XPathFilterParameterSpec xp = getConfiguration().getParentXpath();
+            XPathExpression exp;
+            try {
+                exp = XmlSignatureHelper.getXPathExpression(xp);
+            } catch (XPathExpressionException e) {
+                throw new XmlSignatureException("The parent XPath " + getConfiguration().getParentXpath().getXPath() + " is wrongly configured: The XPath " + xp.getXPath() + " is invalid.", e);
+            }
+            NodeList list = (NodeList) exp.evaluate(doc.getDocumentElement(), XPathConstants.NODESET);
+            if (list == null || list.getLength() == 0) {
+                throw new XmlSignatureException("The parent XPath " + xp.getXPath() + " returned no result. Check the configuration of the XML signer component.");
+            }
+            int length = list.getLength();
+            for (int i = 0; i < length; i++) {
+                Node node = list.item(i);
+                if (node.getNodeType() == Node.ELEMENT_NODE) {
+                    // return the first element
+                    return (Element)node;
+                }
+            }
+            throw new XmlSignatureException("The parent XPath " + xp.getXPath() + " returned no element. Check the configuration of the XML signer component.");
+        } else {
+            // parent local name is not null!
+            NodeList parents = doc.getElementsByTagNameNS(getConfiguration().getParentNamespace(), getConfiguration().getParentLocalName());
+            if (parents == null || parents.getLength() == 0) {
+                throw new XmlSignatureFormatException(
+                        String.format(
+                                "Incoming message has wrong format: The parent element with the local name %s and the namespace %s was not found in the message to build an enveloped XML signature.",
+                                getConfiguration().getParentLocalName(), getConfiguration().getParentNamespace()));
+            }
+            // return the first element
+            return (Element) parents.item(0);
+        }
+    }
+
+    private Element getParentForDetachedCase(Document doc, Message inMessage, String referenceUri) throws XmlSignatureException {
+        String elementId = referenceUri;
+        if (elementId.startsWith("#")) {
+            elementId = elementId.substring(1);
+        }
+        Element el = doc.getElementById(elementId);
+        if (el == null) {
+            // should not happen because has been checked before
+            throw new IllegalStateException("No element found for element ID " + elementId);
+        }
+        LOG.debug("Sibling element of the detached XML Signature with reference URI {}: {}  {}",
+                new Object[] {referenceUri, el.getLocalName(), el.getNamespaceURI() });
+        Element result = getParentElement(el);
+        if (result != null) {
+            return result;
+        } else {
+            throw new XmlSignatureException(
+                    "Either the configuration of the XML Signature component is wrong or the incoming document has an invalid structure: The element "
+                            + el.getLocalName() + "{" + el.getNamespaceURI() + "} which is referenced by the reference URI " + referenceUri
+                            + " has no parent element. The element must have a parent element in the configured detached case.");
+        }
+    }
+
+    private Element getParentElement(Node node) {
+        int counter = 0;
+        while (node != null && counter < 10000) {
+            // counter is for avoiding security attacks
+            Node parent = node.getParentNode();
+            if (parent != null && parent.getNodeType() == Node.ELEMENT_NODE) {
+                return (Element) parent;
+            }
+            node = parent;
+            counter++;
+        }
+        return null;
+    }
+
+    protected List<? extends Reference> getReferences(XmlSignatureProperties.Input input, XmlSignatureProperties.Output properties,
+            String keyInfoId) throws Exception { //NOPMD
+
+        String referenceId = properties == null ? null : properties.getContentReferenceId();
+        // Create Reference with URI="#<objectId>" for enveloping signature, URI="" for enveloped signature, and URI = <value from configuration> for detached signature and the transforms
+        Reference ref = createReference(input.getSignatureFactory(), input.getContentReferenceUri(),
+                getContentReferenceType(input.getMessage()), input.getSignatureType(), referenceId, input.getMessage());
+        Reference keyInfoRef = createKeyInfoReference(input.getSignatureFactory(), keyInfoId, input.getContentDigestAlgorithm());
+
+        int propsRefsSize = properties == null || properties.getReferences() == null || properties.getReferences().isEmpty() ? 0
+                : properties.getReferences().size();
+        int size = keyInfoRef == null ? propsRefsSize + 1 : propsRefsSize + 2;
+        List<Reference> referenceList = new ArrayList<>(size);
+        referenceList.add(ref);
+        if (keyInfoRef != null) {
+            referenceList.add(keyInfoRef);
+        }
+        if (properties != null && properties.getReferences() != null && !properties.getReferences().isEmpty()) {
+            referenceList.addAll(properties.getReferences());
+        }
+        return referenceList;
+    }
+
+    protected List<? extends XMLObject> getObjects(XmlSignatureProperties.Input input, XmlSignatureProperties.Output properties)
+        throws Exception { //NOPMD
+
+        if (SignatureType.enveloped == input.getSignatureType() || SignatureType.detached == input.getSignatureType()) {
+            if (properties == null || properties.getObjects() == null) {
+                return Collections.emptyList();
+            }
+            return properties.getObjects();
+        }
+
+        // enveloping signature --> add additional object
+        final String objectId = getConfiguration().getContentObjectId();
+        LOG.debug("Object Content Id {}", objectId);
+
+        XMLObject obj = createXMLObject(input.getSignatureFactory(), input.getMessageBodyNode(), objectId);
+        if (properties == null || properties.getObjects() == null || properties.getObjects().isEmpty()) {
+            return Collections.singletonList(obj);
+        }
+        List<XMLObject> result = new ArrayList<>(properties.getObjects().size() + 1);
+        result.add(obj);
+        result.addAll(properties.getObjects());
+        return result;
+    }
+
+    private Node getTextNode(Message inMessage, InputStream is) throws IOException, ParserConfigurationException, XmlSignatureException {
+        LOG.debug("Message body to be signed is plain text");
+        String encoding = getMessageEncoding(inMessage);
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        IOHelper.copyAndCloseInput(is, bos);
+        try {
+            String text = new String(bos.toByteArray(), encoding);
+            return XmlSignatureHelper.newDocumentBuilder(true).newDocument().createTextNode(text);
+        } catch (UnsupportedEncodingException e) {
+            throw new XmlSignatureException(String.format("The message encoding %s is not supported.", encoding), e);
+        }
+    }
+
+    protected String getMessageEncoding(Message inMessage) {
+        String encoding = inMessage.getHeader(XmlSignatureConstants.HEADER_PLAIN_TEXT_ENCODING, String.class);
+        if (encoding == null) {
+            encoding = getConfiguration().getPlainTextEncoding();
+        }
+        LOG.debug("Messge encoding: {}", encoding);
+        return encoding;
+    }
+
+    protected Document parseInput(InputStream is, Boolean disallowDoctypeDecl, Schema schema, ErrorHandler errorHandler)
+        throws ParserConfigurationException, IOException, XmlSignatureFormatException {
+        try {
+            DocumentBuilder db = XmlSignatureHelper.newDocumentBuilder(disallowDoctypeDecl, schema);
+            db.setErrorHandler(errorHandler);
+            return db.parse(is);
+        } catch (SAXException e) {
+            throw new XmlSignatureFormatException(
+                    "XML signature generation not possible. Sent message is not an XML document. Check the sent message.", e);
+        } finally {
+            IOHelper.close(is, "input stream");
+        }
+    }
+
+    protected Reference createReference(XMLSignatureFactory fac, String uri, String type, SignatureType sigType, String id, Message message)
+        throws InvalidAlgorithmParameterException, XmlSignatureException {
+        try {
+            List<Transform> transforms = getTransforms(fac, sigType, message);
+            Reference ref = fac.newReference(uri, fac.newDigestMethod(getDigestAlgorithmUri(), null), transforms, type, id);
+            return ref;
+        } catch (NoSuchAlgorithmException e) {
+            throw new XmlSignatureException("Wrong algorithm specified in the configuration.", e);
+        }
+    }
+
+    protected String getContentReferenceType(Message message) {
+        String type = message.getHeader(XmlSignatureConstants.HEADER_CONTENT_REFERENCE_TYPE, String.class);
+        if (type == null) {
+            type = getConfiguration().getContentReferenceType();
+        }
+        LOG.debug("Content reference type: {}", type);
+        return type;
+    }
+
+    protected List<String> getContentReferenceUris(Message message, SignatureType signatureType, Node messageBodyNode)
+        throws XmlSignatureException, XPathExpressionException {
+
+        List<String> result;
+        if (SignatureType.enveloping == signatureType) {
+            String uri = "#" + getConfiguration().getContentObjectId();
+            result = Collections.singletonList(uri);
+        } else if (SignatureType.enveloped == signatureType) {
+            // only for enveloped the parameter content reference URI is used
+            String uri = message.getHeader(XmlSignatureConstants.HEADER_CONTENT_REFERENCE_URI, String.class);
+            if (uri == null) {
+                uri = getConfiguration().getContentReferenceUri();
+            }
+            if (uri == null) {
+                uri = "";
+            }
+            result = Collections.singletonList(uri);
+        } else if (SignatureType.detached == signatureType) {
+            result = getContentReferenceUrisForDetachedCase(message, messageBodyNode);
+        } else {
+            // should not occur
+            throw new IllegalStateException("Signature type " + signatureType + " not supported");
+        }
+
+        LOG.debug("Content reference URI(s): {}", result);
+        return result;
+    }
+
+    private List<String> getContentReferenceUrisForDetachedCase(Message message, Node messageBodyNode) throws XmlSignatureException,
+            XPathExpressionException {
+        List<XPathFilterParameterSpec> xpathsToIdAttributes = getXpathToIdAttributes(message);
+        if (xpathsToIdAttributes.isEmpty()) {
+            // should not happen, has already been checked earlier
+            throw new IllegalStateException("List of XPATHs to ID attributes is empty in detached signature case");
+        }
+        List<ComparableNode> result = new ArrayList<>(xpathsToIdAttributes.size());
+        for (XPathFilterParameterSpec xp : xpathsToIdAttributes) {
+            XPathExpression exp;
+            try {
+                exp = XmlSignatureHelper.getXPathExpression(xp);
+            } catch (XPathExpressionException e) {
+                throw new XmlSignatureException("The configured xpath expression " + xp.getXPath() + " is invalid.", e);
+            }
+            NodeList list = (NodeList) exp.evaluate(messageBodyNode, XPathConstants.NODESET);
+            if (list == null) {
+                //assume optional element, XSD validation has been done before
+                LOG.warn("No ID attribute found for xpath expression {}. Therfore this xpath expression will be ignored.", xp.getXPath());
+                continue;
+            }
+            int length = list.getLength();
+            for (int i = 0; i < length; i++) {
+                Node node = list.item(i);
+                if (node.getNodeType() == Node.ATTRIBUTE_NODE) {
+                    Attr attr = (Attr) node;
+                    String value = attr.getValue();
+                    // check that attribute is ID attribute
+                    Element element = messageBodyNode.getOwnerDocument().getElementById(value);
+                    if (element == null) {
+                        throw new XmlSignatureException(
+                                "Wrong configured xpath expression for ID attributes: The evaluation of the xpath expression "
+                                        + xp.getXPath() + " resulted in an attribute which is not of type ID. The attribute value is "
+                                        + value + ".");
+                    }
+                    result.add(new ComparableNode(element, "#" + value));
+                    LOG.debug("ID attribute with value {} found for xpath {}", value, xp.getXPath());
+                } else {
+                    throw new XmlSignatureException(
+                            "Wrong configured xpath expression for ID attributes: The evaluation of the xpath expression " + xp.getXPath()
+                                    + " returned a node which was not of type Attribute.");
+                }
+            }
+        }
+        if (result.size() == 0) {
+            throw new XmlSignatureException(
+                    "No element to sign found in the detached case. No node found for the configured xpath expressions "
+                            + toString(xpathsToIdAttributes)
+                            + ". Either the configuration of the XML signature component is wrong or the incoming message has not the correct structure.");
+        }
+        // sort so that elements with deeper hierarchy level are treated first
+        Collections.sort(result);
+        return ComparableNode.getReferenceUris(result);
+    }
+
+    private String toString(List<XPathFilterParameterSpec> xpathsToIdAttributes) {
+        StringBuilder result = new StringBuilder();
+        int counter = 0;
+        for (XPathFilterParameterSpec xp : xpathsToIdAttributes) {
+            counter++;
+            result.append(xp.getXPath());
+            if (counter < xpathsToIdAttributes.size()) {
+                result.append(", ");
+            }
+        }
+        return result.toString();
+    }
+
+    protected XMLObject createXMLObject(XMLSignatureFactory fac, Node node, String id) {
+        return fac.newXMLObject(Collections.singletonList(new DOMStructure(node)), id, null, null);
+    }
+
+    private List<Transform> getTransforms(XMLSignatureFactory fac, SignatureType sigType, Message message) throws NoSuchAlgorithmException,
+            InvalidAlgorithmParameterException {
+        String transformMethodsHeaderValue = message.getHeader(XmlSignatureConstants.HEADER_TRANSFORM_METHODS, String.class);
+        if (transformMethodsHeaderValue == null) {
+            List<AlgorithmMethod> configuredTrafos = getConfiguration().getTransformMethods();
+            if (SignatureType.enveloped == sigType) {
+                // add enveloped transform if necessary
+                if (configuredTrafos.size() > 0) {
+                    if (!containsEnvelopedTransform(configuredTrafos)) {
+                        configuredTrafos = new ArrayList<>(configuredTrafos.size() + 1);
+                        configuredTrafos.add(XmlSignatureHelper.getEnvelopedTransform());
+                        configuredTrafos.addAll(getConfiguration().getTransformMethods());
+                    }
+                } else {
+                    // add enveloped and C14N trafo
+                    configuredTrafos = new ArrayList<>(2);
+                    configuredTrafos.add(XmlSignatureHelper.getEnvelopedTransform());
+                    configuredTrafos.add(XmlSignatureHelper.getCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE));
+                }
+            }
+
+            List<Transform> transforms = new ArrayList<>(configuredTrafos.size());
+            for (AlgorithmMethod trafo : configuredTrafos) {
+                Transform transform = fac.newTransform(trafo.getAlgorithm(), (TransformParameterSpec) trafo.getParameterSpec());
+                transforms.add(transform);
+                LOG.debug("Transform method: {}", trafo.getAlgorithm());
+            }
+            return transforms;
+        } else {
+            LOG.debug("Header {} with value '{}' found", XmlSignatureConstants.HEADER_TRANSFORM_METHODS, transformMethodsHeaderValue);
+            String[] transformAlgorithms = transformMethodsHeaderValue.split(",");
+            List<Transform> transforms = new ArrayList<>(transformAlgorithms.length);
+            for (String transformAlgorithm : transformAlgorithms) {
+                transformAlgorithm = transformAlgorithm.trim();
+                Transform transform = fac.newTransform(transformAlgorithm, (TransformParameterSpec) null);
+                transforms.add(transform);
+                LOG.debug("Transform method: {}", transformAlgorithm);
+            }
+            return transforms;
+        }
+    }
+
+    private boolean containsEnvelopedTransform(List<AlgorithmMethod> configuredTrafos) {
+        for (AlgorithmMethod m : configuredTrafos) {
+            if (Transform.ENVELOPED.equals(m.getAlgorithm())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    protected String getDigestAlgorithmUri() throws XmlSignatureException {
+
+        String result = getConfiguration().getDigestAlgorithm();
+        if (result == null) {
+            String signatureAlgorithm = getConfiguration().getSignatureAlgorithm();
+            if (signatureAlgorithm != null) {
+                if (signatureAlgorithm.contains(SHA1)) {
+                    result = DigestMethod.SHA1;
+                } else if (signatureAlgorithm.contains(SHA224)) {
+                    result = HTTP_WWW_W3_ORG_2001_04_XMLDSIG_MORE_SHA224;
+                } else if (signatureAlgorithm.contains(SHA256)) {
+                    result = DigestMethod.SHA256;
+                } else if (signatureAlgorithm.contains(SHA384)) {
+                    result = HTTP_WWW_W3_ORG_2001_04_XMLDSIG_MORE_SHA384;
+                } else if (signatureAlgorithm.contains(SHA512)) {
+                    result = DigestMethod.SHA512;
+                } else if (signatureAlgorithm.contains(RIPEMD160)) {
+                    return DigestMethod.RIPEMD160;
+                }
+            }
+        }
+        if (result != null) {
+            LOG.debug("Digest algorithm: {}", result);
+            return result;
+        }
+        throw new XmlSignatureException(
+                "Digest algorithm missing for XML signature generation. Specify the digest algorithm in the configuration.");
+    }
+
+    protected Reference createKeyInfoReference(XMLSignatureFactory fac, String keyInfoId, String digestAlgorithm) throws Exception { //NOPMD
+
+        if (keyInfoId == null) {
+            return null;
+        }
+        if (getConfiguration().getAddKeyInfoReference() == null) {
+            return null;
+        }
+
+        if (!getConfiguration().getAddKeyInfoReference()) {
+            return null;
+        }
+
+        LOG.debug("Creating reference to key info element with Id: {}", keyInfoId);
+        List<Transform> transforms = new ArrayList<>(1);
+        Transform transform = fac.newTransform(CanonicalizationMethod.INCLUSIVE, (TransformParameterSpec) null);
+        transforms.add(transform);
+        return fac.newReference("#" + keyInfoId, fac.newDigestMethod(digestAlgorithm, null), transforms, null, null);
+    }
+
+    private String getKeyInfoId(KeyInfo keyInfo) throws Exception { //NOPMD
+        if (keyInfo == null) {
+            return null;
+        }
+        return keyInfo.getId();
+    }
+    
+    protected void setOutputEncodingToMessageHeader(Message message) {
+        if (getConfiguration().getOutputXmlEncoding() != null) {
+            message.setHeader(Exchange.CHARSET_NAME, getConfiguration().getOutputXmlEncoding());
+        }
+    }
+
+
+    private static class InputBuilder {
+
+        private XMLSignatureFactory signatureFactory;
+
+        private String signatureAlgorithm;
+
+        private Node parent;
+
+        private Node messageBodyNode;
+
+        private Message message;
+
+        private KeyInfo keyInfo;
+
+        private String contentDigestAlgorithm;
+
+        private String signatureId;
+
+        private String contentReferenceUri;
+
+        private SignatureType signatureType;
+
+        private String prefixForXmlSignatureNamespace;
+
+        public InputBuilder signatureFactory(XMLSignatureFactory signatureFactory) {
+            this.signatureFactory = signatureFactory;
+            return this;
+        }
+
+        public InputBuilder signatureAlgorithm(String signatureAlgorithm) {
+            this.signatureAlgorithm = signatureAlgorithm;
+            return this;
+        }
+
+        public InputBuilder parent(Node parent) {
+            this.parent = parent;
+            return this;
+        }
+
+        public InputBuilder messageBodyNode(Node messageBodyNode) {
+            this.messageBodyNode = messageBodyNode;
+            return this;
+        }
+
+        public InputBuilder message(Message message) {
+            this.message = message;
+            return this;
+        }
+
+        public InputBuilder keyInfo(KeyInfo keyInfo) {
+            this.keyInfo = keyInfo;
+            return this;
+        }
+
+        public InputBuilder contentDigestAlgorithm(String contentDigestAlgorithm) {
+            this.contentDigestAlgorithm = contentDigestAlgorithm;
+            return this;
+        }
+
+        public InputBuilder signatureId(String signatureId) {
+            this.signatureId = signatureId;
+            return this;
+        }
+
+        public InputBuilder contentReferenceUri(String contentReferenceUri) {
+            this.contentReferenceUri = contentReferenceUri;
+            return this;
+        }
+
+        public InputBuilder signatureType(SignatureType signatureType) {
+            this.signatureType = signatureType;
+            return this;
+        }
+
+        public InputBuilder prefixForXmlSignatureNamespace(String prefixForXmlSignatureNamespace) {
+            this.prefixForXmlSignatureNamespace = prefixForXmlSignatureNamespace;
+            return this;
+        }
+
+        public XmlSignatureProperties.Input build() {
+            return new XmlSignatureProperties.Input() {
+
+                @Override
+                public XMLSignatureFactory getSignatureFactory() {
+                    return signatureFactory;
+                }
+
+                @Override
+                public String getSignatureAlgorithm() {
+                    return signatureAlgorithm;
+                }
+
+                @Override
+                public Node getParent() {
+                    return parent;
+                }
+
+                @Override
+                public Node getMessageBodyNode() {
+                    return messageBodyNode;
+                }
+
+                @Override
+                public Message getMessage() {
+                    return message;
+                }
+
+                @Override
+                public KeyInfo getKeyInfo() {
+                    return keyInfo;
+                }
+
+                @Override
+                public String getContentDigestAlgorithm() {
+                    return contentDigestAlgorithm;
+                }
+
+                @Override
+                public String getSignatureId() {
+                    return signatureId;
+                }
+
+                @Override
+                public String getContentReferenceUri() {
+                    return contentReferenceUri;
+                }
+
+                @Override
+                public SignatureType getSignatureType() {
+                    return signatureType;
+                }
+
+                @Override
+                public String getPrefixForXmlSignatureNamespace() {
+                    return prefixForXmlSignatureNamespace;
+                }
+
+            };
+        }
+
+    }
+
+    /** Compares nodes by their hierarchy level. */
+    static class ComparableNode implements Comparable<ComparableNode> {
+
+        private final String referenceUri;
+        private final int level;
+
+        ComparableNode(Element node, String referenceUri) {
+            this.referenceUri = referenceUri;
+            level = calculateLevel(node);
+        }
+
+        private int calculateLevel(Element node) {
+            int counter = 0;
+            for (Node n = node; n != null; n = n.getParentNode()) {
+                if (Node.ELEMENT_NODE == n.getNodeType()) {
+                    counter++;
+                    if (counter > 10000) {
+                        // prevent security attack
+                        throw new IllegalStateException("Hierachy level is limited to 10000");
+                    }
+                }
+            }
+            return counter;
+        }
+
+        @Override
+        public int compareTo(ComparableNode o) {
+            return o.level - level;
+        }
+
+        String getReferenceUri() {
+            return referenceUri;
+        }
+
+        static List<String> getReferenceUris(List<ComparableNode> input) {
+            List<String> result = new ArrayList<>(input.size());
+            for (ComparableNode cn : input) {
+                result.add(cn.getReferenceUri());
+            }
+            return result;
+        }
+
+    }
+
+}
diff --git a/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/SignatureAlgorithmTest.java b/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/SignatureAlgorithmTest.java
index d29bcd4..bc363a2 100644
--- a/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/SignatureAlgorithmTest.java
+++ b/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/SignatureAlgorithmTest.java
@@ -78,7 +78,6 @@
 import org.junit.Before;
 import org.junit.Test;
 
-
 /**
  * Test signing using all available signature methods, apart from EC-algorithms which are
  * tested in ECDSASignatureTest.
@@ -651,4 +650,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/SignatureDigestMethodTest.java b/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/SignatureDigestMethodTest.java
index 890fe59..35d50f4 100644
--- a/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/SignatureDigestMethodTest.java
+++ b/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/SignatureDigestMethodTest.java
@@ -77,7 +77,6 @@
 import org.junit.Before;
 import org.junit.Test;
 
-
 /**
  * Test signing using all available digest methods
  */
@@ -527,4 +526,4 @@
         return XmlSignatureHelper.getXpathFilter("/ns:root/a[last()]", prefix2Namespace);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/SpringXmlSignatureTest.java b/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/SpringXmlSignatureTest.java
index a701b6a..d92045a 100644
--- a/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/SpringXmlSignatureTest.java
+++ b/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/SpringXmlSignatureTest.java
@@ -1,131 +1,130 @@
-/*
- * 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.component.xmlsecurity;
-
-import java.io.ByteArrayInputStream;
-import java.security.KeyPair;
-import java.util.Map;
-
-import javax.xml.crypto.KeySelector;
-
-import org.w3c.dom.Document;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Message;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.component.xmlsecurity.api.KeyAccessor;
-import org.apache.camel.component.xmlsecurity.api.XmlSignatureHelper;
-import org.apache.camel.spi.Registry;
-import org.apache.camel.spring.SpringCamelContext;
-import org.apache.camel.support.SimpleRegistry;
-import org.junit.Test;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-
-public class SpringXmlSignatureTest extends XmlSignatureTest {
-
-    private static KeyPair rsaPair;
-
-    @Override
-    protected CamelContext createCamelContext() throws Exception {
-        rsaPair = getKeyPair("RSA", 1024);
-        return SpringCamelContext.springCamelContext(
-                new ClassPathXmlApplicationContext("/org/apache/camel/component/xmlsecurity/SpringXmlSignatureTests.xml"), true);
-    }
-
-    public static KeyAccessor getDsaKeyAccessor() {
-        return getKeyAccessor(getKeyPair("DSA", 1024).getPrivate());
-    }
-
-    public static KeyAccessor getRsaKeyAccessor() {
-        return getKeyAccessor(rsaPair.getPrivate());
-    }
-
-    public static KeySelector getDsaKeySelector() {
-        return KeySelector.singletonKeySelector(getKeyPair("DSA", 1024).getPublic());
-    }
-
-    public static KeySelector getRsaKeySelector() {
-        return KeySelector.singletonKeySelector(rsaPair.getPublic());
-    }
-
-    @Override
-    protected Registry createCamelRegistry() throws Exception {
-        return new SimpleRegistry();
-    }
-
-    @Override
-    protected RouteBuilder[] createRouteBuilders() throws Exception {
-        return new RouteBuilder[] {};
-    }
-
-    @Override
-    XmlSignerEndpoint getDetachedSignerEndpoint() {
-        XmlSignerEndpoint endpoint = (XmlSignerEndpoint) context()
-                .getEndpoint(
-                        "xmlsecurity:sign:detached?keyAccessor=#accessorRsa&xpathsToIdAttributes=#xpathsToIdAttributes&"//
-                        + "schemaResourceUri=org/apache/camel/component/xmlsecurity/Test.xsd&signatureId=&clearHeaders=false");
-        return endpoint;
-    }
-    
-    @Override
-    XmlSignerEndpoint getSignatureEncpointForSignException() {
-        XmlSignerEndpoint endpoint = (XmlSignerEndpoint)context().getEndpoint(//
-            "xmlsecurity:sign:signexceptioninvalidkey?keyAccessor=#accessorRsa");
-        return endpoint;
-    }
-    
-    @Override
-    String getVerifierEndpointURIEnveloped() {
-        return "xmlsecurity:verify:enveloped?keySelector=#selectorRsa";
-    }
-
-    @Override
-    String getSignerEndpointURIEnveloped() {
-        return "xmlsecurity:sign:enveloped?keyAccessor=#accessorRsa&parentLocalName=root&parentNamespace=http://test/test";
-    }
-    
-    @Override
-    String getVerifierEndpointURIEnveloping() {
-        return "xmlsecurity:verify:enveloping?keySelector=#selectorRsa";
-    }
-
-    @Override
-    String getSignerEndpointURIEnveloping() {
-        return "xmlsecurity:sign:enveloping?keyAccessor=#accessorRsa";
-    }
-
-    @Test
-    public void xades() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-        sendBody("direct:xades", payload);
-        assertMockEndpointsSatisfied();
-
-        Message message = getMessage(mock);
-        byte[] body = message.getBody(byte[].class);
-        Document doc = XmlSignatureHelper.newDocumentBuilder(true).parse(new ByteArrayInputStream(body));
-        Map<String, String> prefix2Ns = XAdESSignaturePropertiesTest.getPrefix2NamespaceMap();
-        prefix2Ns.put("t", "http://test.com/");
-        XAdESSignaturePropertiesTest
-                .checkXpath(
-                        doc,
-                        "/ds:Signature/ds:Object/etsi:QualifyingProperties/etsi:SignedProperties/etsi:SignedSignatureProperties/etsi:SignerRole/etsi:ClaimedRoles/etsi:ClaimedRole/t:test",
-                        prefix2Ns, "test");
-    }
-}
\ No newline at end of file
+/*
+ * 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.component.xmlsecurity;
+
+import java.io.ByteArrayInputStream;
+import java.security.KeyPair;
+import java.util.Map;
+
+import javax.xml.crypto.KeySelector;
+
+import org.w3c.dom.Document;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Message;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.xmlsecurity.api.KeyAccessor;
+import org.apache.camel.component.xmlsecurity.api.XmlSignatureHelper;
+import org.apache.camel.spi.Registry;
+import org.apache.camel.spring.SpringCamelContext;
+import org.apache.camel.support.SimpleRegistry;
+import org.junit.Test;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class SpringXmlSignatureTest extends XmlSignatureTest {
+
+    private static KeyPair rsaPair;
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        rsaPair = getKeyPair("RSA", 1024);
+        return SpringCamelContext.springCamelContext(
+                new ClassPathXmlApplicationContext("/org/apache/camel/component/xmlsecurity/SpringXmlSignatureTests.xml"), true);
+    }
+
+    public static KeyAccessor getDsaKeyAccessor() {
+        return getKeyAccessor(getKeyPair("DSA", 1024).getPrivate());
+    }
+
+    public static KeyAccessor getRsaKeyAccessor() {
+        return getKeyAccessor(rsaPair.getPrivate());
+    }
+
+    public static KeySelector getDsaKeySelector() {
+        return KeySelector.singletonKeySelector(getKeyPair("DSA", 1024).getPublic());
+    }
+
+    public static KeySelector getRsaKeySelector() {
+        return KeySelector.singletonKeySelector(rsaPair.getPublic());
+    }
+
+    @Override
+    protected Registry createCamelRegistry() throws Exception {
+        return new SimpleRegistry();
+    }
+
+    @Override
+    protected RouteBuilder[] createRouteBuilders() throws Exception {
+        return new RouteBuilder[] {};
+    }
+
+    @Override
+    XmlSignerEndpoint getDetachedSignerEndpoint() {
+        XmlSignerEndpoint endpoint = (XmlSignerEndpoint) context()
+                .getEndpoint(
+                        "xmlsecurity:sign:detached?keyAccessor=#accessorRsa&xpathsToIdAttributes=#xpathsToIdAttributes&"//
+                        + "schemaResourceUri=org/apache/camel/component/xmlsecurity/Test.xsd&signatureId=&clearHeaders=false");
+        return endpoint;
+    }
+    
+    @Override
+    XmlSignerEndpoint getSignatureEncpointForSignException() {
+        XmlSignerEndpoint endpoint = (XmlSignerEndpoint)context().getEndpoint(//
+            "xmlsecurity:sign:signexceptioninvalidkey?keyAccessor=#accessorRsa");
+        return endpoint;
+    }
+    
+    @Override
+    String getVerifierEndpointURIEnveloped() {
+        return "xmlsecurity:verify:enveloped?keySelector=#selectorRsa";
+    }
+
+    @Override
+    String getSignerEndpointURIEnveloped() {
+        return "xmlsecurity:sign:enveloped?keyAccessor=#accessorRsa&parentLocalName=root&parentNamespace=http://test/test";
+    }
+    
+    @Override
+    String getVerifierEndpointURIEnveloping() {
+        return "xmlsecurity:verify:enveloping?keySelector=#selectorRsa";
+    }
+
+    @Override
+    String getSignerEndpointURIEnveloping() {
+        return "xmlsecurity:sign:enveloping?keyAccessor=#accessorRsa";
+    }
+
+    @Test
+    public void xades() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMessageCount(1);
+        sendBody("direct:xades", payload);
+        assertMockEndpointsSatisfied();
+
+        Message message = getMessage(mock);
+        byte[] body = message.getBody(byte[].class);
+        Document doc = XmlSignatureHelper.newDocumentBuilder(true).parse(new ByteArrayInputStream(body));
+        Map<String, String> prefix2Ns = XAdESSignaturePropertiesTest.getPrefix2NamespaceMap();
+        prefix2Ns.put("t", "http://test.com/");
+        XAdESSignaturePropertiesTest
+                .checkXpath(
+                        doc,
+                        "/ds:Signature/ds:Object/etsi:QualifyingProperties/etsi:SignedProperties/etsi:SignedSignatureProperties/etsi:SignerRole/etsi:ClaimedRoles/etsi:ClaimedRole/t:test",
+                        prefix2Ns, "test");
+    }
+}
diff --git a/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/util/TimestampProperty.java b/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/util/TimestampProperty.java
index 6c49e50..e4f0c2f 100644
--- a/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/util/TimestampProperty.java
+++ b/components/camel-xmlsecurity/src/test/java/org/apache/camel/component/xmlsecurity/util/TimestampProperty.java
@@ -34,7 +34,6 @@
 import org.apache.camel.component.xmlsecurity.api.XmlSignatureHelper;
 import org.apache.camel.component.xmlsecurity.api.XmlSignatureProperties;
 
-
 /**
  * Example for a XmlSignatureProperties implementation which adds a timestamp
  * signature property.
diff --git a/components/camel-xmlsecurity/src/test/java/org/apache/camel/dataformat/xmlsecurity/EncryptionAlgorithmTest.java b/components/camel-xmlsecurity/src/test/java/org/apache/camel/dataformat/xmlsecurity/EncryptionAlgorithmTest.java
index a57d677..3261b0c 100644
--- a/components/camel-xmlsecurity/src/test/java/org/apache/camel/dataformat/xmlsecurity/EncryptionAlgorithmTest.java
+++ b/components/camel-xmlsecurity/src/test/java/org/apache/camel/dataformat/xmlsecurity/EncryptionAlgorithmTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.xmlsecurity;
+
 import java.lang.reflect.Constructor;
 import java.security.Provider;
 import java.security.Security;
diff --git a/components/camel-xmlsecurity/src/test/java/org/apache/camel/dataformat/xmlsecurity/XMLEncryption11Test.java b/components/camel-xmlsecurity/src/test/java/org/apache/camel/dataformat/xmlsecurity/XMLEncryption11Test.java
index 851dfe9..3beeb57 100644
--- a/components/camel-xmlsecurity/src/test/java/org/apache/camel/dataformat/xmlsecurity/XMLEncryption11Test.java
+++ b/components/camel-xmlsecurity/src/test/java/org/apache/camel/dataformat/xmlsecurity/XMLEncryption11Test.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.xmlsecurity;
+
 import java.lang.reflect.Constructor;
 import java.security.Provider;
 import java.security.Security;
diff --git a/components/camel-xmlsecurity/src/test/java/org/apache/camel/dataformat/xmlsecurity/XMLSecurityDataFormatTest.java b/components/camel-xmlsecurity/src/test/java/org/apache/camel/dataformat/xmlsecurity/XMLSecurityDataFormatTest.java
index 4018ede..548599a 100644
--- a/components/camel-xmlsecurity/src/test/java/org/apache/camel/dataformat/xmlsecurity/XMLSecurityDataFormatTest.java
+++ b/components/camel-xmlsecurity/src/test/java/org/apache/camel/dataformat/xmlsecurity/XMLSecurityDataFormatTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.xmlsecurity;
+
 import java.nio.charset.Charset;
 import java.security.Key;
 import java.util.Arrays;
@@ -38,7 +39,6 @@
 import org.junit.Before;
 import org.junit.Test;
 
-
 /**
  * Unit test of the encryptXML data format.
  */
diff --git a/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppDeferredConnectionTest.java b/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppDeferredConnectionTest.java
index 2c6d3fc..a618436 100644
--- a/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppDeferredConnectionTest.java
+++ b/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppDeferredConnectionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.xmpp;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.Registry;
diff --git a/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppMultiUserChatTest.java b/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppMultiUserChatTest.java
index d7696d0..ce63be6 100644
--- a/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppMultiUserChatTest.java
+++ b/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppMultiUserChatTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.xmpp;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.Registry;
diff --git a/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppProducerConcurrentTest.java b/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppProducerConcurrentTest.java
index a0b22fb..8ff10cb 100644
--- a/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppProducerConcurrentTest.java
+++ b/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppProducerConcurrentTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.xmpp;
+
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
diff --git a/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppRobustConnectionTest.java b/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppRobustConnectionTest.java
index dabd4b0..65e920d 100644
--- a/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppRobustConnectionTest.java
+++ b/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppRobustConnectionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.xmpp;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.Registry;
diff --git a/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppRouteChatTest.java b/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppRouteChatTest.java
index 4591518..5ad9864 100644
--- a/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppRouteChatTest.java
+++ b/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppRouteChatTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.xmpp;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.Registry;
diff --git a/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppRouteMultipleProducersSingleConsumerTest.java b/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppRouteMultipleProducersSingleConsumerTest.java
index 1c2efc3..e164d72 100644
--- a/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppRouteMultipleProducersSingleConsumerTest.java
+++ b/components/camel-xmpp/src/test/java/org/apache/camel/component/xmpp/XmppRouteMultipleProducersSingleConsumerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.xmpp;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spi.Registry;
diff --git a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java
index 24b7c44..080bfaa 100644
--- a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java
+++ b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java
@@ -40,9 +40,11 @@
 import javax.xml.xpath.XPathFunction;
 import javax.xml.xpath.XPathFunctionException;
 import javax.xml.xpath.XPathFunctionResolver;
+
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+
 import org.xml.sax.InputSource;
 
 import org.apache.camel.CamelContext;
@@ -66,7 +68,6 @@
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/SaxonXmlSourceHandlerFactoryImpl.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/SaxonXmlSourceHandlerFactoryImpl.java
index c0e0ea4..297fd66 100644
--- a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/SaxonXmlSourceHandlerFactoryImpl.java
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/SaxonXmlSourceHandlerFactoryImpl.java
@@ -1,13 +1,13 @@
-/**
+/*
  * 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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
+ *
+ *      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.
diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonAggregationStrategy.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonAggregationStrategy.java
index ecefe2e..6ceccea 100644
--- a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonAggregationStrategy.java
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonAggregationStrategy.java
@@ -17,7 +17,6 @@
 package org.apache.camel.component.xslt.saxon;
 
 import net.sf.saxon.TransformerFactoryImpl;
-
 import org.apache.camel.component.xslt.XsltAggregationStrategy;
 import org.apache.camel.component.xslt.XsltBuilder;
 
@@ -35,4 +34,4 @@
         return answer;
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java
index b04e6ed..315fcca 100644
--- a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonEndpoint.java
@@ -19,6 +19,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.xml.transform.TransformerFactory;
 
 import net.sf.saxon.Configuration;
diff --git a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonHelper.java b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonHelper.java
index 88d7edd..09a8354 100644
--- a/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonHelper.java
+++ b/components/camel-xslt-saxon/src/main/java/org/apache/camel/component/xslt/saxon/XsltSaxonHelper.java
@@ -18,6 +18,7 @@
 
 import java.util.List;
 import java.util.Map;
+
 import javax.xml.XMLConstants;
 
 import net.sf.saxon.Configuration;
diff --git a/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/SAXSourceLogBodyTest.java b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/SAXSourceLogBodyTest.java
index 86b408c..30356b3 100644
--- a/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/SAXSourceLogBodyTest.java
+++ b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/SAXSourceLogBodyTest.java
@@ -18,17 +18,19 @@
 
 import java.io.File;
 import java.io.InputStream;
+
 import javax.xml.transform.sax.SAXSource;
 
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
-import org.xml.sax.InputSource;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.XMLReaderFactory;
 
 public class SAXSourceLogBodyTest extends CamelTestSupport {
 
diff --git a/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/XsltSaxonTest.java b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/XsltSaxonTest.java
index b912a8e..db74664 100644
--- a/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/XsltSaxonTest.java
+++ b/components/camel-xslt-saxon/src/test/java/org/apache/camel/component/xslt/saxon/XsltSaxonTest.java
@@ -18,13 +18,14 @@
 
 import java.util.List;
 
+import org.w3c.dom.Document;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.converter.jaxp.XmlConverter;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
-import org.w3c.dom.Document;
 
 public class XsltSaxonTest extends CamelTestSupport {
 
diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltAggregationStrategy.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltAggregationStrategy.java
index 63d2ad3..d967aef 100644
--- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltAggregationStrategy.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltAggregationStrategy.java
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 import java.util.concurrent.RejectedExecutionException;
+
 import javax.xml.transform.Source;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
@@ -248,4 +249,4 @@
     protected void doStop() throws Exception {
         // noop
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java
index 22862f9..b852776 100644
--- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltBuilder.java
@@ -25,6 +25,7 @@
 import java.util.Set;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingQueue;
+
 import javax.xml.transform.ErrorListener;
 import javax.xml.transform.Result;
 import javax.xml.transform.Source;
diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
index f7c9ff5..cc6886a 100644
--- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.xslt;
 
 import java.util.Map;
+
 import javax.xml.transform.URIResolver;
 
 import org.apache.camel.Endpoint;
diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java
index dcd041f..644ea06 100644
--- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java
+++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltEndpoint.java
@@ -19,12 +19,15 @@
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.xml.transform.ErrorListener;
 import javax.xml.transform.Source;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.URIResolver;
 
+import org.xml.sax.EntityResolver;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.Exchange;
@@ -40,7 +43,6 @@
 import org.apache.camel.support.ProcessorEndpoint;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
-import org.xml.sax.EntityResolver;
 
 /**
  * Transforms the message using a XSLT template.
diff --git a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectTest.java b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectTest.java
index 2096c85..56daf35 100644
--- a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectTest.java
+++ b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectTest.java
@@ -97,4 +97,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConfigurationTest.java b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConfigurationTest.java
index 17ae157..9df44ff 100644
--- a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConfigurationTest.java
+++ b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConfigurationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.xstream;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -258,4 +259,4 @@
             return false;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamDataFormatPermissionsSystemPropertyTest.java b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamDataFormatPermissionsSystemPropertyTest.java
index acf39a4..15e8946 100644
--- a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamDataFormatPermissionsSystemPropertyTest.java
+++ b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamDataFormatPermissionsSystemPropertyTest.java
@@ -15,8 +15,8 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.xstream;
-import com.thoughtworks.xstream.XStream;
 
+import com.thoughtworks.xstream.XStream;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
diff --git a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessagePollingConsumer.java b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessagePollingConsumer.java
index 2636186..9922fab 100644
--- a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessagePollingConsumer.java
+++ b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessagePollingConsumer.java
@@ -19,7 +19,6 @@
 import java.util.concurrent.TimeUnit;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.yammer.model.Messages;
diff --git a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessageProducer.java b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessageProducer.java
index bb21b28..6002b9b 100644
--- a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessageProducer.java
+++ b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerMessageProducer.java
@@ -19,7 +19,6 @@
 import java.net.URLEncoder;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.component.yammer.model.Messages;
 import org.apache.camel.support.DefaultProducer;
diff --git a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerUserPollingConsumer.java b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerUserPollingConsumer.java
index 8791ebc..8e266a9 100644
--- a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerUserPollingConsumer.java
+++ b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/YammerUserPollingConsumer.java
@@ -20,7 +20,6 @@
 import java.util.concurrent.TimeUnit;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.yammer.model.User;
diff --git a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/model/Contact.java b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/model/Contact.java
index fba2c81..217496a 100644
--- a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/model/Contact.java
+++ b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/model/Contact.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.yammer.model;
 
 import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
diff --git a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/model/User.java b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/model/User.java
index 8e6327f..a0e82cf 100644
--- a/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/model/User.java
+++ b/components/camel-yammer/src/main/java/org/apache/camel/component/yammer/model/User.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.yammer.model;
 
 import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
diff --git a/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerMessageAndUserRouteTest.java b/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerMessageAndUserRouteTest.java
index 8f5f528..675ce73 100644
--- a/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerMessageAndUserRouteTest.java
+++ b/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerMessageAndUserRouteTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.yammer;
 
-
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerMessageRouteTest.java b/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerMessageRouteTest.java
index 94873a3..3c546f7 100644
--- a/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerMessageRouteTest.java
+++ b/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerMessageRouteTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.yammer;
 
-
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerUserRouteTest.java b/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerUserRouteTest.java
index 1440878..48f0bc7 100644
--- a/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerUserRouteTest.java
+++ b/components/camel-yammer/src/test/java/org/apache/camel/component/yammer/YammerUserRouteTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.yammer;
 
-
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskComponent.java b/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskComponent.java
index 0f66b74..26b6cb3 100644
--- a/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskComponent.java
+++ b/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskComponent.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.component.zendesk;
 
-import java.util.Map;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.zendesk.internal.ZendeskApiCollection;
diff --git a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java
index c3f372f..36ef02a 100644
--- a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java
+++ b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java
@@ -156,4 +156,4 @@
     public void setAllowEmptyDirectory(boolean allowEmptyDirectory) {
         this.allowEmptyDirectory = allowEmptyDirectory;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/SpringZipSplitterRouteTest.java b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/SpringZipSplitterRouteTest.java
index 7d067e6..ddb746a 100644
--- a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/SpringZipSplitterRouteTest.java
+++ b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/SpringZipSplitterRouteTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.dataformat.zipfile;
 
-
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
 import org.junit.Test;
diff --git a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormatTest.java b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormatTest.java
index f718520..2b65c0b 100644
--- a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormatTest.java
+++ b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormatTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.zipfile;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
diff --git a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileSplitAndDeleteTest.java b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileSplitAndDeleteTest.java
index 181128f..27691de 100644
--- a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileSplitAndDeleteTest.java
+++ b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileSplitAndDeleteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.zipfile;
+
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
diff --git a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileSplitOneFileTest.java b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileSplitOneFileTest.java
index 964b409..a0d77d8 100644
--- a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileSplitOneFileTest.java
+++ b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileSplitOneFileTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.zipfile;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
diff --git a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipSplitterRouteIssueTest.java b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipSplitterRouteIssueTest.java
index 5c61c3d..d00ab5d 100644
--- a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipSplitterRouteIssueTest.java
+++ b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipSplitterRouteIssueTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.dataformat.zipfile;
+
 import java.io.File;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/AggregationStrategyWithFilenameHeaderTest.java b/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/AggregationStrategyWithFilenameHeaderTest.java
index eb40c98..ea1c703 100644
--- a/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/AggregationStrategyWithFilenameHeaderTest.java
+++ b/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/AggregationStrategyWithFilenameHeaderTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.aggregate.zipfile;
+
 import java.io.File;
 import java.util.Arrays;
 import java.util.Enumeration;
diff --git a/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/AggregationStrategyWithPreservationTest.java b/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/AggregationStrategyWithPreservationTest.java
index acd2dd6..66ebc8a 100644
--- a/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/AggregationStrategyWithPreservationTest.java
+++ b/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/AggregationStrategyWithPreservationTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.aggregate.zipfile;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.Arrays;
diff --git a/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategyEmptyFileTest.java b/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategyEmptyFileTest.java
index eddada4..5bb7b2d 100644
--- a/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategyEmptyFileTest.java
+++ b/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategyEmptyFileTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.aggregate.zipfile;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.zip.ZipEntry;
diff --git a/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategyTest.java b/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategyTest.java
index 8d39d8b..a06d989 100644
--- a/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategyTest.java
+++ b/components/camel-zipfile/src/test/java/org/apache/camel/processor/aggregate/zipfile/ZipAggregationStrategyTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor.aggregate.zipfile;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.zip.ZipEntry;
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinClientRequestAdapter.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinClientRequestAdapter.java
index 4c21c8e..328c2b1 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinClientRequestAdapter.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinClientRequestAdapter.java
@@ -20,7 +20,6 @@
 import java.util.Map;
 
 import brave.SpanCustomizer;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.StreamCache;
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java
index 948882a..9c23d79 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinState.java
@@ -19,7 +19,6 @@
 import java.util.Stack;
 
 import brave.Span;
-
 import org.apache.camel.Exchange;
 
 /**
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java
index 23495be..623a97f 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java
@@ -34,7 +34,6 @@
 import brave.propagation.TraceContext.Injector;
 import brave.propagation.TraceContextOrSamplingFlags;
 import brave.sampler.Sampler;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Endpoint;
@@ -66,7 +65,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
-
 import zipkin2.reporter.AsyncReporter;
 import zipkin2.reporter.Reporter;
 import zipkin2.reporter.libthrift.LibthriftSender;
diff --git a/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/LogSpanReporterTest.java b/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/LogSpanReporterTest.java
index 8a37d6a..bc88090 100644
--- a/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/LogSpanReporterTest.java
+++ b/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/LogSpanReporterTest.java
@@ -18,7 +18,6 @@
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import zipkin2.reporter.Reporter;
 
 public class LogSpanReporterTest<S> implements Reporter<S> {
diff --git a/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinClientCustomTagsTest.java b/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinClientCustomTagsTest.java
index 749d476..793c22e 100644
--- a/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinClientCustomTagsTest.java
+++ b/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinClientCustomTagsTest.java
@@ -26,7 +26,6 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
-
 import zipkin2.reporter.Reporter;
 
 public class ZipkinClientCustomTagsTest extends CamelTestSupport {
diff --git a/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinMDCScopeDecoratorTest.java b/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinMDCScopeDecoratorTest.java
index 0fe6395..5102b41 100644
--- a/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinMDCScopeDecoratorTest.java
+++ b/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinMDCScopeDecoratorTest.java
@@ -24,10 +24,8 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 import org.slf4j.MDC;
-
 import zipkin2.reporter.Reporter;
 
-
 public class ZipkinMDCScopeDecoratorTest extends CamelTestSupport {
     
     private ZipkinTracer zipkin;
diff --git a/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinTimerRouteTest.java b/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinTimerRouteTest.java
index d24cbb9..c152fcd 100644
--- a/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinTimerRouteTest.java
+++ b/components/camel-zipkin/src/test/java/org/apache/camel/zipkin/ZipkinTimerRouteTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.zipkin;
 
 import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.RoutesBuilder;
diff --git a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperProducer.java b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperProducer.java
index dec917a..0c138ef 100644
--- a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperProducer.java
+++ b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperProducer.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.component.zookeeper;
 
-import static java.lang.String.format;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.component.zookeeper.operations.CreateOperation;
@@ -34,6 +32,7 @@
 import org.apache.zookeeper.ZooKeeper;
 import org.apache.zookeeper.data.Stat;
 
+import static java.lang.String.format;
 import static org.apache.camel.component.zookeeper.ZooKeeperUtils.getAclListFromMessage;
 import static org.apache.camel.component.zookeeper.ZooKeeperUtils.getCreateMode;
 import static org.apache.camel.component.zookeeper.ZooKeeperUtils.getCreateModeFromString;
diff --git a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/CreateOperation.java b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/CreateOperation.java
index cacfe94..6a8b89d 100644
--- a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/CreateOperation.java
+++ b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/CreateOperation.java
@@ -18,14 +18,14 @@
 
 import java.util.List;
 
-import static java.lang.String.format;
-
 import org.apache.zookeeper.CreateMode;
 import org.apache.zookeeper.ZooDefs.Ids;
 import org.apache.zookeeper.ZooKeeper;
 import org.apache.zookeeper.data.ACL;
 import org.apache.zookeeper.data.Stat;
 
+import static java.lang.String.format;
+
 /**
  * <code>CreateOperation</code> is a basic Zookeeper operation used to create
  * and set the data contained in a given node
diff --git a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/DeleteOperation.java b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/DeleteOperation.java
index 1837556..bf782a0 100644
--- a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/DeleteOperation.java
+++ b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/DeleteOperation.java
@@ -16,10 +16,10 @@
  */
 package org.apache.camel.component.zookeeper.operations;
 
-import static java.lang.String.format;
-
 import org.apache.zookeeper.ZooKeeper;
 
+import static java.lang.String.format;
+
 /**
  * <code>setdataOperation</code> sets the content of a ZooKeeper node. An optional version
  * may be specified that the node must currently have for the operation to succeed.
diff --git a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/FutureEventDrivenOperation.java b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/FutureEventDrivenOperation.java
index ede785e..88bc6e3 100644
--- a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/FutureEventDrivenOperation.java
+++ b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/FutureEventDrivenOperation.java
@@ -22,13 +22,13 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
-import static java.lang.String.format;
-
 import org.apache.zookeeper.WatchedEvent;
 import org.apache.zookeeper.Watcher;
 import org.apache.zookeeper.Watcher.Event.EventType;
 import org.apache.zookeeper.ZooKeeper;
 
+import static java.lang.String.format;
+
 /**
  * <code>FutureEventDrivenOperation</code> uses ZooKeepers {@link Watcher}
  * mechanism to await specific ZooKeeper events. Typically this is used to await
diff --git a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/GetChildrenOperation.java b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/GetChildrenOperation.java
index 9d719dc..9c4db0e 100644
--- a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/GetChildrenOperation.java
+++ b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/GetChildrenOperation.java
@@ -18,11 +18,11 @@
 
 import java.util.List;
 
-import static java.lang.String.format;
-
 import org.apache.zookeeper.ZooKeeper;
 import org.apache.zookeeper.data.Stat;
 
+import static java.lang.String.format;
+
 /**
  * <code>GetChildrenOperation</code> is a basic ZooKeeper operation used to
  * retrieve the list of children belonging to a given ZooKeeper node.
diff --git a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/GetDataOperation.java b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/GetDataOperation.java
index c2778f8..89e71c5 100644
--- a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/GetDataOperation.java
+++ b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/GetDataOperation.java
@@ -16,11 +16,11 @@
  */
 package org.apache.camel.component.zookeeper.operations;
 
-import static java.lang.String.format;
-
 import org.apache.zookeeper.ZooKeeper;
 import org.apache.zookeeper.data.Stat;
 
+import static java.lang.String.format;
+
 /**
  * <code>GetDataOperation</code> is a basic operation to immediately retrieve
  * the data associated with a given ZooKeeper node.
@@ -28,7 +28,7 @@
 public class GetDataOperation extends ZooKeeperOperation<byte[]> {
 
     public GetDataOperation(ZooKeeper connection, String node) {
-       super(connection, node);
+        super(connection, node);
     }
 
     @Override
diff --git a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/SetDataOperation.java b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/SetDataOperation.java
index 4dea8f6..bb698df 100644
--- a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/SetDataOperation.java
+++ b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/operations/SetDataOperation.java
@@ -16,11 +16,11 @@
  */
 package org.apache.camel.component.zookeeper.operations;
 
-import static java.lang.String.format;
-
 import org.apache.zookeeper.ZooKeeper;
 import org.apache.zookeeper.data.Stat;
 
+import static java.lang.String.format;
+
 /**
  * <code>SetDataOperation</code> sets the content of a ZooKeeper node. An optional version
  * may be specified that the node must currently have for the operation to succeed.
diff --git a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/ZooKeeperManagedEndpointTest.java b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/ZooKeeperManagedEndpointTest.java
index 138b66d..ed0482e 100644
--- a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/ZooKeeperManagedEndpointTest.java
+++ b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/ZooKeeperManagedEndpointTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.zookeeper;
+
 import java.util.ArrayList;
 import java.util.Set;
 
diff --git a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/cloud/SpringZooKeeperServiceCallRouteTest.java b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/cloud/SpringZooKeeperServiceCallRouteTest.java
index d9dcf4a..38cc21a 100644
--- a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/cloud/SpringZooKeeperServiceCallRouteTest.java
+++ b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/cloud/SpringZooKeeperServiceCallRouteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.zookeeper.cloud;
+
 import org.apache.camel.component.zookeeper.ZooKeeperTestSupport;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
 import org.apache.curator.framework.CuratorFramework;
diff --git a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceCallRouteTest.java b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceCallRouteTest.java
index 9559e60..b990a7b 100644
--- a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceCallRouteTest.java
+++ b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceCallRouteTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.zookeeper.cloud;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceRegistrationTestBase.java b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceRegistrationTestBase.java
index 14d5654..d9fd966 100644
--- a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceRegistrationTestBase.java
+++ b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/cloud/ZooKeeperServiceRegistrationTestBase.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.component.zookeeper.cloud;
+
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
diff --git a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/operations/FutureEventDrivenOperationTest.java b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/operations/FutureEventDrivenOperationTest.java
index e901fea..3f0fcd0 100644
--- a/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/operations/FutureEventDrivenOperationTest.java
+++ b/components/camel-zookeeper/src/test/java/org/apache/camel/component/zookeeper/operations/FutureEventDrivenOperationTest.java
@@ -23,7 +23,6 @@
 
 import static org.junit.Assert.assertEquals;
 
-
 public class FutureEventDrivenOperationTest {
     private String data = "Event Received";
     private Stat statistics = new Stat();
diff --git a/core/camel-api/src/main/java/org/apache/camel/cloud/ServiceDefinition.java b/core/camel-api/src/main/java/org/apache/camel/cloud/ServiceDefinition.java
index 005307a..e828029 100644
--- a/core/camel-api/src/main/java/org/apache/camel/cloud/ServiceDefinition.java
+++ b/core/camel-api/src/main/java/org/apache/camel/cloud/ServiceDefinition.java
@@ -20,7 +20,6 @@
 
 import org.apache.camel.util.StringHelper;
 
-
 /**
  * Represents a Service.
  *
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/CamelContextTracker.java b/core/camel-api/src/main/java/org/apache/camel/spi/CamelContextTracker.java
index 8015dc3..8b3381e 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/CamelContextTracker.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/CamelContextTracker.java
@@ -114,4 +114,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java b/core/camel-base/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
index a985364..a281bcc 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
@@ -30,10 +30,6 @@
 import java.util.Set;
 import java.util.StringTokenizer;
 
-import static java.lang.reflect.Modifier.isAbstract;
-import static java.lang.reflect.Modifier.isPublic;
-import static java.lang.reflect.Modifier.isStatic;
-
 import org.apache.camel.Converter;
 import org.apache.camel.Exchange;
 import org.apache.camel.TypeConverter;
@@ -48,6 +44,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.lang.reflect.Modifier.isAbstract;
+import static java.lang.reflect.Modifier.isPublic;
+import static java.lang.reflect.Modifier.isStatic;
+
 /**
  * A class which will auto-discover {@link Converter} objects and methods to pre-load
  * the {@link TypeConverterRegistry} of converters on startup.
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerTemplate.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerTemplate.java
index e3e0a50..9352d69 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerTemplate.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerTemplate.java
@@ -532,7 +532,7 @@
     }
 
     protected Function<Exchange, Exchange> createCompletionFunction(Synchronization onCompletion) {
-        return (answer) -> {
+        return answer -> {
             // invoke callback before returning answer
             // as it allows callback to be used without unit of work invoking it
             // and thus it works directly from a producer template as well, as opposed
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ContractAdvice.java b/core/camel-base/src/main/java/org/apache/camel/processor/ContractAdvice.java
index 8035f55..d3676c2 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/ContractAdvice.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/ContractAdvice.java
@@ -196,4 +196,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/RestBindingAdvice.java b/core/camel-base/src/main/java/org/apache/camel/processor/RestBindingAdvice.java
index a62c13b..0e99e3f 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/RestBindingAdvice.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/RestBindingAdvice.java
@@ -541,4 +541,4 @@
         return true;
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/StepProcessor.java b/core/camel-base/src/main/java/org/apache/camel/processor/StepProcessor.java
index 5b5a1a5..5199085 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/StepProcessor.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/StepProcessor.java
@@ -51,7 +51,7 @@
 
         EventHelper.notifyStepStarted(exchange.getContext(), exchange, stepId);
 
-        return super.process(exchange, (sync) -> {
+        return super.process(exchange, sync -> {
             // then fire event to signal the step is done
             boolean failed = exchange.isFailed();
             try {
diff --git a/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/LoadBalancerTest.java b/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/LoadBalancerTest.java
index abafb16..8616576 100644
--- a/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/LoadBalancerTest.java
+++ b/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/LoadBalancerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.impl.cloud;
+
 import java.util.concurrent.RejectedExecutionException;
 import java.util.stream.Collectors;
 
diff --git a/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/ServiceDefinitionTest.java b/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/ServiceDefinitionTest.java
index eadda3f..1471053 100644
--- a/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/ServiceDefinitionTest.java
+++ b/core/camel-cloud/src/test/java/org/apache/camel/impl/cloud/ServiceDefinitionTest.java
@@ -20,14 +20,14 @@
 import java.util.List;
 import java.util.stream.Collectors;
 
+import org.apache.camel.cloud.ServiceDefinition;
+import org.junit.Test;
+
 import static junit.framework.TestCase.assertEquals;
 import static junit.framework.TestCase.assertFalse;
 import static junit.framework.TestCase.assertNull;
 import static junit.framework.TestCase.assertTrue;
 
-import org.apache.camel.cloud.ServiceDefinition;
-import org.junit.Test;
-
 public class ServiceDefinitionTest {
     @Test
     public void testParse() {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index 047c283..52976d7 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -17,6 +17,7 @@
 package org.apache.camel.impl;
 
 import java.util.Map;
+
 import javax.naming.Context;
 
 import org.apache.camel.CamelContext;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/JndiRegistry.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/JndiRegistry.java
index e119195..d79965b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/JndiRegistry.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/JndiRegistry.java
@@ -17,6 +17,7 @@
 package org.apache.camel.impl;
 
 import java.util.Map;
+
 import javax.naming.Context;
 import javax.naming.NamingException;
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/CircuitBreakerDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/CircuitBreakerDefinition.java
index c16e1b0..d4a8c82 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/CircuitBreakerDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/CircuitBreakerDefinition.java
@@ -1,13 +1,13 @@
-/**
+/*
  * 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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
+ *
+ *      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.
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/ClaimCheckDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/ClaimCheckDefinition.java
index cb2418e..bfe314c 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/ClaimCheckDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/ClaimCheckDefinition.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model;
 
 import java.util.function.Supplier;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/EnrichDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/EnrichDefinition.java
index 5798a69..16acea8 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/EnrichDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/EnrichDefinition.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model;
 
 import java.util.function.Supplier;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java
index 75b9f7d..45bf23f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/HystrixConfigurationDefinition.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model;
 
 import java.util.concurrent.ThreadPoolExecutor;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java
index 6c75ea5..6e1e565 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model;
 
 import java.util.function.Supplier;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/OutputExpressionNode.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/OutputExpressionNode.java
index 0de1ff1..6319073 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/OutputExpressionNode.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/OutputExpressionNode.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElementRef;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/PollEnrichDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/PollEnrichDefinition.java
index 8f91886..7f51ee5 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/PollEnrichDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/PollEnrichDefinition.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model;
 
 import java.util.function.Supplier;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
index fbb95d6..d5dfae3 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
@@ -28,6 +28,7 @@
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
+
 import javax.xml.namespace.QName;
 
 import org.apache.camel.CamelContext;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/DataFormatsDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/DataFormatsDefinition.java
index 8482b13..d3c1485 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/DataFormatsDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/dataformat/DataFormatsDefinition.java
@@ -19,6 +19,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java
index 5d2fb4e..95303b9 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/model/rest/RestConfigurationDefinition.java
@@ -20,6 +20,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/JaxbDataFormatReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/JaxbDataFormatReifier.java
index 9e99964..67f0e6f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/JaxbDataFormatReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/dataformat/JaxbDataFormatReifier.java
@@ -17,6 +17,7 @@
 package org.apache.camel.reifier.dataformat;
 
 import java.util.Map;
+
 import javax.xml.namespace.QName;
 
 import org.apache.camel.CamelContext;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
index 8013875..b0c37d5 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.xml.bind.JAXBContext;
 
 import org.apache.camel.CamelContext;
diff --git a/core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiEventAdminNotifier.java b/core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiEventAdminNotifier.java
index 5cc2a9a..2f12900 100644
--- a/core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiEventAdminNotifier.java
+++ b/core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiEventAdminNotifier.java
@@ -21,7 +21,6 @@
 
 import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
-
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
diff --git a/core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiFactoryFinder.java b/core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiFactoryFinder.java
index ba57b23..ca6adb7 100644
--- a/core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiFactoryFinder.java
+++ b/core/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiFactoryFinder.java
@@ -26,7 +26,6 @@
 import org.apache.camel.impl.engine.DefaultFactoryFinder;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.util.IOHelper;
-
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index 9590014..406a24c 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -24,6 +24,7 @@
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlTransient;
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java
index 3634820..73a309b 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java
@@ -20,6 +20,7 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java
index f1a0dd5..f762496 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelThreadPoolFactoryBean.java
@@ -18,6 +18,7 @@
 
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
@@ -187,4 +188,4 @@
         this.scheduled = scheduled;
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java
index 62ac831..d6807d5 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java
@@ -17,6 +17,7 @@
 package org.apache.camel.core.xml;
 
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/util/jsse/CipherSuitesParametersDefinition.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/util/jsse/CipherSuitesParametersDefinition.java
index 3ef8c84..66f1e97 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/util/jsse/CipherSuitesParametersDefinition.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/util/jsse/CipherSuitesParametersDefinition.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlType;
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/util/jsse/SNIHostNamesDefinition.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/util/jsse/SNIHostNamesDefinition.java
index 10c34ca..de557e0 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/util/jsse/SNIHostNamesDefinition.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/util/jsse/SNIHostNamesDefinition.java
@@ -17,6 +17,7 @@
 package org.apache.camel.core.xml.util.jsse;
 
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/util/jsse/SecureSocketProtocolsParametersDefinition.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/util/jsse/SecureSocketProtocolsParametersDefinition.java
index 636fcb7..22186f5 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/util/jsse/SecureSocketProtocolsParametersDefinition.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/util/jsse/SecureSocketProtocolsParametersDefinition.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlType;
diff --git a/core/camel-core-xml/src/test/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBeanTest.java b/core/camel-core-xml/src/test/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBeanTest.java
index 375dd89..21b9822 100644
--- a/core/camel-core-xml/src/test/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBeanTest.java
+++ b/core/camel-core-xml/src/test/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBeanTest.java
@@ -24,9 +24,6 @@
 import java.util.LinkedHashSet;
 import java.util.Set;
 
-import static java.util.Arrays.asList;
-import static java.util.Arrays.stream;
-
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Service;
 import org.apache.camel.TypeConverter;
@@ -45,6 +42,8 @@
 import org.mockito.ArgumentCaptor;
 import org.mockito.invocation.Invocation;
 
+import static java.util.Arrays.asList;
+import static java.util.Arrays.stream;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.atLeastOnce;
diff --git a/core/camel-core/src/test/java/org/apache/camel/AutoCloseableTest.java b/core/camel-core/src/test/java/org/apache/camel/AutoCloseableTest.java
index 088653b..f84e77f 100644
--- a/core/camel-core/src/test/java/org/apache/camel/AutoCloseableTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/AutoCloseableTest.java
@@ -19,7 +19,6 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.engine.DefaultProducerTemplate;
-
 import org.junit.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java
index 024caaa..ba16332 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/xml/XsltBuilderTest.java
@@ -25,6 +25,7 @@
 import javax.xml.transform.Source;
 import javax.xml.transform.Templates;
 import javax.xml.transform.sax.SAXSource;
+
 import org.w3c.dom.Document;
 
 import org.xml.sax.InputSource;
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/xslt/MyXPath.java b/core/camel-core/src/test/java/org/apache/camel/component/xslt/MyXPath.java
index 93c9928..3bb05b4 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/xslt/MyXPath.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/xslt/MyXPath.java
@@ -16,7 +16,8 @@
  */
 package org.apache.camel.component.xslt;
 
-//START SNIPPET: example
+// START SNIPPET: example
+// START SNIPPET: example
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/core/camel-core/src/test/java/org/apache/camel/converter/jaxp/XmlConverterTest.java b/core/camel-core/src/test/java/org/apache/camel/converter/jaxp/XmlConverterTest.java
index a6dfc0b..bd1a47d 100644
--- a/core/camel-core/src/test/java/org/apache/camel/converter/jaxp/XmlConverterTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/converter/jaxp/XmlConverterTest.java
@@ -21,6 +21,7 @@
 import java.io.Reader;
 import java.nio.ByteBuffer;
 import java.util.Properties;
+
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Source;
 import javax.xml.transform.dom.DOMSource;
@@ -32,6 +33,7 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+
 import org.xml.sax.InputSource;
 
 import org.apache.camel.CamelContext;
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/LazyStartProducerTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/LazyStartProducerTest.java
index d62c629..e445f2e 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/LazyStartProducerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/LazyStartProducerTest.java
@@ -21,7 +21,6 @@
 import org.apache.camel.component.log.LogComponent;
 import org.apache.camel.component.log.LogEndpoint;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.support.DefaultEndpoint;
 import org.apache.camel.support.LazyStartProducer;
 import org.apache.camel.support.service.ServiceHelper;
 import org.junit.Test;
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/FileIdempotentConsumerCreateRepoTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/FileIdempotentConsumerCreateRepoTest.java
index ae970f6..1720299 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/FileIdempotentConsumerCreateRepoTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/FileIdempotentConsumerCreateRepoTest.java
@@ -18,14 +18,13 @@
 
 import java.io.File;
 
-import static java.util.UUID.randomUUID;
-
 import org.apache.camel.spi.IdempotentRepository;
 import org.apache.camel.util.FileUtil;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Test;
 
+import static java.util.UUID.randomUUID;
 import static org.apache.camel.support.processor.idempotent.FileIdempotentRepository.fileIdempotentRepository;
 
 public class FileIdempotentConsumerCreateRepoTest extends Assert {
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/MultiCastParallelAndStreamCachingTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/MultiCastParallelAndStreamCachingTest.java
index a4755a2..3d4ad5f 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/MultiCastParallelAndStreamCachingTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/MultiCastParallelAndStreamCachingTest.java
@@ -21,6 +21,7 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
+
 import javax.xml.transform.sax.SAXSource;
 import javax.xml.transform.stream.StreamSource;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/StreamSourceContentBasedRouterTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/StreamSourceContentBasedRouterTest.java
index 0f403c8..b1480c4 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/StreamSourceContentBasedRouterTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/StreamSourceContentBasedRouterTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.processor;
 
 import java.io.StringReader;
+
 import javax.xml.transform.stream.StreamSource;
 
 import org.apache.camel.ContextTestSupport;
diff --git a/core/camel-core/src/test/java/org/apache/camel/reifier/DataFormatReifierTest.java b/core/camel-core/src/test/java/org/apache/camel/reifier/DataFormatReifierTest.java
index 738a244..06c4a03 100644
--- a/core/camel-core/src/test/java/org/apache/camel/reifier/DataFormatReifierTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/reifier/DataFormatReifierTest.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.reifier;
 
-import static junit.framework.TestCase.fail;
-
 import org.apache.camel.model.dataformat.CustomDataFormat;
 import org.apache.camel.reifier.dataformat.CustomDataFormatReifier;
 import org.apache.camel.reifier.dataformat.DataFormatReifier;
@@ -25,6 +23,8 @@
 import org.junit.Test;
 import org.junit.runners.MethodSorters;
 
+import static junit.framework.TestCase.fail;
+
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class DataFormatReifierTest {
     @Test
diff --git a/core/camel-core/src/test/java/org/apache/camel/reifier/ProcessorReifierTest.java b/core/camel-core/src/test/java/org/apache/camel/reifier/ProcessorReifierTest.java
index b56b68c..e2c953c 100644
--- a/core/camel-core/src/test/java/org/apache/camel/reifier/ProcessorReifierTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/reifier/ProcessorReifierTest.java
@@ -16,11 +16,11 @@
  */
 package org.apache.camel.reifier;
 
-import static junit.framework.TestCase.fail;
-
 import org.apache.camel.model.ProcessDefinition;
 import org.junit.Test;
 
+import static junit.framework.TestCase.fail;
+
 public class ProcessorReifierTest {
     @Test
     public void testHandleCustomProcessorDefinition() {
diff --git a/core/camel-core/src/test/java/org/apache/camel/support/DefaultRegistryTest.java b/core/camel-core/src/test/java/org/apache/camel/support/DefaultRegistryTest.java
index 8b39c26..b98ca49 100644
--- a/core/camel-core/src/test/java/org/apache/camel/support/DefaultRegistryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/support/DefaultRegistryTest.java
@@ -19,6 +19,7 @@
 import java.util.Iterator;
 
 import junit.framework.TestCase;
+
 import org.apache.camel.impl.FooBar;
 import org.junit.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/support/jsse/AbstractJsseParametersTest.java b/core/camel-core/src/test/java/org/apache/camel/support/jsse/AbstractJsseParametersTest.java
index 8354462e..de06317 100644
--- a/core/camel-core/src/test/java/org/apache/camel/support/jsse/AbstractJsseParametersTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/support/jsse/AbstractJsseParametersTest.java
@@ -24,6 +24,7 @@
 import java.util.HashSet;
 import java.util.Properties;
 import java.util.Set;
+
 import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLSocket;
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/AbstractEndpointBuilder.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/AbstractEndpointBuilder.java
index 29667f5..040f486 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/AbstractEndpointBuilder.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/AbstractEndpointBuilder.java
@@ -21,6 +21,7 @@
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.TreeMap;
+
 import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.CamelContext;
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
index 631c84e..4d10888 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
@@ -17,6 +17,7 @@
 package org.apache.camel.builder.endpoint;
 
 // CHECKSTYLE:OFF
+// CHECKSTYLE:OFF
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
diff --git a/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java b/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
index 639d959..cfdafc3 100644
--- a/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
+++ b/core/camel-jaxp/src/main/java/org/apache/camel/support/builder/xml/StAX2SAXSource.java
@@ -67,8 +67,7 @@
                 // Attributes are handled in START_ELEMENT
                 case XMLStreamConstants.ATTRIBUTE:
                     break;
-                case XMLStreamConstants.CDATA:
-                {
+                case XMLStreamConstants.CDATA: {
                     if (lexicalHandler != null) {
                         lexicalHandler.startCDATA();
                     }
@@ -81,16 +80,14 @@
                     }
                     break;
                 }
-                case XMLStreamConstants.CHARACTERS:
-                {
+                case XMLStreamConstants.CHARACTERS: {
                     int length = streamReader.getTextLength();
                     int start = streamReader.getTextStart();
                     char[] chars = streamReader.getTextCharacters();
                     contentHandler.characters(chars, start, length);
                     break;
                 }
-                case XMLStreamConstants.SPACE:
-                {
+                case XMLStreamConstants.SPACE: {
                     int length = streamReader.getTextLength();
                     int start = streamReader.getTextStart();
                     char[] chars = streamReader.getTextCharacters();
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/MainIoCAutowireTest.java b/core/camel-main/src/test/java/org/apache/camel/main/MainIoCAutowireTest.java
index 498c896..6fb97d6 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/MainIoCAutowireTest.java
+++ b/core/camel-main/src/test/java/org/apache/camel/main/MainIoCAutowireTest.java
@@ -38,7 +38,6 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-
 public class MainIoCAutowireTest extends Assert {
     @Test
     public void autowireNonNullOnlyDisabledTest() {
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/MainVetoTest.java b/core/camel-main/src/test/java/org/apache/camel/main/MainVetoTest.java
index 4c989e3..6a327c0 100644
--- a/core/camel-main/src/test/java/org/apache/camel/main/MainVetoTest.java
+++ b/core/camel-main/src/test/java/org/apache/camel/main/MainVetoTest.java
@@ -23,7 +23,6 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-
 public class MainVetoTest extends Assert {
 
     @Test
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java b/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
index 101dd80..2449b3c 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
@@ -103,7 +103,6 @@
 import org.apache.camel.management.mbean.ManagedWireTapProcessor;
 import org.apache.camel.model.ExpressionNode;
 import org.apache.camel.model.LoadBalanceDefinition;
-import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ProcessDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RecipientListDefinition;
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedThrottler.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedThrottler.java
index a370acc..977d33c 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedThrottler.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedThrottler.java
@@ -21,6 +21,7 @@
 import org.apache.camel.api.management.mbean.ManagedThrottlerMBean;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.Throttler;
+
 import static org.apache.camel.builder.Builder.constant;
 
 @ManagedResource(description = "Managed Throttler")
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java
index 4e48750..5095c53 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java
@@ -28,6 +28,7 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
+
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
diff --git a/core/camel-management/src/test/java/org/apache/camel/component/xslt/XsltContentCacheTest.java b/core/camel-management/src/test/java/org/apache/camel/component/xslt/XsltContentCacheTest.java
index 33864c3..46001b6 100644
--- a/core/camel-management/src/test/java/org/apache/camel/component/xslt/XsltContentCacheTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/component/xslt/XsltContentCacheTest.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.Set;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/AddEventNotifierTest.java b/core/camel-management/src/test/java/org/apache/camel/management/AddEventNotifierTest.java
index bb8a081..e80d938 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/AddEventNotifierTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/AddEventNotifierTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java b/core/camel-management/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java
index 1587304..6862d72 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/BacklogDebuggerTest.java
@@ -25,6 +25,7 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
+
 import static org.awaitility.Awaitility.await;
 
 public class BacklogDebuggerTest extends ManagementTestSupport {
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/CamelChoiceWithManagementTest.java b/core/camel-management/src/test/java/org/apache/camel/management/CamelChoiceWithManagementTest.java
index 7027b54..08ddfd3 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/CamelChoiceWithManagementTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/CamelChoiceWithManagementTest.java
@@ -21,6 +21,7 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.apache.camel.component.mock.MockEndpoint.expectsMessageCount;
 
 public class CamelChoiceWithManagementTest extends ContextTestSupport {
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/CamelContextDisableJmxTest.java b/core/camel-management/src/test/java/org/apache/camel/management/CamelContextDisableJmxTest.java
index 0b7876d..7c95ff2 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/CamelContextDisableJmxTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/CamelContextDisableJmxTest.java
@@ -21,7 +21,6 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-
 public class CamelContextDisableJmxTest extends Assert {
 
     @Test
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/DefaultManagementAgentMockTest.java b/core/camel-management/src/test/java/org/apache/camel/management/DefaultManagementAgentMockTest.java
index 619652d..ecd0686 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/DefaultManagementAgentMockTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/DefaultManagementAgentMockTest.java
@@ -26,6 +26,7 @@
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.ManagementAgent;
 import org.junit.Test;
+
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationOnlyRegisterProcessorWithCustomIdTest.java b/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationOnlyRegisterProcessorWithCustomIdTest.java
index 3efc9ea..bb48c72 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationOnlyRegisterProcessorWithCustomIdTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationOnlyRegisterProcessorWithCustomIdTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import java.lang.management.ManagementFactory;
 import java.util.Set;
 
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationUsingDefaultsTest.java b/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationUsingDefaultsTest.java
index 5e210f3..1ff4d13 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationUsingDefaultsTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationUsingDefaultsTest.java
@@ -34,6 +34,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.awaitility.Awaitility.await;
 
 /**
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationUsingPlatformMBSTest.java b/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationUsingPlatformMBSTest.java
index e7996e0..ddbaac7 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationUsingPlatformMBSTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationUsingPlatformMBSTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import java.util.List;
 
 import javax.management.InstanceNotFoundException;
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationUsingPropertiesTest.java b/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationUsingPropertiesTest.java
index ca98a2f..3fd479f 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationUsingPropertiesTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationUsingPropertiesTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import javax.management.ObjectName;
 
 import org.apache.camel.api.management.JmxSystemPropertyKeys;
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationWithConnectorTest.java b/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationWithConnectorTest.java
index 916fff2..a3d9bf3 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationWithConnectorTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/JmxInstrumentationWithConnectorTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import java.rmi.NoSuchObjectException;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.registry.Registry;
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/LoadTimerTest.java b/core/camel-management/src/test/java/org/apache/camel/management/LoadTimerTest.java
index 0f97bee..e1f47cd 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/LoadTimerTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/LoadTimerTest.java
@@ -23,6 +23,7 @@
 import org.apache.camel.management.mbean.LoadTriplet;
 import org.apache.camel.support.TimerListenerManager;
 import org.junit.Test;
+
 import static org.awaitility.Awaitility.await;
 
 public class LoadTimerTest extends ContextTestSupport {
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedBeanIntrospectionTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedBeanIntrospectionTest.java
index 3e356a8..7ea2df8 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedBeanIntrospectionTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedBeanIntrospectionTest.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
@@ -82,4 +83,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedBrowsableEndpointAsXmlFileTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedBrowsableEndpointAsXmlFileTest.java
index 35cc554..b1eab6a 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedBrowsableEndpointAsXmlFileTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedBrowsableEndpointAsXmlFileTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java
index fb57e92..927742b 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedInflightStatisticsTest.java
@@ -27,6 +27,7 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
+
 import static org.awaitility.Awaitility.await;
 
 public class ManagedInflightStatisticsTest extends ManagementTestSupport {
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedNamePatternJvmSystemPropertyTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedNamePatternJvmSystemPropertyTest.java
index cc59922..b2b02e6 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedNamePatternJvmSystemPropertyTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedNamePatternJvmSystemPropertyTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteLoadstatisticsTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteLoadstatisticsTest.java
index 091174b..7786cf7 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteLoadstatisticsTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteLoadstatisticsTest.java
@@ -23,6 +23,7 @@
 
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
+
 import static org.awaitility.Awaitility.await;
 
 public class ManagedRouteLoadstatisticsTest extends ManagementTestSupport {
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteNoAutoStartupTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteNoAutoStartupTest.java
index 243ef61..6db3bb9 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteNoAutoStartupTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteNoAutoStartupTest.java
@@ -26,6 +26,7 @@
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
+
 import static org.awaitility.Awaitility.await;
 
 /**
@@ -103,4 +104,4 @@
         assertEquals("Should be 0 processor", 0, set.size());
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRoutePerformanceCounterTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRoutePerformanceCounterTest.java
index 1bff89f..d2eacf3 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRoutePerformanceCounterTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRoutePerformanceCounterTest.java
@@ -24,6 +24,7 @@
 
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
+
 import static org.awaitility.Awaitility.await;
 
 public class ManagedRoutePerformanceCounterTest extends ManagementTestSupport {
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteRemoveTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteRemoveTest.java
index 19d8ffa..d55c3c1 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteRemoveTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteRemoveTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import java.util.Set;
 
 import javax.management.MBeanServer;
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteShutdownAndStartTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteShutdownAndStartTest.java
index 104a77a..58741f6 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteShutdownAndStartTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteShutdownAndStartTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import java.util.Set;
 
 import javax.management.MBeanServer;
@@ -92,4 +93,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteStopAndStartCleanupTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteStopAndStartCleanupTest.java
index 5dbecdf..6e6c186 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteStopAndStartCleanupTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteStopAndStartCleanupTest.java
@@ -26,6 +26,7 @@
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.Test;
+
 import static org.awaitility.Awaitility.await;
 
 /**
@@ -127,4 +128,4 @@
         assertEquals(2, completed.longValue());
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteStopAndStartTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteStopAndStartTest.java
index 7b4883f..8622b3a 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteStopAndStartTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteStopAndStartTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import java.util.Set;
 
 import javax.management.MBeanServer;
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteWithOnExceptionTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteWithOnExceptionTest.java
index b08cb63..3d1e8e1 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteWithOnExceptionTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteWithOnExceptionTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.api.management.JmxSystemPropertyKeys;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedServiceUrlPathTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedServiceUrlPathTest.java
index 8b4a721..9ff0e04 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedServiceUrlPathTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedServiceUrlPathTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import javax.management.MBeanServerConnection;
 import javax.management.ObjectName;
 import javax.management.remote.JMXConnector;
@@ -102,4 +103,4 @@
         };
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedStartupFailedTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedStartupFailedTest.java
index 76ec8bc..3e9f655 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedStartupFailedTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedStartupFailedTest.java
@@ -18,6 +18,7 @@
 
 import java.util.Collections;
 import java.util.Set;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedStreamCachingStrategyTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedStreamCachingStrategyTest.java
index adf0891..cf38b6c 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedStreamCachingStrategyTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedStreamCachingStrategyTest.java
@@ -26,6 +26,7 @@
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.util.IOHelper;
 import org.junit.Test;
+
 import static org.apache.camel.util.FileUtil.normalizePath;
 
 public class ManagedStreamCachingStrategyTest extends ManagementTestSupport {
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedSuspendedServiceTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedSuspendedServiceTest.java
index 232f477..dfadc1e 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedSuspendedServiceTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedSuspendedServiceTest.java
@@ -30,6 +30,7 @@
 import org.apache.camel.support.RoutePolicySupport;
 import org.junit.Before;
 import org.junit.Test;
+
 import static org.awaitility.Awaitility.await;
 
 public class ManagedSuspendedServiceTest extends ManagementTestSupport {
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedTransformerRegistryTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedTransformerRegistryTest.java
index 1a53bf1..32998c9 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedTransformerRegistryTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedTransformerRegistryTest.java
@@ -133,4 +133,4 @@
             // empty
         }
     }
-}
\ No newline at end of file
+}
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedValidatorRegistryTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedValidatorRegistryTest.java
index 581082e..c5eca35 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedValidatorRegistryTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedValidatorRegistryTest.java
@@ -132,4 +132,4 @@
             // empty
         }
     }
-}
\ No newline at end of file
+}
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/TwoManagedCamelContextAutoAssignedNameClashTest.java b/core/camel-management/src/test/java/org/apache/camel/management/TwoManagedCamelContextAutoAssignedNameClashTest.java
index 0ad4cec..a0f8170 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/TwoManagedCamelContextAutoAssignedNameClashTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/TwoManagedCamelContextAutoAssignedNameClashTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/TwoManagedCamelContextTest.java b/core/camel-management/src/test/java/org/apache/camel/management/TwoManagedCamelContextTest.java
index 20dcabe..b89450e 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/TwoManagedCamelContextTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/TwoManagedCamelContextTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/TwoManagedNamePatternTest.java b/core/camel-management/src/test/java/org/apache/camel/management/TwoManagedNamePatternTest.java
index 2bc1af8..6bd86cb 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/TwoManagedNamePatternTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/TwoManagedNamePatternTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.management;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
diff --git a/core/camel-management/src/test/java/org/apache/camel/processor/NoErrorHandlerTest.java b/core/camel-management/src/test/java/org/apache/camel/processor/NoErrorHandlerTest.java
index f011b54..4a60876 100644
--- a/core/camel-management/src/test/java/org/apache/camel/processor/NoErrorHandlerTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/processor/NoErrorHandlerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.processor;
+
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultTimeoutMap.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultTimeoutMap.java
index acc114d..dfb7b904 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultTimeoutMap.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultTimeoutMap.java
@@ -27,14 +27,13 @@
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
-import static java.util.Comparator.comparing;
-
 import org.apache.camel.TimeoutMap;
 import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.util.Comparator.comparing;
 import static org.apache.camel.TimeoutMap.Listener.Type.Evict;
 import static org.apache.camel.TimeoutMap.Listener.Type.Put;
 import static org.apache.camel.TimeoutMap.Listener.Type.Remove;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PlatformHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/PlatformHelper.java
index c44a92f..a62fe9d 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PlatformHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PlatformHelper.java
@@ -48,4 +48,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/PredicateBuilder.java b/core/camel-support/src/main/java/org/apache/camel/support/builder/PredicateBuilder.java
index 46b4bbd..1240922 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/builder/PredicateBuilder.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/builder/PredicateBuilder.java
@@ -26,6 +26,7 @@
 import org.apache.camel.Predicate;
 import org.apache.camel.support.ExpressionToPredicateAdapter;
 import org.apache.camel.support.ObjectHelper;
+
 import static org.apache.camel.util.ObjectHelper.notNull;
 
 /**
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/jndi/JndiBeanRepository.java b/core/camel-support/src/main/java/org/apache/camel/support/jndi/JndiBeanRepository.java
index bd577d9..2c9b6b2 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/jndi/JndiBeanRepository.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/jndi/JndiBeanRepository.java
@@ -21,6 +21,7 @@
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
+
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NameClassPair;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/management/MBeanInfoAssembler.java b/core/camel-support/src/main/java/org/apache/camel/support/management/MBeanInfoAssembler.java
index a45cdcb..a5ad3d1 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/management/MBeanInfoAssembler.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/management/MBeanInfoAssembler.java
@@ -22,6 +22,7 @@
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
+
 import javax.management.Descriptor;
 import javax.management.IntrospectionException;
 import javax.management.JMException;
diff --git a/core/camel-util/src/test/java/org/apache/camel/util/StringHelperTest.java b/core/camel-util/src/test/java/org/apache/camel/util/StringHelperTest.java
index a48a3bf..0b78fe7 100644
--- a/core/camel-util/src/test/java/org/apache/camel/util/StringHelperTest.java
+++ b/core/camel-util/src/test/java/org/apache/camel/util/StringHelperTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.util;
 
 import junit.framework.TestCase;
+
 import org.junit.Test;
 
 import static org.apache.camel.util.StringHelper.camelCaseToDash;
diff --git a/core/camel-util/src/test/java/org/apache/camel/util/concurrent/SubmitOrderedCompletionServiceTest.java b/core/camel-util/src/test/java/org/apache/camel/util/concurrent/SubmitOrderedCompletionServiceTest.java
index bd39d93..19e24e5 100644
--- a/core/camel-util/src/test/java/org/apache/camel/util/concurrent/SubmitOrderedCompletionServiceTest.java
+++ b/core/camel-util/src/test/java/org/apache/camel/util/concurrent/SubmitOrderedCompletionServiceTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.util.concurrent;
+
 import java.util.concurrent.Callable;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
diff --git a/examples/camel-example-any23/src/main/java/org/apache/camel/example/any23/Any23RouteBuilder.java b/examples/camel-example-any23/src/main/java/org/apache/camel/example/any23/Any23RouteBuilder.java
index 98ee77c..9cf3453 100644
--- a/examples/camel-example-any23/src/main/java/org/apache/camel/example/any23/Any23RouteBuilder.java
+++ b/examples/camel-example-any23/src/main/java/org/apache/camel/example/any23/Any23RouteBuilder.java
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
diff --git a/examples/camel-example-artemis-amqp-blueprint/src/test/java/org/apache/camel/example/artemis/amqp/EmbeddedBrokerSupport.java b/examples/camel-example-artemis-amqp-blueprint/src/test/java/org/apache/camel/example/artemis/amqp/EmbeddedBrokerSupport.java
index ad9ec60..2313810 100644
--- a/examples/camel-example-artemis-amqp-blueprint/src/test/java/org/apache/camel/example/artemis/amqp/EmbeddedBrokerSupport.java
+++ b/examples/camel-example-artemis-amqp-blueprint/src/test/java/org/apache/camel/example/artemis/amqp/EmbeddedBrokerSupport.java
@@ -18,6 +18,7 @@
 
 import org.apache.activemq.artemis.jms.server.embedded.EmbeddedJMS;
 import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager;
+
 // import org.apache.activemq.artemis.core.config.impl.SecurityConfiguration;
 // import org.apache.activemq.artemis.spi.core.security.jaas.InVMLoginModule;
 
diff --git a/examples/camel-example-artemis/src/main/java/org/apache/camel/example/artemis/ArtemisMain.java b/examples/camel-example-artemis/src/main/java/org/apache/camel/example/artemis/ArtemisMain.java
index 6ca48d0..49c7a57 100644
--- a/examples/camel-example-artemis/src/main/java/org/apache/camel/example/artemis/ArtemisMain.java
+++ b/examples/camel-example-artemis/src/main/java/org/apache/camel/example/artemis/ArtemisMain.java
@@ -17,7 +17,6 @@
 package org.apache.camel.example.artemis;
 
 import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
-
 import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.component.jms.JmsConfiguration;
 import org.apache.camel.main.Main;
diff --git a/examples/camel-example-bigxml-split/src/test/java/org/apache/camel/example/bigxml/StaxTokenizerTest.java b/examples/camel-example-bigxml-split/src/test/java/org/apache/camel/example/bigxml/StaxTokenizerTest.java
index 0feb6b0..eb8b803 100644
--- a/examples/camel-example-bigxml-split/src/test/java/org/apache/camel/example/bigxml/StaxTokenizerTest.java
+++ b/examples/camel-example-bigxml-split/src/test/java/org/apache/camel/example/bigxml/StaxTokenizerTest.java
@@ -22,7 +22,6 @@
 import org.apache.camel.builder.NotifyBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
-
 import org.junit.BeforeClass;
 import org.junit.Test;
 
diff --git a/examples/camel-example-bigxml-split/src/test/java/org/apache/camel/example/bigxml/XmlTokenizerTest.java b/examples/camel-example-bigxml-split/src/test/java/org/apache/camel/example/bigxml/XmlTokenizerTest.java
index e4f5e62..0ea315d 100644
--- a/examples/camel-example-bigxml-split/src/test/java/org/apache/camel/example/bigxml/XmlTokenizerTest.java
+++ b/examples/camel-example-bigxml-split/src/test/java/org/apache/camel/example/bigxml/XmlTokenizerTest.java
@@ -22,7 +22,6 @@
 import org.apache.camel.builder.NotifyBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
-
 import org.junit.BeforeClass;
 import org.junit.Test;
 
diff --git a/examples/camel-example-billboard-aggr/src/test/java/org/apache/camel/example/billboard/BillboardAggrTest.java b/examples/camel-example-billboard-aggr/src/test/java/org/apache/camel/example/billboard/BillboardAggrTest.java
index 7786512..d0aecd9 100644
--- a/examples/camel-example-billboard-aggr/src/test/java/org/apache/camel/example/billboard/BillboardAggrTest.java
+++ b/examples/camel-example-billboard-aggr/src/test/java/org/apache/camel/example/billboard/BillboardAggrTest.java
@@ -29,7 +29,6 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.dataformat.BindyType;
 import org.apache.camel.test.junit4.CamelTestSupport;
-
 import org.junit.Test;
 
 public class BillboardAggrTest extends CamelTestSupport {
diff --git a/examples/camel-example-cafe-endpointdsl/src/main/java/org/apache/camel/example/cafe/stuff/Waiter.java b/examples/camel-example-cafe-endpointdsl/src/main/java/org/apache/camel/example/cafe/stuff/Waiter.java
index ea4d6d9..6fcbd59 100644
--- a/examples/camel-example-cafe-endpointdsl/src/main/java/org/apache/camel/example/cafe/stuff/Waiter.java
+++ b/examples/camel-example-cafe-endpointdsl/src/main/java/org/apache/camel/example/cafe/stuff/Waiter.java
@@ -21,7 +21,6 @@
 import org.apache.camel.example.cafe.Delivery;
 import org.apache.camel.example.cafe.Drink;
 
-
 public class Waiter {
     
     public Delivery prepareDelivery(List<Drink> drinks) {
diff --git a/examples/camel-example-cafe/src/main/java/org/apache/camel/example/cafe/stuff/Waiter.java b/examples/camel-example-cafe/src/main/java/org/apache/camel/example/cafe/stuff/Waiter.java
index ea4d6d9..6fcbd59 100644
--- a/examples/camel-example-cafe/src/main/java/org/apache/camel/example/cafe/stuff/Waiter.java
+++ b/examples/camel-example-cafe/src/main/java/org/apache/camel/example/cafe/stuff/Waiter.java
@@ -21,7 +21,6 @@
 import org.apache.camel.example.cafe.Delivery;
 import org.apache.camel.example.cafe.Drink;
 
-
 public class Waiter {
     
     public Delivery prepareDelivery(List<Drink> drinks) {
diff --git a/examples/camel-example-cdi-aws-s3/src/main/java/org/apache/camel/example/cdi/aws/s3/Application.java b/examples/camel-example-cdi-aws-s3/src/main/java/org/apache/camel/example/cdi/aws/s3/Application.java
index dceb072..e6cc364 100644
--- a/examples/camel-example-cdi-aws-s3/src/main/java/org/apache/camel/example/cdi/aws/s3/Application.java
+++ b/examples/camel-example-cdi-aws-s3/src/main/java/org/apache/camel/example/cdi/aws/s3/Application.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.cdi.aws.s3;
 
 import java.io.File;
+
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.inject.Produces;
 import javax.inject.Named;
diff --git a/examples/camel-example-cdi-cassandraql/src/main/java/org/apache/camel/example/cdi/cassandraql/Application.java b/examples/camel-example-cdi-cassandraql/src/main/java/org/apache/camel/example/cdi/cassandraql/Application.java
index 9a99b24..13549ee 100644
--- a/examples/camel-example-cdi-cassandraql/src/main/java/org/apache/camel/example/cdi/cassandraql/Application.java
+++ b/examples/camel-example-cdi-cassandraql/src/main/java/org/apache/camel/example/cdi/cassandraql/Application.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.cdi.cassandraql;
 
 import java.util.Arrays;
+
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.inject.Produces;
 import javax.inject.Named;
diff --git a/examples/camel-example-cdi-kubernetes/src/main/java/org/apache/camel/example/cdi/kubernetes/Application.java b/examples/camel-example-cdi-kubernetes/src/main/java/org/apache/camel/example/cdi/kubernetes/Application.java
index 43de7b8..ecac01d9 100644
--- a/examples/camel-example-cdi-kubernetes/src/main/java/org/apache/camel/example/cdi/kubernetes/Application.java
+++ b/examples/camel-example-cdi-kubernetes/src/main/java/org/apache/camel/example/cdi/kubernetes/Application.java
@@ -19,6 +19,7 @@
 import java.time.Duration;
 import java.time.ZonedDateTime;
 import java.util.List;
+
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.inject.Produces;
 import javax.inject.Named;
diff --git a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/Application.java b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/Application.java
index b6ebce9..d03cc9d 100644
--- a/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/Application.java
+++ b/examples/camel-example-cdi-metrics/src/main/java/org/apache/camel/example/cdi/metrics/Application.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.cdi.metrics;
 
 import java.util.concurrent.TimeUnit;
+
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Disposes;
diff --git a/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/CdiMetricsTest.java b/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/CdiMetricsTest.java
index 684db4c..df73cf4 100644
--- a/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/CdiMetricsTest.java
+++ b/examples/camel-example-cdi-metrics/src/test/java/org/apache/camel/example/cdi/metrics/CdiMetricsTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.cdi.metrics;
 
 import javax.inject.Inject;
+
 import com.codahale.metrics.Gauge;
 import com.codahale.metrics.Meter;
 import com.codahale.metrics.annotation.Metric;
diff --git a/examples/camel-example-cdi-properties/src/test/java/org/apache/camel/example/cdi/properties/CdiPropertiesTest.java b/examples/camel-example-cdi-properties/src/test/java/org/apache/camel/example/cdi/properties/CdiPropertiesTest.java
index 9324488..cafbddf 100644
--- a/examples/camel-example-cdi-properties/src/test/java/org/apache/camel/example/cdi/properties/CdiPropertiesTest.java
+++ b/examples/camel-example-cdi-properties/src/test/java/org/apache/camel/example/cdi/properties/CdiPropertiesTest.java
@@ -68,4 +68,4 @@
             message,
             is(equalTo("Hello")));
     }
-}
\ No newline at end of file
+}
diff --git a/examples/camel-example-cdi-rest-servlet/src/test/java/org/apache/camel/example/cdi/rest/servlet/CdiRestServletTest.java b/examples/camel-example-cdi-rest-servlet/src/test/java/org/apache/camel/example/cdi/rest/servlet/CdiRestServletTest.java
index 7ef09f7..34c7e47 100644
--- a/examples/camel-example-cdi-rest-servlet/src/test/java/org/apache/camel/example/cdi/rest/servlet/CdiRestServletTest.java
+++ b/examples/camel-example-cdi-rest-servlet/src/test/java/org/apache/camel/example/cdi/rest/servlet/CdiRestServletTest.java
@@ -61,4 +61,4 @@
         assertThat(IOHelper.loadText(new URL(url, "camel/say/hello/Antonin").openStream()),
             is(startsWith("Hello Antonin")));
     }
-}
\ No newline at end of file
+}
diff --git a/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/AlternativeTest.java b/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/AlternativeTest.java
index 149bf6b..cb871d5 100644
--- a/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/AlternativeTest.java
+++ b/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/AlternativeTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.cdi.test;
 
 import java.util.concurrent.TimeUnit;
+
 import javax.inject.Inject;
 
 import org.apache.camel.ProducerTemplate;
diff --git a/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/ApplicationScopedTest.java b/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/ApplicationScopedTest.java
index e0a27e6..05115d8 100644
--- a/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/ApplicationScopedTest.java
+++ b/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/ApplicationScopedTest.java
@@ -18,6 +18,7 @@
 
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
+
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.context.Initialized;
 import javax.enterprise.event.Observes;
diff --git a/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/CustomContextTest.java b/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/CustomContextTest.java
index e83857f..c0acd09a 100644
--- a/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/CustomContextTest.java
+++ b/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/CustomContextTest.java
@@ -48,4 +48,4 @@
             disableJMX();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/OrderTest.java b/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/OrderTest.java
index e632406..f2dccfb 100644
--- a/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/OrderTest.java
+++ b/examples/camel-example-cdi-test/src/test/java/org/apache/camel/example/cdi/test/OrderTest.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.inject.Inject;
 
 import org.apache.camel.Exchange;
@@ -35,7 +36,6 @@
 import static org.hamcrest.Matchers.contains;
 import static org.junit.Assert.assertThat;
 
-
 @RunWith(CamelCdiRunner.class)
 public class OrderTest {
 
diff --git a/examples/camel-example-cdi-xml/src/main/java/org/apache/camel/example/cdi/xml/Application.java b/examples/camel-example-cdi-xml/src/main/java/org/apache/camel/example/cdi/xml/Application.java
index d176dac..5a741cc 100644
--- a/examples/camel-example-cdi-xml/src/main/java/org/apache/camel/example/cdi/xml/Application.java
+++ b/examples/camel-example-cdi-xml/src/main/java/org/apache/camel/example/cdi/xml/Application.java
@@ -84,4 +84,4 @@
             + "|__   |   | | |  _| . | . | | | |   |_ _ _ \n"
             + "|_____|_|_|___|_| |___|___|_____|_|_|_|_|_|");
     }
-}
\ No newline at end of file
+}
diff --git a/examples/camel-example-cdi-xml/src/test/java/org/apache/camel/example/cdi/xml/CdiXmlTest.java b/examples/camel-example-cdi-xml/src/test/java/org/apache/camel/example/cdi/xml/CdiXmlTest.java
index e6c5572..41ceada 100644
--- a/examples/camel-example-cdi-xml/src/test/java/org/apache/camel/example/cdi/xml/CdiXmlTest.java
+++ b/examples/camel-example-cdi-xml/src/test/java/org/apache/camel/example/cdi/xml/CdiXmlTest.java
@@ -1,102 +1,102 @@
-/*
- * 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.example.cdi.xml;
-
-import java.util.concurrent.TimeUnit;
-
-import javax.enterprise.event.Observes;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Endpoint;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.ServiceStatus;
-import org.apache.camel.builder.AdviceWithRouteBuilder;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.Uri;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.model.ModelCamelContext;
-import org.apache.camel.reifier.RouteReifier;
-import org.apache.camel.spi.CamelEvent.CamelContextStartingEvent;
-import org.apache.camel.test.cdi.CamelCdiRunner;
-import org.apache.camel.test.cdi.Order;
-import org.awaitility.Awaitility;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
-
-@RunWith(CamelCdiRunner.class)
-public class CdiXmlTest {
-
-    @Named
-    @Inject
-    private Endpoint neo;
-
-    @Inject
-    private ProducerTemplate prompt;
-
-    void pipeMatrixStream(@Observes CamelContextStartingEvent event,
-                          ModelCamelContext context) throws Exception {
-        RouteReifier
-            .adviceWith(context.getRouteDefinition("matrix"), context, new AdviceWithRouteBuilder() {
-                @Override
-                public void configure() {
-                    weaveAddLast().to("mock:matrix");
-                }
-            });
-    }
-
-    static class RescueMission extends RouteBuilder {
-
-        @Override
-        public void configure() {
-            from("stub:rescue").routeId("rescue mission").to("mock:zion");
-        }
-    }
-
-    @Test
-    @Order(1)
-    public void takeTheBluePill(@Uri("mock:matrix") MockEndpoint matrix) throws InterruptedException {
-        matrix.expectedMessageCount(1);
-        matrix.expectedBodiesReceived("Matrix » Take the blue pill!");
-
-        prompt.sendBody(neo, "Take the blue pill!");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, matrix);
-    }
-
-    @Test
-    @Order(2)
-    public void takeTheRedPill(@Uri("mock:zion") MockEndpoint zion) throws InterruptedException {
-        zion.expectedMessageCount(1);
-        zion.expectedHeaderReceived("location", "matrix");
-
-        prompt.sendBody(neo, "Take the red pill!");
-
-        assertIsSatisfied(2L, TimeUnit.SECONDS, zion);
-    }
-
-    @Test
-    @Order(3)
-    public void verifyRescue(CamelContext context) {
-        Awaitility.await("Neo is still in the matrix!")
-            .atMost(5, TimeUnit.SECONDS)
-            .until(() -> ServiceStatus.Stopped.equals(context.getRouteController().getRouteStatus("terminal")));
-    }
-}
+/*
+ * 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.example.cdi.xml;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.ServiceStatus;
+import org.apache.camel.builder.AdviceWithRouteBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.cdi.Uri;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.model.ModelCamelContext;
+import org.apache.camel.reifier.RouteReifier;
+import org.apache.camel.spi.CamelEvent.CamelContextStartingEvent;
+import org.apache.camel.test.cdi.CamelCdiRunner;
+import org.apache.camel.test.cdi.Order;
+import org.awaitility.Awaitility;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
+
+@RunWith(CamelCdiRunner.class)
+public class CdiXmlTest {
+
+    @Named
+    @Inject
+    private Endpoint neo;
+
+    @Inject
+    private ProducerTemplate prompt;
+
+    void pipeMatrixStream(@Observes CamelContextStartingEvent event,
+                          ModelCamelContext context) throws Exception {
+        RouteReifier
+            .adviceWith(context.getRouteDefinition("matrix"), context, new AdviceWithRouteBuilder() {
+                @Override
+                public void configure() {
+                    weaveAddLast().to("mock:matrix");
+                }
+            });
+    }
+
+    static class RescueMission extends RouteBuilder {
+
+        @Override
+        public void configure() {
+            from("stub:rescue").routeId("rescue mission").to("mock:zion");
+        }
+    }
+
+    @Test
+    @Order(1)
+    public void takeTheBluePill(@Uri("mock:matrix") MockEndpoint matrix) throws InterruptedException {
+        matrix.expectedMessageCount(1);
+        matrix.expectedBodiesReceived("Matrix » Take the blue pill!");
+
+        prompt.sendBody(neo, "Take the blue pill!");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, matrix);
+    }
+
+    @Test
+    @Order(2)
+    public void takeTheRedPill(@Uri("mock:zion") MockEndpoint zion) throws InterruptedException {
+        zion.expectedMessageCount(1);
+        zion.expectedHeaderReceived("location", "matrix");
+
+        prompt.sendBody(neo, "Take the red pill!");
+
+        assertIsSatisfied(2L, TimeUnit.SECONDS, zion);
+    }
+
+    @Test
+    @Order(3)
+    public void verifyRescue(CamelContext context) {
+        Awaitility.await("Neo is still in the matrix!")
+            .atMost(5, TimeUnit.SECONDS)
+            .until(() -> ServiceStatus.Stopped.equals(context.getRouteController().getRouteStatus("terminal")));
+    }
+}
diff --git a/examples/camel-example-cxf-proxy/src/test/java/org/apache/camel/example/reportincident/ReportIncidentRoutesTest.java b/examples/camel-example-cxf-proxy/src/test/java/org/apache/camel/example/reportincident/ReportIncidentRoutesTest.java
index dba12fb..f737d85 100644
--- a/examples/camel-example-cxf-proxy/src/test/java/org/apache/camel/example/reportincident/ReportIncidentRoutesTest.java
+++ b/examples/camel-example-cxf-proxy/src/test/java/org/apache/camel/example/reportincident/ReportIncidentRoutesTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.example.reportincident;
+
 import java.io.File;
 import java.io.FileOutputStream;
 
@@ -27,7 +28,6 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-
 /**
  * Unit test of our routes
  */
diff --git a/examples/camel-example-cxf-tomcat/src/main/java/org/apache/camel/example/cxf/CamelRouteClient.java b/examples/camel-example-cxf-tomcat/src/main/java/org/apache/camel/example/cxf/CamelRouteClient.java
index 6cf8911..8b4787e 100644
--- a/examples/camel-example-cxf-tomcat/src/main/java/org/apache/camel/example/cxf/CamelRouteClient.java
+++ b/examples/camel-example-cxf-tomcat/src/main/java/org/apache/camel/example/cxf/CamelRouteClient.java
@@ -23,7 +23,6 @@
 import org.apache.camel.example.cxf.incident.OutputStatusIncident;
 import org.apache.cxf.frontend.ClientProxyFactoryBean;
 
-
 public class CamelRouteClient {
 
     private static final String URL = "http://localhost:8080/camel-example-cxf-tomcat/webservices/incident";
diff --git a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/camel/transport/Client.java b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/camel/transport/Client.java
index efaf2f5..68a81e5 100644
--- a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/camel/transport/Client.java
+++ b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/camel/transport/Client.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.camel.transport;
 
 import java.net.MalformedURLException;
+
 import javax.xml.namespace.QName;
 import javax.xml.ws.Service;
 
diff --git a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/httptojms/Client.java b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/httptojms/Client.java
index 91cb7f5..7cc315e 100644
--- a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/httptojms/Client.java
+++ b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/httptojms/Client.java
@@ -19,6 +19,7 @@
 import java.io.File;
 import java.net.MalformedURLException;
 import java.net.URL;
+
 import javax.xml.namespace.QName;
 
 import org.apache.hello_world_soap_http.Greeter;
diff --git a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/jaxrs/JAXRSClient.java b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/jaxrs/JAXRSClient.java
index 4314f9b..a74afc9 100644
--- a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/jaxrs/JAXRSClient.java
+++ b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/jaxrs/JAXRSClient.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.cxf.jaxrs;
 
 import java.util.Collections;
+
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
 
diff --git a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/jaxrs/resources/Book.java b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/jaxrs/resources/Book.java
index 4b4a48c..05e03a0 100644
--- a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/jaxrs/resources/Book.java
+++ b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/jaxrs/resources/Book.java
@@ -18,7 +18,6 @@
 
 import javax.xml.bind.annotation.XmlRootElement;
 
-
 @XmlRootElement(name = "Book")
 public class Book {
     private String name;
diff --git a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/jaxrs/resources/BookStoreImpl.java b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/jaxrs/resources/BookStoreImpl.java
index 330a365..d365579 100644
--- a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/jaxrs/resources/BookStoreImpl.java
+++ b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/jaxrs/resources/BookStoreImpl.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
 
diff --git a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/provider/GreeterProvider.java b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/provider/GreeterProvider.java
index 4676829..29aeaa4 100644
--- a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/provider/GreeterProvider.java
+++ b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/provider/GreeterProvider.java
@@ -22,8 +22,6 @@
 import javax.xml.ws.ServiceMode;
 import javax.xml.ws.WebServiceProvider;
 
-
-
 // START SNIPPET: e1
 @WebServiceProvider()
 @ServiceMode(Mode.MESSAGE)
diff --git a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/provider/TesterBean.java b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/provider/TesterBean.java
index 73a21e8..10cb5c4 100644
--- a/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/provider/TesterBean.java
+++ b/examples/camel-example-cxf/src/main/java/org/apache/camel/example/cxf/provider/TesterBean.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.cxf.provider;
 
 import java.util.List;
+
 import javax.xml.namespace.QName;
 import javax.xml.soap.MessageFactory;
 import javax.xml.soap.SOAPBody;
diff --git a/examples/camel-example-cxf/src/test/java/org/apache/camel/example/camel/transport/CamelTransportClientServerTest.java b/examples/camel-example-cxf/src/test/java/org/apache/camel/example/camel/transport/CamelTransportClientServerTest.java
index ea30cbb..7fed53b 100644
--- a/examples/camel-example-cxf/src/test/java/org/apache/camel/example/camel/transport/CamelTransportClientServerTest.java
+++ b/examples/camel-example-cxf/src/test/java/org/apache/camel/example/camel/transport/CamelTransportClientServerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.example.camel.transport;
+
 import java.net.MalformedURLException;
 
 import org.apache.camel.test.AvailablePortFinder;
diff --git a/examples/camel-example-cxf/src/test/java/org/apache/camel/example/cxf/jaxrs/JAXRSClientServerTest.java b/examples/camel-example-cxf/src/test/java/org/apache/camel/example/cxf/jaxrs/JAXRSClientServerTest.java
index daafb36..cb81b0f 100644
--- a/examples/camel-example-cxf/src/test/java/org/apache/camel/example/cxf/jaxrs/JAXRSClientServerTest.java
+++ b/examples/camel-example-cxf/src/test/java/org/apache/camel/example/cxf/jaxrs/JAXRSClientServerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.example.cxf.jaxrs;
+
 import org.apache.camel.example.cxf.jaxrs.resources.Book;
 import org.apache.camel.example.cxf.jaxrs.resources.BookNotFoundFault;
 import org.apache.camel.example.cxf.jaxrs.resources.BookStore;
diff --git a/examples/camel-example-fhir-osgi/src/test/java/org/apache/camel/example/fhir/osgi/FhirOsgiIT.java b/examples/camel-example-fhir-osgi/src/test/java/org/apache/camel/example/fhir/osgi/FhirOsgiIT.java
index 0039466..68414ab 100644
--- a/examples/camel-example-fhir-osgi/src/test/java/org/apache/camel/example/fhir/osgi/FhirOsgiIT.java
+++ b/examples/camel-example-fhir-osgi/src/test/java/org/apache/camel/example/fhir/osgi/FhirOsgiIT.java
@@ -20,7 +20,9 @@
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
+
 import javax.inject.Inject;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ServiceStatus;
 import org.junit.Test;
diff --git a/examples/camel-example-fhir-spring-boot/src/main/java/sample/camel/MyCamelRouter.java b/examples/camel-example-fhir-spring-boot/src/main/java/sample/camel/MyCamelRouter.java
index 33a7726..f33e7fc 100644
--- a/examples/camel-example-fhir-spring-boot/src/main/java/sample/camel/MyCamelRouter.java
+++ b/examples/camel-example-fhir-spring-boot/src/main/java/sample/camel/MyCamelRouter.java
@@ -19,11 +19,9 @@
 import ca.uhn.hl7v2.HL7Exception;
 import ca.uhn.hl7v2.model.v24.message.ORU_R01;
 import ca.uhn.hl7v2.model.v24.segment.PID;
-
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.http.ProtocolException;
-
 import org.hl7.fhir.dstu3.model.Patient;
 import org.springframework.stereotype.Component;
 
diff --git a/examples/camel-example-grpc-kubernetes/hello-camel-grpc-server-kubernetes/src/main/java/org/apache/camel/examples/grpc/HelloCamelServer.java b/examples/camel-example-grpc-kubernetes/hello-camel-grpc-server-kubernetes/src/main/java/org/apache/camel/examples/grpc/HelloCamelServer.java
index f5a92d3..f60433e 100644
--- a/examples/camel-example-grpc-kubernetes/hello-camel-grpc-server-kubernetes/src/main/java/org/apache/camel/examples/grpc/HelloCamelServer.java
+++ b/examples/camel-example-grpc-kubernetes/hello-camel-grpc-server-kubernetes/src/main/java/org/apache/camel/examples/grpc/HelloCamelServer.java
@@ -22,7 +22,6 @@
 import io.grpc.Server;
 import io.grpc.ServerBuilder;
 import io.grpc.stub.StreamObserver;
-
 import org.apache.camel.examples.CamelHelloGrpc;
 import org.apache.camel.examples.CamelHelloReply;
 import org.apache.camel.examples.CamelHelloRequest;
diff --git a/examples/camel-example-jdbc/src/main/java/org/apache/camel/example/jdbc/RecordProcessor.java b/examples/camel-example-jdbc/src/main/java/org/apache/camel/example/jdbc/RecordProcessor.java
index e0c4a0d..e3099e6 100644
--- a/examples/camel-example-jdbc/src/main/java/org/apache/camel/example/jdbc/RecordProcessor.java
+++ b/examples/camel-example-jdbc/src/main/java/org/apache/camel/example/jdbc/RecordProcessor.java
@@ -38,4 +38,4 @@
         log.info("Processing record {}", record);
         // Do something useful with this record.
     }
-}
\ No newline at end of file
+}
diff --git a/examples/camel-example-jmx/src/main/java/org/apache/camel/example/jmx/MyRouteBuilder.java b/examples/camel-example-jmx/src/main/java/org/apache/camel/example/jmx/MyRouteBuilder.java
index 3e18b54..cdf10b7 100644
--- a/examples/camel-example-jmx/src/main/java/org/apache/camel/example/jmx/MyRouteBuilder.java
+++ b/examples/camel-example-jmx/src/main/java/org/apache/camel/example/jmx/MyRouteBuilder.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.jmx;
 
 import java.lang.management.ManagementFactory;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
diff --git a/examples/camel-example-jmx/src/main/java/org/apache/camel/example/jmx/SimpleBean.java b/examples/camel-example-jmx/src/main/java/org/apache/camel/example/jmx/SimpleBean.java
index 7ba8434..54f2267 100644
--- a/examples/camel-example-jmx/src/main/java/org/apache/camel/example/jmx/SimpleBean.java
+++ b/examples/camel-example-jmx/src/main/java/org/apache/camel/example/jmx/SimpleBean.java
@@ -18,6 +18,7 @@
 
 import java.text.SimpleDateFormat;
 import java.util.Date;
+
 import javax.management.AttributeChangeNotification;
 import javax.management.NotificationBroadcasterSupport;
 
diff --git a/examples/camel-example-kafka-avro/src/main/java/org/apache/camel/example/kafka/avro/CustomKafkaAvroDeserializer.java b/examples/camel-example-kafka-avro/src/main/java/org/apache/camel/example/kafka/avro/CustomKafkaAvroDeserializer.java
index 063405f..bfe7ff3 100644
--- a/examples/camel-example-kafka-avro/src/main/java/org/apache/camel/example/kafka/avro/CustomKafkaAvroDeserializer.java
+++ b/examples/camel-example-kafka-avro/src/main/java/org/apache/camel/example/kafka/avro/CustomKafkaAvroDeserializer.java
@@ -24,7 +24,6 @@
 import io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient;
 import io.confluent.kafka.serializers.AbstractKafkaAvroDeserializer;
 import io.confluent.kafka.serializers.KafkaAvroDeserializerConfig;
-
 import org.apache.kafka.common.serialization.Deserializer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/examples/camel-example-kafka-avro/src/main/java/org/apache/camel/example/kafka/avro/CustomKafkaAvroSerializer.java b/examples/camel-example-kafka-avro/src/main/java/org/apache/camel/example/kafka/avro/CustomKafkaAvroSerializer.java
index bced943..35e5a65 100644
--- a/examples/camel-example-kafka-avro/src/main/java/org/apache/camel/example/kafka/avro/CustomKafkaAvroSerializer.java
+++ b/examples/camel-example-kafka-avro/src/main/java/org/apache/camel/example/kafka/avro/CustomKafkaAvroSerializer.java
@@ -24,8 +24,6 @@
 import io.confluent.kafka.serializers.AbstractKafkaAvroSerializer;
 import io.confluent.kafka.serializers.AvroSchemaUtils;
 import io.confluent.kafka.serializers.KafkaAvroSerializerConfig;
-
-
 import org.apache.kafka.common.config.ConfigException;
 import org.apache.kafka.common.serialization.Serializer;
 import org.slf4j.Logger;
@@ -77,4 +75,4 @@
     public void configure(Map<String, ?> arg0, boolean arg1) {
         configure(null);
     }
-}
\ No newline at end of file
+}
diff --git a/examples/camel-example-kafka-avro/src/main/java/org/apache/camel/example/kafka/avro/KafkaAvroMessageProcessor.java b/examples/camel-example-kafka-avro/src/main/java/org/apache/camel/example/kafka/avro/KafkaAvroMessageProcessor.java
index 92cf835..a4bb64a 100644
--- a/examples/camel-example-kafka-avro/src/main/java/org/apache/camel/example/kafka/avro/KafkaAvroMessageProcessor.java
+++ b/examples/camel-example-kafka-avro/src/main/java/org/apache/camel/example/kafka/avro/KafkaAvroMessageProcessor.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.example.kafka.avro;
 
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.slf4j.Logger;
diff --git a/examples/camel-example-loan-broker-cxf/src/test/java/org/apache/camel/loanbroker/LoanBrokerWSTest.java b/examples/camel-example-loan-broker-cxf/src/test/java/org/apache/camel/loanbroker/LoanBrokerWSTest.java
index 306a678..79c9090 100644
--- a/examples/camel-example-loan-broker-cxf/src/test/java/org/apache/camel/loanbroker/LoanBrokerWSTest.java
+++ b/examples/camel-example-loan-broker-cxf/src/test/java/org/apache/camel/loanbroker/LoanBrokerWSTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.loanbroker;
+
 import java.io.File;
 import java.io.FileOutputStream;
 
diff --git a/examples/camel-example-management/src/test/java/org/apache/camel/example/management/ManagementExampleTest.java b/examples/camel-example-management/src/test/java/org/apache/camel/example/management/ManagementExampleTest.java
index fdd8c70..5f111a2 100644
--- a/examples/camel-example-management/src/test/java/org/apache/camel/example/management/ManagementExampleTest.java
+++ b/examples/camel-example-management/src/test/java/org/apache/camel/example/management/ManagementExampleTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.management;
 
 import java.util.Set;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
diff --git a/examples/camel-example-micrometer/src/main/java/org/apache/camel/example/micrometer/CamelPrometheusExample.java b/examples/camel-example-micrometer/src/main/java/org/apache/camel/example/micrometer/CamelPrometheusExample.java
index 5e71332..ec21750 100644
--- a/examples/camel-example-micrometer/src/main/java/org/apache/camel/example/micrometer/CamelPrometheusExample.java
+++ b/examples/camel-example-micrometer/src/main/java/org/apache/camel/example/micrometer/CamelPrometheusExample.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.micrometer;
 
 import java.time.Duration;
+
 import io.micrometer.core.instrument.Tags;
 import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics;
 import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics;
@@ -35,6 +36,7 @@
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+
 import static org.apache.camel.component.micrometer.MicrometerConstants.DISTRIBUTION_SUMMARIES;
 import static org.apache.camel.component.micrometer.messagehistory.MicrometerMessageHistoryNamingStrategy.MESSAGE_HISTORIES;
 import static org.apache.camel.component.micrometer.routepolicy.MicrometerRoutePolicyNamingStrategy.ROUTE_POLICIES;
diff --git a/examples/camel-example-micrometer/src/main/java/org/apache/camel/example/micrometer/ScheduledRouteBuilder.java b/examples/camel-example-micrometer/src/main/java/org/apache/camel/example/micrometer/ScheduledRouteBuilder.java
index bc65174..6c39229 100644
--- a/examples/camel-example-micrometer/src/main/java/org/apache/camel/example/micrometer/ScheduledRouteBuilder.java
+++ b/examples/camel-example-micrometer/src/main/java/org/apache/camel/example/micrometer/ScheduledRouteBuilder.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.micrometer;
 
 import java.util.Random;
+
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.builder.RouteBuilder;
 import org.springframework.stereotype.Component;
diff --git a/examples/camel-example-mybatis/src/main/java/org/apache/camel/example/mybatis/DatabaseInitializationBean.java b/examples/camel-example-mybatis/src/main/java/org/apache/camel/example/mybatis/DatabaseInitializationBean.java
index 5039e2d..43e3e48 100644
--- a/examples/camel-example-mybatis/src/main/java/org/apache/camel/example/mybatis/DatabaseInitializationBean.java
+++ b/examples/camel-example-mybatis/src/main/java/org/apache/camel/example/mybatis/DatabaseInitializationBean.java
@@ -21,12 +21,9 @@
 import java.sql.Statement;
 
 import org.apache.derby.jdbc.EmbeddedDriver;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
-
 /**
  * Bean that creates the database table
  */
diff --git a/examples/camel-example-olingo4-blueprint/src/main/java/org/apache/camel/example/olingo4/blueprint/Olingo4TestConfiguration.java b/examples/camel-example-olingo4-blueprint/src/main/java/org/apache/camel/example/olingo4/blueprint/Olingo4TestConfiguration.java
index 1fcfb4c..6d7083b 100644
--- a/examples/camel-example-olingo4-blueprint/src/main/java/org/apache/camel/example/olingo4/blueprint/Olingo4TestConfiguration.java
+++ b/examples/camel-example-olingo4-blueprint/src/main/java/org/apache/camel/example/olingo4/blueprint/Olingo4TestConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.olingo4.blueprint;
 
 import java.io.IOException;
+
 import org.apache.camel.component.olingo4.Olingo4Configuration;
 import org.apache.http.HttpHost;
 import org.apache.http.client.methods.HttpGet;
diff --git a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicCamelToReactorExample.java b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicCamelToReactorExample.java
index 88ff363..effba3b 100644
--- a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicCamelToReactorExample.java
+++ b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicCamelToReactorExample.java
@@ -28,7 +28,6 @@
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
-
 import reactor.core.publisher.Flux;
 
 /**
diff --git a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicCamelToReactorInOutExample.java b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicCamelToReactorInOutExample.java
index ea78f3e..3f61266 100644
--- a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicCamelToReactorInOutExample.java
+++ b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicCamelToReactorInOutExample.java
@@ -23,7 +23,6 @@
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
-
 import reactor.core.publisher.Flux;
 
 /**
diff --git a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicReactorToCamelExample.java b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicReactorToCamelExample.java
index f6b05b7..ab74fba 100644
--- a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicReactorToCamelExample.java
+++ b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicReactorToCamelExample.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.reactive.streams;
 
 import java.time.Duration;
+
 import javax.annotation.PostConstruct;
 
 import org.apache.camel.builder.RouteBuilder;
@@ -26,7 +27,6 @@
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
-
 import reactor.core.publisher.Flux;
 
 /**
diff --git a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicReactorToCamelInOutExample.java b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicReactorToCamelInOutExample.java
index 12dec07..22f9ca1 100644
--- a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicReactorToCamelInOutExample.java
+++ b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/BasicReactorToCamelInOutExample.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.reactive.streams;
 
 import java.time.Duration;
+
 import javax.annotation.PostConstruct;
 
 import org.apache.camel.builder.RouteBuilder;
@@ -27,7 +28,6 @@
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
-
 import reactor.core.publisher.Flux;
 
 /**
diff --git a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/ClientAPIRestExample.java b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/ClientAPIRestExample.java
index b7966bc..1273c27 100644
--- a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/ClientAPIRestExample.java
+++ b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/ClientAPIRestExample.java
@@ -25,7 +25,6 @@
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
-
 import reactor.core.publisher.Flux;
 
 /**
diff --git a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/ClientAPIWorkflowExample.java b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/ClientAPIWorkflowExample.java
index 5c1402d..9f4f270 100644
--- a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/ClientAPIWorkflowExample.java
+++ b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/ClientAPIWorkflowExample.java
@@ -17,6 +17,7 @@
 package org.apache.camel.example.reactive.streams;
 
 import java.io.InputStream;
+
 import javax.annotation.PostConstruct;
 
 import org.apache.camel.builder.RouteBuilder;
@@ -25,7 +26,6 @@
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
-
 import reactor.core.publisher.Flux;
 
 /**
diff --git a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/RestExample.java b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/RestExample.java
index 0c753fd..76e984a 100644
--- a/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/RestExample.java
+++ b/examples/camel-example-reactive-streams/src/main/java/org/apache/camel/example/reactive/streams/RestExample.java
@@ -23,7 +23,6 @@
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
-
 import reactor.core.publisher.Flux;
 
 /**
diff --git a/examples/camel-example-rest-swagger/src/main/java/org/apache/camel/example/RestSwaggerApplication.java b/examples/camel-example-rest-swagger/src/main/java/org/apache/camel/example/RestSwaggerApplication.java
index b4f6341..72f43d6 100644
--- a/examples/camel-example-rest-swagger/src/main/java/org/apache/camel/example/RestSwaggerApplication.java
+++ b/examples/camel-example-rest-swagger/src/main/java/org/apache/camel/example/RestSwaggerApplication.java
@@ -20,8 +20,6 @@
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
-import static java.util.function.Function.identity;
-
 import org.apache.camel.ProducerTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -31,6 +29,8 @@
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.ApplicationContext;
 
+import static java.util.function.Function.identity;
+
 @SpringBootApplication
 public class RestSwaggerApplication implements ApplicationRunner {
 
diff --git a/examples/camel-example-spring-boot-amqp/src/main/java/sample/camel/SampleAmqApplication.java b/examples/camel-example-spring-boot-amqp/src/main/java/sample/camel/SampleAmqApplication.java
index eee3e4a..bd7b327 100644
--- a/examples/camel-example-spring-boot-amqp/src/main/java/sample/camel/SampleAmqApplication.java
+++ b/examples/camel-example-spring-boot-amqp/src/main/java/sample/camel/SampleAmqApplication.java
@@ -25,7 +25,7 @@
 @EnableAutoConfiguration
 public class SampleAmqApplication {
 
-	public static void main(String[] args) {
+    public static void main(String[] args) {
         SpringApplication.run(SampleAmqApplication.class, args);
     }
 }
diff --git a/examples/camel-example-spring-boot-geocoder/src/test/java/org/apache/camel/example/springboot/geocoder/ApplicationTest.java b/examples/camel-example-spring-boot-geocoder/src/test/java/org/apache/camel/example/springboot/geocoder/ApplicationTest.java
index 449bf81..7df248c 100644
--- a/examples/camel-example-spring-boot-geocoder/src/test/java/org/apache/camel/example/springboot/geocoder/ApplicationTest.java
+++ b/examples/camel-example-spring-boot-geocoder/src/test/java/org/apache/camel/example/springboot/geocoder/ApplicationTest.java
@@ -51,4 +51,4 @@
         GeocodingResult[] res = response.getBody();
         assertNotNull(res);
     }
-}
\ No newline at end of file
+}
diff --git a/examples/camel-example-spring-boot-grpc/hello-camel-grpc-server/src/main/java/org/apache/camel/examples/grpc/HelloCamelServer.java b/examples/camel-example-spring-boot-grpc/hello-camel-grpc-server/src/main/java/org/apache/camel/examples/grpc/HelloCamelServer.java
index fb40e93..547e4ff 100644
--- a/examples/camel-example-spring-boot-grpc/hello-camel-grpc-server/src/main/java/org/apache/camel/examples/grpc/HelloCamelServer.java
+++ b/examples/camel-example-spring-boot-grpc/hello-camel-grpc-server/src/main/java/org/apache/camel/examples/grpc/HelloCamelServer.java
@@ -22,7 +22,6 @@
 import io.grpc.Server;
 import io.grpc.ServerBuilder;
 import io.grpc.stub.StreamObserver;
-
 import org.apache.camel.examples.CamelHelloGrpc;
 import org.apache.camel.examples.CamelHelloReply;
 import org.apache.camel.examples.CamelHelloRequest;
diff --git a/examples/camel-example-spring-boot-rest-jpa/src/test/java/org/apache/camel/example/spring/boot/rest/jpa/ApplicationTest.java b/examples/camel-example-spring-boot-rest-jpa/src/test/java/org/apache/camel/example/spring/boot/rest/jpa/ApplicationTest.java
index 88068e8..bb9b1dc 100644
--- a/examples/camel-example-spring-boot-rest-jpa/src/test/java/org/apache/camel/example/spring/boot/rest/jpa/ApplicationTest.java
+++ b/examples/camel-example-spring-boot-rest-jpa/src/test/java/org/apache/camel/example/spring/boot/rest/jpa/ApplicationTest.java
@@ -83,4 +83,4 @@
             .hasFieldOrPropertyWithValue("item", "ActiveMQ")
             .hasFieldOrPropertyWithValue("description", "ActiveMQ in Action");
     }
-}
\ No newline at end of file
+}
diff --git a/examples/camel-example-spring-boot-rest-swagger/src/main/java/org/apache/camel/example/springboot/User.java b/examples/camel-example-spring-boot-rest-swagger/src/main/java/org/apache/camel/example/springboot/User.java
index d85c04a..78f1b19 100644
--- a/examples/camel-example-spring-boot-rest-swagger/src/main/java/org/apache/camel/example/springboot/User.java
+++ b/examples/camel-example-spring-boot-rest-swagger/src/main/java/org/apache/camel/example/springboot/User.java
@@ -18,7 +18,6 @@
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
diff --git a/examples/camel-example-spring-jms/src/test/java/org/apache/camel/example/SpringJmsClientRemotingServerTest.java b/examples/camel-example-spring-jms/src/test/java/org/apache/camel/example/SpringJmsClientRemotingServerTest.java
index 7745aea..3e417ee 100644
--- a/examples/camel-example-spring-jms/src/test/java/org/apache/camel/example/SpringJmsClientRemotingServerTest.java
+++ b/examples/camel-example-spring-jms/src/test/java/org/apache/camel/example/SpringJmsClientRemotingServerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.example;
+
 import java.io.File;
 import java.io.FileOutputStream;
 
diff --git a/examples/camel-example-spring-jms/src/test/java/org/apache/camel/example/SpringJmsClientServerTest.java b/examples/camel-example-spring-jms/src/test/java/org/apache/camel/example/SpringJmsClientServerTest.java
index 3bca401..13bf877 100644
--- a/examples/camel-example-spring-jms/src/test/java/org/apache/camel/example/SpringJmsClientServerTest.java
+++ b/examples/camel-example-spring-jms/src/test/java/org/apache/camel/example/SpringJmsClientServerTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.example;
+
 import java.io.File;
 import java.io.FileOutputStream;
 
diff --git a/examples/camel-example-swagger-cdi/src/main/java/org/apache/camel/example/cdi/UserService.java b/examples/camel-example-swagger-cdi/src/main/java/org/apache/camel/example/cdi/UserService.java
index e729c82..8bbf4b4 100644
--- a/examples/camel-example-swagger-cdi/src/main/java/org/apache/camel/example/cdi/UserService.java
+++ b/examples/camel-example-swagger-cdi/src/main/java/org/apache/camel/example/cdi/UserService.java
@@ -20,6 +20,7 @@
 import java.util.Map;
 import java.util.Random;
 import java.util.TreeMap;
+
 import javax.inject.Named;
 
 /**
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
index 1be88bd..a42b0ed 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
@@ -24,6 +24,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 import javax.management.openmbean.CompositeData;
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java
index 0666e03..6c5ed2e 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/ContextInfoCommand.java
@@ -21,6 +21,7 @@
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Map;
+
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Unmarshaller;
 
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteInfoCommand.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteInfoCommand.java
index 3796766..fe83b02 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteInfoCommand.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteInfoCommand.java
@@ -20,6 +20,7 @@
 import java.io.StringReader;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Unmarshaller;
 
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteProfileCommand.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteProfileCommand.java
index 2ba3a4f..469a79a 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteProfileCommand.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteProfileCommand.java
@@ -18,6 +18,7 @@
 
 import java.io.PrintStream;
 import java.io.StringReader;
+
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Unmarshaller;
 
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteStepCommand.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteStepCommand.java
index 1c9a1dc..749b944 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteStepCommand.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/RouteStepCommand.java
@@ -18,6 +18,7 @@
 
 import java.io.PrintStream;
 import java.io.StringReader;
+
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Unmarshaller;
 
diff --git a/platforms/spring-boot/components-starter/camel-atomix-starter/src/main/java/org/apache/camel/component/atomix/cluster/springboot/AtomixClusterServiceAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-atomix-starter/src/main/java/org/apache/camel/component/atomix/cluster/springboot/AtomixClusterServiceAutoConfiguration.java
index cd7c0a1..0154b06 100644
--- a/platforms/spring-boot/components-starter/camel-atomix-starter/src/main/java/org/apache/camel/component/atomix/cluster/springboot/AtomixClusterServiceAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-atomix-starter/src/main/java/org/apache/camel/component/atomix/cluster/springboot/AtomixClusterServiceAutoConfiguration.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.atomix.cluster.springboot;
 
-
 import java.util.stream.Collectors;
 
 import io.atomix.catalyst.transport.Address;
diff --git a/platforms/spring-boot/components-starter/camel-consul-starter/src/main/java/org/apache/camel/component/consul/springboot/cloud/ConsulServiceDiscoveryAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-consul-starter/src/main/java/org/apache/camel/component/consul/springboot/cloud/ConsulServiceDiscoveryAutoConfiguration.java
index 9a2f86a..bc6df94 100644
--- a/platforms/spring-boot/components-starter/camel-consul-starter/src/main/java/org/apache/camel/component/consul/springboot/cloud/ConsulServiceDiscoveryAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-consul-starter/src/main/java/org/apache/camel/component/consul/springboot/cloud/ConsulServiceDiscoveryAutoConfiguration.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.PostConstruct;
 
 import org.apache.camel.CamelContext;
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageAutoConfiguration.java
index e779962..8e68868 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageAutoConfiguration.java
@@ -19,7 +19,9 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.language.constant.ConstantLanguage;
@@ -38,7 +40,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.ApplicationContext;
@@ -114,4 +115,4 @@
         }
         return language;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageConfiguration.java
index 9b1f2a5..b145566 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.constant.springboot;
 
 import javax.annotation.Generated;
+
 import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
@@ -49,4 +50,4 @@
     public void setTrim(Boolean trim) {
         this.trim = trim;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageAutoConfiguration.java
index fbfc0a2..daf22a9 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageAutoConfiguration.java
@@ -19,7 +19,9 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.language.header.HeaderLanguage;
@@ -38,7 +40,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.ApplicationContext;
@@ -114,4 +115,4 @@
         }
         return language;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageConfiguration.java
index cf7fcfe..759eebf 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.header.springboot;
 
 import javax.annotation.Generated;
+
 import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
@@ -49,4 +50,4 @@
     public void setTrim(Boolean trim) {
         this.trim = trim;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageAutoConfiguration.java
index d334eda..7e3ff24 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageAutoConfiguration.java
@@ -19,7 +19,9 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.language.property.ExchangePropertyLanguage;
@@ -38,7 +40,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.ApplicationContext;
@@ -115,4 +116,4 @@
         }
         return language;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageConfiguration.java
index f383128..7ccd9eb 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.property.springboot;
 
 import javax.annotation.Generated;
+
 import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
@@ -49,4 +50,4 @@
     public void setTrim(Boolean trim) {
         this.trim = trim;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageAutoConfiguration.java
index 58c283b..085ef5e 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageAutoConfiguration.java
@@ -19,7 +19,9 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.language.ref.RefLanguage;
@@ -38,7 +40,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.ApplicationContext;
@@ -114,4 +115,4 @@
         }
         return language;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java
index f4babe9..10ae5f4 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.ref.springboot;
 
 import javax.annotation.Generated;
+
 import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
@@ -50,4 +51,4 @@
     public void setTrim(Boolean trim) {
         this.trim = trim;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageAutoConfiguration.java
index 485e8be..0fdfe23 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageAutoConfiguration.java
@@ -19,7 +19,9 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.language.simple.FileLanguage;
@@ -38,7 +40,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.ApplicationContext;
@@ -114,4 +115,4 @@
         }
         return language;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageConfiguration.java
index c32092a..51262d0 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.simple.springboot;
 
 import javax.annotation.Generated;
+
 import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
@@ -49,4 +50,4 @@
     public void setTrim(Boolean trim) {
         this.trim = trim;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageAutoConfiguration.java
index fabb5d0..a8b7737 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageAutoConfiguration.java
@@ -19,7 +19,9 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.language.simple.SimpleLanguage;
@@ -38,7 +40,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.ApplicationContext;
@@ -114,4 +115,4 @@
         }
         return language;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageConfiguration.java
index b19e2d5..6e50db3 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.simple.springboot;
 
 import javax.annotation.Generated;
+
 import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
@@ -49,4 +50,4 @@
     public void setTrim(Boolean trim) {
         this.trim = trim;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageAutoConfiguration.java
index fa74611..f17acfe 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageAutoConfiguration.java
@@ -19,7 +19,9 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.language.tokenizer.TokenizeLanguage;
@@ -38,7 +40,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.ApplicationContext;
@@ -114,4 +115,4 @@
         }
         return language;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageConfiguration.java
index 5ed3b03..f71bb32 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.tokenizer.springboot;
 
 import javax.annotation.Generated;
+
 import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
@@ -50,4 +51,4 @@
     public void setTrim(Boolean trim) {
         this.trim = trim;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/ConsulServiceCallServiceDiscoveryConfigurationCommon.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/ConsulServiceCallServiceDiscoveryConfigurationCommon.java
index 9bcf27e..b9e6470 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/ConsulServiceCallServiceDiscoveryConfigurationCommon.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/ConsulServiceCallServiceDiscoveryConfigurationCommon.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model.cloud.springboot;
 
 import java.util.Map;
+
 import javax.annotation.Generated;
 
 /**
@@ -148,4 +149,4 @@
     public void setProperties(Map<String, String> properties) {
         this.properties = properties;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/ConsulServiceCallServiceDiscoveryConfigurationProperties.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/ConsulServiceCallServiceDiscoveryConfigurationProperties.java
index f1a90f2..3f1f4b6 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/ConsulServiceCallServiceDiscoveryConfigurationProperties.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/ConsulServiceCallServiceDiscoveryConfigurationProperties.java
@@ -18,7 +18,9 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
@@ -47,4 +49,4 @@
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/DnsServiceCallServiceDiscoveryConfigurationCommon.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/DnsServiceCallServiceDiscoveryConfigurationCommon.java
index dcfe004..bd0f72e 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/DnsServiceCallServiceDiscoveryConfigurationCommon.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/DnsServiceCallServiceDiscoveryConfigurationCommon.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model.cloud.springboot;
 
 import java.util.Map;
+
 import javax.annotation.Generated;
 
 /**
@@ -64,4 +65,4 @@
     public void setProperties(Map<String, String> properties) {
         this.properties = properties;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/DnsServiceCallServiceDiscoveryConfigurationProperties.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/DnsServiceCallServiceDiscoveryConfigurationProperties.java
index c816169..72e223d 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/DnsServiceCallServiceDiscoveryConfigurationProperties.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/DnsServiceCallServiceDiscoveryConfigurationProperties.java
@@ -18,7 +18,9 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
@@ -47,4 +49,4 @@
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/EtcdServiceCallServiceDiscoveryConfigurationCommon.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/EtcdServiceCallServiceDiscoveryConfigurationCommon.java
index 8e1cda3..c019fbf 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/EtcdServiceCallServiceDiscoveryConfigurationCommon.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/EtcdServiceCallServiceDiscoveryConfigurationCommon.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model.cloud.springboot;
 
 import java.util.Map;
+
 import javax.annotation.Generated;
 
 /**
@@ -112,4 +113,4 @@
     public void setProperties(Map<String, String> properties) {
         this.properties = properties;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/EtcdServiceCallServiceDiscoveryConfigurationProperties.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/EtcdServiceCallServiceDiscoveryConfigurationProperties.java
index 6a2cb04..abf5665 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/EtcdServiceCallServiceDiscoveryConfigurationProperties.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/EtcdServiceCallServiceDiscoveryConfigurationProperties.java
@@ -18,7 +18,9 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
@@ -47,4 +49,4 @@
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/KubernetesServiceCallServiceDiscoveryConfigurationCommon.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/KubernetesServiceCallServiceDiscoveryConfigurationCommon.java
index 159ea05..4559e5c 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/KubernetesServiceCallServiceDiscoveryConfigurationCommon.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/KubernetesServiceCallServiceDiscoveryConfigurationCommon.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model.cloud.springboot;
 
 import java.util.Map;
+
 import javax.annotation.Generated;
 
 /**
@@ -280,4 +281,4 @@
     public void setProperties(Map<String, String> properties) {
         this.properties = properties;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/KubernetesServiceCallServiceDiscoveryConfigurationProperties.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/KubernetesServiceCallServiceDiscoveryConfigurationProperties.java
index 51951b1..a85d21a 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/KubernetesServiceCallServiceDiscoveryConfigurationProperties.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/KubernetesServiceCallServiceDiscoveryConfigurationProperties.java
@@ -18,7 +18,9 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
@@ -47,4 +49,4 @@
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationCommon.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationCommon.java
index f760f54..907020e 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationCommon.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationCommon.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model.cloud.springboot;
 
 import java.util.Map;
+
 import javax.annotation.Generated;
 
 /**
@@ -88,4 +89,4 @@
     public void setProperties(Map<String, String> properties) {
         this.properties = properties;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationProperties.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationProperties.java
index ed43201..9067707 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationProperties.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/cloud/springboot/RibbonServiceCallServiceLoadBalancerConfigurationProperties.java
@@ -18,7 +18,9 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
@@ -47,4 +49,4 @@
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/rest/springboot/RestConfigurationDefinitionAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/rest/springboot/RestConfigurationDefinitionAutoConfiguration.java
index 6676f98..155f635 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/rest/springboot/RestConfigurationDefinitionAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/rest/springboot/RestConfigurationDefinitionAutoConfiguration.java
@@ -18,7 +18,9 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.rest.RestConstants;
 import org.apache.camel.spi.RestConfiguration;
@@ -99,4 +101,4 @@
         }
         return definition;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/rest/springboot/RestConfigurationDefinitionProperties.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/rest/springboot/RestConfigurationDefinitionProperties.java
index 7cebfff..becc91d 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/rest/springboot/RestConfigurationDefinitionProperties.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/rest/springboot/RestConfigurationDefinitionProperties.java
@@ -17,7 +17,9 @@
 package org.apache.camel.model.rest.springboot;
 
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.apache.camel.model.rest.RestBindingMode;
 import org.apache.camel.model.rest.RestHostNameResolver;
 import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -427,4 +429,4 @@
     public void setCorsHeaders(Map<String, Object> corsHeaders) {
         this.corsHeaders = corsHeaders;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/springboot/HystrixConfigurationDefinitionProperties.java b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/springboot/HystrixConfigurationDefinitionProperties.java
index f0e630e..063d1a9 100644
--- a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/springboot/HystrixConfigurationDefinitionProperties.java
+++ b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/springboot/HystrixConfigurationDefinitionProperties.java
@@ -18,7 +18,9 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.Generated;
+
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
@@ -47,4 +49,4 @@
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-dns-starter/src/main/java/org/apache/camel/component/dns/springboot/cloud/DnsCloudAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-dns-starter/src/main/java/org/apache/camel/component/dns/springboot/cloud/DnsCloudAutoConfiguration.java
index c154323..4dc4024 100644
--- a/platforms/spring-boot/components-starter/camel-dns-starter/src/main/java/org/apache/camel/component/dns/springboot/cloud/DnsCloudAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-dns-starter/src/main/java/org/apache/camel/component/dns/springboot/cloud/DnsCloudAutoConfiguration.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.PostConstruct;
 
 import org.apache.camel.CamelContext;
diff --git a/platforms/spring-boot/components-starter/camel-etcd-starter/src/main/java/org/apache/camel/component/etcd/springboot/cloud/EtcdCloudAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-etcd-starter/src/main/java/org/apache/camel/component/etcd/springboot/cloud/EtcdCloudAutoConfiguration.java
index 1dca69a..45ecd97 100644
--- a/platforms/spring-boot/components-starter/camel-etcd-starter/src/main/java/org/apache/camel/component/etcd/springboot/cloud/EtcdCloudAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-etcd-starter/src/main/java/org/apache/camel/component/etcd/springboot/cloud/EtcdCloudAutoConfiguration.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.PostConstruct;
 
 import org.apache.camel.CamelContext;
diff --git a/platforms/spring-boot/components-starter/camel-hystrix-starter/src/main/java/org/apache/camel/component/hystrix/springboot/HystrixAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-hystrix-starter/src/main/java/org/apache/camel/component/hystrix/springboot/HystrixAutoConfiguration.java
index 0063a53..b50958d 100644
--- a/platforms/spring-boot/components-starter/camel-hystrix-starter/src/main/java/org/apache/camel/component/hystrix/springboot/HystrixAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-hystrix-starter/src/main/java/org/apache/camel/component/hystrix/springboot/HystrixAutoConfiguration.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.PostConstruct;
 
 import org.apache.camel.CamelContext;
diff --git a/platforms/spring-boot/components-starter/camel-hystrix-starter/src/test/java/org/apache/camel/component/hystrix/processor/HystrixMultiConfigurationTest.java b/platforms/spring-boot/components-starter/camel-hystrix-starter/src/test/java/org/apache/camel/component/hystrix/processor/HystrixMultiConfigurationTest.java
index 9e736fd..6ced737 100644
--- a/platforms/spring-boot/components-starter/camel-hystrix-starter/src/test/java/org/apache/camel/component/hystrix/processor/HystrixMultiConfigurationTest.java
+++ b/platforms/spring-boot/components-starter/camel-hystrix-starter/src/test/java/org/apache/camel/component/hystrix/processor/HystrixMultiConfigurationTest.java
@@ -16,13 +16,11 @@
  */
 package org.apache.camel.component.hystrix.processor;
 
-import java.util.List;
 import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Navigate;
 import org.apache.camel.Processor;
-import org.apache.camel.Route;
 import org.apache.camel.model.HystrixConfigurationDefinition;
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/platforms/spring-boot/components-starter/camel-infinispan-starter/src/main/java/org/apache/camel/component/infinispan/springboot/customizer/EmbeddedCacheManagerCustomizer.java b/platforms/spring-boot/components-starter/camel-infinispan-starter/src/main/java/org/apache/camel/component/infinispan/springboot/customizer/EmbeddedCacheManagerCustomizer.java
index 9d5c1ac..b4bcb0f 100644
--- a/platforms/spring-boot/components-starter/camel-infinispan-starter/src/main/java/org/apache/camel/component/infinispan/springboot/customizer/EmbeddedCacheManagerCustomizer.java
+++ b/platforms/spring-boot/components-starter/camel-infinispan-starter/src/main/java/org/apache/camel/component/infinispan/springboot/customizer/EmbeddedCacheManagerCustomizer.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.infinispan.springboot.customizer;
 
-
 import org.apache.camel.component.infinispan.InfinispanComponent;
 import org.apache.camel.component.infinispan.springboot.InfinispanComponentAutoConfiguration;
 import org.apache.camel.spi.ComponentCustomizer;
diff --git a/platforms/spring-boot/components-starter/camel-infinispan-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerWithInfinispanStarterTest.java b/platforms/spring-boot/components-starter/camel-infinispan-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerWithInfinispanStarterTest.java
index 5af9b66..e9c28f6 100644
--- a/platforms/spring-boot/components-starter/camel-infinispan-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerWithInfinispanStarterTest.java
+++ b/platforms/spring-boot/components-starter/camel-infinispan-starter/src/test/java/org/apache/camel/component/ehcache/springboot/CacheManagerCustomizerWithInfinispanStarterTest.java
@@ -28,7 +28,6 @@
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit4.SpringRunner;
 
-
 @RunWith(SpringRunner.class)
 @DirtiesContext
 @SpringBootApplication
@@ -57,4 +56,4 @@
     @Configuration
     public static class TestConfiguration {
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/main/java/org/apache/camel/component/kubernetes/springboot/cloud/KubernetesServiceDiscoveryAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/main/java/org/apache/camel/component/kubernetes/springboot/cloud/KubernetesServiceDiscoveryAutoConfiguration.java
index f7754fd..758a93e 100644
--- a/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/main/java/org/apache/camel/component/kubernetes/springboot/cloud/KubernetesServiceDiscoveryAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/main/java/org/apache/camel/component/kubernetes/springboot/cloud/KubernetesServiceDiscoveryAutoConfiguration.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.PostConstruct;
 
 import org.apache.camel.CamelContext;
diff --git a/platforms/spring-boot/components-starter/camel-lra-starter/src/main/java/org/apache/camel/service/lra/springboot/LraServiceAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-lra-starter/src/main/java/org/apache/camel/service/lra/springboot/LraServiceAutoConfiguration.java
index 2e37b33..21a0667 100644
--- a/platforms/spring-boot/components-starter/camel-lra-starter/src/main/java/org/apache/camel/service/lra/springboot/LraServiceAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-lra-starter/src/main/java/org/apache/camel/service/lra/springboot/LraServiceAutoConfiguration.java
@@ -74,4 +74,4 @@
         camelContext.addService(service);
         return service;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-lra-starter/src/main/java/org/apache/camel/service/lra/springboot/LraServiceConfiguration.java b/platforms/spring-boot/components-starter/camel-lra-starter/src/main/java/org/apache/camel/service/lra/springboot/LraServiceConfiguration.java
index 13d90f1..ab088c2 100644
--- a/platforms/spring-boot/components-starter/camel-lra-starter/src/main/java/org/apache/camel/service/lra/springboot/LraServiceConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-lra-starter/src/main/java/org/apache/camel/service/lra/springboot/LraServiceConfiguration.java
@@ -91,4 +91,4 @@
     public void setLocalParticipantContextPath(String localParticipantContextPath) {
         this.localParticipantContextPath = localParticipantContextPath;
     }
-}
\ No newline at end of file
+}
diff --git a/platforms/spring-boot/components-starter/camel-opentracing-starter/src/main/java/org/apache/camel/opentracing/starter/OpenTracingAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-opentracing-starter/src/main/java/org/apache/camel/opentracing/starter/OpenTracingAutoConfiguration.java
index 94efc8c..a3d0902 100644
--- a/platforms/spring-boot/components-starter/camel-opentracing-starter/src/main/java/org/apache/camel/opentracing/starter/OpenTracingAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-opentracing-starter/src/main/java/org/apache/camel/opentracing/starter/OpenTracingAutoConfiguration.java
@@ -17,7 +17,6 @@
 package org.apache.camel.opentracing.starter;
 
 import io.opentracing.Tracer;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.opentracing.OpenTracingTracer;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/platforms/spring-boot/components-starter/camel-reactive-streams-starter/src/main/java/org/apache/camel/component/reactive/streams/springboot/ReactiveStreamsServiceAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-reactive-streams-starter/src/main/java/org/apache/camel/component/reactive/streams/springboot/ReactiveStreamsServiceAutoConfiguration.java
index 0384fd6..f6206d7 100644
--- a/platforms/spring-boot/components-starter/camel-reactive-streams-starter/src/main/java/org/apache/camel/component/reactive/streams/springboot/ReactiveStreamsServiceAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-reactive-streams-starter/src/main/java/org/apache/camel/component/reactive/streams/springboot/ReactiveStreamsServiceAutoConfiguration.java
@@ -33,7 +33,6 @@
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Lazy;
 
-
 @AutoConfigureAfter(ReactiveStreamsComponentAutoConfiguration.class)
 @ConditionalOnBean(ReactiveStreamsComponentAutoConfiguration.class)
 @EnableConfigurationProperties(ReactiveStreamsComponentConfiguration.class)
diff --git a/platforms/spring-boot/components-starter/camel-reactive-streams-starter/src/test/java/org/apache/camel/component/reactive/streams/springboot/test/ReactiveStreamsNamedEngineTest.java b/platforms/spring-boot/components-starter/camel-reactive-streams-starter/src/test/java/org/apache/camel/component/reactive/streams/springboot/test/ReactiveStreamsNamedEngineTest.java
index 960161c..2d067d9 100644
--- a/platforms/spring-boot/components-starter/camel-reactive-streams-starter/src/test/java/org/apache/camel/component/reactive/streams/springboot/test/ReactiveStreamsNamedEngineTest.java
+++ b/platforms/spring-boot/components-starter/camel-reactive-streams-starter/src/test/java/org/apache/camel/component/reactive/streams/springboot/test/ReactiveStreamsNamedEngineTest.java
@@ -19,10 +19,7 @@
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.reactive.streams.api.CamelReactiveStreams;
 import org.apache.camel.component.reactive.streams.api.CamelReactiveStreamsService;
-import org.apache.camel.component.reactive.streams.springboot.ReactiveStreamsComponentAutoConfiguration;
-import org.apache.camel.component.reactive.streams.springboot.ReactiveStreamsServiceAutoConfiguration;
 import org.apache.camel.component.reactive.streams.springboot.test.support.ReactiveStreamsServiceTestSupport;
-import org.apache.camel.spring.boot.CamelAutoConfiguration;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/platforms/spring-boot/components-starter/camel-reactive-streams-starter/src/test/java/org/apache/camel/component/reactive/streams/springboot/test/ReactiveStreamsRegistryEngineTest.java b/platforms/spring-boot/components-starter/camel-reactive-streams-starter/src/test/java/org/apache/camel/component/reactive/streams/springboot/test/ReactiveStreamsRegistryEngineTest.java
index d445d74..901b9c7 100644
--- a/platforms/spring-boot/components-starter/camel-reactive-streams-starter/src/test/java/org/apache/camel/component/reactive/streams/springboot/test/ReactiveStreamsRegistryEngineTest.java
+++ b/platforms/spring-boot/components-starter/camel-reactive-streams-starter/src/test/java/org/apache/camel/component/reactive/streams/springboot/test/ReactiveStreamsRegistryEngineTest.java
@@ -19,10 +19,7 @@
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.reactive.streams.api.CamelReactiveStreams;
 import org.apache.camel.component.reactive.streams.api.CamelReactiveStreamsService;
-import org.apache.camel.component.reactive.streams.springboot.ReactiveStreamsComponentAutoConfiguration;
-import org.apache.camel.component.reactive.streams.springboot.ReactiveStreamsServiceAutoConfiguration;
 import org.apache.camel.component.reactive.streams.springboot.test.support.ReactiveStreamsServiceTestSupport;
-import org.apache.camel.spring.boot.CamelAutoConfiguration;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java
index 4628029..59bf0b3 100644
--- a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/main/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonCloudAutoConfiguration.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.annotation.PostConstruct;
 
 import org.apache.camel.CamelContext;
diff --git a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerTest.java b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerTest.java
index ec618cc..a752711 100644
--- a/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerTest.java
+++ b/platforms/spring-boot/components-starter/camel-ribbon-starter/src/test/java/org/apache/camel/component/ribbon/springboot/cloud/RibbonLoadBalancerTest.java
@@ -39,7 +39,6 @@
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-
 public class RibbonLoadBalancerTest {
     private static final int PORT1 = AvailablePortFinder.getNextAvailable();
     private static final int PORT2 = AvailablePortFinder.getNextAvailable();
diff --git a/platforms/spring-boot/components-starter/camel-servlet-starter/src/test/java/org/apache/camel/component/servlet/springboot/test/ServletMappingAutoConfigurationTest.java b/platforms/spring-boot/components-starter/camel-servlet-starter/src/test/java/org/apache/camel/component/servlet/springboot/test/ServletMappingAutoConfigurationTest.java
index 4b511af..ed09a0a 100644
--- a/platforms/spring-boot/components-starter/camel-servlet-starter/src/test/java/org/apache/camel/component/servlet/springboot/test/ServletMappingAutoConfigurationTest.java
+++ b/platforms/spring-boot/components-starter/camel-servlet-starter/src/test/java/org/apache/camel/component/servlet/springboot/test/ServletMappingAutoConfigurationTest.java
@@ -18,7 +18,6 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.spring.boot.CamelAutoConfiguration;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerService.java b/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerService.java
index f325057..5ddd9c9 100644
--- a/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerService.java
+++ b/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerService.java
@@ -32,8 +32,6 @@
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Response;
 
-
-
 @Path("/customerservice/")
 public class CustomerService {
     private final AtomicLong currentId = new AtomicLong(123L);
diff --git a/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceResource.java b/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceResource.java
index 8967205..99ee8ed 100644
--- a/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceResource.java
+++ b/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/component/cxf/jaxrs/testbean/CustomerServiceResource.java
@@ -22,7 +22,6 @@
 import javax.ws.rs.PathParam;
 import javax.ws.rs.core.Response;
 
-
 // START SNIPPET: example
 @Path("/customerservice/")
 public interface CustomerServiceResource {
diff --git a/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/test/cxf/blueprint/CxfPayloadProviderRouterTest.java b/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/test/cxf/blueprint/CxfPayloadProviderRouterTest.java
index fdbb4ba..9bf3e61 100644
--- a/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/test/cxf/blueprint/CxfPayloadProviderRouterTest.java
+++ b/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/test/cxf/blueprint/CxfPayloadProviderRouterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.test.cxf.blueprint;
+
 import java.util.Properties;
 
 import javax.xml.namespace.QName;
diff --git a/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeansTest.java b/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeansTest.java
index f5f6fc8..76e8e9f 100644
--- a/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeansTest.java
+++ b/tests/camel-blueprint-cxf-test/src/test/java/org/apache/camel/test/cxf/blueprint/CxfRsEndpointBeansTest.java
@@ -19,7 +19,9 @@
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
+
 import javax.ws.rs.ProcessingException;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Produce;
diff --git a/tests/camel-blueprint-test/src/test/java/org/apache/camel/blueprint/BlueprintResolveComponentFromCamelContextTest.java b/tests/camel-blueprint-test/src/test/java/org/apache/camel/blueprint/BlueprintResolveComponentFromCamelContextTest.java
index 8fd007e..8f8d7ba 100644
--- a/tests/camel-blueprint-test/src/test/java/org/apache/camel/blueprint/BlueprintResolveComponentFromCamelContextTest.java
+++ b/tests/camel-blueprint-test/src/test/java/org/apache/camel/blueprint/BlueprintResolveComponentFromCamelContextTest.java
@@ -23,7 +23,6 @@
 import org.apache.camel.test.blueprint.CamelBlueprintTestSupport;
 import org.junit.Test;
 
-
 public class BlueprintResolveComponentFromCamelContextTest extends CamelBlueprintTestSupport {
 
     @EndpointInject("mock://result")
diff --git a/tests/camel-itest-cdi/src/test/java/org/apache/camel/itest/cdi/PropertiesConfigurationTest.java b/tests/camel-itest-cdi/src/test/java/org/apache/camel/itest/cdi/PropertiesConfigurationTest.java
index c35bc6f..dd94fd5 100644
--- a/tests/camel-itest-cdi/src/test/java/org/apache/camel/itest/cdi/PropertiesConfigurationTest.java
+++ b/tests/camel-itest-cdi/src/test/java/org/apache/camel/itest/cdi/PropertiesConfigurationTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.itest.cdi;
 
 import java.util.Properties;
+
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.inject.Produces;
 import javax.inject.Inject;
diff --git a/tests/camel-itest-jms2/src/test/java/org/apache/camel/itest/jms2/BaseJms2TestSupport.java b/tests/camel-itest-jms2/src/test/java/org/apache/camel/itest/jms2/BaseJms2TestSupport.java
index 4a13c20..6fa66eb 100644
--- a/tests/camel-itest-jms2/src/test/java/org/apache/camel/itest/jms2/BaseJms2TestSupport.java
+++ b/tests/camel-itest-jms2/src/test/java/org/apache/camel/itest/jms2/BaseJms2TestSupport.java
@@ -17,6 +17,7 @@
 package org.apache.camel.itest.jms2;
 
 import java.util.Arrays;
+
 import javax.jms.Connection;
 import javax.jms.ConnectionFactory;
 import javax.jms.MessageConsumer;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesWsAddressingTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesWsAddressingTest.java
index dcb64bf..3228c27 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesWsAddressingTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/customerrelations/CustomerServicesWsAddressingTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.itest.customerrelations;
+
 import org.apache.camel.util.IOHelper;
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpAndHttpRecipientListInterceptSendToEndpointIssueTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpAndHttpRecipientListInterceptSendToEndpointIssueTest.java
index c370673..a730dd9 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpAndHttpRecipientListInterceptSendToEndpointIssueTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpAndHttpRecipientListInterceptSendToEndpointIssueTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.itest.ftp;
+
 import java.io.File;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpInitialConnectTimeoutTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpInitialConnectTimeoutTest.java
index 9aca498..3011d3d 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpInitialConnectTimeoutTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpInitialConnectTimeoutTest.java
@@ -170,4 +170,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpXQueryTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpXQueryTest.java
index 7b0a38a..97b1b0e 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpXQueryTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/FtpXQueryTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.itest.ftp;
+
 import java.io.File;
 
 import org.apache.camel.Exchange;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/SpringFileAntPathMatcherRemoteFileFilterTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/SpringFileAntPathMatcherRemoteFileFilterTest.java
index f3a7d30..34dc156 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/SpringFileAntPathMatcherRemoteFileFilterTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/ftp/SpringFileAntPathMatcherRemoteFileFilterTest.java
@@ -39,7 +39,6 @@
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 
-
 /**
  * Unit testing FTP ant path matcher
  */
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelFileGreeterOneWayTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelFileGreeterOneWayTest.java
index 955ecd5..7643933 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelFileGreeterOneWayTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelFileGreeterOneWayTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.itest.greeter;
+
 import java.io.File;
 
 import javax.xml.ws.Endpoint;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterConsumerTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterConsumerTest.java
index 52e398c..d8d134b 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterConsumerTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterConsumerTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.itest.greeter;
 
-
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterFileDomTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterFileDomTest.java
index 8daf26d..ee64160 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterFileDomTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterFileDomTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.itest.greeter;
+
 import java.io.File;
 
 import javax.xml.ws.Endpoint;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterTest.java
index c627ec2..11447b8 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/CamelGreeterTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.itest.greeter;
+
 import java.util.List;
 
 import javax.xml.ws.Endpoint;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JmsToCxfInOutTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JmsToCxfInOutTest.java
index 6d994c0..339708e 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JmsToCxfInOutTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/greeter/JmsToCxfInOutTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.itest.greeter;
 
-
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.cxf.common.message.CxfConstants;
 import org.apache.camel.test.AvailablePortFinder;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/http/HttpEndpointTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/http/HttpEndpointTest.java
index c1cf776..881842d 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/http/HttpEndpointTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/http/HttpEndpointTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.itest.http;
+
 import java.io.IOException;
 
 import org.apache.camel.CamelContext;
@@ -79,4 +80,4 @@
 
         mock.assertIsSatisfied();
     }
-}
\ No newline at end of file
+}
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/http/HttpMaxConnectionPerHostTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/http/HttpMaxConnectionPerHostTest.java
index 6eae790..14dc93c 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/http/HttpMaxConnectionPerHostTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/http/HttpMaxConnectionPerHostTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.itest.http;
+
 import java.io.IOException;
 
 import org.apache.camel.CamelContext;
@@ -78,4 +79,4 @@
 
         mock.assertIsSatisfied();
     }
-}
\ No newline at end of file
+}
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/AdviceWithWeaveFirstLastTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/AdviceWithWeaveFirstLastTest.java
index 6b4ced6..3b0fbd3 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/AdviceWithWeaveFirstLastTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/AdviceWithWeaveFirstLastTest.java
@@ -21,7 +21,7 @@
 import org.apache.camel.reifier.RouteReifier;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
- 
+
 /**
  * Advice with tests
  */
@@ -96,4 +96,4 @@
             }
         };
     }
-}
\ No newline at end of file
+}
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/IntercepFromAndStrategyTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/IntercepFromAndStrategyTest.java
index 2c21051..d8a3351 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/IntercepFromAndStrategyTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/IntercepFromAndStrategyTest.java
@@ -25,7 +25,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
 public class IntercepFromAndStrategyTest extends CamelTestSupport {
 
     @EndpointInject("mock:result")
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/IsUseAdviceWithJUnit4Test.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/IsUseAdviceWithJUnit4Test.java
index ab0bde2..5c24d37 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/IsUseAdviceWithJUnit4Test.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/IsUseAdviceWithJUnit4Test.java
@@ -22,8 +22,6 @@
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
-
-
 public class IsUseAdviceWithJUnit4Test extends CamelTestSupport {
 
     private String providerEndPointURI = "http://fakeeeeWebsite.com:80";
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RemoveEndpointsTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RemoveEndpointsTest.java
index 48b99c0..1c14c58 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RemoveEndpointsTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/issues/RemoveEndpointsTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.itest.issues;
 
 import java.util.Collection;
+
 import javax.jms.ConnectionFactory;
 
 import org.apache.camel.Endpoint;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest.java
index c9bb1c0..06e6b0c 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jetty/JettyMulticastJmsFileTest.java
@@ -63,4 +63,4 @@
         consumer.stop();
     }
 
-}
\ No newline at end of file
+}
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJettyAsyncTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJettyAsyncTest.java
index 2b43e14..d72b25c 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJettyAsyncTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsJettyAsyncTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.itest.jms;
 
 import java.util.concurrent.TimeUnit;
+
 import javax.jms.ConnectionFactory;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPerformanceTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPerformanceTest.java
index 2160d2a..e35428c 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPerformanceTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsPerformanceTest.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.jms.ConnectionFactory;
 
 import org.apache.camel.Header;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsResequencerTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsResequencerTest.java
index 75c905c..0ea6ee9 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsResequencerTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/jms/JmsResequencerTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.itest.jms;
 
 import java.util.List;
+
 import javax.jms.ConnectionFactory;
 
 import org.apache.camel.Body;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/mail/SpringMailEndpointTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/mail/SpringMailEndpointTest.java
index 961521f..d6fc9f9 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/mail/SpringMailEndpointTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/mail/SpringMailEndpointTest.java
@@ -26,7 +26,6 @@
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 
-
 /**
  * Unit testing Mail configured using spring bean
  */
@@ -53,4 +52,4 @@
         result.assertIsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/netty/NettyAsyncRequestReplyTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/netty/NettyAsyncRequestReplyTest.java
index 399b3a6..15ebbcb 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/netty/NettyAsyncRequestReplyTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/netty/NettyAsyncRequestReplyTest.java
@@ -25,6 +25,7 @@
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
+
 import javax.jms.ConnectionFactory;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/quartz/FtpCronScheduledRoutePolicyTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/quartz/FtpCronScheduledRoutePolicyTest.java
index 4997568..f32fd24 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/quartz/FtpCronScheduledRoutePolicyTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/quartz/FtpCronScheduledRoutePolicyTest.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.apache.camel.itest.quartz;
+
 import java.io.File;
 import java.util.concurrent.TimeUnit;
 
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/security/MyAuthenticationAdapter.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/security/MyAuthenticationAdapter.java
index 96a1118..45ca003 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/security/MyAuthenticationAdapter.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/security/MyAuthenticationAdapter.java
@@ -24,7 +24,6 @@
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 
-
 public class MyAuthenticationAdapter extends DefaultAuthenticationAdapter {
     
     @Override
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/shiro/ShiroOverJmsTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/shiro/ShiroOverJmsTest.java
index 8d9b233..3a5c089 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/shiro/ShiroOverJmsTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/shiro/ShiroOverJmsTest.java
@@ -18,6 +18,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.jms.ConnectionFactory;
 
 import org.apache.camel.builder.RouteBuilder;
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXTest.java
index 1934a0b..9df4043 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXTest.java
@@ -24,6 +24,7 @@
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 
 import static org.junit.Assert.assertEquals;
+
 /**
  * Unit test will look for the spring .xml file with the same class name
  * but postfixed with -config.xml as filename.
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest.java
index 13bf903..9bdd29c 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionAndNoTransactionErrorHandlerConfiguredTest.java
@@ -30,6 +30,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+
 /**
  * Unit test will look for the spring .xml file with the same class name
  * but postfixed with -config.xml as filename.
@@ -93,4 +94,4 @@
         assertEquals(ok, out);
     }
 
-}
\ No newline at end of file
+}
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionTest.java
index fb4a53a..62342f3 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithOnExceptionTest.java
@@ -94,4 +94,4 @@
         assertEquals(ok, out);
     }
 
-}
\ No newline at end of file
+}
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithRollbackTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithRollbackTest.java
index 8b705dc..29543bb 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithRollbackTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/tx/JmsToHttpTXWithRollbackTest.java
@@ -64,4 +64,4 @@
         mock.assertIsSatisfied();
     }
 
-}
\ No newline at end of file
+}
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/validator/ValidatorSchemaImportTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/validator/ValidatorSchemaImportTest.java
index 50ab414..3416aba 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/validator/ValidatorSchemaImportTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/validator/ValidatorSchemaImportTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.itest.validator;
 
-
 import org.apache.camel.ValidationException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/AbstractTypeConverterGenerator.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/AbstractTypeConverterGenerator.java
index f24e39c..dc912a7 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/AbstractTypeConverterGenerator.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/AbstractTypeConverterGenerator.java
@@ -24,6 +24,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
+
 import javax.annotation.processing.RoundEnvironment;
 import javax.lang.model.element.AnnotationMirror;
 import javax.lang.model.element.AnnotationValue;
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentPropertyConfigurerGenerator.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentPropertyConfigurerGenerator.java
index 000a610..6685cf5 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentPropertyConfigurerGenerator.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentPropertyConfigurerGenerator.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.Writer;
 import java.util.Set;
+
 import javax.annotation.processing.ProcessingEnvironment;
 import javax.lang.model.element.TypeElement;
 import javax.tools.Diagnostic;
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/ConstantProviderProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/ConstantProviderProcessor.java
index 9367d86..e6f3681 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/ConstantProviderProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/ConstantProviderProcessor.java
@@ -21,6 +21,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
+
 import javax.annotation.processing.RoundEnvironment;
 import javax.annotation.processing.SupportedAnnotationTypes;
 import javax.lang.model.element.Element;
@@ -127,4 +128,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
index 25dac5a..2505e26 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
@@ -26,6 +26,7 @@
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
+
 import javax.annotation.processing.RoundEnvironment;
 import javax.annotation.processing.SupportedAnnotationTypes;
 import javax.lang.model.element.Element;
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointPropertyConfigurerGenerator.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointPropertyConfigurerGenerator.java
index e89da24..54ef7c0 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointPropertyConfigurerGenerator.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointPropertyConfigurerGenerator.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.Writer;
 import java.util.Set;
+
 import javax.annotation.processing.ProcessingEnvironment;
 import javax.lang.model.element.TypeElement;
 import javax.tools.Diagnostic;
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/PropertyPlaceholderGenerator.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/PropertyPlaceholderGenerator.java
index 9855474..85e5000 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/PropertyPlaceholderGenerator.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/PropertyPlaceholderGenerator.java
@@ -18,6 +18,7 @@
 
 import java.io.Writer;
 import java.util.Set;
+
 import javax.annotation.processing.ProcessingEnvironment;
 import javax.annotation.processing.RoundEnvironment;
 import javax.lang.model.element.TypeElement;
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterLoaderGenerator.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterLoaderGenerator.java
index 3700d52..93f57ae 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterLoaderGenerator.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterLoaderGenerator.java
@@ -19,6 +19,7 @@
 import java.io.Writer;
 import java.util.Map;
 import java.util.StringJoiner;
+
 import javax.annotation.processing.SupportedAnnotationTypes;
 import javax.lang.model.element.AnnotationMirror;
 import javax.lang.model.element.AnnotationValue;
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterProcessor.java
index d4448e4..d4d1ae9 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterProcessor.java
@@ -91,4 +91,4 @@
         return false;
     }
 
-}
\ No newline at end of file
+}
diff --git a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavadocApiMethodGeneratorMojo.java b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavadocApiMethodGeneratorMojo.java
index 03b3f5b..4f61d6e 100644
--- a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavadocApiMethodGeneratorMojo.java
+++ b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavadocApiMethodGeneratorMojo.java
@@ -27,6 +27,7 @@
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+
 import javax.swing.text.html.parser.DTD;
 
 import org.apache.camel.support.component.ApiMethodParser;
diff --git a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavadocParser.java b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavadocParser.java
index 94fe2e7..611a114 100644
--- a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavadocParser.java
+++ b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavadocParser.java
@@ -22,6 +22,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import javax.swing.text.ChangedCharSetException;
 import javax.swing.text.SimpleAttributeSet;
 import javax.swing.text.html.HTML;
diff --git a/tooling/maven/camel-api-component-maven-plugin/src/test/java/org/apache/camel/maven/JavadocParserTest.java b/tooling/maven/camel-api-component-maven-plugin/src/test/java/org/apache/camel/maven/JavadocParserTest.java
index 7c9425a..5faa815 100644
--- a/tooling/maven/camel-api-component-maven-plugin/src/test/java/org/apache/camel/maven/JavadocParserTest.java
+++ b/tooling/maven/camel-api-component-maven-plugin/src/test/java/org/apache/camel/maven/JavadocParserTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.maven;
 
 import java.io.InputStreamReader;
+
 import javax.swing.text.html.parser.DTD;
 
 import org.junit.Assert;
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/CamelSpringNamespace.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/CamelSpringNamespace.java
index 8e6e0d7..b2cde7f 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/CamelSpringNamespace.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/CamelSpringNamespace.java
@@ -17,6 +17,7 @@
 package org.apache.camel.maven;
 
 import java.util.Iterator;
+
 import javax.xml.namespace.NamespaceContext;
 
 /**
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java
index 65950a1..11e8500 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java
@@ -24,6 +24,7 @@
 import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
+
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.dom.DOMSource;
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/XmlHelper.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/XmlHelper.java
index 93018f9..442d3b3 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/XmlHelper.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/XmlHelper.java
@@ -31,6 +31,7 @@
 import javax.xml.xpath.XPathFactory;
 
 import org.w3c.dom.Document;
+
 import org.xml.sax.SAXException;
 
 public final class XmlHelper {
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/CamelSpringNamespaceTest.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/CamelSpringNamespaceTest.java
index 5f87890..e7fc5bf 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/CamelSpringNamespaceTest.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/CamelSpringNamespaceTest.java
@@ -52,4 +52,4 @@
             // Expected.
         }
     }
-}
\ No newline at end of file
+}
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/DomFinderTest.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/DomFinderTest.java
index 25eb40a..ee0300d 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/DomFinderTest.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/DomFinderTest.java
@@ -69,4 +69,4 @@
 
         assertEquals("tns:abstractKeyManagersParametersFactoryBean", baseTypeName);
     }
-}
\ No newline at end of file
+}
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/EipDocumentationEnricherMojoTest.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/EipDocumentationEnricherMojoTest.java
index 416b642..33ff889 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/EipDocumentationEnricherMojoTest.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/EipDocumentationEnricherMojoTest.java
@@ -100,4 +100,4 @@
             // Expected.
         }
     }
-}
\ No newline at end of file
+}
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/PackageHelperTest.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/PackageHelperTest.java
index 1f62f54..4ff82c0 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/PackageHelperTest.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/PackageHelperTest.java
@@ -40,4 +40,4 @@
         assertTrue("Files b.json must be found", jsonFiles.containsKey("b"));
         assertFalse("File c.txt must not be found", jsonFiles.containsKey("c"));
     }
-}
\ No newline at end of file
+}
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/XmlHelperTest.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/XmlHelperTest.java
index 9a544a9..03163d0 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/XmlHelperTest.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/XmlHelperTest.java
@@ -47,4 +47,4 @@
             // Expected.
         }
     }
-}
\ No newline at end of file
+}
diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/integration/EIPDocumentationMojoTest.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/integration/EIPDocumentationMojoTest.java
index 632fcc7..f963fa6 100644
--- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/integration/EIPDocumentationMojoTest.java
+++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/test/java/org/apache/camel/maven/integration/EIPDocumentationMojoTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.maven.integration;
 
 import java.io.File;
+
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.xpath.XPath;
diff --git a/tooling/maven/camel-main-parser/src/test/java/org/apache/camel/main/parser/MyConfigurationParserTest.java b/tooling/maven/camel-main-parser/src/test/java/org/apache/camel/main/parser/MyConfigurationParserTest.java
index 7c5833e..2affce1 100644
--- a/tooling/maven/camel-main-parser/src/test/java/org/apache/camel/main/parser/MyConfigurationParserTest.java
+++ b/tooling/maven/camel-main-parser/src/test/java/org/apache/camel/main/parser/MyConfigurationParserTest.java
@@ -19,6 +19,7 @@
 import java.util.List;
 
 import junit.framework.TestCase;
+
 import org.junit.Test;
 
 public class MyConfigurationParserTest extends TestCase {
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageJaxbMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageJaxbMojo.java
index 413d1c1..d6f8e06 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageJaxbMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageJaxbMojo.java
@@ -34,6 +34,7 @@
 import java.util.Set;
 import java.util.TreeSet;
 import java.util.stream.Stream;
+
 import javax.xml.bind.annotation.XmlEnum;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogKarafMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogKarafMojo.java
index 1499d78..3e306c6 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogKarafMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogKarafMojo.java
@@ -29,6 +29,7 @@
 import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
+
 import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilderFactory;
 
@@ -36,8 +37,6 @@
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
-import static org.w3c.dom.Node.ELEMENT_NODE;
-
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -48,6 +47,7 @@
 import org.apache.maven.project.MavenProjectHelper;
 
 import static org.apache.camel.maven.packaging.PackageHelper.loadText;
+import static org.w3c.dom.Node.ELEMENT_NODE;
 
 /**
  * Prepares the Karaf provider camel catalog to include component it supports
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateDocComponentListMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateDocComponentListMojo.java
index 24a51fe..0a2834e 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateDocComponentListMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateDocComponentListMojo.java
@@ -29,8 +29,6 @@
 import java.util.Set;
 import java.util.TreeSet;
 
-import static java.util.stream.Collectors.toSet;
-
 import org.apache.camel.maven.packaging.model.ComponentModel;
 import org.apache.camel.maven.packaging.model.DataFormatModel;
 import org.apache.camel.maven.packaging.model.EipModel;
@@ -46,6 +44,7 @@
 import org.apache.maven.project.MavenProjectHelper;
 import org.mvel2.templates.TemplateRuntime;
 
+import static java.util.stream.Collectors.toSet;
 import static org.apache.camel.maven.packaging.PackageHelper.loadText;
 import static org.apache.camel.maven.packaging.PackageHelper.writeText;
 
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateSpringBootAutoConfigurationReadmeMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateSpringBootAutoConfigurationReadmeMojo.java
index aed5ebe..7c5dc0f 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateSpringBootAutoConfigurationReadmeMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateSpringBootAutoConfigurationReadmeMojo.java
@@ -150,11 +150,11 @@
 
                     // find out if the JAR has a Camel component, dataformat, or language
                     boolean hasComponentDataFormatOrLanguage = files.stream().anyMatch(
-                        (f) -> f.getName().endsWith("-component.adoc") || f.getName().endsWith("-dataformat.adoc") || f.getName().endsWith("-language.adoc"));
+                        f -> f.getName().endsWith("-component.adoc") || f.getName().endsWith("-dataformat.adoc") || f.getName().endsWith("-language.adoc"));
 
                     // if so then skip the root adoc file as its just a introduction to the others
                     if (hasComponentDataFormatOrLanguage) {
-                        files = Arrays.stream(docFiles).filter((f) -> !f.getName().equals(componentName + ".adoc")).collect(Collectors.toList());
+                        files = Arrays.stream(docFiles).filter(f -> !f.getName().equals(componentName + ".adoc")).collect(Collectors.toList());
                     }
 
                     if (files.size() == 1) {
@@ -299,7 +299,7 @@
 
         JsonArray arr = obj.getCollection("properties");
         if (arr != null && !arr.isEmpty()) {
-            arr.forEach((e) -> {
+            arr.forEach(e -> {
                 JsonObject row = (JsonObject) e;
                 String name = row.getString("name");
                 String javaType = row.getString("type");
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/it/customized/src/main/java/com/example/MyDestinationGenerator.java b/tooling/maven/camel-restdsl-swagger-plugin/src/it/customized/src/main/java/com/example/MyDestinationGenerator.java
index 5db79f2..b9713d6 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/it/customized/src/main/java/com/example/MyDestinationGenerator.java
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/it/customized/src/main/java/com/example/MyDestinationGenerator.java
@@ -17,7 +17,6 @@
 package com.example;
 
 import io.swagger.models.Operation;
-
 import org.apache.camel.generator.swagger.DestinationGenerator;
 
 public class MyDestinationGenerator implements DestinationGenerator {
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java
index 02b77ec..14d7904 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java
@@ -21,7 +21,6 @@
 
 import io.swagger.models.Swagger;
 import io.swagger.parser.SwaggerParser;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.generator.swagger.DestinationGenerator;
 import org.apache.camel.generator.swagger.RestDslGenerator;
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/AppendableGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/AppendableGenerator.java
index c3ccb4c..a3ac1b2 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/AppendableGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/AppendableGenerator.java
@@ -19,7 +19,6 @@
 import java.io.IOException;
 
 import com.squareup.javapoet.JavaFile;
-
 import io.swagger.models.Swagger;
 
 final class AppendableGenerator extends RestDslSourceCodeGenerator<Appendable> {
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/FilerGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/FilerGenerator.java
index 10a5fdd..00e8ad5 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/FilerGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/FilerGenerator.java
@@ -21,7 +21,6 @@
 import javax.annotation.processing.Filer;
 
 import com.squareup.javapoet.JavaFile;
-
 import io.swagger.models.Swagger;
 
 final class FilerGenerator extends RestDslSourceCodeGenerator<Filer> {
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/OperationVisitor.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/OperationVisitor.java
index b1908cc..fcc293c 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/OperationVisitor.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/OperationVisitor.java
@@ -25,7 +25,6 @@
 import io.swagger.models.parameters.AbstractSerializableParameter;
 import io.swagger.models.parameters.Parameter;
 import io.swagger.models.properties.Property;
-
 import org.apache.camel.model.rest.CollectionFormat;
 import org.apache.camel.model.rest.RestParamType;
 import org.apache.camel.util.ObjectHelper;
@@ -125,4 +124,4 @@
             emitter.emit("to", destinationGenerator.generateDestinationFor(operation));
         }
     }
-}
\ No newline at end of file
+}
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/PathGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/PathGenerator.java
index 3c72808..e53a5f8 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/PathGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/PathGenerator.java
@@ -20,7 +20,6 @@
 import java.nio.file.Path;
 
 import com.squareup.javapoet.JavaFile;
-
 import io.swagger.models.Swagger;
 
 final class PathGenerator extends RestDslSourceCodeGenerator<Path> {
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/PathVisitor.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/PathVisitor.java
index 8b69672..33291e9 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/PathVisitor.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/PathVisitor.java
@@ -17,7 +17,6 @@
 package org.apache.camel.generator.swagger;
 
 import io.swagger.models.Path;
-
 import org.apache.camel.util.ObjectHelper;
 
 class PathVisitor<T> {
@@ -45,4 +44,4 @@
         definition.getOperationMap().forEach(restDslOperation::visit);
     }
 
-}
\ No newline at end of file
+}
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslDefinitionGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslDefinitionGenerator.java
index 30fdc59..b46c4fe 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslDefinitionGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslDefinitionGenerator.java
@@ -17,7 +17,6 @@
 package org.apache.camel.generator.swagger;
 
 import io.swagger.models.Swagger;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.rest.RestsDefinition;
 
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslGenerator.java
index 3cec49f..5799b0d 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslGenerator.java
@@ -17,6 +17,7 @@
 package org.apache.camel.generator.swagger;
 
 import java.nio.file.Path;
+
 import javax.annotation.processing.Filer;
 
 import io.swagger.models.Swagger;
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
index 0595eba..0be96eb 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
@@ -29,10 +29,8 @@
 import com.squareup.javapoet.JavaFile;
 import com.squareup.javapoet.MethodSpec;
 import com.squareup.javapoet.TypeSpec;
-
 import io.swagger.models.Info;
 import io.swagger.models.Swagger;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.util.ObjectHelper;
 
@@ -66,7 +64,7 @@
 
     public RestDslSourceCodeGenerator<T> withClassName(final String className) {
         notEmpty(className, "className");
-        this.classNameGenerator = (s) -> className;
+        this.classNameGenerator = s -> className;
 
         return this;
     }
@@ -85,7 +83,7 @@
 
     public RestDslSourceCodeGenerator<T> withPackageName(final String packageName) {
         notEmpty(packageName, "packageName");
-        this.packageNameGenerator = (s) -> packageName;
+        this.packageNameGenerator = s -> packageName;
 
         return this;
     }
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java
index 2729a22..c54d02e 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java
@@ -30,10 +30,10 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
+
 import org.xml.sax.InputSource;
 
 import io.swagger.models.Swagger;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.ModelHelper;
 import org.apache.camel.model.rest.RestsDefinition;
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/SpringBootProjectSourceCodeGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/SpringBootProjectSourceCodeGenerator.java
index c9fe79e..c564373 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/SpringBootProjectSourceCodeGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/SpringBootProjectSourceCodeGenerator.java
@@ -18,6 +18,7 @@
 
 import java.io.IOException;
 import java.nio.file.Path;
+
 import javax.annotation.Generated;
 import javax.lang.model.element.Modifier;
 
diff --git a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/MethodBodySourceCodeEmitterTest.java b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/MethodBodySourceCodeEmitterTest.java
index e862aff..aaee36a 100644
--- a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/MethodBodySourceCodeEmitterTest.java
+++ b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/MethodBodySourceCodeEmitterTest.java
@@ -18,7 +18,6 @@
 
 import com.squareup.javapoet.MethodSpec;
 import com.squareup.javapoet.MethodSpec.Builder;
-
 import org.apache.camel.model.rest.RestParamType;
 import org.junit.Test;
 
diff --git a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslGeneratorTest.java b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslGeneratorTest.java
index f823aed..7b9aef0 100644
--- a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslGeneratorTest.java
+++ b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslGeneratorTest.java
@@ -26,7 +26,6 @@
 
 import io.swagger.models.Swagger;
 import io.swagger.parser.SwaggerParser;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.model.rest.RestsDefinition;
diff --git a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslSourceCodeGeneratorTest.java b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslSourceCodeGeneratorTest.java
index b1b7fc1..60df4e7 100644
--- a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslSourceCodeGeneratorTest.java
+++ b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslSourceCodeGeneratorTest.java
@@ -18,7 +18,6 @@
 
 import io.swagger.models.Info;
 import io.swagger.models.Swagger;
-
 import org.junit.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
diff --git a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslXmlGeneratorTest.java b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslXmlGeneratorTest.java
index c71fd1d..dcc22b9 100644
--- a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslXmlGeneratorTest.java
+++ b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslXmlGeneratorTest.java
@@ -26,11 +26,11 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 
 import org.w3c.dom.Document;
+
 import org.xml.sax.InputSource;
 
 import io.swagger.models.Swagger;
 import io.swagger.parser.SwaggerParser;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.junit.Test;
