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 2015/11/13 15:32:30 UTC

[2/9] camel git commit: [CAMEL-9297] Expose more configuration options from Camel's XStream. Allow to configure the types/permissions in the Java DSL. Updated the unit tests to do it like the end user would do it.

[CAMEL-9297] Expose more configuration options from Camel's XStream. Allow to configure the types/permissions in the Java DSL. Updated the unit tests to do it like the end user would do it.


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

Branch: refs/heads/camel-2.16.x
Commit: b7afb3769a38b8e526f8046414d4a71430d77df0
Parents: 439299b
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Nov 13 15:17:07 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Nov 13 15:17:44 2015 +0100

----------------------------------------------------------------------
 .../apache/camel/builder/DataFormatClause.java  | 55 +++++++++++++++++---
 .../camel/model/dataformat/JsonDataFormat.java  | 47 +++++++++++++++++
 .../model/dataformat/XStreamDataFormat.java     | 40 +++++++++++---
 .../xstream/MarshalDomainObjectJSONTest.java    |  5 +-
 .../xstream/MarshalDomainObjectTest.java        | 18 ++-----
 .../xstream/UnmarshalThenMarshalJSONTest.java   |  5 +-
 .../xstream/UnmarshalThenMarshalTest.java       | 16 +-----
 .../xstream/XStreamConcurrencyTest.java         | 16 +-----
 .../xstream/XStreamConfigurationTest.java       | 17 ++----
 .../dataformat/xstream/XStreamTestUtils.java    |  1 -
 .../src/test/resources/log4j.properties         |  3 +-
 .../SpringMarshalDomainObjectJSONTest.xml       |  4 +-
 .../xstream/SpringMarshalListTest.xml           |  4 +-
 .../xstream/SpringMarshalOmitFieldsTest.xml     |  2 +-
 .../xstream/SpringXStreamConfigurationTest.xml  |  4 +-
 15 files changed, 154 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java b/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java
index e87195c..ffadcdf 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/DataFormatClause.java
@@ -16,12 +16,10 @@
  */
 package org.apache.camel.builder;
 
+import java.nio.charset.Charset;
 import java.util.Map;
 import java.util.zip.Deflater;
 
-import org.w3c.dom.Node;
-
-
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.dataformat.AvroDataFormat;
@@ -55,7 +53,9 @@ import org.apache.camel.model.dataformat.XStreamDataFormat;
 import org.apache.camel.model.dataformat.XmlJsonDataFormat;
 import org.apache.camel.model.dataformat.ZipDataFormat;
 import org.apache.camel.model.dataformat.ZipFileDataFormat;
+import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.jsse.KeyStoreParameters;
+import org.w3c.dom.Node;
 
 /**
  * An expression for constructing the different possible {@link org.apache.camel.spi.DataFormat}
@@ -720,17 +720,60 @@ public class DataFormatClause<T extends ProcessorDefinition<?>> {
     }
 
     /**
-     * Uses the XStream data format
+     * Uses the XStream data format.
+     * <p/>
+     * Favor using {@link #xstream(String)} to pass in a permission
      */
     public T xstream() {
         return dataFormat(new XStreamDataFormat());
     }
 
     /**
+     * Uses the xstream by setting the encoding or permission
+     *
+     * @param encodingOrPermission is either an encoding or permission syntax
+     */
+    public T xstream(String encodingOrPermission) {
+        // is it an encoding? if not we assume its a permission
+        if (Charset.isSupported(encodingOrPermission)) {
+            return xstream(encodingOrPermission, (String) null);
+        } else {
+            return xstream(null, encodingOrPermission);
+        }
+    }
+
+    /**
      * Uses the xstream by setting the encoding
      */
-    public T xstream(String encoding) {
-        return dataFormat(new XStreamDataFormat(encoding));
+    public T xstream(String encoding, String permission) {
+        XStreamDataFormat xdf = new XStreamDataFormat();
+        xdf.setPermissions(permission);
+        xdf.setEncoding(encoding);
+        return dataFormat(xdf);
+    }
+
+    /**
+     * Uses the xstream by permitting the java type
+     *
+     * @param type the pojo xstream should use as allowed permission
+     */
+    public T xstream(Class<?> type) {
+        return xstream(null, type);
+    }
+
+    /**
+     * Uses the xstream by permitting the java type
+     *
+     * @param encoding encoding to use
+     * @param type the pojo class(es) xstream should use as allowed permission
+     */
+    public T xstream(String encoding, Class<?>... type) {
+        CollectionStringBuffer csb = new CollectionStringBuffer(",");
+        for (Class<?> clazz : type) {
+            csb.append("+");
+            csb.append(clazz.getName());
+        }
+        return xstream(encoding, csb.toString());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/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 c0127eb..f20aa41 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
@@ -27,6 +27,7 @@ import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.RouteContext;
+import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -68,6 +69,8 @@ public class JsonDataFormat extends DataFormatDefinition {
     private String enableFeatures;
     @XmlAttribute
     private String disableFeatures;
+    @XmlAttribute
+    private String permissions;
 
     public JsonDataFormat() {
         super("json");
@@ -253,6 +256,42 @@ public class JsonDataFormat extends DataFormatDefinition {
         this.disableFeatures = disableFeatures;
     }
 
+    public String getPermissions() {
+        return permissions;
+    }
+
+    /**
+     * Adds permissions that controls which Java packages and classes XStream is allowed to use during
+     * unmarshal from xml/json to Java beans.
+     * <p/>
+     * A permission must be configured either here or globally using a JVM system property. The permission
+     * can be specified in a syntax where a plus sign is allow, and minus sign is deny.
+     * <br/>
+     * Wildcards is supported by using <tt>.*</tt> as prefix. For example to allow <tt>com.foo</tt> and all subpackages
+     * then specfy <tt>+com.foo.*</tt>. Multiple permissions can be configured separated by comma, such as
+     * <tt>+com.foo.*,-com.foo.bar.MySecretBean</tt>.
+     * <br/>
+     * The following default permission is always included: <tt>"-*,java.lang.*,java.util.*"</tt> unless
+     * its overridden by specifying a JVM system property with they key <tt>org.apache.camel.xstream.permissions</tt>.
+     */
+    public void setPermissions(String permissions) {
+        this.permissions = permissions;
+    }
+
+    /**
+     * To add permission for the given pojo classes.
+     * @param type the pojo class(es) xstream should use as allowed permission
+     * @see #setPermissions(String)
+     */
+    public void setPermissions(Class<?>... type) {
+        CollectionStringBuffer csb = new CollectionStringBuffer(",");
+        for (Class<?> clazz : type) {
+            csb.append("+");
+            csb.append(clazz.getName());
+        }
+        setPermissions(csb.toString());
+    }
+
     @Override
     public String getDataFormatName() {
         // json data format is special as the name can be from different bundles
@@ -325,6 +364,14 @@ public class JsonDataFormat extends DataFormatDefinition {
         if (disableFeatures != null) {
             setProperty(camelContext, dataFormat, "disableFeatures", disableFeatures);
         }
+        if (permissions != null) {
+            setProperty(camelContext, dataFormat, "permissions", permissions);
+        }
+        // if we have the unmarshal type, but no permission set, then use it to be allowed
+        if (permissions == null && unmarshalType != null) {
+            String allow = "+" + unmarshalType.getName();
+            setProperty(camelContext, dataFormat, "permissions", allow);
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/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 4d433d2..a7a22f3 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
@@ -38,6 +38,7 @@ import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.CamelContextHelper;
+import org.apache.camel.util.CollectionStringBuffer;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -50,6 +51,8 @@ import org.apache.camel.util.ObjectHelper;
 @XmlAccessorType(XmlAccessType.NONE)
 public class XStreamDataFormat extends DataFormatDefinition {
     @XmlAttribute
+    private String permissions;
+    @XmlAttribute
     private String encoding;
     @XmlAttribute
     private String driver;
@@ -57,9 +60,7 @@ public class XStreamDataFormat extends DataFormatDefinition {
     private String driverRef;
     @XmlAttribute
     private String mode;
-    @XmlAttribute
-    private String permissions;
-    
+
     @XmlJavaTypeAdapter(ConvertersAdapter.class)
     @XmlElement(name = "converters")
     private List<String> converters;
@@ -187,12 +188,37 @@ public class XStreamDataFormat extends DataFormatDefinition {
     }
 
     /**
-     * Adds permissionsList
+     * Adds permissions that controls which Java packages and classes XStream is allowed to use during
+     * unmarshal from xml/json to Java beans.
+     * <p/>
+     * A permission must be configured either here or globally using a JVM system property. The permission
+     * can be specified in a syntax where a plus sign is allow, and minus sign is deny.
+     * <br/>
+     * Wildcards is supported by using <tt>.*</tt> as prefix. For example to allow <tt>com.foo</tt> and all subpackages
+     * then specfy <tt>+com.foo.*</tt>. Multiple permissions can be configured separated by comma, such as
+     * <tt>+com.foo.*,-com.foo.bar.MySecretBean</tt>.
+     * <br/>
+     * The following default permission is always included: <tt>"-*,java.lang.*,java.util.*"</tt> unless
+     * its overridden by specifying a JVM system property with they key <tt>org.apache.camel.xstream.permissions</tt>.
      */
     public void setPermissions(String permissions) {
         this.permissions = permissions;
     }
 
+    /**
+     * To add permission for the given pojo classes.
+     * @param type the pojo class(es) xstream should use as allowed permission
+     * @see #setPermissions(String)
+     */
+    public void setPermissions(Class<?>... type) {
+        CollectionStringBuffer csb = new CollectionStringBuffer(",");
+        for (Class<?> clazz : type) {
+            csb.append("+");
+            csb.append(clazz.getName());
+        }
+        setPermissions(csb.toString());
+    }
+
     @Override
     protected DataFormat createDataFormat(RouteContext routeContext) {
         if ("json".equals(this.driver)) {
@@ -208,6 +234,9 @@ public class XStreamDataFormat extends DataFormatDefinition {
 
     @Override
     protected void configureDataFormat(DataFormat dataFormat, CamelContext camelContext) {
+        if (this.permissions != null) {
+            setProperty(camelContext, dataFormat, "permissions", this.permissions);
+        }
         if (encoding != null) {
             setProperty(camelContext, dataFormat, "encoding", encoding);
         }
@@ -223,9 +252,6 @@ public class XStreamDataFormat extends DataFormatDefinition {
         if (this.implicitCollections != null) {
             setProperty(camelContext, dataFormat, "implicitCollections", this.implicitCollections);
         }
-        if (this.permissions != null) {
-            setProperty(camelContext, dataFormat, "permissions", this.permissions);
-        }
         if (this.mode != null) {
             setProperty(camelContext, dataFormat, "mode", mode);
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectJSONTest.java
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectJSONTest.java b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectJSONTest.java
index 55fbdf0..e676c66 100644
--- a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectJSONTest.java
+++ b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectJSONTest.java
@@ -18,6 +18,7 @@ package org.apache.camel.dataformat.xstream;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.model.dataformat.JsonLibrary;
 import org.junit.Test;
 
 public class MarshalDomainObjectJSONTest extends MarshalDomainObjectTest {
@@ -57,10 +58,10 @@ public class MarshalDomainObjectJSONTest extends MarshalDomainObjectTest {
                 // just used for helping to marshal
                 from("direct:marshal").marshal().json();
 
-                from("direct:reverse").unmarshal().json().to("mock:reverse");
+                from("direct:reverse").unmarshal().json(JsonLibrary.XStream, PurchaseOrder.class).to("mock:reverse");
 
                 from("direct:inPretty").marshal().json(true);
-                from("direct:backPretty").unmarshal().json().to("mock:reverse");
+                from("direct:backPretty").unmarshal().json(JsonLibrary.XStream, PurchaseOrder.class, true).to("mock:reverse");
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/MarshalDomainObjectTest.java
----------------------------------------------------------------------
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 63bc534..53bebb6 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
@@ -19,8 +19,6 @@ package org.apache.camel.dataformat.xstream;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
 import org.junit.Test;
 
 /**
@@ -28,16 +26,6 @@ import org.junit.Test;
  */
 public class MarshalDomainObjectTest extends CamelTestSupport {
 
-    @BeforeClass
-    public static void setup() {
-        XStreamTestUtils.setPermissionSystemProperty("");
-    }
-
-    @AfterClass
-    public static void cleanup() {
-        XStreamTestUtils.revertPermissionSystemProperty();
-    }
-
     @Test
     public void testMarshalDomainObject() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
@@ -96,12 +84,12 @@ public class MarshalDomainObjectTest extends CamelTestSupport {
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("direct:in").marshal().xstream().to("mock:result");
+                from("direct:in").marshal().xstream(PurchaseOrder.class).to("mock:result");
 
                 // just used for helping to marshal
-                from("direct:marshal").marshal().xstream("UTF-8");
+                from("direct:marshal").marshal().xstream("UTF-8", PurchaseOrder.class);
 
-                from("direct:reverse").unmarshal().xstream("UTF-8").to("mock:reverse");
+                from("direct:reverse").unmarshal().xstream("UTF-8", PurchaseOrder.class).to("mock:reverse");
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/UnmarshalThenMarshalJSONTest.java
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/UnmarshalThenMarshalJSONTest.java b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/UnmarshalThenMarshalJSONTest.java
index 53ad1e6..1dd9d12 100644
--- a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/UnmarshalThenMarshalJSONTest.java
+++ b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/UnmarshalThenMarshalJSONTest.java
@@ -19,19 +19,20 @@ package org.apache.camel.dataformat.xstream;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.dataformat.JsonLibrary;
 
 public class UnmarshalThenMarshalJSONTest extends UnmarshalThenMarshalTest {
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
                 from("direct:start").
-                        marshal().json().
+                        marshal().json(JsonLibrary.XStream, PurchaseOrder.class).
                         process(new Processor() {
                             public void process(Exchange exchange) throws Exception {
                                 log.debug("marshalled: " + exchange.getIn().getBody(String.class));
                             }
                         }).
-                        unmarshal().json().
+                        unmarshal().json(JsonLibrary.XStream, PurchaseOrder.class).
                         to("mock:result");
             }
         };

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/UnmarshalThenMarshalTest.java
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/UnmarshalThenMarshalTest.java b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/UnmarshalThenMarshalTest.java
index 6e936a5..a5e26bb 100644
--- a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/UnmarshalThenMarshalTest.java
+++ b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/UnmarshalThenMarshalTest.java
@@ -23,8 +23,6 @@ import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
 import org.junit.Test;
 
 /**
@@ -32,16 +30,6 @@ import org.junit.Test;
  */
 public class UnmarshalThenMarshalTest extends CamelTestSupport {
     
-    @BeforeClass
-    public static void setup() {
-        XStreamTestUtils.setPermissionSystemProperty("");
-    }
-
-    @AfterClass
-    public static void cleanup() {
-        XStreamTestUtils.revertPermissionSystemProperty();
-    }
-
     @Test
     public void testSendXmlAndUnmarshal() throws Exception {
 
@@ -69,13 +57,13 @@ public class UnmarshalThenMarshalTest extends CamelTestSupport {
         return new RouteBuilder() {
             public void configure() {
                 from("direct:start").
-                        marshal().xstream().
+                        marshal().xstream(PurchaseOrder.class).
                         process(new Processor() {
                             public void process(Exchange exchange) throws Exception {
                                 log.debug("marshalled: " + exchange.getIn().getBody(String.class));
                             }
                         }).
-                        unmarshal().xstream().
+                        unmarshal().xstream(PurchaseOrder.class).
                         to("mock:result");
             }
         };

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConcurrencyTest.java
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConcurrencyTest.java b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConcurrencyTest.java
index b0e6aa2..1f08626 100644
--- a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConcurrencyTest.java
+++ b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConcurrencyTest.java
@@ -22,8 +22,6 @@ import java.util.concurrent.Executors;
 
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
 import org.junit.Test;
 
 /**
@@ -31,16 +29,6 @@ import org.junit.Test;
  */
 public class XStreamConcurrencyTest extends CamelTestSupport {
 
-    @BeforeClass
-    public static void setup() {
-        XStreamTestUtils.setPermissionSystemProperty("");
-    }
-
-    @AfterClass
-    public static void cleanup() {
-        XStreamTestUtils.revertPermissionSystemProperty();
-    }
-
     @Test
     public void testNoConcurrentProducers() throws Exception {
         doSendMessages(1, 1);
@@ -79,11 +67,11 @@ public class XStreamConcurrencyTest extends CamelTestSupport {
         return new RouteBuilder() {
             public void configure() {
                 from("direct:start").
-                        marshal().xstream().
+                        marshal().xstream(PurchaseOrder.class).
                         to("direct:marshalled");
 
                 from("direct:marshalled").
-                        unmarshal().xstream().
+                        unmarshal().xstream(PurchaseOrder.class).
                         to("mock:result");
             }
         };

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamConfigurationTest.java
----------------------------------------------------------------------
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 b411abe..5fc8858 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
@@ -28,13 +28,10 @@ import com.thoughtworks.xstream.converters.UnmarshallingContext;
 import com.thoughtworks.xstream.io.HierarchicalStreamReader;
 import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
 import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
-
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.model.dataformat.XStreamDataFormat;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
 import org.junit.Test;
 
 /**
@@ -45,16 +42,6 @@ public class XStreamConfigurationTest extends CamelTestSupport {
     private static volatile boolean constructorInjected;
     private static volatile boolean methodInjected;
     
-    @BeforeClass
-    public static void setup() {
-        XStreamTestUtils.setPermissionSystemProperty("");
-    }
-
-    @AfterClass
-    public static void cleanup() {
-        XStreamTestUtils.revertPermissionSystemProperty();
-    }
-
     @Override
     public void setUp() throws Exception {
         super.setUp();
@@ -152,6 +139,7 @@ public class XStreamConfigurationTest extends CamelTestSupport {
                 Map<String, String> aliases = new HashMap<String, String>();
                 aliases.put("purchase-order", PurchaseOrder.class.getName());
                 xstreamDefinition.setAliases(aliases);
+                xstreamDefinition.setPermissions(PurchaseOrder.class, PurchaseHistory.class);
 
                 List<String> converters = new ArrayList<String>();
                 converters.add(PurchaseOrderConverter.class.getName());
@@ -172,6 +160,7 @@ public class XStreamConfigurationTest extends CamelTestSupport {
                 aliases = new HashMap<String, String>();
                 aliases.put("purchase-order", PurchaseOrder.class.getName());
                 xstreamDefinition.setAliases(aliases);
+                xstreamDefinition.setPermissions(PurchaseOrder.class, PurchaseHistory.class);
 
                 converters = new ArrayList<String>();
                 converters.add(PurchaseOrderConverter.class.getName());
@@ -182,6 +171,8 @@ public class XStreamConfigurationTest extends CamelTestSupport {
                 org.apache.camel.dataformat.xstream.XStreamDataFormat xStreamDataFormat 
                     = new org.apache.camel.dataformat.xstream.XStreamDataFormat();
                 xStreamDataFormat.setXstreamDriver(new JsonHierarchicalStreamDriver());
+                xStreamDataFormat.setPermissions("+6org.apache.camel.dataformat.xstream.*");
+
                 from("direct:myDriver").marshal(xStreamDataFormat).to("mock:result");
             }
         };

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamTestUtils.java
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamTestUtils.java b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamTestUtils.java
index ff6cf35..7601f43 100644
--- a/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamTestUtils.java
+++ b/components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamTestUtils.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.dataformat.xstream;
 
 /**

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/components/camel-xstream/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/test/resources/log4j.properties b/components/camel-xstream/src/test/resources/log4j.properties
index 034f615..af8bba9 100644
--- a/components/camel-xstream/src/test/resources/log4j.properties
+++ b/components/camel-xstream/src/test/resources/log4j.properties
@@ -20,7 +20,7 @@
 #
 log4j.rootLogger=INFO, out
 
-log4j.logger.org.apache.activemq.spring=WARN
+#log4j.logger.org.apache.camel=DEBUG
 
 # CONSOLE appender not used by default
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
@@ -34,4 +34,3 @@ log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%
 log4j.appender.out.file=target/camel-xstream-test.log
 log4j.appender.out.append=true
 
-log4j.logger.org.apache.camel=DEBUG

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalDomainObjectJSONTest.xml
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalDomainObjectJSONTest.xml b/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalDomainObjectJSONTest.xml
index d44d587..ecc0d0f 100644
--- a/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalDomainObjectJSONTest.xml
+++ b/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalDomainObjectJSONTest.xml
@@ -27,8 +27,8 @@
         
         <!-- we define the json xstream data formats to be used (xstream is default) -->
         <dataFormats>
-            <json id="json"/>
-            <json id="pretty" prettyPrint="true"/>
+            <json id="json" unmarshalTypeName="org.apache.camel.dataformat.xstream.PurchaseOrder"/>
+            <json id="pretty" prettyPrint="true" unmarshalTypeName="org.apache.camel.dataformat.xstream.PurchaseOrder"/>
         </dataFormats>
 
         <route>

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalListTest.xml
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalListTest.xml b/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalListTest.xml
index 412f0e0..d04a881 100644
--- a/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalListTest.xml
+++ b/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalListTest.xml
@@ -27,8 +27,8 @@
         
         <!-- we define the json xstream data formats to be used (xstream is default) -->
         <dataFormats>
-            <xstream id="xstream-utf8" encoding="UTF-8"/>
-            <xstream id="xstream-default"/>
+            <xstream id="xstream-utf8" encoding="UTF-8" permissions="org.apache.camel.dataformat.stream.*"/>
+            <xstream id="xstream-default" permissions="org.apache.camel.dataformat.stream.*"/>
         </dataFormats>
 
         <route>

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalOmitFieldsTest.xml
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalOmitFieldsTest.xml b/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalOmitFieldsTest.xml
index f0a1880..a085de0 100644
--- a/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalOmitFieldsTest.xml
+++ b/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringMarshalOmitFieldsTest.xml
@@ -26,7 +26,7 @@
         
         <!-- START SNIPPET: e1 -->
         <dataFormats>
-            <xstream id="xstream">
+            <xstream id="xstream" permissions="org.apache.camel.dataformat.stream.*">
                 <!-- omit the price file from the PurchaseOrder class -->
                 <omitFields>
                     <omitField class="org.apache.camel.dataformat.xstream.PurchaseOrder">

http://git-wip-us.apache.org/repos/asf/camel/blob/b7afb376/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringXStreamConfigurationTest.xml
----------------------------------------------------------------------
diff --git a/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringXStreamConfigurationTest.xml b/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringXStreamConfigurationTest.xml
index 97a5e80..3b9deb8 100644
--- a/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringXStreamConfigurationTest.xml
+++ b/components/camel-xstream/src/test/resources/org/apache/camel/dataformat/xstream/SpringXStreamConfigurationTest.xml
@@ -44,7 +44,7 @@
                 </implicitCollections>
             </xstream>
             
-           <xstream id="xstream-json" driver="json">
+           <xstream id="xstream-json" driver="json" permissions="org.apache.camel.dataformat.xstream.*">
                 <converters>
                     <converter class="org.apache.camel.dataformat.xstream.XStreamConfigurationTest$PurchaseOrderConverter" />
                 </converters>
@@ -58,7 +58,7 @@
                 </implicitCollections>
             </xstream>
             
-            <xstream id="xstream-driver" driverRef="myDriver"/>            
+            <xstream id="xstream-driver" driverRef="myDriver" permissions="org.apache.camel.dataformat.xstream.*"/>
         </dataFormats>
 
         <route>