19 Haziran 2018 Salı

JAXB @XmlAccessorType Anotasyonu

Giriş
Şu satırı dahil ederiz.
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
Bu sınıfın içine verilen XmlAccessType anotasyonu PUBLIC_MEMBER, PROPERTY, FIELD, ya da NONE değerlerini alabilir.

XmlAccessType.FIELD
XML tag'leri field isimlerine göre oluşturulur.

Örnek
Elimizde şöyle bir xml olsun.
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <medicalReportYN>N</medicalReportYN>
  <regionCode>50001</regionCode>
</root>
Şöyle yaparız.
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class EstDto implements Serializable {
    private long regionCode;
    private String medicalReportYN;

    }
Örnek
Şöyle yaparız.
@XmlAccessorType(XmlAccessType.FIELD)
Örnek
Şöyle yaparız.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "uploadDocumentRequest", propOrder = {
    "positionId",
    "username",
    "documentItemId",
    "documentCod"
    })
public class UploadDocumentRequest {

  @XmlElement(required = true)
  protected String positionId;
  @XmlElement(required = true)
  protected String username;
  protected String documentItemId;
  protected String documentCod;

  //setters & getters 
}
XmlAccessType.NONE
Açıklaması şöyle. Sadece kodda @XmlElement olarak işaretli alanlar Xml'den doldurulur.
NONE is a useful choice when you have many unmapped properties and you want to tell your JAXB implementation to only map the fields/properties you have annotated. This can be alot easier than adding a lot of @XmlTransient annotations into your model.
Şöyle yaparız.
@XmlRootElement(name="customer")
@XmlAccessorType(XmlAccessType.NONE)
public class Customer {

  @XmlElement(required=true) 
  protected String firstname;

  @XmlElement(required=true) 
  protected String lastname;
  ...
}
XmlAccessType.PROPERTY
XML tag'leri getter() isimlerine göre oluşturulur.

XmlAccessType.PUBLIC_MEMBER
Benim anladığım public field ve public getter/setter çiftine sahip olan alanlar. Daha detaylı bir açıklama şöyle.
*public fields
*annotated fields (private olsa bile @XmlAttribute ile işaretlidir)
*properties (getter setter metodu vardır ve @XmlAttribute ile işaretlidir)
Şöyle yaparız.
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
public class Foo {
  ...
}

Hiç yorum yok:

Yorum Gönder