Xstream не анализирует корневой элемент

Я использую библиотеку 'com.thoughtworks.xstream:xstream:1.4.10' и пытаюсь анализировать xml-файлы.

Брокер — это корневой элемент, внутри которого есть другие теги.

<broker>
   <othertags/>
</broker>

Проблема в том, что когда я создаю файл xml, он генерируется правильно, но не может прочитать файл.

@XStreamAlias("broker")
public static class Broker {

Во время генерации файла он может конвертировать класс Broker, но не наоборот. Все остальные классы и список отображаются правильно, но корень @XStreamAlias не работает во время чтения.

Любые указатели относительно того, почему, будут очень полезны.

Исключение, которое я получаю: com.thoughtworks.xstream.mapper.CannotResolveClassException: broker

Еще один вопрос: при вызове xStream.fromXML(responseString) как xStream узнает, какой класс использовать? Скажем, у меня есть два класса с одинаковым псевдонимом

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
366
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

XStream по умолчанию не обрабатывает аннотации. Добавьте следующее перед десериализацией вашего xml-контента.

XStream xstream = new XStream();
xstream.processAnnotations(Broker.class);

Я на самом деле использую автоопределение xStream.autodetectAnnotations(true);

Subhomoy Sikdar 28.05.2019 13:36

при вызове xStream.fromXML(responseString) как xStream узнает, какой класс использовать? Скажем, у меня есть два класса с одинаковым псевдонимом

Subhomoy Sikdar 28.05.2019 13:37

Автоопределение может работать только для сериализации. При десериализации вам нужно указать XStream, как обрабатывать каждый тип. Вот выдержка из официальной документации: «Поэтому нет проблем сериализовать граф объектов в XML, так как XStream будет знать обо всех типах заранее. This is no longer true at deserialization time. XStream has to know the alias to turn it into the proper type, но он может найти аннотацию для псевдонима, только если он обработал напишите заранее."

Arnaud Develay 28.05.2019 13:43

Что касается совместного использования одного и того же псевдонима, это не кажется хорошей практикой: см. github.com/x-stream/xstream/issues/102.

Arnaud Develay 28.05.2019 13:55

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