【问题标题】:org.xmlpull.v1.XmlPullParserExceptionorg.xmlpull.v1.XmlPullParserException
【发布时间】:2012-05-21 10:15:05
【问题描述】:

我正在尝试将 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 测试用例运行

以下是堆栈跟踪-

    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);
}

【问题讨论】:

  • 请附加 Stacktrace。里面可能有有趣的信息。
  • 请将 abc.dra.DRAAPI.inputConfigXML 添加到您的问题中
  • @ChristianKuetbach 我在开头添加的代码是 abc.dra.DRAAPI.inputConfigXML
  • 不,有趣的部分是 xmlData 的创建。而那段代码不见了。
  • @ChristianKuetbach 我在问题底部添加了代码

标签: java eclipse unmarshalling jibx xmlpullparser


【解决方案1】:

ByteArrayInputstream 为空:

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

表示在 XML 中发现了一个 \u0 位作为第一个字符。

确保您的 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,您将读取损坏的文件。

【讨论】:

    【解决方案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。

    不要

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 自从我在 Maven 中看到了这个问题,这个解决方案对我有用。不过,我犹豫要否决它,因为我认为 OP 根本没有与 Maven 打交道。但是对于任何将来对 Maven 有此问题的人,请尝试一下。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      相关资源
      最近更新 更多