2015-04-23 66 views
2

目标:试图通过参数c传递任何类,所以任何类都可以直接使用编组。JAXB编组期间的类铸造

错误:[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; 
} 
+0

为什么你想在你的xml中编组java.lang.Class? –

+0

我没有试图编组lang.Class对象。我试图通过(Class c)作为参数传递另一个对象。问题在于符合( - >)而不是c,它必须是类的名称。你觉得我应该怎么做? – rjbaj

回答

1

您应该通过Object作为参数而不是Class。然后确保你传递了一个类的实例,而不是类本身。然后在object.getClass()上引导JAXBContext

+0

我觉得很愚蠢:) ..一路谢谢你的答案布莱斯。尽管在同一行仍然收到相同的错误消息,但创建了xml。 – rjbaj

0

传递给您的对象将被编组丢失注释。 为了定义根元素,需要@XmlRootElement。同样@XmlAttribute用于识别xml属性等。