Skip to content

Commit 8f28a93

Browse files
committed
XStreamMarshaller lazily creates fallback XppDriver
Issue: SPR-11635
1 parent 8d8766d commit 8f28a93

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

spring-oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public class XStreamMarshaller extends AbstractMarshaller implements Initializin
124124

125125
private HierarchicalStreamDriver streamDriver;
126126

127-
private final XppDriver fallbackDriver = new XppDriver();
127+
private HierarchicalStreamDriver defaultDriver;
128128

129129
private Mapper mapper;
130130

@@ -182,6 +182,14 @@ public void setReflectionProvider(ReflectionProvider reflectionProvider) {
182182
*/
183183
public void setStreamDriver(HierarchicalStreamDriver streamDriver) {
184184
this.streamDriver = streamDriver;
185+
this.defaultDriver = streamDriver;
186+
}
187+
188+
private HierarchicalStreamDriver getDefaultDriver() {
189+
if (this.defaultDriver == null) {
190+
this.defaultDriver = new XppDriver();
191+
}
192+
return this.defaultDriver;
185193
}
186194

187195
/**
@@ -389,7 +397,7 @@ protected XStream buildXStream() {
389397
protected XStream constructXStream() {
390398
// The referenced XStream constructor has been deprecated as of 1.4.5.
391399
// We're preserving this call for broader XStream 1.4.x compatibility.
392-
return new XStream(this.reflectionProvider, this.streamDriver,
400+
return new XStream(this.reflectionProvider, getDefaultDriver(),
393401
this.beanClassLoader, this.mapper, this.converterLookup, this.converterRegistry) {
394402
@Override
395403
protected MapperWrapper wrapMapper(MapperWrapper next) {
@@ -545,7 +553,7 @@ else if (entry.getValue() instanceof List) {
545553
xstream.processAnnotations(this.annotatedClasses);
546554
}
547555
if (this.autodetectAnnotations) {
548-
xstream.autodetectAnnotations(this.autodetectAnnotations);
556+
xstream.autodetectAnnotations(true);
549557
}
550558
}
551559

@@ -776,12 +784,7 @@ public Object unmarshalReader(Reader reader) throws XmlMappingException, IOExcep
776784
}
777785

778786
public Object unmarshalReader(Reader reader, DataHolder dataHolder) throws XmlMappingException, IOException {
779-
if (this.streamDriver != null) {
780-
return doUnmarshal(this.streamDriver.createReader(reader), dataHolder);
781-
}
782-
else {
783-
return doUnmarshal(this.fallbackDriver.createReader(reader), dataHolder);
784-
}
787+
return doUnmarshal(getDefaultDriver().createReader(reader), dataHolder);
785788
}
786789

787790
/**

spring-oxm/src/test/java/org/springframework/oxm/xstream/XStreamUnmarshallerTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public class XStreamUnmarshallerTests {
4949
private XStreamMarshaller unmarshaller;
5050

5151
@Before
52-
public void creteUnmarshaller() throws Exception {
52+
public void createUnmarshaller() throws Exception {
5353
unmarshaller = new XStreamMarshaller();
5454
Map<String, Class<?>> aliases = new HashMap<String, Class<?>>();
5555
aliases.put("flight", Flight.class);

0 commit comments

Comments
 (0)