5

私はこれまでJAXBを使用したことがありません。私はテストハーネスプロジェクトに取り組んでいます。私は約20の異なるテストケースを持っています。テストを実行すると、このエラーが発生します。

私の構造は次のようなものです:

A基本のTestCaseクラスです。

B拡張しAます。

C拡張しBます。

基本クラスA:

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;
  }
}

クラスB:

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回カウントされます。

4

2 に答える 2

13

IllegalAnnotationExceptions は、A、B、および C にデフォルトのゼロ引数コンストラクターがないことが原因です。

A に追加:

public A() {
}

B に追加:

public B() {
}

そしてCに追加します:

public C() {
}
于 2010-07-20T17:19:18.110 に答える