Skip to content

Commit d28d6a9

Browse files
cowtowncoderalex-bel-apica
authored andcommitted
Minor clean up, preparing to test FasterXML#405
1 parent 2b9d930 commit d28d6a9

File tree

2 files changed

+67
-19
lines changed

2 files changed

+67
-19
lines changed

src/main/java/com/fasterxml/jackson/dataformat/xml/deser/XmlTokenStream.java

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,8 @@ public int next() throws XMLStreamException
173173
System.out.printf(" XmlTokenStream.next(): XML_START_ELEMENT '%s' %s\n", _localName, _loc());
174174
break;
175175
case XML_END_ELEMENT:
176-
System.out.printf(" XmlTokenStream.next(): XML_END_ELEMENT '%s' %s\n", _localName, _loc());
176+
// 24-May-2020, tatu: no name available for end element so do not print
177+
System.out.printf(" XmlTokenStream.next(): XML_END_ELEMENT %s\n", _loc());
177178
break;
178179
case XML_ATTRIBUTE_NAME:
179180
System.out.printf(" XmlTokenStream.next(): XML_ATTRIBUTE_NAME '%s' %s\n", _localName, _loc());
@@ -219,7 +220,15 @@ public void skipEndElement() throws IOException, XMLStreamException
219220
public int getCurrentToken() { return _currentState; }
220221

221222
public String getText() { return _textValue; }
223+
224+
/**
225+
* Accessor for local name of current named event (that is,
226+
* {@code XML_START_ELEMENT} or {@code XML_ATTRIBUTE_NAME}).
227+
*<p>
228+
* NOTE: name NOT accessible on {@code XML_END_ELEMENT}
229+
*/
222230
public String getLocalName() { return _localName; }
231+
223232
public String getNamespaceURI() { return _namespaceURI; }
224233

225234
public boolean hasXsiNil() {
@@ -509,27 +518,17 @@ private final String _getText(XMLStreamReader2 r) throws XMLStreamException
509518
/**********************************************************************
510519
*/
511520

512-
/*
513-
_xmlReader = Stax2ReaderAdapter.wrapIfNecessary(xmlReader);
514-
_currentState = XML_START_ELEMENT;
515-
_localName = _xmlReader.getLocalName();
516-
_namespaceURI = _xmlReader.getNamespaceURI();
517-
_attributeCount = _xmlReader.getAttributeCount();
518-
_formatFeatures = formatFeatures;
519-
*/
520-
521521
private final int _initStartElement() throws XMLStreamException
522522
{
523523
final String ns = _xmlReader.getNamespaceURI();
524524
final String localName = _xmlReader.getLocalName();
525525

526526
_checkXsiAttributes();
527527

528-
/* Support for virtual wrapping: in wrapping, may either
529-
* create a new wrapper scope (if in sub-tree, or matches
530-
* wrapper element itself), or implicitly close existing
531-
* scope.
532-
*/
528+
// Support for virtual wrapping: in wrapping, may either create a new
529+
// wrapper scope (if in sub-tree, or matches wrapper element itself),
530+
// or implicitly close existing scope.
531+
533532
if (_currentWrapper != null) {
534533
if (_currentWrapper.matchesWrapper(localName, ns)) {
535534
_currentWrapper = _currentWrapper.intermediateWrapper();
@@ -631,11 +630,21 @@ private final int _handleEndElement()
631630
//System.out.println(" XMLTokenStream._handleEndElement(): IMPLICIT requestRepeat of END_ELEMENT '"+_localName);
632631
} else {
633632
_currentWrapper = _currentWrapper.getParent();
633+
// 23-May-2020, tatu: Let's clear _localName since it's value is unlikely
634+
// to be correct and we may or may not be able to get real one (for
635+
// END_ELEMENT could) -- FromXmlParser does NOT use this info
636+
_localName = "";
637+
_namespaceURI = "";
638+
634639
}
640+
} else {
641+
// Not (necessarily) known, as per above, so:
642+
_localName = "";
643+
_namespaceURI = "";
635644
}
636645
return (_currentState = XML_END_ELEMENT);
637646
}
638-
647+
639648
private JsonLocation _extractLocation(XMLStreamLocation2 location)
640649
{
641650
if (location == null) { // just for impls that might pass null...
@@ -647,7 +656,6 @@ private JsonLocation _extractLocation(XMLStreamLocation2 location)
647656
location.getColumnNumber());
648657
}
649658

650-
651659
protected boolean _allWs(String str)
652660
{
653661
final int len = (str == null) ? 0 : str.length();

src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlTokenStreamTest.java renamed to src/test/java/com/fasterxml/jackson/dataformat/xml/stream/XmlTokenStreamTest.java

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.fasterxml.jackson.dataformat.xml.deser;
1+
package com.fasterxml.jackson.dataformat.xml.stream;
22

33
import java.io.*;
44

@@ -31,7 +31,10 @@ public void testSimple() throws Exception
3131
assertEquals(XmlTokenStream.XML_TEXT, tokens.next());
3232
assertEquals("abc", tokens.getText());
3333
assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next());
34+
// 23-May-2020, tatu: Not known for END_ELEMENT, alas, so:
35+
assertEquals("", tokens.getLocalName());
3436
assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next());
37+
assertEquals("", tokens.getLocalName());
3538
assertEquals(XmlTokenStream.XML_END, tokens.next());
3639
}
3740

@@ -124,5 +127,42 @@ public void testNested() throws Exception
124127
assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next());
125128
assertEquals(XmlTokenStream.XML_END, tokens.next());
126129
}
127-
130+
131+
// For [dataformat-xml#402]
132+
/* public void testMixedContent() throws Exception
133+
{
134+
String XML = "<root>first<a>123</a> and second <b>abc</b>last &amp; final</root>";
135+
XMLStreamReader sr = _staxInputFactory.createXMLStreamReader(new StringReader(XML));
136+
sr.nextTag();
137+
XmlTokenStream tokens = new XmlTokenStream(sr, XML, FromXmlParser.Feature.collectDefaults());
138+
139+
assertEquals(XmlTokenStream.XML_START_ELEMENT, tokens.getCurrentToken());
140+
assertEquals("root", tokens.getLocalName());
141+
142+
assertEquals(XmlTokenStream.XML_TEXT, tokens.next());
143+
assertEquals("first", tokens.getText());
144+
145+
assertEquals(XmlTokenStream.XML_START_ELEMENT, tokens.next());
146+
assertEquals("a", tokens.getLocalName());
147+
assertEquals(XmlTokenStream.XML_TEXT, tokens.next());
148+
assertEquals("123", tokens.getText());
149+
assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next());
150+
151+
assertEquals(XmlTokenStream.XML_TEXT, tokens.next());
152+
assertEquals(" and second ", tokens.getText());
153+
154+
assertEquals(XmlTokenStream.XML_START_ELEMENT, tokens.next());
155+
assertEquals("b", tokens.getLocalName());
156+
assertEquals(XmlTokenStream.XML_TEXT, tokens.next());
157+
assertEquals("abc", tokens.getText());
158+
assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next());
159+
160+
assertEquals(XmlTokenStream.XML_TEXT, tokens.next());
161+
assertEquals("last & final", tokens.getText());
162+
163+
assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next());
164+
assertEquals(XmlTokenStream.XML_END, tokens.next());
165+
sr.close();
166+
}
167+
*/
128168
}

0 commit comments

Comments
 (0)