jaxb - com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl 的 Java 11 UTF-16 BOM 问题
问题描述
我有一个 UTF-16 XML 文件:
<?xml version="1.0" encoding="utf-16" standalone="yes"?>
它以 BOM FE FF 开头。
将我的代码迁移到 Java 11,我得到:
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:652) ~[?:?]
这是使用 JAXB 解组它。
我是否使用参考实现会发生这种情况:
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:652) ~[?:?]
at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:134) ~[jaxb-runtime-2.4.0-SNAPSHOT.jar:?]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:385) ~[jaxb-runtime-2.4.0-SNAPSHOT.jar:?]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:356) ~[jaxb-runtime-2.4.0-SNAPSHOT.jar:?]
或 MOXY:
Message: Content is not allowed in prolog.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:652) ~[?:?]
at org.eclipse.persistence.internal.oxm.record.XMLStreamReaderReader.parse(XMLStreamReaderReader.java:98) ~[org.eclipse.persistence.core-2.5.2.jar:?]
at org.eclipse.persistence.internal.oxm.record.XMLStreamReaderReader.parse(XMLStreamReaderReader.java:86) ~[org.eclipse.persistence.core-2.5.2.jar:?]
at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:895) ~[org.eclipse.persistence.core-2.5.2.jar:?]
at org.eclipse.persistence.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:659) ~[org.eclipse.persistence.core-2.5.2.jar:?]
at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:585) ~[org.eclipse.persistence.moxy-2.5.2.jar:?]
他们都使用 com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl
使用 Java 6 到 8 解组该文件可以正常工作。Java 9 或 11 有什么变化吗?
如果我删除 FE FF BOM,它会使用 Java 11 解组。
解决方案
原来我的问题是由 maven-resources-plugin 引起的,过滤设置为 true。那是在破坏任何 UTF-16 资源,将前 2 个字节更改为 EF BF。
推荐阅读
- javascript - 使用 jQuery/Javascript 在 HTML 表中插入 Json 响应
- android - 在应用程序中显示 FTP 图像而无需下载它们
- javascript - 页面上每个轮播的独特流畅轮播设置
- reactjs - 使用请求查询参数,反应路由器
- java - Swagger Ui 强制输入作为文件上传类型而不是文本
- java - 如果我想禁用测试,如果测试方法下方存在一些注释,如何处理 ExecutionCondition?
- labview - 如何将 5 个元素的簇保存到 XML 文件中的一个属性元素中?
- javascript - 检查部分圆弧是否与圆相交
- pdfbox - 如何使用 pdfbox 或任何其他库将 pdf 转换为 xml?
- java - 如何获取特定参数的项目?