Java >> Java tutorial >  >> Tag >> class

Generer dine JAXB-klasser på et sekund med xjc

Da JAXB er en del af JDK, er det et af de mest brugte rammer til at behandle XML-dokumenter. Det giver en behagelig måde at hente og gemme data fra XML-dokumenter til Java-klasser. Da næsten alle Java-udviklere allerede har brugt JAXB, vil jeg ikke forklare de forskellige JAXB-annoteringer. I stedet vil jeg fokusere på et lille kommandolinjeværktøj kaldet xjc og vise dig, hvordan du genererer dine bindingsklasser baseret på en eksisterende XSD-skemabeskrivelse.

Implementering af alle bindingsklasser til en eksisterende XML-grænseflade kan være en tidskrævende og kedelig opgave. Men den gode nyhed er, at du ikke behøver at gøre det. Hvis du har en XSD-skemabeskrivelse, kan du bruge xjc-bindingskompileren til at oprette de påkrævede klasser. Og endnu bedre, xjc er en del af JDK. Så der er ikke behov for eksterne værktøjer, og du bør altid have det ved hånden, hvis det kræves.

Brug af xjc

Som du kan se i uddraget nedenfor, understøtter xjc mange muligheder. De vigtigste er  

  • -d for at definere, hvor de genererede klasser skal gemmes i filsystemet,
  • -p for at definere den pakke, der skal bruges og selvfølgelig
  • -hjælp hvis du har brug for andet.

Eksempel

OK, så lad os se på et eksempel. Vi vil bruge følgende XSD-skemadefinition og xjc til at generere klasserne Author og Book med de beskrevne egenskaber og påkrævede JAXB-annoteringer.

Følgende kommando kalder xjc og giver målbiblioteket for de genererede klasser, pakken og XSD-skemafilen.

OK, operationen blev gennemført med succes, og vi har nu 3 genererede klasser i vores src-bibliotek. Det er måske en mere, end nogle har forventet. Så lad os tage et kig på hver af dem.

Klasserne Forfatter og Bog ser ud som forventet. De indeholder egenskaberne beskrevet i XSD-skemaet og de nødvendige JAXB-annoteringer.


Den tredje og måske uventede klasse er klassen ObjectFactory. Den indeholder fabriksmetoder for hver genereret klasse eller grænseflade. Dette kan være rigtig nyttigt, hvis du skal oprette JAXBElement-repræsentationer af dine objekter.

Konklusion

Vi havde et kig på xjc og brugte det til at generere de nødvendige bindingsklasser til en eksisterende XSD-skemadefinition. xjc genererede en klasse for hver kompleks type og en ekstra fabriksklasse for at lette oprettelsen af ​​JAXBElement-repræsentationer.

Hvad synes du om xjc og den genererede kode? Efterlad mig en kommentar og fortæl mig om det.
Jeg synes, dette værktøj genererer meget ren kode og sparer en masse tid. I de fleste tilfælde kan den genererede kode føjes direkte til et projekt. Men selvom dette ikke er tilfældet, er det meget hurtigere at lave noget refaktorering baseret på den genererede kode end at gøre alting selv.

Yderligere læsning

  • JSR 222 (JAXB)
  • https://jaxb.java.net/

Java tag