XMLEventReader возвращает STAX

Я использую XMLEventReader для анализа больших XML-файлов, и он отлично работает в одном проекте, но когда я импортирую тот же класс с тем же импортом в другом проекте, он плохо анализирует XML и дает STAX Event,

Ниже мой код:

    XMLInputFactory factory = XMLInputFactory.newInstance();
    XMLEventReader eventReader = factory.createXMLEventReader(new FileReader(exportedFilePath));

Я отлаживал и проверял eventReader и в проекте, где работает, находится свойство, а в проекте, где не работает, есть м.

Я не могу поймать исключение, потому что это тот же класс и тот же импорт..

Вот импорт:

import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.Namespace;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

2 ответа

Решение

Это должно помочь:

System.setProperty("javax.xml.stream.XMLInputFactory", "com.sun.xml.internal.stream.XMLInputFactoryImpl");

Это может быть вызвано проблемой Classpath.

Возможно, другой класс с таким же именем загружен до вашего класса (это может быть даже внутри фреймворка или в среде выполнения), который мешает загрузке вашего упомянутого класса, например, другая версия вашего синтаксического анализатора stax.

У вас есть три варианта:

  • Попытайтесь выяснить версию синтаксического анализатора StAX, присутствующего в этой среде, и скомпилируйте в него свой код

  • Используйте собственный загрузчик классов / контейнер для вашей библиотеки, который будет гарантировать, что загружена правильная версия,

  • попытайтесь изменить порядок классов, чтобы ваша библиотека стояла первой - хотя это может повредить систему в другом месте, поэтому я не очень рекомендую.

Другие вопросы по тегам