You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/09/11 11:59:34 UTC

git commit: CAMEL-6728: Configuring data format should have easier access to CamelContext. CAMEL-6677: Allow customization of the JAXB underlying XMLStreamWriter. Thanks to Christian Posta for the patch.

Updated Branches:
  refs/heads/master ae6a4c081 -> a4b78c53e


CAMEL-6728: Configuring data format should have easier access to CamelContext. CAMEL-6677: Allow customization of the JAXB underlying XMLStreamWriter. Thanks to Christian Posta for the patch.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a4b78c53
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a4b78c53
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a4b78c53

Branch: refs/heads/master
Commit: a4b78c53e7efb4a43359fcb23c882cb1fd63b430
Parents: ae6a4c0
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Sep 11 11:58:42 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Sep 11 11:59:27 2013 +0200

----------------------------------------------------------------------
 .../camel/model/DataFormatDefinition.java       |  39 +++-
 .../camel/model/dataformat/AvroDataFormat.java  |   8 +-
 .../model/dataformat/Base64DataFormat.java      |   9 +-
 .../model/dataformat/BeanioDataFormat.java      |  15 +-
 .../camel/model/dataformat/BindyDataFormat.java |   9 +-
 .../model/dataformat/CastorDataFormat.java      |  13 +-
 .../model/dataformat/CryptoDataFormat.java      |  25 +--
 .../camel/model/dataformat/CsvDataFormat.java   |  15 +-
 .../camel/model/dataformat/HL7DataFormat.java   |   7 +-
 .../camel/model/dataformat/JaxbDataFormat.java  |  45 +++--
 .../camel/model/dataformat/JibxDataFormat.java  |   5 +-
 .../camel/model/dataformat/JsonDataFormat.java  |  15 +-
 .../camel/model/dataformat/PGPDataFormat.java   |  13 +-
 .../model/dataformat/ProtobufDataFormat.java    |   7 +-
 .../model/dataformat/SoapJaxbDataFormat.java    |  15 +-
 .../model/dataformat/TidyMarkupDataFormat.java  |   5 +-
 .../model/dataformat/XMLSecurityDataFormat.java |  33 ++--
 .../model/dataformat/XStreamDataFormat.java     |  17 +-
 .../model/dataformat/XmlJsonDataFormat.java     |  27 +--
 .../model/dataformat/XmlRpcDataFormat.java      |   5 +-
 .../model/dataformat/ZipFileDataFormat.java     |   5 +-
 .../camel/converter/jaxb/JaxbDataFormat.java    |  28 ++-
 .../jaxb/JaxbXmlStreamWriterWrapper.java        |  12 ++
 .../jaxb/NoopXmlStreamWriterWrapper.java        |  11 ++
 .../org/apache/camel/jaxb/CamelJaxbTest.java    |  46 +++++
 .../apache/camel/jaxb/TestXmlStreamWriter.java  | 177 +++++++++++++++++++
 .../org/apache/camel/jaxb/CamelJaxbTest.xml     |  20 ++-
 27 files changed, 480 insertions(+), 146 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java b/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
index 6115f8e..6125068 100644
--- a/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
@@ -21,15 +21,16 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.IntrospectionSupport;
 import org.apache.camel.util.ObjectHelper;
 
+import static org.apache.camel.util.EndpointHelper.isReferenceParameter;
+
 /**
  * Represents the base XML type for DataFormat.
- *
- * @version 
  */
 @XmlType(name = "dataFormat")
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -63,7 +64,7 @@ public class DataFormatDefinition extends IdentifiedType {
             ObjectHelper.notNull(ref, "ref or type");
 
             // try to let resolver see if it can resolve it, its not always possible
-            type = ((ModelCamelContext)routeContext.getCamelContext()).resolveDataFormatDefinition(ref);
+            type = ((ModelCamelContext) routeContext.getCamelContext()).resolveDataFormatDefinition(ref);
 
             if (type != null) {
                 return type.getDataFormat(routeContext);
@@ -84,11 +85,11 @@ public class DataFormatDefinition extends IdentifiedType {
         if (dataFormat == null) {
             dataFormat = createDataFormat(routeContext);
             if (dataFormat != null) {
-                configureDataFormat(dataFormat);
+                configureDataFormat(dataFormat, routeContext.getCamelContext());
             } else {
                 throw new IllegalArgumentException(
-                    "Data format '" + (dataFormatName != null ? dataFormatName : "<null>") + "' could not be created. "
-                    + "Ensure that the data format is valid and the associated Camel component is present on the classpath");
+                        "Data format '" + (dataFormatName != null ? dataFormatName : "<null>") + "' could not be created. "
+                                + "Ensure that the data format is valid and the associated Camel component is present on the classpath");
             }
         }
         return dataFormat;
@@ -106,16 +107,40 @@ public class DataFormatDefinition extends IdentifiedType {
 
     /**
      * Allows derived classes to customize the data format
+     *
+     * @deprecated use {@link #configureDataFormat(org.apache.camel.spi.DataFormat, org.apache.camel.CamelContext)}
      */
+    @Deprecated
     protected void configureDataFormat(DataFormat dataFormat) {
     }
 
     /**
+     * Allows derived classes to customize the data format
+     */
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
+    }
+
+    /**
      * Sets a named property on the data format instance using introspection
+     *
+     * @deprecated use {@link #setProperty(org.apache.camel.CamelContext, Object, String, Object)}
      */
+    @Deprecated
     protected void setProperty(Object bean, String name, Object value) {
+        setProperty(null, bean, name, value);
+    }
+
+    /**
+     * Sets a named property on the data format instance using introspection
+     */
+    protected void setProperty(CamelContext camelContext, Object bean, String name, Object value) {
         try {
-            IntrospectionSupport.setProperty(bean, name, value);
+            String ref = value instanceof String ? value.toString() : null;
+            if (isReferenceParameter(ref) && camelContext != null) {
+                IntrospectionSupport.setProperty(camelContext, camelContext.getTypeConverter(), bean, name, null, ref, true);
+            } else {
+                IntrospectionSupport.setProperty(bean, name, value);
+            }
         } catch (Exception e) {
             throw new IllegalArgumentException("Failed to set property: " + name + " on: " + bean + ". Reason: " + e, e);
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java
index dcd4242..965e4dd 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java
@@ -21,6 +21,8 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
+
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 
@@ -63,12 +65,12 @@ public class AvroDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (this.instanceClassName != null) {
-            setProperty(dataFormat, "instanceClass", instanceClassName);
+            setProperty(camelContext, dataFormat, "instanceClass", instanceClassName);
         }
         if (this.schema != null) {
-            setProperty(dataFormat, "schema", schema);
+            setProperty(camelContext, dataFormat, "schema", schema);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java
index 9197c13..bb89371 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java
@@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 
@@ -45,17 +46,17 @@ public class Base64DataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (getLineLength() != null) {
-            setProperty(dataFormat, "lineLength", getLineLength());
+            setProperty(camelContext, dataFormat, "lineLength", getLineLength());
         }
         if (getUrlSafe() != null) {
-            setProperty(dataFormat, "urlSafe", getUrlSafe());
+            setProperty(camelContext, dataFormat, "urlSafe", getUrlSafe());
         }
         if (getLineSeparator() != null) {
             // line separator must be a byte[]
             byte[] bytes = getLineSeparator().getBytes();
-            setProperty(dataFormat, "lineSeparator", bytes);
+            setProperty(camelContext, dataFormat, "lineSeparator", bytes);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java
index a9c84c4..d75b8c8 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java
@@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 
@@ -51,20 +52,20 @@ public class BeanioDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
-        setProperty(dataFormat, "mapping", mapping);
-        setProperty(dataFormat, "streamName", streamName);
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
+        setProperty(camelContext, dataFormat, "mapping", mapping);
+        setProperty(camelContext, dataFormat, "streamName", streamName);
         if (ignoreUnidentifiedRecords != null) {
-            setProperty(dataFormat, "ignoreUnidentifiedRecords", ignoreUnidentifiedRecords);
+            setProperty(camelContext, dataFormat, "ignoreUnidentifiedRecords", ignoreUnidentifiedRecords);
         }
         if (ignoreUnexpectedRecords != null) {
-            setProperty(dataFormat, "ignoreUnexpectedRecords", ignoreUnexpectedRecords);
+            setProperty(camelContext, dataFormat, "ignoreUnexpectedRecords", ignoreUnexpectedRecords);
         }
         if (ignoreInvalidRecords != null) {
-            setProperty(dataFormat, "ignoreInvalidRecords", ignoreInvalidRecords);
+            setProperty(camelContext, dataFormat, "ignoreInvalidRecords", ignoreInvalidRecords);
         }
         if (encoding != null) {
-            setProperty(dataFormat, "encoding", encoding);
+            setProperty(camelContext, dataFormat, "encoding", encoding);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
index 88ebe8b..62a85e8 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
@@ -22,6 +22,7 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.RouteContext;
@@ -112,10 +113,10 @@ public class BindyDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
-        setProperty(dataFormat, "packages", packages);
-        setProperty(dataFormat, "locale", locale);
-        setProperty(dataFormat, "classType", clazz);
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
+        setProperty(camelContext, dataFormat, "packages", packages);
+        setProperty(camelContext, dataFormat, "locale", locale);
+        setProperty(camelContext, dataFormat, "classType", clazz);
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/CastorDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/CastorDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/CastorDataFormat.java
index 4dd41ca..fda16a0 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/CastorDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/CastorDataFormat.java
@@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 
@@ -93,20 +94,20 @@ public class CastorDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (mappingFile != null) {
-            setProperty(dataFormat, "mappingFile", mappingFile);
+            setProperty(camelContext, dataFormat, "mappingFile", mappingFile);
         }
-        setProperty(dataFormat, "validation", isValidation());
+        setProperty(camelContext, dataFormat, "validation", isValidation());
 
         if (encoding != null) {
-            setProperty(dataFormat, "encoding", encoding);
+            setProperty(camelContext, dataFormat, "encoding", encoding);
         }
         if (packages != null) {
-            setProperty(dataFormat, "packages", packages);
+            setProperty(camelContext, dataFormat, "packages", packages);
         }
         if (classes != null) {
-            setProperty(dataFormat, "classes", classes);
+            setProperty(camelContext, dataFormat, "classes", classes);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
index b2b5e52..b7bb888 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
@@ -23,6 +23,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.RouteContext;
@@ -61,45 +62,45 @@ public class CryptoDataFormat extends DataFormatDefinition {
 
         if (ObjectHelper.isNotEmpty(keyRef)) {
             Key key = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), keyRef, Key.class);
-            setProperty(cryptoFormat, "key", key);
+            setProperty(routeContext.getCamelContext(), cryptoFormat, "key", key);
         }
         if (ObjectHelper.isNotEmpty(algorithmParameterRef)) {
             AlgorithmParameterSpec spec = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(),
                     algorithmParameterRef, AlgorithmParameterSpec.class);
-            setProperty(cryptoFormat, "AlgorithmParameterSpec", spec);
+            setProperty(routeContext.getCamelContext(), cryptoFormat, "AlgorithmParameterSpec", spec);
         }
         if (ObjectHelper.isNotEmpty(initVectorRef)) {
             byte[] iv = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), initVectorRef, byte[].class);
-            setProperty(cryptoFormat, "InitializationVector", iv);
+            setProperty(routeContext.getCamelContext(), cryptoFormat, "InitializationVector", iv);
         }
         return cryptoFormat;
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         Boolean answer = ObjectHelper.toBoolean(shouldAppendHMAC);
         if (answer != null && !answer) {
-            setProperty(dataFormat, "shouldAppendHMAC", Boolean.FALSE);
+            setProperty(camelContext, dataFormat, "shouldAppendHMAC", Boolean.FALSE);
         } else {
-            setProperty(dataFormat, "shouldAppendHMAC", Boolean.TRUE);
+            setProperty(camelContext, dataFormat, "shouldAppendHMAC", Boolean.TRUE);
         }
         answer = ObjectHelper.toBoolean(inline);
         if (answer != null && answer) {
-            setProperty(dataFormat, "shouldInlineInitializationVector", Boolean.TRUE);
+            setProperty(camelContext, dataFormat, "shouldInlineInitializationVector", Boolean.TRUE);
         } else {
-            setProperty(dataFormat, "shouldInlineInitializationVector", Boolean.FALSE);
+            setProperty(camelContext, dataFormat, "shouldInlineInitializationVector", Boolean.FALSE);
         }
         if (algorithm != null) {
-            setProperty(dataFormat, "algorithm", algorithm);
+            setProperty(camelContext, dataFormat, "algorithm", algorithm);
         }
         if (cryptoProvider != null) {
-            setProperty(dataFormat, "cryptoProvider", cryptoProvider);
+            setProperty(camelContext, dataFormat, "cryptoProvider", cryptoProvider);
         }
         if (macAlgorithm != null) {
-            setProperty(dataFormat, "macAlgorithm", macAlgorithm);
+            setProperty(camelContext, dataFormat, "macAlgorithm", macAlgorithm);
         }
         if (buffersize != null) {
-            setProperty(dataFormat, "buffersize", buffersize);
+            setProperty(camelContext, dataFormat, "buffersize", buffersize);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java
index 0186d53..3d5d534 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java
@@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.RouteContext;
@@ -101,34 +102,34 @@ public class CsvDataFormat extends DataFormatDefinition {
 
         if (ObjectHelper.isNotEmpty(configRef)) {
             Object config = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), configRef);
-            setProperty(csvFormat, "config", config);
+            setProperty(routeContext.getCamelContext(), csvFormat, "config", config);
         }
         if (ObjectHelper.isNotEmpty(strategyRef)) {
             Object strategy = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), strategyRef);
-            setProperty(csvFormat, "strategy", strategy);
+            setProperty(routeContext.getCamelContext(), csvFormat, "strategy", strategy);
         }
 
         return csvFormat;
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (autogenColumns != null) {
-            setProperty(dataFormat, "autogenColumns", autogenColumns);
+            setProperty(camelContext, dataFormat, "autogenColumns", autogenColumns);
         }
 
         if (delimiter != null) {
             if (delimiter.length() > 1) {
                 throw new IllegalArgumentException("Delimiter must have a length of one!");
             }
-            setProperty(dataFormat, "delimiter", delimiter);
+            setProperty(camelContext, dataFormat, "delimiter", delimiter);
         } else {
             // the default delimiter is ','
-            setProperty(dataFormat, "delimiter", ",");
+            setProperty(camelContext, dataFormat, "delimiter", ",");
         }
 
         if (skipFirstLine != null) {
-            setProperty(dataFormat, "skipFirstLine", skipFirstLine);
+            setProperty(camelContext, dataFormat, "skipFirstLine", skipFirstLine);
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java
index a2c6acb..c445409 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java
@@ -22,6 +22,7 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 
@@ -64,11 +65,11 @@ public class HL7DataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (getParser() != null) {
-            setProperty(dataFormat, "parser", getParser());
+            setProperty(camelContext, dataFormat, "parser", getParser());
         }
-        setProperty(dataFormat, "validate", isValidate());
+        setProperty(camelContext, dataFormat, "validate", isValidate());
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java
index ea25ee3..bdd0c50 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java
@@ -22,8 +22,10 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.namespace.QName;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.util.IntrospectionSupport;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -55,6 +57,8 @@ public class JaxbDataFormat extends DataFormatDefinition {
     private String partNamespace;
     @XmlAttribute
     private String namespacePrefixRef;
+    @XmlAttribute
+    private String xmlStreamWriterWrapper;
 
     public JaxbDataFormat() {
         super("jaxb");
@@ -145,47 +149,58 @@ public class JaxbDataFormat extends DataFormatDefinition {
         this.namespacePrefixRef = namespacePrefixRef;
     }
 
+    public String getXmlStreamWriterWrapper() {
+        return xmlStreamWriterWrapper;
+    }
+
+    public void setXmlStreamWriterWrapper(String xmlStreamWriterWrapperRef) {
+        this.xmlStreamWriterWrapper = xmlStreamWriterWrapperRef;
+    }
+
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         Boolean answer = ObjectHelper.toBoolean(getPrettyPrint());
         if (answer != null && !answer) {
-            setProperty(dataFormat, "prettyPrint", Boolean.FALSE);
+            setProperty(camelContext, dataFormat, "prettyPrint", Boolean.FALSE);
         } else { // the default value is true
-            setProperty(dataFormat, "prettyPrint", Boolean.TRUE);
+            setProperty(camelContext, dataFormat, "prettyPrint", Boolean.TRUE);
         }
         answer = ObjectHelper.toBoolean(getIgnoreJAXBElement());
         if (answer != null && !answer) {
-            setProperty(dataFormat, "ignoreJAXBElement", Boolean.FALSE);
+            setProperty(camelContext, dataFormat, "ignoreJAXBElement", Boolean.FALSE);
         } else { // the default value is true
-            setProperty(dataFormat, "ignoreJAXBElement", Boolean.TRUE);
+            setProperty(camelContext, dataFormat, "ignoreJAXBElement", Boolean.TRUE);
         }
         answer = ObjectHelper.toBoolean(getFilterNonXmlChars());
         if (answer != null && answer) {
-            setProperty(dataFormat, "filterNonXmlChars", Boolean.TRUE);
+            setProperty(camelContext, dataFormat, "filterNonXmlChars", Boolean.TRUE);
         } else { // the default value is false
-            setProperty(dataFormat, "filterNonXmlChars", Boolean.FALSE);
+            setProperty(camelContext, dataFormat, "filterNonXmlChars", Boolean.FALSE);
         }
         answer = ObjectHelper.toBoolean(getFragment());
         if (answer != null && answer) {
-            setProperty(dataFormat, "fragment", Boolean.TRUE);
+            setProperty(camelContext, dataFormat, "fragment", Boolean.TRUE);
         } else { // the default value is false
-            setProperty(dataFormat, "fragment", Boolean.FALSE);
+            setProperty(camelContext, dataFormat, "fragment", Boolean.FALSE);
         }
         if (partClass != null) {
-            setProperty(dataFormat, "partClass", partClass);
+            setProperty(camelContext, dataFormat, "partClass", partClass);
         }
         if (partNamespace != null) {
-            setProperty(dataFormat, "partNamespace", QName.valueOf(partNamespace));
+            setProperty(camelContext, dataFormat, "partNamespace", QName.valueOf(partNamespace));
         }
         if (encoding != null) {
-            setProperty(dataFormat, "encoding", encoding);
+            setProperty(camelContext, dataFormat, "encoding", encoding);
         }
         if (namespacePrefixRef != null) {
-            setProperty(dataFormat, "namespacePrefixRef", namespacePrefixRef);
+            setProperty(camelContext, dataFormat, "namespacePrefixRef", namespacePrefixRef);
         }
-        setProperty(dataFormat, "contextPath", contextPath);
+        setProperty(camelContext, dataFormat, "contextPath", contextPath);
         if (schema != null) {
-            setProperty(dataFormat, "schema", schema);
+            setProperty(camelContext, dataFormat, "schema", schema);
+        }
+        if (xmlStreamWriterWrapper != null) {
+            setProperty(camelContext, dataFormat, "xmlStreamWriterWrapper", xmlStreamWriterWrapper);
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/JibxDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/JibxDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/JibxDataFormat.java
index 24bf47c..c9ffe8d 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/JibxDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/JibxDataFormat.java
@@ -22,6 +22,7 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.RouteContext;
@@ -77,9 +78,9 @@ public class JibxDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (unmarshallClass != null) {
-            setProperty(dataFormat, "unmarshallClass", unmarshallClass);
+            setProperty(camelContext, dataFormat, "unmarshallClass", unmarshallClass);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
index 027e6d3..2cf7cf7 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
@@ -22,6 +22,7 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.RouteContext;
@@ -96,11 +97,11 @@ public class JsonDataFormat extends DataFormatDefinition {
     @Override
     protected DataFormat createDataFormat(RouteContext routeContext) {
         if (library == JsonLibrary.XStream) {
-            setProperty(this, "dataFormatName", "json-xstream");
+            setProperty(routeContext.getCamelContext(), this, "dataFormatName", "json-xstream");
         } else if (library == JsonLibrary.Jackson) {
-            setProperty(this, "dataFormatName", "json-jackson");
+            setProperty(routeContext.getCamelContext(), this, "dataFormatName", "json-jackson");
         } else {
-            setProperty(this, "dataFormatName", "json-gson");
+            setProperty(routeContext.getCamelContext(), this, "dataFormatName", "json-gson");
         }
 
         if (unmarshalType == null && unmarshalTypeName != null) {
@@ -115,16 +116,16 @@ public class JsonDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (unmarshalType != null) {
-            setProperty(dataFormat, "unmarshalType", unmarshalType);
+            setProperty(camelContext, dataFormat, "unmarshalType", unmarshalType);
         }
         if (prettyPrint != null) {
-            setProperty(dataFormat, "prettyPrint", unmarshalType);
+            setProperty(camelContext, dataFormat, "prettyPrint", unmarshalType);
         }
 
         if (jsonView != null) {
-            setProperty(dataFormat, "jsonView", jsonView);
+            setProperty(camelContext, dataFormat, "jsonView", jsonView);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java
index e1fa43c..6f9fa26 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java
@@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 
@@ -47,21 +48,21 @@ public class PGPDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (keyUserid != null) {
-            setProperty(dataFormat, "keyUserid", keyUserid);
+            setProperty(camelContext, dataFormat, "keyUserid", keyUserid);
         }
         if (password != null) {
-            setProperty(dataFormat, "password", password);
+            setProperty(camelContext, dataFormat, "password", password);
         }
         if (keyFileName != null) {
-            setProperty(dataFormat, "keyFileName", keyFileName);
+            setProperty(camelContext, dataFormat, "keyFileName", keyFileName);
         }
         if (armored != null) {
-            setProperty(dataFormat, "armored", armored);
+            setProperty(camelContext, dataFormat, "armored", armored);
         }
         if (integrity != null) {
-            setProperty(dataFormat, "integrity", integrity);
+            setProperty(camelContext, dataFormat, "integrity", integrity);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java
index b03a686..cdaaafd 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java
@@ -22,6 +22,7 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 
@@ -64,12 +65,12 @@ public class ProtobufDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (this.instanceClass != null) {
-            setProperty(dataFormat, "instanceClass", instanceClass);
+            setProperty(camelContext, dataFormat, "instanceClass", instanceClass);
         }
         if (this.defaultInstance != null) {
-            setProperty(dataFormat, "defaultInstance", defaultInstance);
+            setProperty(camelContext, dataFormat, "defaultInstance", defaultInstance);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/SoapJaxbDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/SoapJaxbDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/SoapJaxbDataFormat.java
index 2336e04..6c01f68 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/SoapJaxbDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/SoapJaxbDataFormat.java
@@ -22,6 +22,7 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 
@@ -111,23 +112,23 @@ public class SoapJaxbDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (elementNameStrategy != null) {
-            setProperty(dataFormat, "elementNameStrategy", elementNameStrategy);
+            setProperty(camelContext, dataFormat, "elementNameStrategy", elementNameStrategy);
         }
         if (elementNameStrategyRef != null) {
-            setProperty(dataFormat, "elementNameStrategyRef", elementNameStrategyRef);
+            setProperty(camelContext, dataFormat, "elementNameStrategyRef", elementNameStrategyRef);
         }
         if (encoding != null) {
-            setProperty(dataFormat, "encoding", encoding);
+            setProperty(camelContext, dataFormat, "encoding", encoding);
         }
         if (version != null) {
-            setProperty(dataFormat, "version", version);
+            setProperty(camelContext, dataFormat, "version", version);
         }
         if (namespacePrefixRef != null) {
-            setProperty(dataFormat, "namespacePrefixRef", namespacePrefixRef);
+            setProperty(camelContext, dataFormat, "namespacePrefixRef", namespacePrefixRef);
         }
-        setProperty(dataFormat, "contextPath", contextPath);
+        setProperty(camelContext, dataFormat, "contextPath", contextPath);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java
index 0d56633..03802de 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java
@@ -22,6 +22,7 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.camel.CamelContext;
 import org.w3c.dom.Node;
 
 import org.apache.camel.model.DataFormatDefinition;
@@ -83,9 +84,9 @@ public class TidyMarkupDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (dataObjectType != null) {
-            setProperty(dataFormat, "dataObjectType", dataObjectType);
+            setProperty(camelContext, dataFormat, "dataObjectType", dataObjectType);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java
index f7a7071..1cefdba 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.NamespaceAware;
@@ -230,48 +231,48 @@ public class XMLSecurityDataFormat extends DataFormatDefinition implements Names
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (getSecureTag() != null) {
-            setProperty(dataFormat, "secureTag", getSecureTag());
+            setProperty(camelContext, dataFormat, "secureTag", getSecureTag());
         } else {
-            setProperty(dataFormat, "secureTag", "");
+            setProperty(camelContext, dataFormat, "secureTag", "");
         }
 
-        setProperty(dataFormat, "secureTagContents", isSecureTagContents());
+        setProperty(camelContext, dataFormat, "secureTagContents", isSecureTagContents());
 
         if (passPhrase != null) {
-            setProperty(dataFormat, "passPhrase", getPassPhrase().getBytes());
+            setProperty(camelContext, dataFormat, "passPhrase", getPassPhrase().getBytes());
         } else {
-            setProperty(dataFormat, "passPhrase", "Just another 24 Byte key".getBytes());
+            setProperty(camelContext, dataFormat, "passPhrase", "Just another 24 Byte key".getBytes());
         }
         if (getXmlCipherAlgorithm() != null) {
-            setProperty(dataFormat, "xmlCipherAlgorithm", getXmlCipherAlgorithm());
+            setProperty(camelContext, dataFormat, "xmlCipherAlgorithm", getXmlCipherAlgorithm());
         } else {
-            setProperty(dataFormat, "xmlCipherAlgorithm", TRIPLEDES);
+            setProperty(camelContext, dataFormat, "xmlCipherAlgorithm", TRIPLEDES);
         }
         if (getKeyCipherAlgorithm() != null) {
-            setProperty(dataFormat, "keyCipherAlgorithm", getKeyCipherAlgorithm());
+            setProperty(camelContext, dataFormat, "keyCipherAlgorithm", getKeyCipherAlgorithm());
         }
         if (getRecipientKeyAlias() != null) {
-            setProperty(dataFormat, "recipientKeyAlias", getRecipientKeyAlias());
+            setProperty(camelContext, dataFormat, "recipientKeyAlias", getRecipientKeyAlias());
         }
         if (getKeyOrTrustStoreParametersId() != null) {
-            setProperty(dataFormat, "keyOrTrustStoreParametersId", getKeyOrTrustStoreParametersId());
+            setProperty(camelContext, dataFormat, "keyOrTrustStoreParametersId", getKeyOrTrustStoreParametersId());
         }
         if (keyOrTrustStoreParameters != null) {
-            setProperty(dataFormat, "keyOrTrustStoreParameters", this.keyOrTrustStoreParameters);
+            setProperty(camelContext, dataFormat, "keyOrTrustStoreParameters", this.keyOrTrustStoreParameters);
         }
         if (namespaces != null) {
-            setProperty(dataFormat, "namespaces", this.namespaces);
+            setProperty(camelContext, dataFormat, "namespaces", this.namespaces);
         }
         if (keyPassword != null) {
-            setProperty(dataFormat, "keyPassword", this.getKeyPassword());
+            setProperty(camelContext, dataFormat, "keyPassword", this.getKeyPassword());
         }
         if (digestAlgorithm != null) {
-            setProperty(dataFormat, "digestAlgorithm", this.getDigestAlgorithm());
+            setProperty(camelContext, dataFormat, "digestAlgorithm", this.getDigestAlgorithm());
         }
         if (mgfAlgorithm != null) {
-            setProperty(dataFormat, "mgfAlgorithm", this.getMgfAlgorithm());
+            setProperty(camelContext, dataFormat, "mgfAlgorithm", this.getMgfAlgorithm());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
index 7e60b6f..6ea2ab8 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
@@ -33,6 +33,7 @@ import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.RouteContext;
@@ -134,32 +135,32 @@ public class XStreamDataFormat extends DataFormatDefinition {
     @Override
     protected DataFormat createDataFormat(RouteContext routeContext) {
         if ("json".equals(this.driver)) {
-            setProperty(this, "dataFormatName", "json-xstream");
+            setProperty(routeContext.getCamelContext(), this, "dataFormatName", "json-xstream");
         }
         DataFormat answer = super.createDataFormat(routeContext);
         // need to lookup the reference for the xstreamDriver
         if (ObjectHelper.isNotEmpty(driverRef)) {
-            setProperty(answer, "xstreamDriver", CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), driverRef));
+            setProperty(routeContext.getCamelContext(), answer, "xstreamDriver", CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), driverRef));
         }
         return answer;
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (encoding != null) {
-            setProperty(dataFormat, "encoding", encoding);
+            setProperty(camelContext, dataFormat, "encoding", encoding);
         }
         if (this.converters != null) {
-            setProperty(dataFormat, "converters", this.converters);
+            setProperty(camelContext, dataFormat, "converters", this.converters);
         }
         if (this.aliases != null) {
-            setProperty(dataFormat, "aliases", this.aliases);
+            setProperty(camelContext, dataFormat, "aliases", this.aliases);
         }
         if (this.omitFields != null) {
-            setProperty(dataFormat, "omitFields", this.omitFields);
+            setProperty(camelContext, dataFormat, "omitFields", this.omitFields);
         }
         if (this.implicitCollections != null) {
-            setProperty(dataFormat, "implicitCollections", this.implicitCollections);
+            setProperty(camelContext, dataFormat, "implicitCollections", this.implicitCollections);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/XmlJsonDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/XmlJsonDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/XmlJsonDataFormat.java
index ff36a89..b29f4ed 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/XmlJsonDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/XmlJsonDataFormat.java
@@ -26,6 +26,7 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlList;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 
@@ -121,54 +122,54 @@ public class XmlJsonDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (encoding != null) {
-            setProperty(dataFormat, ENCODING, encoding);
+            setProperty(camelContext, dataFormat, ENCODING, encoding);
         }
 
         if (forceTopLevelObject != null) {
-            setProperty(dataFormat, FORCE_TOP_LEVEL_OBJECT, forceTopLevelObject);
+            setProperty(camelContext, dataFormat, FORCE_TOP_LEVEL_OBJECT, forceTopLevelObject);
         }
 
         if (namespaceLenient != null) {
-            setProperty(dataFormat, NAMESPACE_LENIENT, namespaceLenient);
+            setProperty(camelContext, dataFormat, NAMESPACE_LENIENT, namespaceLenient);
         }
 
         if (rootName != null) {
-            setProperty(dataFormat, ROOT_NAME, rootName);
+            setProperty(camelContext, dataFormat, ROOT_NAME, rootName);
         }
         
         if (elementName != null) {
-            setProperty(dataFormat, ELEMENT_NAME, elementName);
+            setProperty(camelContext, dataFormat, ELEMENT_NAME, elementName);
         }
 
         if (arrayName != null) {
-            setProperty(dataFormat, ARRAY_NAME, arrayName);
+            setProperty(camelContext, dataFormat, ARRAY_NAME, arrayName);
         }
 
         if (expandableProperties != null && expandableProperties.size() != 0) {
-            setProperty(dataFormat, EXPANDABLE_PROPERTIES, expandableProperties);
+            setProperty(camelContext, dataFormat, EXPANDABLE_PROPERTIES, expandableProperties);
         }
 
         if (skipWhitespace != null) {
-            setProperty(dataFormat, SKIP_WHITESPACE, skipWhitespace);
+            setProperty(camelContext, dataFormat, SKIP_WHITESPACE, skipWhitespace);
         }
 
         if (trimSpaces != null) {
-            setProperty(dataFormat, TRIM_SPACES, trimSpaces);
+            setProperty(camelContext, dataFormat, TRIM_SPACES, trimSpaces);
         }
 
         if (skipNamespaces != null) {
-            setProperty(dataFormat, SKIP_NAMESPACES, skipNamespaces);
+            setProperty(camelContext, dataFormat, SKIP_NAMESPACES, skipNamespaces);
         }
 
         if (removeNamespacePrefixes != null) {
-            setProperty(dataFormat, REMOVE_NAMESPACE_PREFIXES, removeNamespacePrefixes);
+            setProperty(camelContext, dataFormat, REMOVE_NAMESPACE_PREFIXES, removeNamespacePrefixes);
         }
 
         // will end up calling the setTypeHints(String s) which does the parsing from the Enum String key to the Enum value
         if (typeHints != null) {
-            setProperty(typeHints, TYPE_HINTS, typeHints);
+            setProperty(camelContext, typeHints, TYPE_HINTS, typeHints);
         }
 
         //TODO: xmljson: element-namespace mapping is not implemented in the XML DSL

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/XmlRpcDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/XmlRpcDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/XmlRpcDataFormat.java
index b22e4f7..61430cc 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/XmlRpcDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/XmlRpcDataFormat.java
@@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 
@@ -38,9 +39,9 @@ public class XmlRpcDataFormat extends DataFormatDefinition {
     }
     
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (request != null) {
-            setProperty(dataFormat, "request", request);
+            setProperty(camelContext, dataFormat, "request", request);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java b/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java
index c0b7712..82a1da4 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java
@@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 
@@ -38,9 +39,9 @@ public class ZipFileDataFormat extends DataFormatDefinition {
     }
     
     @Override
-    protected void configureDataFormat(DataFormat dataFormat) {
+    protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
         if (usingIterator != null) {
-            setProperty(dataFormat, "usingIterator", usingIterator);
+            setProperty(camelContext, dataFormat, "usingIterator", usingIterator);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
index bf06318..c29ab2d 100644
--- a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
+++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
@@ -90,7 +90,7 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, CamelC
     private String namespacePrefixRef;
     private Map<String, String> namespacePrefix;
     private JaxbNamespacePrefixMapper namespacePrefixMapper;
-
+    private JaxbXmlStreamWriterWrapper xmlStreamWriterWrapper;
     private TypeConverter typeConverter;
 
     public JaxbDataFormat() {
@@ -144,18 +144,22 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, CamelC
             e = new JAXBElement<Object>(getPartNamespace(), partialClass, graph);
         }
 
-        if (needFiltering(exchange)) {
-            marshaller.marshal(e, createFilteringWriter(stream));
+        if (asXmlStreamWriter(exchange)) {
+            XMLStreamWriter writer = typeConverter.convertTo(XMLStreamWriter.class, stream);
+            if (needFiltering(exchange)) {
+                writer = new FilteringXmlStreamWriter(writer);
+            }
+            if (xmlStreamWriterWrapper != null) {
+                writer = xmlStreamWriterWrapper.wrapWriter(writer);
+            }
+            marshaller.marshal(e, writer);
         } else {
             marshaller.marshal(e, stream);
         }
     }
 
-    private FilteringXmlStreamWriter createFilteringWriter(OutputStream stream)
-        throws XMLStreamException, FactoryConfigurationError {
-        XMLStreamWriter writer = typeConverter.convertTo(XMLStreamWriter.class, stream);
-        FilteringXmlStreamWriter filteringWriter = new FilteringXmlStreamWriter(writer);
-        return filteringWriter;
+    private boolean asXmlStreamWriter(Exchange exchange) {
+        return needFiltering(exchange) || (xmlStreamWriterWrapper != null);
     }
 
     public Object unmarshal(Exchange exchange, InputStream stream) throws IOException, SAXException {
@@ -310,6 +314,14 @@ public class JaxbDataFormat extends ServiceSupport implements DataFormat, CamelC
         this.camelContext = camelContext;
     }
 
+    public JaxbXmlStreamWriterWrapper getXmlStreamWriterWrapper() {
+        return xmlStreamWriterWrapper;
+    }
+
+    public void setXmlStreamWriterWrapper(JaxbXmlStreamWriterWrapper xmlStreamWriterWrapper) {
+        this.xmlStreamWriterWrapper = xmlStreamWriterWrapper;
+    }
+
     @Override
     @SuppressWarnings("unchecked")
     protected void doStart() throws Exception {

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbXmlStreamWriterWrapper.java
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbXmlStreamWriterWrapper.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbXmlStreamWriterWrapper.java
new file mode 100644
index 0000000..ed5010e
--- /dev/null
+++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbXmlStreamWriterWrapper.java
@@ -0,0 +1,12 @@
+package org.apache.camel.converter.jaxb;
+
+import javax.xml.stream.XMLStreamWriter;
+
+/**
+ * A wrapper which allows to customize the {@link XMLStreamWriter}.
+ */
+public interface JaxbXmlStreamWriterWrapper {
+
+    XMLStreamWriter wrapWriter(XMLStreamWriter writer);
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/NoopXmlStreamWriterWrapper.java
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/NoopXmlStreamWriterWrapper.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/NoopXmlStreamWriterWrapper.java
new file mode 100644
index 0000000..d95506f
--- /dev/null
+++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/NoopXmlStreamWriterWrapper.java
@@ -0,0 +1,11 @@
+package org.apache.camel.converter.jaxb;
+
+import javax.xml.stream.XMLStreamWriter;
+
+public class NoopXmlStreamWriterWrapper implements JaxbXmlStreamWriterWrapper {
+
+    @Override
+    public XMLStreamWriter wrapWriter(XMLStreamWriter writer) {
+        return writer;
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/CamelJaxbTest.java
----------------------------------------------------------------------
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 5e05c35..010f80e 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
@@ -81,6 +81,38 @@ public class CamelJaxbTest extends CamelTestSupport {
     }
 
     @Test
+    public void testCustomXmlStreamWriter() throws InterruptedException {
+        PersonType person = new PersonType();
+        person.setFirstName("foo");
+        person.setLastName("bar");
+
+        MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
+        resultEndpoint.expectedMessageCount(1);
+        template.sendBody("direct:marshalCustomWriter", person);
+        resultEndpoint.assertIsSatisfied();
+
+        String body = resultEndpoint.getReceivedExchanges().get(0).getIn().getBody(String.class);
+        assertTrue("Body did not get processed correctly by custom filter", body.contains("-Foo"));
+    }
+
+    @Test
+    public void testCustomXmlStreamWriterAndFiltering() throws InterruptedException {
+        PersonType person = new PersonType();
+        person.setFirstName("foo\u0004");
+        person.setLastName("bar");
+
+        MockEndpoint resultEndpoint = resolveMandatoryEndpoint("mock:result", MockEndpoint.class);
+        resultEndpoint.expectedMessageCount(1);
+        template.sendBody("direct:marshalCustomWriterAndFiltering", person);
+        resultEndpoint.assertIsSatisfied();
+
+        String body = resultEndpoint.getReceivedExchanges().get(0).getIn().getBody(String.class);
+        assertFalse("Non-xml character unexpectedly did not get into marshalled contents", body
+                .contains("\u0004"));
+        assertTrue("Body did not get processed correctly by custom filter", body.contains("-Foo"));
+    }
+
+    @Test
     public void testUnmarshal() throws Exception {
         final String xml = "<Person><firstName>FOO</firstName><lastName>BAR</lastName></Person>";
         PersonType expected = new PersonType();
@@ -110,6 +142,13 @@ public class CamelJaxbTest extends CamelTestSupport {
                 JaxbDataFormat filterEnabledFormat = new JaxbDataFormat("org.apache.camel.foo.bar");
                 filterEnabledFormat.setFilterNonXmlChars(true);
 
+                JaxbDataFormat customWriterFormat = new JaxbDataFormat("org.apache.camel.foo.bar");
+                customWriterFormat.setXmlStreamWriterWrapper(new TestXmlStreamWriter());
+
+                JaxbDataFormat customWriterAndFilterFormat = new JaxbDataFormat("org.apache.camel.foo.bar");
+                customWriterAndFilterFormat.setFilterNonXmlChars(true);
+                customWriterAndFilterFormat.setXmlStreamWriterWrapper(new TestXmlStreamWriter());
+
                 from("direct:getJAXBElementValue")
                     .unmarshal(new JaxbDataFormat("org.apache.camel.foo.bar"))                        
                         .to("mock:result");
@@ -130,6 +169,13 @@ public class CamelJaxbTest extends CamelTestSupport {
                     .marshal(filterEnabledFormat)
                     .to("mock:result");
 
+                from("direct:marshalCustomWriter")
+                        .marshal(customWriterFormat)
+                        .to("mock:result");
+                from("direct:marshalCustomWriterAndFiltering")
+                        .marshal(customWriterAndFilterFormat)
+                        .to("mock:result");
+
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/TestXmlStreamWriter.java
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/TestXmlStreamWriter.java b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/TestXmlStreamWriter.java
new file mode 100644
index 0000000..d15c895
--- /dev/null
+++ b/components/camel-jaxb/src/test/java/org/apache/camel/jaxb/TestXmlStreamWriter.java
@@ -0,0 +1,177 @@
+package org.apache.camel.jaxb;
+
+import org.apache.camel.converter.jaxb.JaxbXmlStreamWriterWrapper;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+/**
+ * @author <a href="http://christianposta.com/blog">Christian Posta</a>
+ */
+public class TestXmlStreamWriter implements JaxbXmlStreamWriterWrapper {
+    @Override
+    public XMLStreamWriter wrapWriter(final XMLStreamWriter writer) {
+        return new XMLStreamWriter() {
+            @Override
+            public void writeStartElement(String s) throws XMLStreamException {
+                writer.writeStartElement(s+"-Foo");
+            }
+
+            @Override
+            public void writeStartElement(String s, String s2) throws XMLStreamException {
+                writer.writeStartElement(s, s2+"-Foo");
+            }
+
+            @Override
+            public void writeStartElement(String s, String s2, String s3) throws XMLStreamException {
+                writer.writeStartElement(s, s2+"-Foo", s3);
+            }
+
+            @Override
+            public void writeEmptyElement(String s, String s2) throws XMLStreamException {
+                writer.writeEmptyElement(s, s2);
+            }
+
+            @Override
+            public void writeEmptyElement(String s, String s2, String s3) throws XMLStreamException {
+                writer.writeEmptyElement(s, s2, s3);
+            }
+
+            @Override
+            public void writeEmptyElement(String s) throws XMLStreamException {
+                writer.writeEmptyElement(s);
+            }
+
+            @Override
+            public void writeEndElement() throws XMLStreamException {
+                writer.writeEndElement();
+            }
+
+            @Override
+            public void writeEndDocument() throws XMLStreamException {
+                writer.writeEndDocument();
+            }
+
+            @Override
+            public void close() throws XMLStreamException {
+                writer.close();
+            }
+
+            @Override
+            public void flush() throws XMLStreamException {
+                writer.flush();
+            }
+
+            @Override
+            public void writeAttribute(String s, String s2) throws XMLStreamException {
+                writer.writeAttribute(s, s2);
+            }
+
+            @Override
+            public void writeAttribute(String s, String s2, String s3, String s4) throws XMLStreamException {
+                writer.writeAttribute(s, s2, s3, s4);
+            }
+
+            @Override
+            public void writeAttribute(String s, String s2, String s3) throws XMLStreamException {
+                writer.writeAttribute(s, s2, s3);
+            }
+
+            @Override
+            public void writeNamespace(String s, String s2) throws XMLStreamException {
+                writer.writeNamespace(s, s2);
+            }
+
+            @Override
+            public void writeDefaultNamespace(String s) throws XMLStreamException {
+                writer.writeDefaultNamespace(s);
+            }
+
+            @Override
+            public void writeComment(String s) throws XMLStreamException {
+                writer.writeComment(s);
+            }
+
+            @Override
+            public void writeProcessingInstruction(String s) throws XMLStreamException {
+                writer.writeProcessingInstruction(s);
+            }
+
+            @Override
+            public void writeProcessingInstruction(String s, String s2) throws XMLStreamException {
+                writer.writeProcessingInstruction(s, s2);
+            }
+
+            @Override
+            public void writeCData(String s) throws XMLStreamException {
+                writer.writeCData(s);
+            }
+
+            @Override
+            public void writeDTD(String s) throws XMLStreamException {
+                writer.writeDTD(s);
+            }
+
+            @Override
+            public void writeEntityRef(String s) throws XMLStreamException {
+                writer.writeEntityRef(s);
+            }
+
+            @Override
+            public void writeStartDocument() throws XMLStreamException {
+                writer.writeStartDocument();
+            }
+
+            @Override
+            public void writeStartDocument(String s) throws XMLStreamException {
+                writer.writeStartDocument(s);
+            }
+
+            @Override
+            public void writeStartDocument(String s, String s2) throws XMLStreamException {
+                writer.writeStartDocument(s, s2);
+            }
+
+            @Override
+            public void writeCharacters(String s) throws XMLStreamException {
+                writer.writeCharacters(s);
+            }
+
+            @Override
+            public void writeCharacters(char[] chars, int i, int i2) throws XMLStreamException {
+                writer.writeCharacters(chars, i, i2);
+            }
+
+            @Override
+            public String getPrefix(String s) throws XMLStreamException {
+               return writer.getPrefix(s);
+            }
+
+            @Override
+            public void setPrefix(String s, String s2) throws XMLStreamException {
+                writer.setPrefix(s, s2);
+            }
+
+            @Override
+            public void setDefaultNamespace(String s) throws XMLStreamException {
+                writer.setDefaultNamespace(s);
+            }
+
+            @Override
+            public void setNamespaceContext(NamespaceContext namespaceContext) throws XMLStreamException {
+                writer.setNamespaceContext(namespaceContext);
+            }
+
+            @Override
+            public NamespaceContext getNamespaceContext() {
+                return writer.getNamespaceContext();
+            }
+
+            @Override
+            public Object getProperty(String s) throws IllegalArgumentException {
+                return writer.getProperty(s);
+            }
+        };  //To change body of implemented methods use File | Settings | File Templates.
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/a4b78c53/components/camel-jaxb/src/test/resources/org/apache/camel/jaxb/CamelJaxbTest.xml
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/test/resources/org/apache/camel/jaxb/CamelJaxbTest.xml b/components/camel-jaxb/src/test/resources/org/apache/camel/jaxb/CamelJaxbTest.xml
index c4740ec..e7331c5 100644
--- a/components/camel-jaxb/src/test/resources/org/apache/camel/jaxb/CamelJaxbTest.xml
+++ b/components/camel-jaxb/src/test/resources/org/apache/camel/jaxb/CamelJaxbTest.xml
@@ -21,8 +21,9 @@
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
     ">
-    
-  
+
+    <bean id="testXmlStreamWriterWrapper" class="org.apache.camel.jaxb.TestXmlStreamWriter"/>
+
   <!-- START SNIPPET: example -->
   <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
     <route>
@@ -60,6 +61,21 @@
       </marshal>          
       <to uri="mock:result"/>
     </route>
+
+      <route>
+          <from uri="direct:marshalCustomWriter"/>
+          <marshal>
+              <jaxb filterNonXmlChars="false"  contextPath="org.apache.camel.foo.bar" xmlStreamWriterWrapper="#testXmlStreamWriterWrapper"/>
+          </marshal>
+          <to uri="mock:result"/>
+      </route>
+      <route>
+          <from uri="direct:marshalCustomWriterAndFiltering"/>
+          <marshal>
+              <jaxb filterNonXmlChars="true"  contextPath="org.apache.camel.foo.bar" xmlStreamWriterWrapper="#testXmlStreamWriterWrapper" />
+          </marshal>
+          <to uri="mock:result"/>
+      </route>
   </camelContext>
   <!-- END SNIPPET: example -->