"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"
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);
}
@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:"
<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 |
---|---|
|
|
"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."
GO TO FULL VERSION