diff --git a/spring-oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java
index 2b2b7ee5f4..6a33cf2c5f 100644
--- a/spring-oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java
+++ b/spring-oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java
@@ -425,7 +425,12 @@ public class XStreamMarshaller extends AbstractMarshaller implements Initializin
@Override
protected void marshalOutputStream(Object graph, OutputStream outputStream) throws XmlMappingException, IOException {
- marshalWriter(graph, new OutputStreamWriter(outputStream, this.encoding));
+ if (this.streamDriver != null) {
+ marshal(graph, this.streamDriver.createWriter(outputStream));
+ }
+ else {
+ marshalWriter(graph, new OutputStreamWriter(outputStream, this.encoding));
+ }
}
@Override
@@ -483,12 +488,7 @@ public class XStreamMarshaller extends AbstractMarshaller implements Initializin
else {
throw new IllegalArgumentException("DOMSource contains neither Document nor Element");
}
- try {
- return getXStream().unmarshal(streamReader);
- }
- catch (Exception ex) {
- throw convertXStreamException(ex, false);
- }
+ return unmarshal(streamReader);
}
@Override
@@ -504,36 +504,27 @@ public class XStreamMarshaller extends AbstractMarshaller implements Initializin
@Override
protected Object unmarshalXmlStreamReader(XMLStreamReader streamReader) throws XmlMappingException {
- try {
- HierarchicalStreamReader hierarchicalStreamReader =
- new StaxReader(new QNameMap(),streamReader);
- return getXStream().unmarshal(hierarchicalStreamReader);
- }
- catch (Exception ex) {
- throw convertXStreamException(ex, false);
- }
+ return unmarshal(new StaxReader(new QNameMap(), streamReader));
}
@Override
protected Object unmarshalInputStream(InputStream inputStream) throws XmlMappingException, IOException {
- return unmarshalReader(new InputStreamReader(inputStream, this.encoding));
+ if (this.streamDriver != null) {
+ return unmarshal(this.streamDriver.createReader(inputStream));
+ }
+ else {
+ return unmarshalReader(new InputStreamReader(inputStream, this.encoding));
+ }
}
@Override
protected Object unmarshalReader(Reader reader) throws XmlMappingException, IOException {
- try {
- HierarchicalStreamReader streamReader;
- if (this.streamDriver != null) {
- streamReader = this.streamDriver.createReader(reader);
- }
- else {
- streamReader = new XppReader(reader);
- }
- return getXStream().unmarshal(streamReader);
- }
- catch (Exception ex) {
- throw convertXStreamException(ex, false);
- }
+ if (this.streamDriver != null) {
+ return unmarshal(this.streamDriver.createReader(reader));
+ }
+ else {
+ return unmarshal(new XppReader(reader));
+ }
}
@Override
@@ -544,7 +535,21 @@ public class XStreamMarshaller extends AbstractMarshaller implements Initializin
"XStreamMarshaller does not support unmarshalling using SAX XMLReaders");
}
- /**
+ /**
+ * Unmarshals the given graph to the given XStream HierarchicalStreamWriter.
+ * Converts exceptions using {@link #convertXStreamException}.
+ */
+ private Object unmarshal(HierarchicalStreamReader streamReader) {
+ try {
+ return getXStream().unmarshal(streamReader);
+ }
+ catch (Exception ex) {
+ throw convertXStreamException(ex, false);
+ }
+ }
+
+
+ /**
* Convert the given XStream exception to an appropriate exception from the
* org.springframework.oxm
hierarchy.
*
A boolean flag is used to indicate whether this exception occurs during marshalling or