Хобрук: Ваш путь к мастерству в программировании

Кастинг класса во время сортировки JAXB

Цель: попытаться передать любой класс через параметр c, чтобы любой класс мог напрямую использовать маршалинг.

Ошибка: [com.sun.istack.internal.SAXException2: невозможно маршалировать тип "java.lang.Class" в качестве элемента, поскольку в нем отсутствует аннотация @XmlRootElement]

Эта ошибка была дана в строке, указанной стрелкой (-->)

Комментарии: если я попытаюсь изменить c в строках 8 и 9 выражением из реального класса, то это сработает просто отлично. Есть ли способ не делать этого. Классный кастинг не вариант, я думаю.

public XmlMarshaller(Class c){
    try {
        JAXBContext jaxbContext = JAXBContext.newInstance(c);
        Marshaller marshaller = jaxbContext.createMarshaller();

        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        --> marshaller.marshal(c, new File("xmlDyna/asd.xml"));
        --> marshaller.marshal(c, System.out);
    } catch (JAXBException e) {
        e.printStackTrace();
    }
}

Это другой класс на тот случай, если кто-то считает, что ошибка связана с отсутствующими аннотациями @XmlRootElement.

@XmlRootElement( name = "Dynamic")
public class DynamicLoader {

@XmlElement(name = "name")
public String name = "asdasd";

public DynamicLoader(){
    XmlMarshaller marshaller = new XmlMarshaller(this.getClass());
}

public String getName(){
    return name;
}

  • Почему вы хотите маршалировать java.lang.Class в своем xml? 23.04.2015
  • я не пытался маршалировать объект lang.Class. Я пытался передать другой объект через (класс c) в качестве параметра. Проблема в строке с (--›) вместо c должно быть имя класса. Что ты думаешь я должен сделать? 23.04.2015

Ответы:


1

Вы должны передать Object в качестве параметра вместо Class. Затем убедитесь, что вы передаете экземпляр класса вместо самого класса. Затем загрузите JAXBContext на object.getClass().

23.04.2015
  • Я чувствую себя глупо :) .. в любом случае спасибо за ответ, Блейз. Хотя по-прежнему появляется то же сообщение об ошибке в тех же строках, но xml был создан. 23.04.2015

  • 2

    В объекте, который вы передаете для маршалинга, отсутствуют аннотации. @XmlRootElement необходим для определения корневого элемента. Точно так же @XmlAttribute используется для идентификации атрибутов xml и т. д.

    23.04.2015
    Новые материалы

    Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
    Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

    AST для разработчиков JavaScript
    TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

    5 проектов на Python, которые нужно создать прямо сейчас!
    Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..