From 1f296403da01a57deca04e21f58dca42ac61ef97 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Tue, 12 Oct 2010 09:50:39 +0000 Subject: [PATCH] SPR-7620 - StaxEventContentHandler does not set Location for StartDocument event --- .../util/xml/StaxEventContentHandler.java | 60 ++++++++----------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/org.springframework.core/src/main/java/org/springframework/util/xml/StaxEventContentHandler.java b/org.springframework.core/src/main/java/org/springframework/util/xml/StaxEventContentHandler.java index dee0cce42bb..f247453458a 100644 --- a/org.springframework.core/src/main/java/org/springframework/util/xml/StaxEventContentHandler.java +++ b/org.springframework.core/src/main/java/org/springframework/util/xml/StaxEventContentHandler.java @@ -50,8 +50,6 @@ class StaxEventContentHandler extends AbstractStaxContentHandler { private final XMLEventConsumer eventConsumer; - private Locator locator; - /** * Constructs a new instance of the StaxEventContentHandler that writes to the given * XMLEventConsumer. A default XMLEventFactory will be created. @@ -76,8 +74,31 @@ class StaxEventContentHandler extends AbstractStaxContentHandler { eventConsumer = consumer; } - public void setDocumentLocator(Locator locator) { - this.locator = locator; + public void setDocumentLocator(final Locator locator) { + if (locator != null) { + eventFactory.setLocation(new Location() { + + public int getLineNumber() { + return locator.getLineNumber(); + } + + public int getColumnNumber() { + return locator.getColumnNumber(); + } + + public int getCharacterOffset() { + return -1; + } + + public String getPublicId() { + return locator.getPublicId(); + } + + public String getSystemId() { + return locator.getSystemId(); + } + }); + } } @Override @@ -120,9 +141,6 @@ class StaxEventContentHandler extends AbstractStaxContentHandler { } private void consumeEvent(XMLEvent event) throws XMLStreamException { - if (locator != null) { - eventFactory.setLocation(new SaxLocation(locator)); - } eventConsumer.add(event); } @@ -164,32 +182,4 @@ class StaxEventContentHandler extends AbstractStaxContentHandler { protected void skippedEntityInternal(String name) throws XMLStreamException { } - private static class SaxLocation implements Location { - - private Locator locator; - - private SaxLocation(Locator locator) { - this.locator = locator; - } - - public int getLineNumber() { - return locator.getLineNumber(); - } - - public int getColumnNumber() { - return locator.getColumnNumber(); - } - - public int getCharacterOffset() { - return -1; - } - - public String getPublicId() { - return locator.getPublicId(); - } - - public String getSystemId() { - return locator.getSystemId(); - } - } }