Class JAXB 编组期间的转换
Class Casting during Marshalling of JAXB
Objective:尝试通过参数 c
传递任何 class,以便任何 class 可以直接使用封送处理。
错误:[com.sun.istack.internal.SAXException2:无法将类型 "java.lang.Class" 编组为元素,因为它缺少 @XmlRootElement 注释]
此错误出现在箭头指向的行(-->)
评论:如果我尝试使用实际 class 中的表达式更改第 8 行和第 9 行的 c
,那么这就可以正常工作。有没有办法不这样做。 Class 我认为选角是不可能的。
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();
}
}
这是另一个 class,以防有人认为错误是因为缺少 @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
。然后确保传递 class 的实例而不是 class 本身。然后 bootstrap JAXBContext
在 object.getClass()
.
您要传递给封送处理的对象缺少注释。
需要 @XmlRootElement 才能定义根元素。同样,@XmlAttribute 用于标识 xml 属性等
Objective:尝试通过参数 c
传递任何 class,以便任何 class 可以直接使用封送处理。
错误:[com.sun.istack.internal.SAXException2:无法将类型 "java.lang.Class" 编组为元素,因为它缺少 @XmlRootElement 注释]
此错误出现在箭头指向的行(-->)
评论:如果我尝试使用实际 class 中的表达式更改第 8 行和第 9 行的 c
,那么这就可以正常工作。有没有办法不这样做。 Class 我认为选角是不可能的。
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();
}
}
这是另一个 class,以防有人认为错误是因为缺少 @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
。然后确保传递 class 的实例而不是 class 本身。然后 bootstrap JAXBContext
在 object.getClass()
.
您要传递给封送处理的对象缺少注释。 需要 @XmlRootElement 才能定义根元素。同样,@XmlAttribute 用于标识 xml 属性等