2009-10-30 26 views
10

Próbuję znaleźć najprostszy sposób odwzorowania pliku xml na zwykły stary obiekt java.Simple Java Xml do mapowania/wiązania POJO?

Uwaga: że w moim przykładzie xml nie pasuje do mojego zamierzonego POJO.

///////// THE XML 
<?xml version="1.0" encoding="UTF-8"?> 
<Animal> 
    <standardName> 
    <Name>Cat</Name> 
    </standardName> 
    <standardVersion> 
    <VersionIdentifier>V02.00</VersionIdentifier> 
    </standardVersion> 
</Animal> 


////// THE INTENDED POJO 
class Animal 
{ 
private String name; 
private String versionIdentifier; 
} 

Regularne JAXB (z adnotacjami) nie będzie działać jak sama nazwa adnotacje JAXM Element nie pozwala mi specifiy elementy zagnieżdżone. (tzn. nazwa standardowa/nazwa).

Spojrzałem na Jibx, ale wydaje się to zbyt skomplikowane i nie podano pełnych przykładów tego, co chcę zrobić.

Castro wydaje się być w stanie zrobić to, co chcę (za pomocą plików mapowania), ale zastanawiam się, czy istnieją inne możliwe rozwiązania. (Być może pozwoliłoby mi to pominąć pliki mapowania i po prostu pozwolić mi określić wszystko w adnotacjach).

Dzięki

+0

jako dodatkowej, odwzorowanie/wiązania musiałby działać w obie strony. – vicsz

Odpowiedz

3

Ten artykuł może pomóc ... to wymaga jedynie, aby wiedzieć XPath http://onjava.com/onjava/2007/09/07/schema-less-java-xml-data-binding-with-vtd-xml.html

+2

Wygląda na to, że prawdopodobnie będziemy najlepszym wyborem, (nie mając plików mapowania ani adnotacji), ale po prostu mając jakąś formę metod translatorskich za pomocą xpath i ewentualnie vtdxml lub dom. – vicsz

+1

należy zachować ostrożność przy użyciu analizatora, nie jest to pełny analizator składni i może być bardzo wolny w przypadku dużych dokumentów XML. –

2

uważam za JiBX najlepszy z tego grona (JAXB, rycynowy, XMLBeans, etc.), szczególnie dlatego, że sprzyja mapowanie plików w adnotacji. Wprawdzie ma przyzwoitą krzywą uczenia się, ale strona ma wiele dobrych przykładów. Musisz przegapić numer tutorial.

Jeśli przechodzisz tylko w jedną stronę (XML -> POJO), możesz użyć Digester.

komentarz Side: Wolę pliki mapowania ponad adnotacji ponieważ adnotacje:

  • bałagan kod (zwłaszcza przy użyciu adnotacji z kilku produktów)
  • mix dotyczy (XML, bazy danych, itp warstwy domeny)
  • może wiązać tylko do jednego pliku XML (lub bazy danych lub usługi internetowej, itp) reprezentacja
+0

Przeczytałem samouczek, ale chyba że coś przeoczyłem ... wydaje się, że jest kilka dodatkowych kroków wymaganych (w porównaniu do Castro), tj. Wymagania dotyczące uruchamiania bindgen. (Co nie jest zbyt łatwo wyjaśnione na stronie internetowej). Wygląda na to, że nadmierna komplikacja musi uruchamiać bindgen na plikach mapujących, zanim będzie można z nich korzystać. Czy dostępne są proste samouczki/fragmenty? tj. Biorąc pod uwagę ten plik xml, ten plik odwzorowania XML, a ten fragment kodu, otrzymasz tę instancję POJO. – vicsz

+0

EclipseLink JAXB (MOXy) oferuje również plik odwzorowania. Daje to swobodę korzystania z adnotacji (standardowe JAXB plus rozszerzenia) lub pliku odwzorowania. –

4

EclipseLink JAXB (MOXy) pozwala wykonać mapowanie oparciu ścieżka że szukasz:

@XmlRootElement 
class Animal 
{ 
@XmlPath("standardName/Name/text()") 
private String name; 

@XmlPath("standardVersion/VersionIdentifier/text()"); 
private String versionIdentifier; 
} 

uzyskać więcej informacji zobacz:

EclipseLink pozwala również metadane być określane przy użyciu pliku konfiguracji zewnętrznej:

+0

Łącze linku 'EclipseLink JAXB (MOXy)' przekierowuje do * 404 * –

+0

Bieżący link to http://www.eclipse.org/ eclipselink/# moxy –