JAXB编组期间的类转换

时间:2015-04-23 04:01:10

标签: java class casting jaxb marshalling

目标:尝试通过参数c传递任何类,以便任何类都可以直接使用编组。

错误:[com.sun.istack.internal.SAXException2:无法封装类型“java.lang.Class”作为元素,因为它缺少@XmlRootElement注释]

此错误是在箭头指向的行( - >)

处给出的

评论:如果我尝试在第8行和第8行更改c 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;
}

2 个答案:

答案 0 :(得分:1)

You should pass Object as a parameter instead of Class. Then make sure you pass an instance of the class in instead of the class itself. Then bootstrap the JAXBContext on object.getClass().

答案 1 :(得分:0)

您要传递的对象是缺少注释的。 需要@XmlRootElement才能定义根元素。同样,@ XmlAttribute用于标识xml属性等。