Ошибка XmlBeans: неожиданный элемент CDATA при анализе строки

У меня проблемы с анализом строки 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

person Martijn    schedule 19.05.2013    source источник
comment
Не уверен, что это поможет, но попробуйте вызвать setLoadStripComments() для объекта параметров перед разбором. Я думаю, что синтаксический анализатор блюет на комментарий   -  person cmbaxter    schedule 20.05.2013
comment
Вы уверены, что читаете файл в строгом режиме, используя правильную кодировку? Читатель на основе файлов применит автоматическое определение кодировки, в то время как кодировка по умолчанию, которую использует ваш BufferedReader, может быть недействительной для файла.   -  person Stephen Connolly    schedule 20.05.2013
comment
Кроме того, можете ли вы добавить строку xml, которую вы анализируете и которая вызывает этот сбой?   -  person cmbaxter    schedule 20.05.2013
comment
setLoadStripComments() не помог. Скорее всего, что-то не так со строкой, но я не могу понять, что. Даже если я решу это, мне нужно выяснить, как преобразовать строку в рабочую, так как в реальном приложении мне нужно использовать это, строка передается из внешней системы, поэтому я не могу прочитать файл сам там.   -  person Martijn    schedule 20.05.2013
comment
XML находится по адресу: nyn.dds.nl/debug.txt Первые символы выглядят напуганный (меньше), так что я предполагаю, что это какая-то проблема с кодировкой? Не отображается, когда я открываю его в Chrome, когда я просматриваю его в блокноте, это кажется странным.   -  person Martijn    schedule 20.05.2013
comment
Решил это (вроде), преобразовав String в поток ввода: InputStream good = new ByteArrayInputStream(xml.getBytes(UTF-8)); а затем анализируя это: XmlObject.Factory.parse(хорошо, параметры); Я все еще открыт для советов, если есть более аккуратный способ справиться с этим? Спасибо, что наставили меня на правильный путь! Ваши советы заставили меня глубже изучить кодировку/наборы символов!   -  person Martijn    schedule 20.05.2013
comment
@ArjanTijms Не могли бы вы объяснить причину всех этих ретэгов?   -  person Andrew Barber    schedule 26.05.2013
comment
@AndrewBarber, ты имеешь в виду правки? Повторной пометки по этому вопросу не было. Переход от J2EE к Java EE связан с тем, что термин J2EE устарел с начала 2007 года. Сам SO также автоматически переименовывает тег J2EE. Использование J2EE в новых вопросах нередко приводит к ряду замечаний пользователей о том, что это устарело и не должно использоваться. В частности, по этому вопросу ИМХО довольно ясно, что пользователь имел в виду Java EE, а не J2EE. Почему тогда вы думаете, что J2EE здесь лучше? Я что-то пропустил?   -  person Arjan Tijms    schedule 26.05.2013


Ответы (2)


Это проблема с кодировкой, я использовал приведенный ниже код, который работал у меня:

        File xmlFile = new File("./data/file.xml");
        FileDocument fileDoc = FileDocument.Factory.parse(xmlFile);
person Seetaram Hegde    schedule 10.09.2013

Исключение вызвано длиной файла XML. Если вы добавите или удалите один символ из файла, синтаксический анализатор завершится успешно.

Проблема возникает в сторонней библиотеке PiccoloLexer, на которую опирается XMLBeans. Это было исправлено в версии 959082, но не применялось к xbean 2.5 jar.

Что делает означает org.apache.xmlbeans.XmlException с сообщением «Неожиданный элемент: CDATA»?

XMLBeans - Проблема с файлами XML, если длина ровно 8193 байта

Сообщено о проблеме с XMLBean Jira

person jcwhall    schedule 23.06.2014