Цель: попытаться передать любой класс через параметр 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;
}