XmlBeans错误:解析String时意外的元素CDATA

时间:2013-05-19 21:38:46

标签: java xmlbeans

我在使用XmlBeans解析xml字符串时遇到问题。问题本身出现在J2EE应用程序中,其中字符串本身是从外部系统接收的,但我在一个小型测试项目中复制了该问题。

我找到的唯一解决方案是让XmlBeans解析File而不是String,但这不是J2EE应用程序中的一个选项。另外,我真的想知道究竟是什么问题,因为我想解决它。

考试类来源:

public class TestXmlSpy {

    public static void main(String[] args) throws IOException {
        InputStreamReader reader = new InputStreamReader(new FileInputStream("d:\\temp\\IE734.xml"),"UTF-8");
        BufferedReader r = new BufferedReader(reader);
        String xml = "";
        String str;

        while ((str = r.readLine()) != null) {
            xml = xml + str;
        }
        xml = xml.trim();
        System.out.println("Ready reading XML");
        XmlOptions options = new XmlOptions();
        options.setCharacterEncoding("UTF-8");

        try {
            XmlObject xmlObject = XmlObject.Factory.parse(new File("D:\\temp\\IE734.xml"), options);
            System.out.println("Ready parsing File");
            XmlObject.Factory.parse(xml, options);
            System.out.println("Ready parsing String");
        } catch (XmlException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }   
}

XML文件完全符合XSD的im使用。此外,将其解析为File对象工作正常,并为我提供了一个解析的XmlObject。但是,解析xml-String会给出下面的堆栈跟踪。我已经在调试器中检查了字符串本身,并且第一眼看不到它有什么问题,特别是在第1行第1列,我认为如果我正确解释错误,Sax解析器有问题

debug

堆栈跟踪:

Ready reading XML
Ready parsing File
org.apache.xmlbeans.XmlException: error: Unexpected element: CDATA
    at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3511)
    at org.apache.xmlbeans.impl.store.Locale.parse(Locale.java:713)
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:697)
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:684)
    at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:208)
    at org.apache.xmlbeans.XmlObject$Factory.parse(XmlObject.java:658)
    at xmlspy.TestXmlSpy.main(TestXmlSpy.java:37)
Caused by: org.xml.sax.SAXParseException; systemId: file:; lineNumber: 1; columnNumber: 1; Unexpected element: CDATA
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportFatalError(Piccolo.java:1038)
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:723)
    at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3479)
    ... 6 more

2 个答案:

答案 0 :(得分:2)

这是一个编码问题,我使用下面的代码对我有用:

        File xmlFile = new File("./data/file.xml");
        FileDocument fileDoc = FileDocument.Factory.parse(xmlFile);

答案 1 :(得分:2)

异常是由XML文件的长度引起的。如果您在文件中添加或删除一个字符,解析器将会成功。

问题出现在XMLBeans所依赖的第三方PiccoloLexer库中。它已在修订版959082中修复,但尚未应用于xbean 2.5 jar。

What does the org.apache.xmlbeans.XmlException with a message of “Unexpected element: CDATA” mean?

XMLBeans - Problem with XML files if length is exactly 8193bytes

Issue reported on XMLBean Jira