2011-07-22 4 views
5

Jestem nowym XML Schema i JAXB i zastanawiasz się, jaki jest najlepszy lub oczekiwane podejście do korzystania z wtyczki Maven JAXB (http://static.highsource.org/mjiip/maven-jaxb2-plugin/generate-mojo.html) jest.Oczekiwany lub Zalecane korzystanie z 2.x Plugin Maven JAXB

mam prosty format dokumentu XML, dla którego zdefiniowałem schemat, jestem przede wszystkim zainteresowany czytaniem zgodnego pliku XML w Javie, ale prawdopodobnie będę chciał dodać dodatkowe właściwości do POJO, które nie będą w formacie XML, ale będzie użyty w czasie wykonywania.Narzędzia:

Domyślnie wtyczka umieszcza wygenerowany kod w $ {project.build.directory}/generated-sources/xjc. Myślę, że chcę skopiować wygenerowany kod do/src/main/java/cokolwiek i dodaj do/zmień kod na dodaj moje dodatkowe właściwości. Gdy zmienię schemat, scalę zmiany z nowo wygenerowanych POJO w moje własne.

Alternatywą jest podanie wtyczki, aby umieścić wygenerowane źródło bezpośrednio w/src/main/java i być może podklasę POJO, aby dodać własne właściwości, ale nie jestem pewien, czy nadal można wykonać podsłuch/anulowanie przygotowałem do korzystania z moich rozszerzonych klas.

Ktoś ma jakieś wskazówki, które podejście jest bardziej normalne lub jakie są pułapki każdego z nich?

Odpowiedz

2

W twoim miejscu zostawię wygenerowane źródła tam, gdzie są, aby odpowiedni pojemnik mógł zostać zbudowany przez Mavena bez dalszej konfiguracji i umieścić swój niestandardowy kod w innym projekcie, który zależy od pierwszego. Zapewnia to, że wszystko jest budowane we właściwej kolejności.

To jest twój wybór, czy czerpać z wygenerowanych klas, czy po prostu wykorzystywać ich instancje w kodzie, jako atrybuty lub, jeszcze lepiej, zmienne lokalne. Osobiście uniknęłbym wyprowadzania; w końcu JAXB to tylko maszyny niskiego poziomu, których używa się do wykonania operacji we/wy w określonym formacie.

Co najważniejsze: zapomnij o modyfikowaniu wygenerowanych źródeł; Po co wprowadzać błąd, jeśli chodzi o ręczny krok w procesie rozwoju, kiedy można uzyskać ten sam efekt automatycznie?

+0

Bardzo dziękuję, to jest moje pierwsze pytanie typu "przepełnienie stosu" i bardzo przydatne jest mieć doświadczenie w prawdziwym świecie, aby mnie prowadzić. Spojrzę na podklasowanie wygenerowanych plików i zobaczę, czy mogę je uruchomić. Mogę również móc używać atrybutów schematu z wartościami domyślnymi do generowania klas, które mają pola, których potrzebuję, co spowodowałoby, że musiałbym w ogóle podklasować wygenerowane źródła. – barnyr

1

(Aby zapewnić niewielką zmienność na odpowiedź Nicola)

Jeśli schemat rzadko zmienia to może sens mają zupełnie oddzielny build który właśnie tworzy JAXB wygenerowany kod, słoiki Opisz wersje go i kije to w twoim repozytorium.

Następnie w swoim dalszym kodzie używasz tego słoika jako zależności i podklasuj kod JAXB, aby dodać nowe pola.

Wybraliśmy się na tę trasę, ponieważ uważaliśmy, że posiadanie JAXB z kompilacją za każdym razem, gdy robimy kompilację, jest niepotrzebne, ponieważ nasze schematy były dość statyczne.

Co najważniejsze: zapomnij o modyfikowaniu wygenerowanych źródeł; Po co wprowadzać błąd, jeśli chodzi o ręczny krok w procesie rozwoju, kiedy można uzyskać ten sam efekt automatycznie?

Absolutnie.

+0

Dzięki Roy, podoba mi się pomysł uruchomienia generowania jako osobnego projektu. Oczekuje się, że schemat zmieni się bardzo powoli, więc może być odpowiedni. – barnyr

0

Aby opracować i rozszerzyć punkt już dobrze wykonany ... jeśli istnieje wiele niejawnych relacji i rzeczy, które chcesz umieścić "pobiera" na kod JAXB dla, ugryźć bullet i owinąć JAXB Hierarchia klas w jednym, który robi dokładnie to, czego chcesz, tam gdzie chcesz.

Dzięki delegacji wspieranej przez IDE jest to tylko trochę żmudne i powoduje wiele prostego, rozpraszającego, niskiego poziomu kodu z głównej aplikacji.

Kolejną korzyścią jest to, że będziesz spędzać dużo mniej czasu na walce z JAXB, aby generować rzeczy dokładnie tak, jak chcesz - opakowania sprawią, że będziesz troszczyć się o wiele mniej.