Jest tu facet, który przysięga, że JAXB to najlepsza rzecz od czasów krojonego chleba. Jestem ciekawy, co użytkownicy Stack Overflow uważają za przypadek użycia dla JAXB i co sprawia, że jest to dobre lub złe rozwiązanie w tym przypadku.
Jest tu facet, który przysięga, że JAXB to najlepsza rzecz od czasów krojonego chleba. Jestem ciekawy, co użytkownicy Stack Overflow uważają za przypadek użycia dla JAXB i co sprawia, że jest to dobre lub złe rozwiązanie w tym przypadku.
Odpowiedzi:
Jestem wielkim fanem JAXB do manipulowania XML. Zasadniczo zapewnia rozwiązanie tego problemu (zakładam znajomość XML, struktur danych Java i schematów XML):
Praca z XML jest trudna. Potrzebny jest sposób na pobranie pliku XML - który jest w zasadzie plikiem tekstowym - i przekonwertowanie go na jakąś strukturę danych, którą twój program może następnie manipulować.
JAXB weźmie napisany przez Ciebie schemat XML i utworzy zestaw klas odpowiadających temu schematowi. Narzędzia JAXB utworzą hierarchię struktur danych do manipulowania tym XML.
JAXB może być następnie użyty do odczytania pliku XML, a następnie utworzenia instancji wygenerowanych klas - obciążonych danymi z Twojego XML. JAXB robi również odwrotnie: pobiera klasy java i generuje odpowiedni XML.
Lubię JAXB, ponieważ jest łatwy w użyciu i zawiera Javę 1.6 (jeśli używasz 1.5, możesz pobrać JAXB .jars). Sposób, w jaki tworzy hierarchię klas, jest intuicyjny, az mojego doświadczenia dobrze się spisuje abstrahując od „XML”, abym mógł skupić się na „danych”.
A więc odpowiadając na twoje pytanie: spodziewałbym się, że w przypadku małych plików XML JAXB może być przesadą. Wymaga tworzenia i utrzymywania schematu XML oraz używania „standardowych metod podręcznikowych” wykorzystywania klas Java do struktur danych. (Klasy główne, małe klasy wewnętrzne reprezentujące „węzły” i ogromna ich hierarchia). Tak więc JAXB prawdopodobnie nie jest zbyt dobry dla prostej liniowej listy „preferencji” dla aplikacji.
Ale jeśli masz dość złożony schemat XML i zawiera wiele danych, to JAXB jest fantastyczny. W moim projekcie konwertowałem duże ilości danych między binarnymi (które były używane przez program w C) a XML (aby ludzie mogli je konsumować i modyfikować). Wynikowy schemat XML był nietrywialny (wiele poziomów hierarchii, niektóre pola można było powtarzać, inne nie), więc JAXB był pomocny w manipulowaniu tym.
Oto powód, aby go nie używać: cierpi na tym wydajność. Podczas organizowania i cofania kaucji jest dużo kosztów ogólnych. Możesz również rozważyć inny interfejs API do wiązania obiektów XML - na przykład JiBX: http://jibx.sourceforge.net/
To jest „ORM dla XML”. Najczęściej używany wraz z JAX-WS (i faktycznie implementacje Sun są opracowywane razem) dla systemów WS Death Star.
W pracy używam JAXB cały czas i naprawdę to uwielbiam. Jest idealny do złożonych schematów XML, które zawsze się zmieniają, a szczególnie nadaje się do swobodnego dostępu do tagów w pliku XML.
Nienawidzę alfonsować, ale właśnie założyłem bloga i jest to dosłownie pierwsza rzecz, o której pisałem!
Sprawdź to tutaj:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
Z JAXB możesz automatycznie tworzyć reprezentacje XML swoich obiektów (krosowanie) i reprezentacje obiektów XML (unmarshalling).
Jeśli chodzi o schemat XML, masz dwie możliwości:
Istnieją również prostsze biblioteki serializacji XML jak XStream , fermentacyjnej lub XMLBeans które mogą być alternatywy.
JAXB jest świetny, jeśli musisz kodować według jakiejś zewnętrznej specyfikacji XML zdefiniowanej jako schemat XML ( xsd
).
Na przykład, masz aplikację handlową i musisz zgłosić transakcje do aplikacji Uber Lame Trade Reporting, a oni dali ci ultra.xsd
do zrobienia. Użyj $JAVA_HOME/bin/xjc
kompilatora, aby przekształcić XML w kilka klas Java (np UltraTrade
.).
Następnie możesz po prostu napisać prostą warstwę adaptera , aby przekonwertować obiekty handlowe na UltraTrades
i użyć JAXB
do kierowania danych do Ultra-Corp. O wiele łatwiejsze niż kłopoty z konwersją transakcji do ich formatu XML.
Tam, gdzie wszystko się psuje, jest sytuacja, gdy Ultra-Corp faktycznie nie przestrzega swoich własnych specyfikacji, a handel, price
który mają jako a, xsd:float
powinien być wyrażony jako double
!
Dlaczego potrzebujemy JAXB? Zdalne komponenty (napisane w Javie) usług sieciowych wykorzystują XML jako środek do wymiany komunikatów między sobą. Dlaczego XML? Ponieważ XML jest uważany za lekką opcję wymiany wiadomości w sieciach z ograniczonymi zasobami. Tak często musimy przekonwertować te dokumenty XML na obiekty i odwrotnie. Np .: Prosta Java POJO Pracownik może być używana do wysyłania danych Pracownika do zdalnego komponentu (także programu Java).
class Employee{
String name;
String dept;
....
}
To Pojo powinno zostać przekonwertowane (Marshall) na dokument XML w następujący sposób:
<Employee>
<Name>...</Name>
<Department>...</Department>
</Employee>
A w komponencie zdalnym z powrotem do obiektu Java z dokumentu XML (Un-Marshall).
Co to jest JAXB?
JAXB to biblioteka lub narzędzie do wykonywania tej operacji Marshallingu i UnMarshalling. To oszczędza ci tego bólu głowy, tak prostego.
Możesz także sprawdzić JIBX. Jest to również bardzo dobry segregator danych xml, który również specjalizuje się w OTA (Open Travel Alliance) i jest obsługiwany przez serwery AXIS2. Jeśli szukasz wydajności i kompatybilności, możesz to sprawdzić:
JAXB zapewnia lepszą wydajność dzięki domyślnej optymalizacji krosowania. JAXB definiuje programistyczny interfejs API do odczytywania i zapisywania obiektów Java do iz dokumentów XML, upraszczając w ten sposób odczytywanie i zapisywanie XML za pośrednictwem języka Java.