diff --git a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapBody.java b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapBody.java index 1eff994b..396cf2bf 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapBody.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/soap/axiom/AxiomSoapBody.java @@ -16,6 +16,7 @@ package org.springframework.ws.soap.axiom; +import javax.xml.namespace.QName; import javax.xml.transform.Result; import javax.xml.transform.Source; @@ -71,7 +72,11 @@ abstract class AxiomSoapBody extends AxiomSoapElement implements SoapBody { public void setStreamingPayload(StreamingPayload payload) { Assert.notNull(payload, "'payload' must not be null"); OMDataSource dataSource = new StreamingOMDataSource(payload); - OMElement payloadElement = getAxiomFactory().createOMElement(dataSource, payload.getName()); + SOAPFactory factory = getAxiomFactory(); + QName name = payload.getName(); + // Ignore the prefix; only the namespace URI and local name are significant + OMElement payloadElement = factory.createOMElement(dataSource, name.getLocalPart(), + factory.createOMNamespace(name.getNamespaceURI(), null)); SOAPBody soapBody = getAxiomBody(); AxiomUtils.removeContents(soapBody); diff --git a/spring-ws-core/src/main/java/org/springframework/ws/stream/StreamingPayload.java b/spring-ws-core/src/main/java/org/springframework/ws/stream/StreamingPayload.java index d0436966..5e625eac 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/stream/StreamingPayload.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/stream/StreamingPayload.java @@ -30,7 +30,9 @@ import javax.xml.stream.XMLStreamWriter; public interface StreamingPayload { /** - * Returns the qualified name of the payload. + * Returns the qualified name of the payload. Only the namespace URI and local part of the + * returned qualified name are significant; they must match the name of the root element + * produced by {@link #writeTo(XMLStreamWriter)}. * * @return the qualified name */ diff --git a/spring-ws-core/src/test/java/org/springframework/ws/soap/AbstractSoapMessageTestCase.java b/spring-ws-core/src/test/java/org/springframework/ws/soap/AbstractSoapMessageTestCase.java index d0f5e8d2..f317a0ea 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/soap/AbstractSoapMessageTestCase.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/soap/AbstractSoapMessageTestCase.java @@ -102,14 +102,15 @@ public abstract class AbstractSoapMessageTestCase extends AbstractMimeMessageTes } StreamingWebServiceMessage streamingMessage = (StreamingWebServiceMessage) soapMessage; - final QName name = new QName("http://springframework.org", "root", "prefix"); + final QName name = new QName("http://springframework.org", "root", ""); streamingMessage.setStreamingPayload(new StreamingPayload() { public QName getName() { return name; } public void writeTo(XMLStreamWriter streamWriter) throws XMLStreamException { - streamWriter.writeStartElement(name.getPrefix(), name.getLocalPart(), name.getNamespaceURI()); + // Use a prefix that is different from the one reported by getName() + streamWriter.writeStartElement("prefix", name.getLocalPart(), name.getNamespaceURI()); streamWriter.writeNamespace("prefix", name.getNamespaceURI()); streamWriter.writeStartElement(name.getNamespaceURI(), "child"); streamWriter.writeCharacters("Foo");