У меня проблемы с анализом строки xml с помощью XmlBeans. Сама проблема заключается в приложении J2EE, где сама строка получена из внешних систем, но я воспроизвел проблему в небольшом тестовом проекте.
Единственное решение, которое я нашел, — позволить XmlBeans анализировать файл вместо строки, но это не вариант в приложении 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 есть проблема с тем, правильно ли я интерпретирую ошибку. .
Трассировки стека:
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
BufferedReader
, может быть недействительной для файла. - person Stephen Connolly   schedule 20.05.2013