From f19d827a04ce76b1dd743aea49f2a1dd1c0ce0bf Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Sat, 15 Sep 2007 12:00:44 +0000 Subject: [PATCH] SWS-170 --- .../endpoint/mapping/PayloadRootQNameEndpointMapping.java | 3 ++- .../endpoint/mapping/SimpleMethodEndpointMapping.java | 4 +++- .../ws/server/endpoint/support/PayloadRootUtils.java | 6 +++++- .../ws/server/endpoint/support/PayloadRootUtilsTest.java | 4 ---- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/org/springframework/ws/server/endpoint/mapping/PayloadRootQNameEndpointMapping.java b/core/src/main/java/org/springframework/ws/server/endpoint/mapping/PayloadRootQNameEndpointMapping.java index 14aa02f6..8964a8d8 100644 --- a/core/src/main/java/org/springframework/ws/server/endpoint/mapping/PayloadRootQNameEndpointMapping.java +++ b/core/src/main/java/org/springframework/ws/server/endpoint/mapping/PayloadRootQNameEndpointMapping.java @@ -17,6 +17,7 @@ package org.springframework.ws.server.endpoint.mapping; import javax.xml.namespace.QName; +import javax.xml.stream.XMLStreamException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; @@ -52,7 +53,7 @@ public class PayloadRootQNameEndpointMapping extends AbstractQNameEndpointMappin transformerFactory = TransformerFactory.newInstance(); } - protected QName resolveQName(MessageContext messageContext) throws TransformerException { + protected QName resolveQName(MessageContext messageContext) throws TransformerException, XMLStreamException { return PayloadRootUtils.getPayloadRootQName(messageContext.getRequest().getPayloadSource(), transformerFactory); } diff --git a/core/src/main/java/org/springframework/ws/server/endpoint/mapping/SimpleMethodEndpointMapping.java b/core/src/main/java/org/springframework/ws/server/endpoint/mapping/SimpleMethodEndpointMapping.java index d7264c80..ff00e639 100644 --- a/core/src/main/java/org/springframework/ws/server/endpoint/mapping/SimpleMethodEndpointMapping.java +++ b/core/src/main/java/org/springframework/ws/server/endpoint/mapping/SimpleMethodEndpointMapping.java @@ -18,6 +18,7 @@ package org.springframework.ws.server.endpoint.mapping; import java.lang.reflect.Method; import javax.xml.namespace.QName; +import javax.xml.stream.XMLStreamException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; @@ -127,7 +128,8 @@ public class SimpleMethodEndpointMapping extends AbstractMethodEndpointMapping i } /** Returns the local part of the payload root element of the request. */ - protected String getLookupKeyForMessage(MessageContext messageContext) throws TransformerException { + protected String getLookupKeyForMessage(MessageContext messageContext) + throws TransformerException, XMLStreamException { WebServiceMessage request = messageContext.getRequest(); QName rootQName = PayloadRootUtils.getPayloadRootQName(request.getPayloadSource(), transformerFactory); return rootQName.getLocalPart(); diff --git a/core/src/main/java/org/springframework/ws/server/endpoint/support/PayloadRootUtils.java b/core/src/main/java/org/springframework/ws/server/endpoint/support/PayloadRootUtils.java index fd21fced..e4812508 100644 --- a/core/src/main/java/org/springframework/ws/server/endpoint/support/PayloadRootUtils.java +++ b/core/src/main/java/org/springframework/ws/server/endpoint/support/PayloadRootUtils.java @@ -18,6 +18,7 @@ package org.springframework.ws.server.endpoint.support; import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamConstants; +import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.transform.Source; import javax.xml.transform.Transformer; @@ -51,7 +52,7 @@ public abstract class PayloadRootUtils { * @return the root element */ public static QName getPayloadRootQName(Source source, TransformerFactory transformerFactory) - throws TransformerException { + throws TransformerException, XMLStreamException { if (source instanceof DOMSource) { DOMSource domSource = (DOMSource) source; Node node = domSource.getNode(); @@ -67,6 +68,9 @@ public abstract class PayloadRootUtils { StaxSource staxSource = (StaxSource) source; if (staxSource.getXMLStreamReader() != null) { XMLStreamReader streamReader = staxSource.getXMLStreamReader(); + if (streamReader.getEventType() == XMLStreamConstants.START_DOCUMENT) { + streamReader.nextTag(); + } if (streamReader.getEventType() == XMLStreamConstants.START_ELEMENT || streamReader.getEventType() == XMLStreamConstants.END_ELEMENT) { return streamReader.getName(); diff --git a/core/src/test/java/org/springframework/ws/server/endpoint/support/PayloadRootUtilsTest.java b/core/src/test/java/org/springframework/ws/server/endpoint/support/PayloadRootUtilsTest.java index 3f960e6d..6c522765 100644 --- a/core/src/test/java/org/springframework/ws/server/endpoint/support/PayloadRootUtilsTest.java +++ b/core/src/test/java/org/springframework/ws/server/endpoint/support/PayloadRootUtilsTest.java @@ -21,7 +21,6 @@ import javax.xml.namespace.QName; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.stream.XMLInputFactory; -import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamReader; import javax.xml.transform.Source; import javax.xml.transform.TransformerFactory; @@ -55,9 +54,6 @@ public class PayloadRootUtilsTest extends TestCase { String contents = ""; XMLInputFactory inputFactory = XMLInputFactory.newInstance(); XMLStreamReader streamReader = inputFactory.createXMLStreamReader(new StringReader(contents)); - while (streamReader.getEventType() != XMLStreamConstants.START_ELEMENT) { - streamReader.next(); - } Source source = new StaxSource(streamReader); QName qName = PayloadRootUtils.getPayloadRootQName(source, TransformerFactory.newInstance()); assertNotNull("getQNameForNode returns null", qName);