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();
- }
- }
}