When converting json to XML, remove characters that are not allowed in the XML 1.0 specs, as they will cause xpath failures even if escaped
This commit is contained in:
parent
56dd05f85c
commit
3cd5590f3b
|
@ -49,6 +49,23 @@ public class JsonUtils {
|
||||||
res.put(i, cleanValue(array.opt(i)));
|
res.put(i, cleanValue(array.opt(i)));
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
} else if (object instanceof String) {
|
||||||
|
String value = (String) object;
|
||||||
|
|
||||||
|
// XML 1.0 Allowed characters
|
||||||
|
// Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
|
||||||
|
|
||||||
|
return value
|
||||||
|
.codePoints()
|
||||||
|
.filter(
|
||||||
|
cp -> cp == 0x9 || cp == 0xA || cp == 0xD || (cp >= 0x20 && cp <= 0xD7FF)
|
||||||
|
|| (cp >= 0xE000 && cp <= 0xFFFD)
|
||||||
|
|| (cp >= 0x10000 && cp <= 0x10FFFF))
|
||||||
|
.collect(
|
||||||
|
StringBuilder::new,
|
||||||
|
StringBuilder::appendCodePoint,
|
||||||
|
StringBuilder::append)
|
||||||
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
return object;
|
return object;
|
||||||
|
|
|
@ -38,4 +38,11 @@ class JsonUtilsTest {
|
||||||
wrapped("<parent><id>1</id></parent><parent><id>2</id></parent>"),
|
wrapped("<parent><id>1</id></parent><parent><id>2</id></parent>"),
|
||||||
JsonUtils.convertToXML("{\"parent\": [{\"id\": 1}, {\"id\": 2}]}"));
|
JsonUtils.convertToXML("{\"parent\": [{\"id\": 1}, {\"id\": 2}]}"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void removeControlCharacters() {
|
||||||
|
assertEquals(
|
||||||
|
wrapped("<m_100><n_200v>Test</n_200v></m_100>"),
|
||||||
|
JsonUtils.convertToXML("{\"100\" : {\"200v\" : \"\\u0000\\u000cTest\"}}"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue