2015-04-23 6 views
2

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

Ошибка: [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; 
} 
+0

Почему вы хотите маршалировать java.lang.Class в xml? –

+0

Я не пытался маршалировать объект lang.Class. Я пытался передать другой объект через (класс c) в качестве параметра. Проблема заключается в строке с (->) вместо c, она должна быть именем класса. Что ты думаешь я должен сделать? – rjbaj

ответ

1

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

+0

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

0

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

Смежные вопросы