diff --git a/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerComponent.java b/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerComponent.java
index 409a75c..ed3a1e5 100644
--- a/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerComponent.java
+++ b/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerComponent.java
@@ -41,13 +41,9 @@
         config.setMappingConfiguration(getAndRemoveOrResolveReferenceParameter(
                 parameters, "mappingConfiguration", DozerBeanMapperConfiguration.class));
 
-        setProperties(config, parameters);
-
-        // Validate endpoint parameters
-        if (config.getTargetModel() == null) {
-            throw new IllegalArgumentException("The targetModel parameter is required for dozer endpoints");
-        }
-
-        return new DozerEndpoint(uri, this, config);
+        DozerEndpoint answer = new DozerEndpoint(uri, this, config);
+        answer.setConfiguration(config);
+        setProperties(answer, parameters);
+        return answer;
     }
 }
diff --git a/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerEndpoint.java b/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerEndpoint.java
index 4c0c53a..14d60cb 100644
--- a/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerEndpoint.java
+++ b/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerEndpoint.java
@@ -111,6 +111,11 @@
     protected void initDozerBeanContainerAndMapper() throws Exception {
         log.info("Configuring {}...", Mapper.class.getName());
 
+        // Validate endpoint parameters
+        if (configuration.getTargetModel() == null) {
+            throw new IllegalArgumentException("The targetModel parameter is required for dozer endpoints");
+        }
+
         if (mapper == null) {
             if (configuration.getMappingConfiguration() == null) {
                 URL url = ResourceHelper.resolveMandatoryResourceAsUrl(getCamelContext().getClassResolver(), configuration.getMappingFile());
diff --git a/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/DozerComponentTest.java b/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/DozerComponentTest.java
index 826c1e9..1740c07 100644
--- a/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/DozerComponentTest.java
+++ b/components/camel-dozer/src/test/java/org/apache/camel/component/dozer/DozerComponentTest.java
@@ -16,18 +16,18 @@
  */
 package org.apache.camel.component.dozer;
 
-import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Assert;
 import org.junit.Test;
 
-public class DozerComponentTest {
+public class DozerComponentTest extends CamelTestSupport {
     
     private static final String NAME = "examplename";
     private static final String MARSHAL_ID = "marshal123";
     private static final String UNMARSHAL_ID = "unmarshal456";
     private static final String SOURCE_MODEL = "org.example.A";
     private static final String TARGET_MODEL = "org.example.B";
-    private static final String DOZER_CONFIG_PATH = "test/dozerBeanMapping.xml";
+    private static final String DOZER_CONFIG_PATH = "mapping.xml";
     private static final String TRANSFORM_EP_1 =
             "dozer:" + NAME 
             + "?marshalId=" + MARSHAL_ID 
@@ -38,9 +38,7 @@
     
     @Test
     public void testCreateEndpoint() throws Exception {
-        DozerComponent comp = new DozerComponent();
-        comp.setCamelContext(new DefaultCamelContext());
-        DozerEndpoint ep = (DozerEndpoint)comp.createEndpoint(TRANSFORM_EP_1);
+        DozerEndpoint ep = context.getEndpoint(TRANSFORM_EP_1, DozerEndpoint.class);
         DozerConfiguration config = ep.getConfiguration();
         Assert.assertEquals(NAME, config.getName());
         Assert.assertEquals(MARSHAL_ID, config.getMarshalId());
@@ -52,12 +50,10 @@
     
     @Test
     public void requiredTargetModelMissing() throws Exception {
-        DozerComponent comp = new DozerComponent();
-        comp.setCamelContext(new DefaultCamelContext());
         try {
-            comp.createEndpoint("dozer:noTargetModel?mappingFile=mapping.xml");
+            DozerEndpoint ep = context.getEndpoint("dozer:noTargetModel?mappingFile=mapping.xml", DozerEndpoint.class);
             Assert.fail("targetModel is a required parameter");
-        } catch (IllegalArgumentException ex) {
+        } catch (Exception ex) {
             // expected
         }
     }
