31 Ocak 2019 Perşembe

JAXB @XmlElement Anostasyonu - Nesne İçin Kullanılacak Tag'i Belirtir

Giriş
Bazı notlar

Örnek - Aynı Nesne Listesi Wrapper Tag İçinde
Eğer nesne listesi kullanıyorsak ve nesnelerimiz bir wrapper XML tag'i içindeyse bu anotasyonun başına @XmlElementWrapper(name="foos") yazılabilir. Böyle XML şöyle olur
<rootelement>
  <foos>
    <foo>...<foo>
    <foo>...<foo>
  <foos>
</rootelement>
Sınıf ise şöyledir
@XmlRootElement(name="rootelement")
class RootElement {

  @XmlElementWrapper(name="foos")
  @XmlElement(name="foo")
  private List<Foo> fooList;

  ...
}


@XmlRootElement(name= "f")
class Foo {
  @XMLElement
  String id;
  ...
}
Örnek - Polymorphic Nesne Listesi
Elimizde şöyle bir kod olsun. Burada ChildA sınıfı için beklenen tag büyük harfle başlayan "ChildA"
@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
  @XmlElements({
    @XmlElement(name = "ChildA", type = ChildA.class),
    @XmlElement(name = "ChildB", type = ChildB.class),
    })
  private List<Parent> elements;
  ...
}
Parent nesnesi şöyledir
@XmlSeeAlso({ChildA.class, ChildB.class})
public class Parent {
  ...
}
ChildA şöyledir. Normalde sınıf için küçük harfle başlayan "childA" tag'i bekleniyor.
@XmlRootElement(name = "childA")
public class ChildA extends Parent {
  ...
}
ChildB şöyledir. Normalde sınıf için küçük harfle başlayan "childB" tag'i bekleniyor.
@XmlRootElement(name = "childB")
public class ChildB extends Parent {
  ...
}
Örnek - İlgisiz Nesneler Listesi
Şöyle yaparız. Burada fileOrInline alanı ya File ya da Inline nesnesi olabiliyor.
@XmlElements({
  @XmlElement(name = "file", required = true, type = File.class),
  @XmlElement(name = "inline", required = true, type = Inline.class)
})
protected List<Object> fileOrInline;
1. getter Yöntemi
getter yöntemini kullanıyorsak, get edilen nesne primitive değilse, nesne XML'den okunurken getter çağrılır.

Örnek - getter 
Şöyle yaparız
public class Item {
  private String dataType;
  private int data;
  
  @XmlElement
  public String getDataType(){
    return dataType;
  }
  public void setDataType(String dataType){
    this.dataType = dataType;
  }

  
  @XmlElement
  public int getData(){
    return data;
  }
  public void setData(int data){
    this.data = data;
  }
  
}
2. Alanlar

name Alanı
Örnek
Elimizde şöyle bir XML olsunn
<ProtocolloList>
  <protocollo>
    <numero>1</numero>
    <data>2014-06-23</data>
    <oggetto/>
    <destinatario/>
    <operatore/>
  </protocollo>
     ...
</ProtocolloList>
Şöyle yaparız
@XmlRootElement(name = "ProtocolloList")
public class ProtocolloList {

  private ArrayList<Protocollo> ProtocolloList;

  @XmlElement(name = "protocollo")
  public ArrayList<Protocollo> getProtocolloList() {
      return ProtocolloList;
  }

}
nillable Alanı
Şöyle yaparız.
@XmlElement(name = "Comment",nillable=true)
public Comment comment;
required Alanı
Şöyle yaparız.
@XmlElement(name = "Foo", required = true)
protected List<Foo> list;

Hiç yorum yok:

Yorum Gönder