SPR-7620 - StaxEventContentHandler does not set Location for StartDocument event

This commit is contained in:
Arjen Poutsma 2010-10-12 09:50:39 +00:00
parent 35da7bdb44
commit 1f296403da
1 changed files with 25 additions and 35 deletions

View File

@ -50,8 +50,6 @@ class StaxEventContentHandler extends AbstractStaxContentHandler {
private final XMLEventConsumer eventConsumer; private final XMLEventConsumer eventConsumer;
private Locator locator;
/** /**
* Constructs a new instance of the <code>StaxEventContentHandler</code> that writes to the given * Constructs a new instance of the <code>StaxEventContentHandler</code> that writes to the given
* <code>XMLEventConsumer</code>. A default <code>XMLEventFactory</code> will be created. * <code>XMLEventConsumer</code>. A default <code>XMLEventFactory</code> will be created.
@ -76,8 +74,31 @@ class StaxEventContentHandler extends AbstractStaxContentHandler {
eventConsumer = consumer; eventConsumer = consumer;
} }
public void setDocumentLocator(Locator locator) { public void setDocumentLocator(final Locator locator) {
this.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 @Override
@ -120,9 +141,6 @@ class StaxEventContentHandler extends AbstractStaxContentHandler {
} }
private void consumeEvent(XMLEvent event) throws XMLStreamException { private void consumeEvent(XMLEvent event) throws XMLStreamException {
if (locator != null) {
eventFactory.setLocation(new SaxLocation(locator));
}
eventConsumer.add(event); eventConsumer.add(event);
} }
@ -164,32 +182,4 @@ class StaxEventContentHandler extends AbstractStaxContentHandler {
protected void skippedEntityInternal(String name) throws XMLStreamException { 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();
}
}
} }