2010-07-20 62 views
5

我從來沒有使用過JAXB。我正在研究一個測試線束項目。我有大約20個不同的測試案例。當我運行我的測試時,我得到這個錯誤。3次IllegalAnnotationExceptions

我的結構是這樣的:

A是基TestCase類。

B延伸A

C延伸B

基類A:B

public class A { 
    public A(String t){ 
    testName = t; 
    } 

    private String aData; 
    private String testName; 
    public void setAData(String a){ 
    aData = a; 
    } 

    public void getAData(){ 
    return aData; 
    } 

    public void setTestName(String t){ 
    testName = t; 
    } 

    public void getTestName(){ 
    return testName; 
    } 
} 

類:

public class B extends A{ 
    public B(String testName){ 
     super(testName); 
    } 

    private String bData; 
    public void setBData(String b){ 
     bData = b.trim(); 
    } 
    public String getData(){ 
     return bData; 
    }  
} 

C類:

@XmlRootElement(name="C") 
public class C extends B{ 
    public C(String testName){ 
     super(testName); 
    } 

    private String cData; 
    public void setCData(String c){ 
     cData = c; 
    } 
    public String getCData(){ 
     return cData; 
    } 
} 

及解編我的XML文件,我寫

public C unmarshall(C test, String dir){ 
    try { 
     JAXBContext jc = JAXBContext.newInstance(c.getClass); 
     Unmarshaller u = jc.createUnmarshaller(); 

     test = (C)u.unmarshal(new FileInputStream(dir)); 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
    } 

    return test; 
} 

我的XML文件的樣子:

<C> 
    <aData> aaaa </aData> 
    <bData> bbbb </bData> 
    <cData> cccc </cData> 
</C> 

當我運行我的代碼我得到IllegalAnnotationException的3個計數。

回答

12

的IllegalAnnotationExceptions是由於您沒有在A,B默認零參數構造,和C.

添加到:

public A() { 
} 

添加到B:

public B() { 
} 

並加入到C:

public C() { 
} 
+0

爲什麼要添加ze參數構造函數? – om39a 2014-05-13 16:58:56

+0

據我所知,零arg缺省構造函數是必需的,因爲serilization/deserialization工作的方式是使用默認構造函數創建第一個實例,然後使用反射注入值。所以你需要一個默認的構造函數。 – 2015-10-28 11:16:47