【问题标题】:Java 11 UTF-16 BOM issues with com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImplcom.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl 的 Java 11 UTF-16 BOM 问题
【发布时间】:2023-03-24 07:12:01
【问题描述】:

我有一个 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 中解组。

【问题讨论】:

  • 您是从FileInputStream 还是Reader 解组?
  • 一个输入流:url.openConnection().getInputStream()。它从我的 IDE Eclipse 2018.12 中的文件系统中获取。

标签: jaxb utf-16 moxy java-11 xerces


【解决方案1】:

原来我的问题是由 maven-resources-plugin 引起的,过滤设置为 true。这会破坏任何 UTF-16 资源,将前 2 个字节更改为 EF BF。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 2011-01-07
    • 1970-01-01
    • 2012-02-08
    • 2011-01-11
    • 2014-04-22
    • 2013-02-25
    • 2019-02-02
    相关资源
    最近更新 更多