org.xmlpull.v1.XmlPullParserException(org.xmlpull.

2019-07-29 11:39发布

我试图绑定的XML文件(作为byte[]为Java对象。 这是我的代码 -

public voidinputConfigXML(String xmlfile, byte[] xmlData) {
    IBindingFactory bFact = BindingDirectory.getFactory(GroupsDTO.class);
                IUnmarshallingContext uctx = bFact.createUnmarshallingContext();
                groups = (GroupsDTO) uctx.unmarshalDocument(new ByteArrayInputStream(xmlData), "UTF8");
}

unmarshalDocument()是给我这个例外。 我该怎么办?

FYI:运行作为JUnit测试案例

以下是堆栈跟踪 -

    Error parsing document (line 1, col 1)
    org.xmlpull.v1.XmlPullParserException: only whitespace content allowed before start tag and not \u0 (position: START_DOCUMENT seen \u0... @1:1) 
        at org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1519)
        at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1395)
        at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)
        at org.jibx.runtime.impl.XMLPullReaderFactory$XMLPullReader.next(XMLPullReaderFactory.java:291)
        at org.jibx.runtime.impl.UnmarshallingContext.toStart(UnmarshallingContext.java:451)
        at org.jibx.runtime.impl.UnmarshallingContext.unmarshalElement(UnmarshallingContext.java:2755)
        at org.jibx.runtime.impl.UnmarshallingContext.unmarshalDocument(UnmarshallingContext.java:2905)
        at abc.dra.DRAAPI.inputConfigXML(DRAAPI.java:31)
        at abc.dra.XMLToObject_Test.test(XMLToObject_Test.java:34)
        [...]

这是我的代码,字节[]形成 -

void test() {
String xmlfile = "output.xml"
File file = new File(xmlfile);
byte[] xmlData = new byte[(int) file.length()];
groups = dra.inputConfigXML(xmlfile, xmlData);
}

Answer 1:

该ByteArrayInputStream的是空的:

only whitespace content allowed before start tag and not \u0 
(position: START_DOCUMENT seen \u0... @1:1) 

意味着,一个\ U0位被发现作为XML内第一个字符。

确保你的内内容byte[]和UTF-8不以启动BOM 。

我不认为,该BOM是你的问题在这里,但我常常encountert关于BOM和Java。

更新

您不填写byte[] 你要读取文件内容到byte[]阅读: 文件在Java字节]

顺便说一句: byte[] xmlData = new byte[(int) file.length()]; 是糟糕的代码风格,你因为...会遇到较大的XML的文件的问题。 如果他们是大于Integer.MAX_VALUE你会读到一个损坏的文件。



Answer 2:

哈日,
JiBX的需要字符输入。 我想你已经正确指定的编码。 试试这个代码,而不是:

FileInputStream fis = new FileInputStream("output.xml");
InputStreamReader isr = new InputStreamReader(fis, "UTF8");
groups = (GroupsDTO) uctx.unmarshalDocument(isr);

如果你必须使用你所编写的代码,我会尝试的文本输出到控制台(System.put.println(XXX)),以确保您正确解码UTF-8。



Answer 3:

去到MVN库的路径和删除XML文件该文件夹。



文章来源: org.xmlpull.v1.XmlPullParserException