2009-10-30 3 views
10

J'essaie de trouver le moyen le plus simple de mapper un fichier xml à un simple objet java.Simple Java Xml à POJO mappage/liaison?

Remarque: Dans mon exemple, le fichier XML ne correspond pas tout à fait à mon POJO prévu.

///////// 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; 
} 

régulier JAXB (avec annotations) ne fonctionnera pas comme les annotations de nom d'élément JAXM ne me permettent pas de spécifier des éléments imbriqués. (c'est-à-dire nom standard/nom). J'ai regardé Jibx mais cela semble trop compliqué, et aucun exemple complet n'est fourni pour ce que je veux faire. Castro semble pouvoir faire ce que je veux (en utilisant des fichiers de mapping), mais je me demande s'il existe d'autres solutions possibles. (Peut-être que cela me permettrait d'ignorer les fichiers de mappage et de me permettre de tout spécifier dans les annotations).

Merci

+0

Comme une note supplémentaire, la cartographie/liant devrait travailler dans les deux sens. – vicsz

Répondre

3

Cet article peut vous aider ... il ne vous oblige à connaître XPath http://onjava.com/onjava/2007/09/07/schema-less-java-xml-data-binding-with-vtd-xml.html

+2

On dirait que ce sera probablement le meilleur choix, (n'ayant pas de fichiers de mapping, ou d'annotations), mais ayant juste une forme de méthodes de traducteur utilisant xpath, et éventuellement vtdxml, ou dom. – vicsz

+1

soyez prudent avec digesteur, ce n'est pas un analyseur complet et peut être très lent pour les grands documents XmL –

2

je considère JiBX le meilleur du groupe (JAXB, Castor, XMLBeans, etc.), en particulier parce que je suis favorable à des fichiers de mapping sur les annotations. Certes, il a une courbe d'apprentissage décent, mais le site a beaucoup de bons exemples. Vous devez avoir raté le tutorial.

Si vous n'utilisez qu'une seule méthode (XML -> POJO), vous pouvez utiliser Digester.

commentaire Side: Je préfère les fichiers de mappage sur des annotations, car les annotations:

  • encombrent le code (en particulier lors de l'utilisation des annotations de plusieurs produits)
  • préoccupations mix (XML, base de données, etc. dans la couche de domaine)
  • ne peut se lier à un XML unique (ou base de données, ou d'un service Web, etc.) représentation
+0

J'ai lu le tutoriel, mais à moins que j'aie manqué quelque chose ... il semble y avoir quelques étapes supplémentaires (par rapport à Castro), c'est-à-dire les conditions requises pour exécuter bindgen. (Ce qui n'est pas vraiment expliqué trop facilement sur le site). Il semble qu'il soit trop compliqué d'exécuter bindgen sur vos fichiers de mapping avant de pouvoir les utiliser. Y a-t-il des didacticiels/extraits simples disponibles? En raison de ce fichier xml, de ce fichier de mappage XML et de ce fragment de code, vous obtiendrez cette instance POJO. – vicsz

+0

EclipseLink JAXB (MOXy) propose également un fichier de correspondance. Cela vous donne la liberté d'utiliser des annotations (celles de JAXB standard plus les extensions) ou un fichier de mappage. –

3

Jakarta Commons Digester devrait faire ce que vous voulez.

Alternativement, je recommanderais d'écrire une classe de transformation qui utilise XPath pour récupérer des éléments du XML.

4

EclipseLink JAXB (MOXy) vous permet de faire le chemin cartographie que vous recherchez:

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

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

Pour plus d'informations, voir:

EclipseLink permet également les métadonnées à l'aide d'un fichier spécifié de configuration externe:

+0

'lien EclipseLink JAXB (MOXy)' redirige vers * 404 * –

+0

Le lien actuel est http://www.eclipse.org/ eclipselink/# moxy –