diff --git a/oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java b/oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java
index f3508cf4..714fd99a 100644
--- a/oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java
+++ b/oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java
@@ -48,6 +48,7 @@ import com.thoughtworks.xstream.io.xml.XppReader;
import org.springframework.beans.propertyeditors.ClassEditor;
import org.springframework.oxm.AbstractMarshaller;
import org.springframework.oxm.XmlMappingException;
+import org.springframework.util.ObjectUtils;
import org.springframework.xml.stream.StaxEventContentHandler;
import org.springframework.xml.stream.XmlEventStreamReader;
import org.w3c.dom.Document;
@@ -85,6 +86,8 @@ public class XStreamMarshaller extends AbstractMarshaller {
private String encoding;
+ private Class[] supportedClasses;
+
/**
* Returns the encoding to be used for stream access. If this property is not set, the default encoding is used.
*
@@ -119,6 +122,16 @@ public class XStreamMarshaller extends AbstractMarshaller {
getXStream().setMode(mode);
}
+ /**
+ * Sets the classes supported by this marshaller. If this property is empty (the default), all classes are
+ * supported.
+ *
+ * @see #supports(Class)
+ */
+ public void setSupportedClasses(Class[] supportedClasses) {
+ this.supportedClasses = supportedClasses;
+ }
+
/**
* Sets the Converters or SingleValueConverters to be registered with the
* XStream instance.
@@ -206,7 +219,17 @@ public class XStreamMarshaller extends AbstractMarshaller {
}
public boolean supports(Class clazz) {
- return true;
+ if (ObjectUtils.isEmpty(supportedClasses)) {
+ return true;
+ }
+ else {
+ for (int i = 0; i < supportedClasses.length; i++) {
+ if (supportedClasses[i].isAssignableFrom(clazz)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
/**