3 подсчета IllegalAnnotationExceptions - PullRequest
5 голосов
/ 20 июля 2010

Я никогда не использовал 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>

когда я запускаю свой код, я получаю 3 значения IllegalAnnotationException.

Ответы [ 2 ]

12 голосов
/ 20 июля 2010

Исключения IllegalAnnotationException связаны с тем, что у вас нет конструкторов с нулевым аргументом по умолчанию для A, B и C.

Добавить к A:

public A() {
}

Добавить в B:

public B() {
}

И добавить в C:

public C() {
}
0 голосов
/ 13 июня 2018

Это потому, что у подэлементов этого класса, который вы создаете, экземпляр JAXBcontext не имеет того же имени, что и имена элементов, определенных внутри него.

Пример:

@XmlType(name = "xyz", propOrder =
{ "a", "b", "c", "d" })
@XmlRootElement(name = "testClass")
public class TestClass
{

  @XmlElement(required = true)
  protected Status status;
  @XmlElement(required = true)
  protected String mno;
  @XmlElement(required = true)

}

В вышеприведенном классе у вас нет "xyz", но если вы добавите имя свойства, которое недоступно, экземпляр JAXBContext создает исключение IlligalAnnotationException.

Как будто у вас есть три места несоответствия имен.Таким образом, 3 подсчета исключений IllegalAnnotation.

...