diff --git a/release-notes/VERSION b/release-notes/VERSION index 8fa632010..53bf62e8d 100644 --- a/release-notes/VERSION +++ b/release-notes/VERSION @@ -8,6 +8,11 @@ Project: jackson-dataformat-xml No changes since 2.7. +2.7.7 (not yet released) + +#204: FromXMLParser nextTextValue() incorrect for attributes + (reported by frederikz@github) + 2.7.6 (23-Jul-2016) 2.7.5 (11-Jun-2016) diff --git a/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java b/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java index 43948b853..c71cd1dd7 100644 --- a/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java +++ b/src/main/java/com/fasterxml/jackson/dataformat/xml/deser/FromXmlParser.java @@ -652,7 +652,6 @@ public String nextTextValue() throws IOException _parsingContext = _parsingContext.getParent(); _namesToWrap = _parsingContext.getNamesToWrap(); break; - case XmlTokenStream.XML_ATTRIBUTE_NAME: // If there was a chance of leaf node, no more... if (_mayBeLeaf) { @@ -667,9 +666,8 @@ public String nextTextValue() throws IOException } break; case XmlTokenStream.XML_ATTRIBUTE_VALUE: - _currText = _xmlTokens.getText(); _currToken = JsonToken.VALUE_STRING; - break; + return (_currText = _xmlTokens.getText()); case XmlTokenStream.XML_TEXT: _currText = _xmlTokens.getText(); if (_mayBeLeaf) { diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/stream/XmlParserNextXxxTest.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/stream/XmlParserNextXxxTest.java new file mode 100644 index 000000000..b2ee2e9e7 --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/stream/XmlParserNextXxxTest.java @@ -0,0 +1,55 @@ +package com.fasterxml.jackson.dataformat.xml.stream; + +import java.io.*; + +import com.fasterxml.jackson.core.*; + +import com.fasterxml.jackson.dataformat.xml.XmlFactory; +import com.fasterxml.jackson.dataformat.xml.XmlTestBase; +import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser; + +public class XmlParserNextXxxTest extends XmlTestBase +{ + protected JsonFactory _jsonFactory; + protected XmlFactory _xmlFactory; + + // let's actually reuse XmlMapper to make things bit faster + @Override + public void setUp() throws Exception { + super.setUp(); + _xmlFactory = new XmlFactory(); + } + + /* + /********************************************************** + /* Unit tests + /********************************************************** + */ + + // [dataformat-xml#204] + public void testXmlAttributesWithNextTextValue() throws Exception + { + final String XML = ""; + + FromXmlParser xp = (FromXmlParser) _xmlFactory.createParser(new StringReader(XML)); + + // First: verify handling without forcing array handling: + assertToken(JsonToken.START_OBJECT, xp.nextToken()); // + assertToken(JsonToken.FIELD_NAME, xp.nextToken()); // + assertEquals("max", xp.getCurrentName()); + + assertEquals("7", xp.nextTextValue()); + + assertToken(JsonToken.FIELD_NAME, xp.nextToken()); // + assertEquals("offset", xp.getCurrentName()); + + assertEquals("offset", xp.getText()); + + assertEquals("9", xp.nextTextValue()); + + assertEquals("9", xp.getText()); + + assertToken(JsonToken.END_OBJECT, xp.nextToken()); // + xp.close(); + } +}