/ / Dodaj metodę unmarshalling do POJO wygenerowanych przez JAXB - java, xml, maven, xsd, jaxb

Dodaj metodę unmarshalling do wygenerowanych przez JAXB POJO - java, xml, maven, xsd, jaxb

Mam kilka plików XSD, które przekształcam w POJO za pomocą wtyczki jaxb maven.

Do celów logowania chciałbym mieć metodę „unmarshal” bezpośrednio zintegrowaną z obiektami JAXB, aby móc wywołać coś takiego generatedPOJO.toXMLString(), wiedząc to generatedPOJO to POJO wygenerowany z pliku XSD przez JAXB.

Próbowałem zajrzeć do Niestandardowa dokumentacja powiązań, ale nic z tego nie mam.

Dziękuję za pomoc.

EDYTOWAĆ: Chcę, aby JAXB, oprócz generowania POJO z plików XSD, dodał toXMLString() metoda do tych POJO.

Ta metoda musi zostać wygenerowana przez JAXB, ponieważ nie mogę edytować wygenerowanego POJOS.

Odpowiedzi:

2 dla odpowiedzi № 1

Krótko mówiąc, nie rób tego, to nie będzie dobry projekt.

Chociaż, jak wskazał @ j.con, możliwe jest dodanie kolejnych metod do generowanych klas za pomocą -xinject-code lub niestandardową wtyczkę XJC, dodanie metody marshalling nie jest dobrym pomysłem. Z JAXB API będzie dość brzydko.

Aby zrobić cokolwiek, potrzebujesz instancji JAXBContext. Albo przekażesz ją do metody, albo utworzysz instancję w ramach metody.

Ten ostatni nie jest całkiem dobry jako JAXBContext jest tworzony dla kolekcji klas lub pakietów (ścieżka kontekstu). Będziesz więc musiał wstępnie ustawić, z jakimi klasami możesz używać swojej klasy. W ten sposób tracisz elastyczność.

Następnie marshallers JAXB produkują wiele rzeczy, nietylko ciągi znaków / wyniki strumieniowe, ale także DOM, SAX lub StAX. Interfejs API JAXB jest całkiem fajny. Zdecydowanie się na łańcuchy wydaje się być krótkowzrocznym wyborem.

Wreszcie nie sądzę, aby dodać toXMLString() lub cokolwiek jest tak dużo słodkiego cukru syntaktycznego w porównaniu do prostej usługi użyteczności publicznej lub klasy. I włamanie się do generowania kodu w tym celu naprawdę wydaje się niewłaściwym wysiłkiem.