Java JAXB编组期间的类转换

Java JAXB编组期间的类转换,java,class,casting,jaxb,marshalling,Java,Class,Casting,Jaxb,Marshalling,目标:尝试通过参数c传递任何类,以便任何类都可以直接使用封送处理 错误:[com.sun.istack.internal.SAXException2:无法将类型“java.lang.Class”封送为元素,因为它缺少@XmlRootElement注释] 此错误出现在箭头(-->)所指的直线上 注释:如果我尝试使用实际类中的表达式更改第8行和第9行的c,则效果很好。有没有办法不这样做。我认为,班级选角是没有选择的 public XmlMarshaller(Class c){ try {

目标:尝试通过参数
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;
}

您应该将
对象
作为参数传递,而不是
。然后确保传入类的实例,而不是类本身。然后在
object.getClass()
上引导
JAXBContext
,传递要封送的对象缺少注释。
@需要XmlRootElement来定义根元素。同样地,@xmldattribute用于标识xml属性等。

为什么要封送xml中的java.lang.Class?我没有尝试封送lang.Class对象。我试图通过另一个对象(类c)作为参数。问题出在带(-->)而不是c的行中,它必须是类的名称。你觉得我该怎么办?我觉得自己很愚蠢:)…无论如何,谢谢你的回答布莱斯。虽然仍然在相同的行中获得相同的错误消息,但xml已创建。