2009-10-30 10 views
10

Estoy tratando de descubrir la forma más simple de asignar un archivo xml a un objeto java viejo y simple.¿Mapeo simple Java Xml a POJO mapeo/encuadernación?

Nota: Que en mi ejemplo, el xml no coincide exactamente con mi POJO previsto.

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

JAXB regular (con anotaciones) no funcionará como el nombre anotaciones JAXM Element no me permiten specifiy elementos anidados. (es decir, nombreNombre/Nombre).

Miré Jibx pero parece demasiado complicado, y no se proporcionan ejemplos completos de lo que quiero hacer.

Parece que Castro podría hacer lo que quiero (utilizando archivos de mapeo), pero me pregunto si hay otras posibles soluciones. (Posiblemente eso me permitiría omitir los archivos de mapeo, y solo permitirme especificar todo en las anotaciones).

Gracias

+0

Como nota adicional, el mapeo/unión tendría que funcionar en ambos sentidos. – vicsz

Respuesta

3

Este artículo puede ayudarle a ... que sólo requiere que sepas XPath http://onjava.com/onjava/2007/09/07/schema-less-java-xml-data-binding-with-vtd-xml.html

+2

Parece que es probable que tengamos la mejor opción, (no tener archivos de mapeo, o anotaciones), sino simplemente tener algún tipo de método de traductor utilizando xpath, y posiblemente vtdxml, o dom. – vicsz

+1

tenga cuidado con digestor, no es un analizador completo y puede ser muy lento para grandes documentos XmL –

2

considero JiBX el mejor del grupo (JAXB, Castor, XMLBeans, etc.), sobre todo porque estoy a favor de la cartografía de archivos a través de anotaciones. Es cierto que tiene una curva de aprendizaje decente, pero el sitio web tiene muchos buenos ejemplos. Debe haberse perdido el tutorial.

Si solo va por un camino (XML -> POJO) puede usar Digester.

comentario al margen: Prefiero archivos de asignación sobre anotaciones porque anotaciones:

  • desorden del código (especialmente cuando se utiliza anotaciones de varios productos)
  • preocupaciones de mezcla (XML, bases de datos, etc., en la capa de dominio)
  • sólo puede unirse a una sola XML (o base de datos o servicios web, etc.) representación
+0

Leí el tutorial, pero a menos que me haya perdido algo ... parece que se requieren algunos pasos adicionales (en comparación con Castro), es decir, los requisitos para ejecutar bindgen. (Que realmente no se explica muy fácilmente en el sitio web). Parece una sobrecomplicación tener que ejecutar bindgen en tus archivos de mapeo antes de que puedas usarlos. ¿Hay sencillos tutoriales/fragmentos disponibles? es decir, dado este archivo xml, este archivo de mapeo xml y este fragmento de código, obtendrá esta instancia POJO. – vicsz

+0

EclipseLink JAXB (MOXy) también ofrece un archivo de mapeo. Esto le da la libertad de usar anotaciones (extensiones estándar JAXB más extensiones) o un archivo de mapeo. –

3

Jakarta Commons Digester debería hacer lo que desee.

Como alternativa, recomendaría escribir una clase de transformación que use XPath para recuperar elementos del XML.

4

EclipseLink JAXB (MOXy) le permite hacer el mapeo basado camino que usted está buscando:

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

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

Para más información ver:

EclipseLink también permite que los metadatos para ser especificado usando un archivo de configuración externo:

+0

El enlace 'EclipseLink JAXB (MOXy)' redirige a * 404 * –

+0

El enlace actual es http://www.eclipse.org/ eclipselink/# moxy –