目标:尝试通过参数 c
传递任何类,以便任何类都可以直接使用编码(marshal)处理。
错误:[com.sun.istack.internal.SAXException2:无法将类型“java.lang.Class”编码为元素,因为它缺少@XmlRootElement 注释]
此错误出现在箭头指向的行(-->)
评论:如果我尝试用实际类中的表达式更改第 8 行和第 9 行的 c
,那么它就可以正常工作。有没有办法不这样做。我认为不能选类。
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;
}
最佳答案
您应该将 Object
作为参数而不是 Class
传递。然后确保传递类的实例而不是类本身。然后在 object.getClass()
上引导 JAXBContext
。
关于java - JAXB 编码期间的类转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29813414/