2015-04-23 17 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屬性等。