You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
package com.test;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import java.io.Serializable;
public class Test {
public static void main(String[] args) throws Exception {
char[] chars = new char[2];
chars[0] = 0xffff;
chars[1] = 'A';
String info = new String(chars);
System.out.println(info);
Other other = new Other();
other.setInfo(info);
XmlMapper xmlMapper = new XmlMapper();
String otherXml = xmlMapper.writeValueAsString(other);
System.out.println(otherXml);
Other other1 = xmlMapper.readValue(otherXml, Other.class);
System.out.println(other1.getInfo());
}
@JacksonXmlRootElement(localName = "Other")
public static class Other implements Serializable {
@JacksonXmlProperty(localName = "Info")
private String info;
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
}
running result:
�A
<Other><Info>A</Info></Other>
Exception in thread "main" com.fasterxml.jackson.core.JsonParseException: Illegal character entity: expansion character (code 0xffff)
at [row,col {unknown-source}]: [1,21]
at [Source: (StringReader); line: 1, column: 22]
at com.fasterxml.jackson.dataformat.xml.util.StaxUtil.throwAsParseException(StaxUtil.java:25)
at com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser._nextToken(FromXmlParser.java:1460)
at com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser.nextToken(FromXmlParser.java:746)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:305)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
at com.fasterxml.jackson.dataformat.xml.deser.XmlDeserializationContext.readRootValue(XmlDeserializationContext.java:104)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4931)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3868)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3836)
at com.test.Test.main(Test.java:21)
Caused by: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0xffff)
at [row,col {unknown-source}]: [1,21]
at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:634)
at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:504)
at com.ctc.wstx.sr.StreamScanner.reportIllegalChar(StreamScanner.java:2463)
at com.ctc.wstx.sr.StreamScanner.validateChar(StreamScanner.java:2400)
at com.ctc.wstx.sr.StreamScanner.resolveCharEnt(StreamScanner.java:2376)
at com.ctc.wstx.sr.StreamScanner.fullyResolveEntity(StreamScanner.java:1524)
at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2838)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1122)
at com.fasterxml.jackson.dataformat.xml.deser.XmlTokenStream._collectUntilTag(XmlTokenStream.java:568)
at com.fasterxml.jackson.dataformat.xml.deser.XmlTokenStream._next(XmlTokenStream.java:473)
at com.fasterxml.jackson.dataformat.xml.deser.XmlTokenStream.next(XmlTokenStream.java:313)
at com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser._nextToken(FromXmlParser.java:1458)
... 8 more
the class Other is provided by other system, we could not add @JacksonXmlCData to it's field info.
so how to avoid JsonParseException when the value of info has unicode characters such as ?
The text was updated successfully, but these errors were encountered:
The issue is that the Woodstox XML parser won't accept 0xffff as a valid UTF-8 character for XML docs.
Presumably, this is based on the requirements of the XML spec. If you can find an XML parser that accepts 0xffff as a valid UTF-8 character then get back to us (or better still, Woodstox).
does XmlMapper#writeValueAsString have a option to replace all Java characters that are not valid xml characters with given replacement character?
see WstxOutputProperties.P_OUTPUT_INVALID_CHAR_HANDLER,
XMLOutputFactory f = new WstxOutputFactory();
f.setProperty(WstxOutputProperties.P_OUTPUT_INVALID_CHAR_HANDLER,
new InvalidCharHandler.ReplacingHandler(' '));
... ...
jackson-dataformat-xml version: 2.18.3
the class Other is provided by other system, we could not add
@JacksonXmlCData
to it's fieldinfo
.so how to avoid JsonParseException when the value of
info
has unicode characters such as
?The text was updated successfully, but these errors were encountered: