【发布时间】:2015-04-23 04:01:10
【问题描述】:
目标:尝试通过参数c 传递任何类,以便任何类都可以直接使用编组。
错误:[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;
}
【问题讨论】:
-
为什么要在 xml 中编组 java.lang.Class?
-
我没有尝试编组 lang.Class 对象。我试图通过(Class c)作为参数传递另一个对象。问题在于 (-->) 而不是 c 它必须是类的名称。你觉得我应该怎么做?
标签: java class casting jaxb marshalling