"Pekala, o zaman. Muhtemelen zaten tahmin ettiğiniz gibi, her şey bu değildi."

"Şimdi size JAXB'nin diğer bazı yönlerinden bahsedeceğim. Ama JSON'da yaptığımız gibi koleksiyonlarla başlayacağız."

"JAXB kullanarak koleksiyonları seri durumdan çıkarırken, List değişkeni için hangi özel koleksiyonun (ArrayList, LinkedList, Vector, vb.) kullanılacağı konusunda da belirsizlik vardır. Ve yine bu sorunun cevabı ek açıklamalarla sağlanmaktadır."

"Her şey çok basit. Açıklamada koleksiyon türü belirtilmemişse JAXB, türünü kullanarak en uygun koleksiyonu seçmeye çalışacaktır. Liste için bu ArrayList olacaktır; Harita için HashMap vb. ."

"Gerçekte, burada JSON'dan çok daha az sorun var, çünkü her sınıfın benzersiz bir etiketi var ve etiketi tam olarak sınıfı belirtmek için kullanabilirsiniz."

"Örneğin, ortak bir atadan miras alan bir grup öğenin serisini kaldırmanız gerekirse,  @XmlAny: ek açıklamasını kullanırsınız"

Bir nesneyi XML'den dönüştürme
public static void main(String[] args) throws JAXBException
{
 String xmldata = "<zoo><cat/><cat/><dog/><cat/></zoo>";
 StringReader reader = new StringReader(xmldata);

 JAXBContext context = JAXBContext.newInstance(Cat.class, Zoo.class, Dog.class);
 Unmarshaller unmarshaller = context.createUnmarshaller();

 Cat cat = (Cat) unmarshaller.unmarshal(reader);
}
Nesneleri XML'den seri hale getirilen bir sınıf
@XmlType(name = "hayvanat bahçesi") 
@XmlRootElement 
class  Zoo 
{ 
@XmlAny public  List<Object> hayvanlar; } 
 


@XmlType(name = "cat") 
@XmlRootElement 
class  Cat 
{ 
public  String name; genel  int yaşı; genel  int ağırlığı; 
 
 

 kedi() 
 { 
 } 
}

@XmlType(isim = "köpek") 
@XmlRootElement 
class  Dog 
{ 
public  String name; genel  int yaşı; genel  int ağırlığı; 
 
 

 kedi() 
 { 
 } 

"Bir koleksiyon @XmlAny ek açıklamasıyla işaretlenmişse , içine herhangi bir uygun nesne yerleştirilebilir. Ve JAXB Unmarshaller , koleksiyonu doldururken etiketlere dikkat eder."

"Bu durumda, " <zoo> <cat/><cat/> <dog/> <cat/> </zoo> " etiket dizisi, Cat, Cat, Dog ve Cat nesneleri içeren bir koleksiyona dönüştürülecek ."

"Beklediğim şey buydu."

"Hı hı. Ah, bu arada, bir şey daha. Bir metin ve etiket karışımını seri durumdan çıkarırsanız, @XmlMixed ek açıklamasını kullanmanız gerekir ."

"İşte bu XML türünün bir örneği:"

@XmlMixed açıklamasını gerektiren örnek XML
<data> 
<items> 
test 1 <item/> text 2 <item> name </item> text 3 </items> </data> 

 

 

 

"Vay canına. Böyle bir XML'in var olduğunu unutmuştum. Gömülü etiketlerle ve diğer her şeyin güzel olmasına alıştım."

"Var. Ve JAXB'nin bu durum için bile bir notu var!"

"Harika. Bu arada şunu sormak istiyorum: Numaralandırmalar nasıl serileştirilir?"

"Güzel soru! Güzel tespit! Bir şekilde o konuyu atlamışım."

"Enumları işaretlemek için kullanılması gereken özel bir @XmlEnum ek açıklaması var. Değerlerin sayı olarak mı yoksa dize olarak mı depolanacağını belirtmek için bunu kullanabilirsiniz."

"Ayrıca, belirli bir enum alanına karşılık gelecek değeri belirlemenizi sağlayan bir @XmlEnumValue ek açıklaması da var."

"İşte bazı örnekler:"

Sayılar Teller
@XmlType
@XmlEnum(Integer.class)
public enum Code
{
 @XmlEnumValue("1")
  START,

 @XmlEnumValue("2")
  INPROGRESS,

 @XmlEnumValue("3")
  FINISH

 @XmlEnumValue("-1")
  ERROR
}
@XmlType
@XmlEnum(String.class)
public enum Card
{
 @XmlEnumValue("Spade")
  CLUBS,

 @XmlEnumValue("Diamond")
  DIAMONDS,

 @XmlEnumValue("Heart")
  HEARTS,

 @XmlEnumValue("Club")
  SPADES
}

"Vay canına. Buna nerede ihtiyaç duyacağımı hayal bile edemiyorum ama bence çok faydalı. Ve en önemlisi, standart dizi veya sayısal değerlere bağlı kalmak zorunda değilim."

"Evet. Bu, örneğin, örneğin bir Facebook sunucusuyla mesaj alışverişi yapan bir program yazdığınızda ve bunlara atanmış bir dizi değer olduğunda kullanışlıdır. Bunları kendi numaralandırmalarına atamanız yeterlidir ve her şey çalışacaktır. "

"Bu harika. JAXB'yi kesinlikle seviyorum."

"Harika. O zaman bugünlük bu kadar. Git ve biraz ara ver."