24 Ocak 2018 Çarşamba

JAXB @XmlSeeAlso Anostasyonu

Giriş
Şu satırı dahil ederiz.
import javax.xml.bind.annotation.XmlSeeAlso;
Açıklaması şöyle.
The purpose of the @XmlSeeAlso annotation is just to let your JAXB (JSR-222) implementation know that when it is processing the metadata for Resource that it should also process the metadata for the SomeItem class. Some people mistakenly believe that it is related to mapping inheritance since that is the use case it is most often used with. Since the subclasses of a class can not be determined using Java reflection, @XmlSeeAlso is used to let the JAXB implementation know that mappings for the subclasses should also be created.
Sadece kalıtım için değildir diyor ancak ben hem kalıtım varsa kullanıldığını gördüm. Bu açıklamaya göre Resource aşağıdaki örnekte Parent sınıfı oluyor. SomeItem ise ChildA veya ChildB sınıfı oluyor.

Örnek
Ata sınıfı şöyle yaparız.
@XmlSeeAlso({ ChildA.class, ChildB.class })
public class Parent {
  ...
}
Kalıtan sınıfta özel bir şey yapmaya gerek yok. ChildA sınıfında şöyle yaparız.
@XmlRootElement(name = "classA")
public class ChildA extends Parent {
  ...
}
ChildB sınıfında şöyle yaparız.
@XmlRootElement(name = "classB")
public class ChildB extends Parent {
  ...
}
Böylece Parent sınıfı bir liste içinde kullanabiliriz. Şöyle yaparız.
@XmlRootElement
class Root {
  @XmlElement
  List<Parent> things;

  //getters and setters
}

Hiç yorum yok:

Yorum Gönder