Konwerter Java na XML
Wklej klasy Javy albo POJO. Dostajesz czysty XML.
Co robi to narzędzie
Jeśli kiedykolwiek musiałeś ręcznie napisać payload XML pasujący do klasy Javy — do klienta SOAP, configa Springa, legacy integracji bankowej albo fixture'a JUnit — już wiesz, jaka to zmora. Wklej Javę tutaj i w jednym strzale dostajesz poprawny XML. Pojedyncze POJO, plik z DTO ozdobionymi Lombokiem albo głęboko zagnieżdżony model z kilkoma klasami — wynik ten sam: kompletny dokument XML z każdym polem na swoim miejscu.
To nie jest ślepe templating. Konwerter wie, jak Java serializuje się do XML: BigDecimal trzyma dokładną precyzję (bez notacji wykładniczej), LocalDate i LocalDateTime wychodzą jako ISO-8601, UUID staje się standardowym hex-stringiem 8-4-4-4-12, Instant to timestamp z końcówką Z, a opakowane prymitywy z null-em zamieniają się w puste elementy. List<T> staje się elementem-kontenerem — domyślnie wrap'owanym, z jednym dzieckiem na item — dokładnie jak wyprodukowałby to Jakarta XML Binding (JAXB).
Adnotacje są respektowane dokładnie tak, jak traktuje je Eclipse JAXB RI. @XmlRootElement(name="...") zmienia nazwę roota, @XmlElement(name="...") zmienia nazwę dziecka, @XmlAttribute wystawia pole jako atrybut na rodzicu, @XmlTransient wywala je kompletnie, a @XmlElementWrapper dokłada zewnętrzny kontener wokół kolekcji. Lombok @Data też śmiga — wygenerowane gettery i settery są traktowane jak bean-properties. Jeśli wolisz moduł Jackson XML, jego @JacksonXmlProperty i @JacksonXmlElementWrapper też są honorowane. Zagnieżdżone klasy, odziedziczone pola i kilka klas top-level — wszystko wychodzi czysto.
Jak tego używać
Trzy kroki. Działa tak samo, czy wklejasz jedno POJO, czy plik z tuzinem klas.
Wklej swoją Javę (albo odpal przykład)
Wrzuć Javę do edytora po lewej tak jak jest. Zwykłe POJO, klasa @Data z Lombokiem, DTO z adnotacjami JAXB albo plik z kilkoma klasami — wszystko śmiga. Kliknij Load Sample, żeby najpierw zobaczyć sensowny przykład.
Nie musisz wycinać importów, kasować adnotacji ani czyścić pliku. Wklej tak, jak masz w IDE — komentarze, deklaracja package, wszystko.
Kliknij Convert
Kliknij zielony przycisk Convert. Narzędzie czyta Javę, zachowuje każde pole i klasę, respektuje adnotacje i buduje XML w jednym przebiegu. Na chwilę zobaczysz wskaźnik ładowania.
Skopiuj XML
Prawy panel zapełnia się wciętym, poprawnym XML-em, który łyknie każdy zgodny ze standardem parser XML. Skopiuj go do swojego envelope'a SOAP, configa Spring Boot, testu integracyjnego albo przykładu schemy XSD.
Kiedy to realnie ratuje dupę
Budowanie fixture'ów SOAP
Masz request DTO z JAX-WS albo Apache CXF i potrzebujesz body XML pod SoapUI albo Postmana. Wklejasz klasę, dostajesz XML gotowy do envelope'a, robisz dalej swoje.
Configi XML w Spring Boot
Klasa Spring @ConfigurationProperties z 30 polami zamienia się w gotowy do edycji template XML — koniec z ręcznym pisaniem boilerplate'u applicationContext.xml.
Utrzymanie docsów i kodu w jednej linii
Wygeneruj przykłady XML do README, wewnętrznej wiki albo dokumentacji schem XSD wprost z prawdziwych klas encji, żeby przykłady nigdy nie odstawały od kodu.
Seedowanie legacowych testów integracyjnych
Zamień swoje object-mothery z JUnita na seed'owe pliki XML dla mock serverów, fixture'ów IBM MQ albo legacowych systemów enterprise, które wciąż gadają w XML-u.
Częste pytania
Mogę wkleić kilka klas naraz?
Tak — wklej cały plik. Każda klasa top-level wychodzi z rozwiniętymi typami zagnieżdżonymi i polami odziedziczonymi z superklas. Klasy, do których root się nie odwołuje, są emitowane jako osobne fragmenty XML, więc nic nie znika po cichu.
Respektuje adnotacje JAXB typu @XmlRootElement, @XmlElement, @XmlAttribute i @XmlTransient?
Tak. @XmlRootElement(name="x") zmienia nazwę roota, @XmlElement(name="x") zmienia nazwę dziecka, @XmlAttribute(name="x") wystawia pole jako atrybut na rodzicu, @XmlTransient wywala je, a @XmlElementWrapper dokłada zewnętrzny kontener wokół kolekcji. Pokrywa się to z zachowaniem opisanym w tutorialu JAXB.
A co z Lombokiem i Jackson XML?
Lombok @Data, @Getter i @Setter są traktowane tak, jakby akcesory były napisane ręcznie. Adnotacje Jackson XML — @JacksonXmlProperty, @JacksonXmlRootElement, @JacksonXmlElementWrapper, @JacksonXmlText — też są honorowane, więc klasy zbudowane pod XmlMapper z Jackson dataformats-text wychodzą poprawnie.
Jak są obsługiwane BigDecimal, LocalDate, UUID i pola null?
BigDecimal trzyma pełną precyzję, bez notacji wykładniczej. LocalDate, LocalDateTime i ZonedDateTime wychodzą jako stringi ISO-8601. Instant dostaje suffix Z. UUID to standardowy hex 8-4-4-4-12 lowercase. Optional.empty() i opakowane prymitywy z null-em stają się pustymi elementami zamiast znikać, dzięki czemu kształt XML-a jest spójny między instancjami.
Czy mój kod jest gdzieś zapisywany?
Kod leci na backend tylko na czas konwersji i nie jest nigdzie zapisywany — nie logujemy payloadu. Tak jak z każdym narzędziem online: jeśli kod jest naprawdę wrażliwy, rzuć okiem przed wklejeniem.
Co jeśli w klasie jest coś nietypowego — Streamy, CompletableFuture albo pole transient?
Pola oznaczone transient albo adnotowane @XmlTransient / @JsonIgnore są pomijane. Typy, dla których świat XML nie ma bezpośredniego mapowania (Streamy, CompletableFuture, własne interfejsy funkcyjne) wychodzą jako puste elementy, zamiast wywalić całą konwersję. Jeśli sama Java ma błąd kompilacji, najpierw napraw te oczywiste — parser jest wyrozumiały, ale nie jest pełnoprawnym javac.
Inne narzędzia, które mogą się przydać
Java na XML to tylko kawałek układanki. Do pary z nim dobrze grają: