org.xmlpull.v1.XmlPullParserException

时间:2012-05-21 10:15:06

标签: java eclipse unmarshalling jibx xmlpullparser

我正在尝试将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()给了我这个例外。我该怎么办?

仅供参考:以JUnit测试用例运行

以下是stacktrace -

    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)
        [...]

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

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

3 个答案:

答案 0 :(得分:2)

ByteArrayInputstream为空:

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

表示在XML中找到了\ u0 Bit作为第一个char。

确保您的byte[]内容和UTF-8中的内容不以BOM开头。

我不认为BOM是你的问题,但我常常遇到BOM和java。

<强>更新

您没有填写byte[]。您必须将文件内容读入byte[]: 请阅读:File to byte[] in Java

顺便说一下:byte[] xmlData = new byte[(int) file.length()];是不好的代码风格,因为你会遇到更大的XML文件的问题。如果它们大于Integer.MAX_VALUE,您将读取损坏的文件。

答案 1 :(得分:0)

哈瑞,
JiBX需要字符作为输入。我认为你已经错误地指定了你的编码。请尝试使用此代码:

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

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

答案 2 :(得分:0)

转到mvn存储库路径并删除xml文件的该文件夹。