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 8b20da0c90..c34de879a8 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 @@ -57,6 +57,7 @@ import com.thoughtworks.xstream.io.xml.DomReader; import com.thoughtworks.xstream.io.xml.DomWriter; import com.thoughtworks.xstream.io.xml.QNameMap; import com.thoughtworks.xstream.io.xml.SaxWriter; +import com.thoughtworks.xstream.io.xml.StaxDriver; import com.thoughtworks.xstream.io.xml.StaxReader; import com.thoughtworks.xstream.io.xml.StaxWriter; import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder; @@ -694,13 +695,14 @@ public class XStreamMarshaller extends AbstractMarshaller implements BeanClassLo @Override protected void marshalXmlStreamWriter(Object graph, XMLStreamWriter streamWriter) throws XmlMappingException { try { - final StaxWriter writer; - if( streamDriver instanceof StaxDriver){ - writer = ((StaxDriver)streamDriver).createStaxWriter(streamWriter); - }else{ - writer = new StaxWriter( new QNameMap(),streamWriter, this.nameCoder); + StaxWriter writer; + if (this.streamDriver instanceof StaxDriver) { + writer = ((StaxDriver) this.streamDriver).createStaxWriter(streamWriter); } - doMarshal(graph,writer, null); + else { + writer = new StaxWriter(new QNameMap(), streamWriter, this.nameCoder); + } + doMarshal(graph, writer, null); } catch (XMLStreamException ex) { throw convertXStreamException(ex, true); diff --git a/spring-oxm/src/test/java/org/springframework/oxm/xstream/XStreamMarshallerTests.java b/spring-oxm/src/test/java/org/springframework/oxm/xstream/XStreamMarshallerTests.java index b408c6611b..2a85c254d5 100644 --- a/spring-oxm/src/test/java/org/springframework/oxm/xstream/XStreamMarshallerTests.java +++ b/spring-oxm/src/test/java/org/springframework/oxm/xstream/XStreamMarshallerTests.java @@ -43,6 +43,8 @@ import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver; import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver; import com.thoughtworks.xstream.io.json.JsonWriter; +import com.thoughtworks.xstream.io.xml.QNameMap; +import com.thoughtworks.xstream.io.xml.StaxDriver; import com.thoughtworks.xstream.security.AnyTypePermission; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -176,6 +178,23 @@ class XStreamMarshallerTests { assertThat(XmlContent.from(writer)).isSimilarTo(EXPECTED_STRING); } + @Test + void marshalStaxResultXMLStreamWriterDefaultNamespace() throws Exception { + QNameMap map = new QNameMap(); + map.setDefaultNamespace("https://example.com"); + map.setDefaultPrefix("spr"); + StaxDriver driver = new StaxDriver(map); + marshaller.setStreamDriver(driver); + + XMLOutputFactory outputFactory = XMLOutputFactory.newInstance(); + StringWriter writer = new StringWriter(); + XMLStreamWriter streamWriter = outputFactory.createXMLStreamWriter(writer); + Result result = StaxUtils.createStaxResult(streamWriter); + marshaller.marshal(flight, result); + assertThat(XmlContent.from(writer)).isSimilarTo( + "42"); + } + @Test void marshalStaxResultXMLEventWriter() throws Exception { XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();