Nedir bu JAXB?

Yusuf Çakal
3 min readAug 14, 2017

Açılımı “Java Architecture for XML Binding” olan bu yapı Java-Xml , Xml-Java arasındaki çevrimi temsil etmektedir. Java 6 ile biz geliştiricilerin kullanımına sunulmuştur. Paket yapısı olarak javax.xml.bind ın altında görebilirsiniz.

Peki bu Jaxb nerelerde işimize yarayacak. Örneğin bir web servis kullanıyorsunuz ve size gelen veri ya da sizin gönderdiğiniz veri Xml formatında olabilir. Projenizde muhtemelen Pojo (Plain Old Java Object) sınıflarını kullanıyorsunuzdur. Pojo sınıflarını Xml formatına ya da Xml formatında bir yapıyı Pojo formatına rahatlıkla çevirip akabinde istediğiniz işlemleri gerçekleştirebilirsiniz. Lafı çok fazla uzatmadan basit bir örnek ile anlatmakta fayda var.

Örneğimizin senaryosu basit bir şekilde. Kullanıcı ve iş bazında olacak. Belli kullanıcılara bağlı belli işler gibi düşünülebilir. Basit bir Java projesi oluşturuyoruz.

Basit bir kullanıcı Pojo sınıfı oluşturmuş olduk.

İş sınıfımızı da oluşturduk ve kullanıcı sınıfında iş sınıfını kullandık. (görüldüğü üzere) Sıra geldi kullanıcı sınıfından bir Xml çıktısı üretmeye.

Projeyi çalıştırdığımız zaman aşağıdaki çıktıyı aldığınızı göreceksiniz.

Eğer yukarıdaki ifadeyi kullanmış olmasaydık, ya da ikinci parametre olarak “false” değerini vermiş olsaydık, çıktı aşağıdaki gibi değilde düz bir metin şeklinde olacaktı.

Buraya kadar ne yaptık? Bir user ve job sınıflarından birer referans oluşturduk ve ilgili parametre geçişlerini yaparak User sınıfından bir Xml çıktı aldık. Bu kısımda Marshaller ve UnMarshaller kavramlarına değinmekte fayda var. Marshaller, bir Pojo sınıfını Xml formata çevirmek istiyorsak buna marshaller, bir Xml formattaki veriyi uygun Pojo sınıfına bind etmek istiyorsak buna da unMarshaller deniyor. Bu kısıma kadar sadece marshaller işlemini gerçekleştirdik. Sıra geldi unMarshaller işlemine. Bu oluşturmuş olduğumuz Xml çıktıyı bir dosyaya kaydediyoruz. (İlla ki bu Xml olacak diye bir şart yok. Pojo sınıfınıza uygun herhangi bir xml formatta olabilir.)

Aşağıdaki resim Xml dosyamızın dizinini göstermek amaçlıdır. UnMarshaller işleminde dosyanın yolunu vermek için gerekli bir bilgi.

Bu ifadeyi çalıştırdığımız zaman ise data.xml dosyasındaki Xml veriyi Pojo sınıf haline getirmiş olursunuz ve aşağıdaki gibi bir çıktı elde edersiniz. Buna yukarıda bahsettiğim gibi unMarshaller işlemi denir.

Buraya kadar sadece tek bir obje üzerinden iş yaptık. (User.java) Ya birden fazla obje üzerinde işlem yapmak istersek ? O zaman bir wrapper (yardımcı , destekleyeci) bir sınıf oluşturmamız gerekecek. İşin arka planında yatan mantık aynı hiçbir fark yok.

Yukarıda gördüğünüz gibi bir Pojo sınıfından hiçbir farkı yok. Sadece geriye obje değilde obje listesi döndürüyor. Bizim de istediğimiz zaten buydu. Dikkat ederseniz geri dönen getUserList() fonksiyonunuz bir XML element anotasyonu almış bu Xml formatında bir Pojo yu temsil etmektedir. Gelelim main sınıfımızda bunu çalıştırmaya.

Gördüğünüz gibi oluşturduğumuz Wrapper sınıfımızı kullandık ve Liste şeklinde Xml binding işlemi gerçekleştirmiş olduk. Bu kısmı çalıştırdığımızda aşağıdaki gibi bir çıktı elde ederiz.

Bir wrapper sınıfını liste aracısı olarak kullandık ve normal bir sınıfın Marshaller edilmesinden hiçbir farkı olmadığını görmüş olduk. Son olarak toplamak gerekirse, Java’daki sınıflarınızı (POJO) XML formatına ve bir XML formatındaki veriyi Java sınıfınıza nasıl bind edilir? bunları gördük. Tabi bunları öğrenirken Marshaller ve unMarshaller kavramlarını da öğrenmiş olduk. Naçizane fikirlerimi paylaşmak istedim. Aklınıza takılan bir yer ya da eleştirmek istediğiniz bir kısım olursa yoruma yazarak benimle paylaşabilirsiniz.

Umarım faydalı olmuştur.

Sağlıcakla.

--

--