XML'den Java Sınıfına (JAXB)
Örnek XML'den JAXB etiketli Java sınıfı üretin; öznitelik @XmlAttribute, tekrarlanan öğe List<> olur
Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.
Bu araç işinizi gördü mü?
Teşekkürler, geri bildiriminiz alındı.
Nasıl çalışır?
Bir SOAP servisinin ya da e-Fatura benzeri bir XML dosyasının içeriğini Java'da nesne olarak okumak için JAXB'nin tanıyacağı sınıflar gerekir. Örnek XML'i sol panele yapıştırın; sağ panelde her öğe için bir sınıf oluşur. Kök öğe @XmlRootElement(name = "siparis") etiketini alır, iç içe öğeler kök sınıfın içine public static class olarak yazılır, böylece çıktı tek bir Siparis.java dosyası olarak derlenir. Öğenin öznitelikleri (no="1024") @XmlAttribute, alt öğeleri @XmlElement alanı olur. Hem özniteliği hem metni olan öğede (<kalem kod="TR-11">Çelik tencere</kalem>) metin @XmlValue alanına gider. Aynı öğe bir ebeveynin altında iki kez geçiyorsa alan List<Kalem> olur. Değer tipi metinden tanınır: 1024 int, 1250.50 double, true boolean; 06100 gibi sıfırla başlayan değer posta kodu ya da telefon olabileceği için String kalır. Bazı öğelerde olmayan öznitelik ya da alt öğe Integer gibi sarmal tiple yazılır ki boş kalabilsin. Spring Boot 3 ve Jakarta EE için jakarta, Java 8 projeleri için javax seçin.
Bu araç xml to java, xml to java class, xml to pojo, jaxb class generator aramalarıyla da biliniyor.
JAXB nedir?
JAXB (Jakarta XML Binding), Java nesneleri ile XML belgeleri arasında çeviri yapan standarttır. Sınıfa konan @XmlRootElement, @XmlElement ve @XmlAttribute etiketleri hangi alanın hangi XML parçasına karşılık geldiğini söyler; Unmarshaller XML'i nesneye, Marshaller nesneyi XML'e çevirir. Java 11'den beri JDK'da yoktur, projeye bağımlılık olarak eklenir.
XML özniteliği ve öğesi nedir?
XML'de bir bilgi iki yolla taşınır: öğe (<tutar>1250</tutar>) ya da öznitelik (<siparis no="1024">). Öznitelik yalnız tek bir metin değeri taşıyabilir ve tekrarlanamaz; öğe ise alt öğe barındırabilir ve birden çok kez geçebilir. JAXB bu farkı @XmlAttribute ve @XmlElement etiketleriyle ayırır; yanlış etiket seçilirse alan boş okunur.
JAXB ile Jackson XML arasındaki fark nedir?
JAXB, Java'nın XML için tanımlı standardıdır ve @XmlElement gibi etiketlerle çalışır; SOAP istemcileri, xjc ile XSD'den üretilen sınıflar ve Jakarta EE sunucuları bunu bekler. Jackson XML (jackson-dataformat-xml) ise JSON için kullanılan Jackson'ın XML eklentisidir ve @JacksonXmlProperty gibi kendi etiketlerini kullanır; JAXB etiketlerini de bir modülle okuyabilir. Projeniz SOAP ya da XSD tabanlıysa JAXB, zaten Jackson ile JSON işleyen bir REST projesiyse Jackson XML daha az bağımlılık getirir.
Hangi XML parçası hangi JAXB etiketine dönüşür
JAXB, XML ile Java alanlarını etiketlerle eşleştirir; araç her alanı XML'deki asıl adıyla etiketler, bu yüzden Java alan adı farklı olsa da okuma doğru çalışır. Sınıflar @XmlAccessorType(XmlAccessType.FIELD) taşır: JAXB getter'lara değil alanlara bakar, getter/setter yalnız sizin kodunuz içindir.
Tekrarlanan öğe kararı tek bir ebeveyne bakarak verilmez: bir siparişte tek kalem, diğerinde üç kalem varsa kalem her yerde List<Kalem> olur. Aksi hâlde tek kalemli belge okunurken alan tipi uyuşmaz.
- <siparis no="1024"> → @XmlAttribute(name = "no") private int no;
- <tutar>1250.50</tutar> → @XmlElement(name = "tutar") private double tutar;
- <kalem kod="TR-11">Çelik tencere</kalem> → Kalem sınıfı: @XmlAttribute kod + @XmlValue value
- iki <kalem> → @XmlElement(name = "kalem") private List<Kalem> kalem;
Dürüst sınırlar: ad alanı, karışık içerik, tarih
Ad alanları (xmlns) çözülmez: <cbc:ID> öğesinin öneki atılır, alan yalnız "ID" adıyla etiketlenir. Belgeniz ad alanlıysa üretilen sınıflara namespace = "..." bilgisini ya da package-info.java içinde @XmlSchema tanımını elle eklemeniz gerekir; UBL e-Fatura gibi büyük şemalarda XSD'den xjc ile üretim daha doğru sonuç verir.
Metin ile alt öğenin karıştığı öğede (<not>Kapıda <b>ödeme</b></not>) metin atlanır ve sınıfın başına bir yorum satırı düşülür, çünkü JAXB'de @XmlValue ile @XmlElement aynı sınıfta kullanılamaz. Tarih metinleri (2026-09-27) LocalDate'e çevrilmez, String kalır; tek örnekten tip tahmin edildiği için örneğiniz ne kadar çeşitliyse sınıf o kadar doğru olur.
Sık sorulanlar
XML'den Java sınıfı nasıl oluşturulur?
Örnek XML'i bu sayfanın sol paneline yapıştırın, paket adını yazın. Sağ panelde JAXB etiketleri hazır bir Java sınıfı oluşur. Kodu kopyalayın ya da indirin; dosya kök sınıfın adını taşır ve olduğu gibi projenize eklenebilir.
jakarta mı javax mı seçmeliyim?
JAXB, Java 11'de JDK'dan çıkarıldı ve Jakarta EE 9 ile paket adı jakarta.xml.bind oldu. Spring Boot 3 ya da güncel bir Jakarta EE sunucusu kullanıyorsanız jakarta seçin. Java 8 üzerinde ya da Spring Boot 2 ile çalışan eski bir projedeyseniz javax seçin; yanlış paket derleme hatası verir.
Posta kodu neden int değil String oldu?
Sıfırla başlayan değerler (06100, 0532…) sayı olarak okunursa baştaki sıfır kaybolur. Araç bu yüzden sıfırla başlayan ve 18 haneden uzun değerleri String bırakır. Bütün alanları metin olarak almak isterseniz "Sayı ve true/false değerleri" seçeneğini Hepsi String yapın.
Yapıştırdığım XML bir sunucuya gidiyor mu?
Hayır. XML'in okunması, tiplerin çıkarılması ve Java kodunun yazılması tamamen tarayıcınızda yapılır; müşteri bilgisi içeren bir servis yanıtı bile bu sayfadan dışarı çıkmaz.