fix(serialize-xml): Actually report next value (not name) for array elements in XmlReader
This commit is contained in:
parent
bf5506d1d0
commit
958a1316af
|
@ -89,7 +89,7 @@ public class XmlReader extends SerializeReader<IOException, XmlReader> implement
|
|||
if (p == PEEKED_NONE) {
|
||||
p = doPeek();
|
||||
}
|
||||
if (p != PEEKED_BEGIN_OBJECT) throw unexpectedTokenError("an array");
|
||||
if (p != PEEKED_BEGIN_ARRAY && !(p == PEEKED_NAME_BEGIN_ARRAY && stack[stackSize - 1] != WrapperScope.OBJECT)) throw unexpectedTokenError("an array");
|
||||
nextTagName = nextTagNamePath = null;
|
||||
push(WrapperScope.ARRAY);
|
||||
pathIndices[stackSize - 1] = 0;
|
||||
|
@ -118,7 +118,8 @@ public class XmlReader extends SerializeReader<IOException, XmlReader> implement
|
|||
if (p == PEEKED_NONE) {
|
||||
p = doPeek();
|
||||
}
|
||||
if (p != PEEKED_BEGIN_OBJECT) throw unexpectedTokenError("an object");
|
||||
if (p != PEEKED_BEGIN_OBJECT && !(p == PEEKED_NAME_BEGIN_OBJECT && stack[stackSize - 1] != WrapperScope.OBJECT))
|
||||
throw unexpectedTokenError("an object");
|
||||
nextTagName = nextTagNamePath = null;
|
||||
push(WrapperScope.OBJECT);
|
||||
peeked = PEEKED_NONE;
|
||||
|
@ -152,7 +153,11 @@ public class XmlReader extends SerializeReader<IOException, XmlReader> implement
|
|||
p = doPeek();
|
||||
}
|
||||
return switch (p) {
|
||||
case PEEKED_NAME_BEGIN_ARRAY, PEEKED_NAME_BEGIN_OBJECT, PEEKED_NAME_ATT, PEEKED_NAME_TAG, PEEKED_NAME_VIRTUAL_TEXT, PEEKED_NAME_VIRTUAL_CDATA -> Token.NAME;
|
||||
case PEEKED_NAME_ATT, PEEKED_NAME_TAG -> Token.NAME;
|
||||
case PEEKED_NAME_VIRTUAL_CDATA -> stack[stackSize - 1] == WrapperScope.OBJECT ? Token.NAME : heuristics.guessValueKind(getPath(), XmlToken.CDATA);
|
||||
case PEEKED_NAME_VIRTUAL_TEXT -> stack[stackSize - 1] == WrapperScope.OBJECT ? Token.NAME : heuristics.guessValueKind(getPath(), XmlToken.TEXT);
|
||||
case PEEKED_NAME_BEGIN_OBJECT -> stack[stackSize - 1] == WrapperScope.OBJECT ? Token.NAME : Token.BEGIN_OBJECT;
|
||||
case PEEKED_NAME_BEGIN_ARRAY -> stack[stackSize - 1] == WrapperScope.OBJECT ? Token.NAME : Token.BEGIN_ARRAY;
|
||||
case PEEKED_BEGIN_OBJECT -> Token.BEGIN_OBJECT;
|
||||
case PEEKED_BEGIN_ARRAY -> Token.BEGIN_ARRAY;
|
||||
case PEEKED_END_OBJECT -> Token.END_OBJECT;
|
||||
|
@ -239,7 +244,7 @@ public class XmlReader extends SerializeReader<IOException, XmlReader> implement
|
|||
stackSize--;
|
||||
yield PEEKED_END_OBJECT;
|
||||
}
|
||||
case WrapperScope.OBJECT_VALUE_WRAPPER -> {
|
||||
case WrapperScope.OBJECT_VALUE_WRAPPER_USED -> {
|
||||
stackSize--;
|
||||
reader.endTag();
|
||||
yield doPeek();
|
||||
|
@ -270,16 +275,20 @@ public class XmlReader extends SerializeReader<IOException, XmlReader> implement
|
|||
}
|
||||
case PEEKED_NAME_VIRTUAL_TEXT -> {
|
||||
String result = heuristics.guessElementName(reader.getPath(), XmlToken.TEXT);
|
||||
peeked = PEEKED_NONE;
|
||||
peeked = PEEKED_TEXT;
|
||||
yield result;
|
||||
}
|
||||
case PEEKED_NAME_VIRTUAL_CDATA -> {
|
||||
String result = heuristics.guessElementName(reader.getPath(), XmlToken.CDATA);
|
||||
peeked = PEEKED_NONE;
|
||||
peeked = PEEKED_CDATA;
|
||||
yield result;
|
||||
}
|
||||
case PEEKED_NAME_BEGIN_OBJECT, PEEKED_NAME_BEGIN_ARRAY -> {
|
||||
peeked = PEEKED_NONE;
|
||||
case PEEKED_NAME_BEGIN_OBJECT -> {
|
||||
peeked = PEEKED_BEGIN_OBJECT;
|
||||
yield nextTagName;
|
||||
}
|
||||
case PEEKED_NAME_BEGIN_ARRAY -> {
|
||||
peeked = PEEKED_BEGIN_ARRAY;
|
||||
yield nextTagName;
|
||||
}
|
||||
default -> throw unexpectedTokenError("a name");
|
||||
|
@ -342,6 +351,18 @@ public class XmlReader extends SerializeReader<IOException, XmlReader> implement
|
|||
case PEEKED_ATT_VALUE -> reader.nextAttributeValue();
|
||||
case PEEKED_TEXT -> reader.nextText();
|
||||
case PEEKED_CDATA -> reader.nextCData();
|
||||
case PEEKED_NAME_VIRTUAL_TEXT -> {
|
||||
if (stack[stackSize - 1] == WrapperScope.OBJECT) {
|
||||
throw unexpectedTokenError(kind);
|
||||
}
|
||||
yield reader.nextText();
|
||||
}
|
||||
case PEEKED_NAME_VIRTUAL_CDATA -> {
|
||||
if (stack[stackSize - 1] == WrapperScope.OBJECT) {
|
||||
throw unexpectedTokenError(kind);
|
||||
}
|
||||
yield reader.nextCData();
|
||||
}
|
||||
default -> throw unexpectedTokenError(kind);
|
||||
};
|
||||
peeked = PEEKED_NONE;
|
||||
|
|
Loading…
Reference in New Issue