XMLEventReader.getElementText() properly checks for start element

Issue: SPR-17233
This commit is contained in:
Juergen Hoeller
2018-09-07 12:56:15 +02:00
parent 8d45e3e7ef
commit 84ec382201
3 changed files with 115 additions and 83 deletions

View File

@@ -16,9 +16,6 @@
package org.springframework.util.xml;
import static org.junit.Assert.assertThat;
import static org.xmlunit.matchers.CompareMatcher.isSimilarTo;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
@@ -32,8 +29,13 @@ import javax.xml.stream.events.XMLEvent;
import org.junit.Test;
import static javax.xml.stream.XMLStreamConstants.*;
import static org.junit.Assert.*;
import static org.xmlunit.matchers.CompareMatcher.*;
/**
* @author Arjen Poutsma
* @author Andrzej Hołowko
*/
public class ListBasedXMLEventReaderTests {
@@ -41,6 +43,7 @@ public class ListBasedXMLEventReaderTests {
private final XMLOutputFactory outputFactory = XMLOutputFactory.newFactory();
@Test
public void standard() throws Exception {
String xml = "<foo><bar>baz</bar></foo>";
@@ -55,9 +58,42 @@ public class ListBasedXMLEventReaderTests {
assertThat(resultWriter.toString(), isSimilarTo(xml));
}
@Test
public void testGetElementText() throws Exception {
String xml = "<foo><bar>baz</bar></foo>";
List<XMLEvent> events = readEvents(xml);
ListBasedXMLEventReader reader = new ListBasedXMLEventReader(events);
assertEquals(START_DOCUMENT, reader.nextEvent().getEventType());
assertEquals(START_ELEMENT, reader.nextEvent().getEventType());
assertEquals(START_ELEMENT, reader.nextEvent().getEventType());
assertEquals("baz", reader.getElementText());
assertEquals(END_ELEMENT, reader.nextEvent().getEventType());
assertEquals(END_DOCUMENT, reader.nextEvent().getEventType());
}
@Test
public void testGetElementTextThrowsExceptionAtWrongPosition() throws Exception {
String xml = "<foo><bar>baz</bar></foo>";
List<XMLEvent> events = readEvents(xml);
ListBasedXMLEventReader reader = new ListBasedXMLEventReader(events);
assertEquals(START_DOCUMENT, reader.nextEvent().getEventType());
try {
reader.getElementText();
fail("Should have thrown XMLStreamException");
}
catch (XMLStreamException ex) {
// expected
assertTrue(ex.getMessage().startsWith("Not at START_ELEMENT"));
}
}
private List<XMLEvent> readEvents(String xml) throws XMLStreamException {
XMLEventReader reader =
this.inputFactory.createXMLEventReader(new StringReader(xml));
XMLEventReader reader = this.inputFactory.createXMLEventReader(new StringReader(xml));
List<XMLEvent> events = new ArrayList<>();
while (reader.hasNext()) {
events.add(reader.nextEvent());