fix(serialize-xml): name encoding system for wrapper to support names unusable in XML
This commit is contained in:
parent
b8d9b52ab5
commit
615ff12c27
|
@ -0,0 +1,18 @@
|
||||||
|
package io.gitlab.jfronny.commons.serialize.xml.wrapper;
|
||||||
|
|
||||||
|
public interface NameEncoding {
|
||||||
|
String encode(String name);
|
||||||
|
String decode(String name);
|
||||||
|
|
||||||
|
NameEncoding DEFAULT = new NameEncoding() {
|
||||||
|
@Override
|
||||||
|
public String encode(String name) {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String decode(String name) {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
|
@ -38,6 +38,7 @@ public class XmlReader extends SerializeReader<IOException, XmlReader> implement
|
||||||
private String[] pathNames = new String[32];
|
private String[] pathNames = new String[32];
|
||||||
private int[] pathIndices = new int[32];
|
private int[] pathIndices = new int[32];
|
||||||
private Heuristics heuristics = Heuristics.DEFAULT;
|
private Heuristics heuristics = Heuristics.DEFAULT;
|
||||||
|
private NameEncoding nameEncoding = NameEncoding.DEFAULT;
|
||||||
private String nextTagNamePath = null;
|
private String nextTagNamePath = null;
|
||||||
private String nextTagName = null;
|
private String nextTagName = null;
|
||||||
|
|
||||||
|
@ -83,6 +84,15 @@ public class XmlReader extends SerializeReader<IOException, XmlReader> implement
|
||||||
return heuristics;
|
return heuristics;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public XmlReader setNameEncoding(NameEncoding nameEncoding) {
|
||||||
|
this.nameEncoding = Objects.requireNonNull(nameEncoding);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NameEncoding getNameEncoding() {
|
||||||
|
return nameEncoding;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public XmlReader beginArray() throws IOException {
|
public XmlReader beginArray() throws IOException {
|
||||||
int p = peeked;
|
int p = peeked;
|
||||||
|
@ -263,15 +273,15 @@ public class XmlReader extends SerializeReader<IOException, XmlReader> implement
|
||||||
}
|
}
|
||||||
return switch (p) {
|
return switch (p) {
|
||||||
case PEEKED_NAME_ATT -> {
|
case PEEKED_NAME_ATT -> {
|
||||||
String res = reader.nextAttributeName();
|
String result = reader.nextAttributeName();
|
||||||
peeked = PEEKED_NONE;
|
peeked = PEEKED_NONE;
|
||||||
yield res;
|
yield nameEncoding.decode(result);
|
||||||
}
|
}
|
||||||
case PEEKED_NAME_TAG -> {
|
case PEEKED_NAME_TAG -> {
|
||||||
String res = nextTagName;
|
String result = nextTagName;
|
||||||
if (res == null) throw unexpectedTokenError("a name");
|
if (result == null) throw unexpectedTokenError("a name");
|
||||||
peeked = PEEKED_NONE;
|
peeked = PEEKED_NONE;
|
||||||
yield res;
|
yield nameEncoding.decode(result);
|
||||||
}
|
}
|
||||||
case PEEKED_NAME_VIRTUAL_TEXT -> {
|
case PEEKED_NAME_VIRTUAL_TEXT -> {
|
||||||
String result = heuristics.guessElementName(reader.getPath(), XmlToken.TEXT);
|
String result = heuristics.guessElementName(reader.getPath(), XmlToken.TEXT);
|
||||||
|
@ -285,11 +295,11 @@ public class XmlReader extends SerializeReader<IOException, XmlReader> implement
|
||||||
}
|
}
|
||||||
case PEEKED_NAME_BEGIN_OBJECT -> {
|
case PEEKED_NAME_BEGIN_OBJECT -> {
|
||||||
peeked = PEEKED_BEGIN_OBJECT;
|
peeked = PEEKED_BEGIN_OBJECT;
|
||||||
yield nextTagName;
|
yield nameEncoding.decode(nextTagName);
|
||||||
}
|
}
|
||||||
case PEEKED_NAME_BEGIN_ARRAY -> {
|
case PEEKED_NAME_BEGIN_ARRAY -> {
|
||||||
peeked = PEEKED_BEGIN_ARRAY;
|
peeked = PEEKED_BEGIN_ARRAY;
|
||||||
yield nextTagName;
|
yield nameEncoding.decode(nextTagName);
|
||||||
}
|
}
|
||||||
default -> throw unexpectedTokenError("a name");
|
default -> throw unexpectedTokenError("a name");
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue