P. 1
Ejemplo Simple Jaxb

Ejemplo Simple Jaxb

|Views: 366|Likes:
Published by fmurda

More info:

Published by: fmurda on Mar 26, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as TXT, PDF, TXT or read online from Scribd
See more
See less

05/27/2014

pdf

text

original

Cristian Rinaldi: Hola Sara, bienbenida a Juglar: Tu problema es con el compilador de JAXB?

, cuando pasas los schemas a una jer arquía de clases en Java (esto de manera externa). O bien ya tenés hecha la jerarquía de clases y el problema lo tenés en tiempo de co mpilación cuando trabajas con éstas?. Acordate de incluir en las Librerías del proyecto los siguiente jars: JAXB 2.0 - activation.jarJAXB 2.0 - jaxb-api.jarJAXB 2.0 - jaxb-impl.jarJAXB 2.0 - xjc.jarJAXB 2.0 - jsr173_api.jarSi me decis bién tu configuración del entorno te podré ayudar mejor, como que jdk estás usando, y que IDE. Luego te postearé un ejemplo para que lo comprendas mejor. Saludos Cristian Cristian Rinaldi: Hola Sara, como lo prometí aca va un pequeño ejemplo de uso de JAXB: La configuración de mi entorno a la hora de realizar y correr este ejemplo fue la siguiente: NetBeans5.5jdk 1.6Sun Java system application server Lo primero que haremos es c rear un documento xml schema, a esto lo podemos realizar de varias maneras, una de ellas es utilizando el editor de schemas de netbeans (solo si instalaste el E nterprise Pack). Para más información sobre los xml schema, te aconsejo que leas http://www.w3.org/TR /xmlschema11-1/. El Enterprise Pack puedes descargarlo aquí http://www.netbeans.org/products/enterp rise/ El archivo que genere es el siguiente: Código GeSHi (xml): <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://xml.netbeans.org/schema/schema" xmlns:tns="http://xml.netbeans.org/schema/schema" elementFormDefault="qualified"> <xsd:element name="Root" type="tns:TipoRoot"/> <xsd:complexType name="TipoRoot"> <xsd:sequence> <xsd:element name="ListaPersona" type="tns:TipoListaPersona"/> <xsd:element name="ListaNegocio" type="tns:TipoListaNegocio"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="TipoListaPersona"> <xsd:sequence> <xsd:element name="Persona" type="tns:TipoPersona" minOccurs="1" maxO ccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="TipoPersona"> <xsd:sequence> <xsd:element name="nombre" type="xsd:string"/> <xsd:element name="apellido" type="xsd:string"/> <xsd:element name="fechaNacimiento" type="xsd:date"/> <xsd:element name="id" type="xsd:int"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="TipoListaNegocio"> <xsd:sequence> <xsd:element name="Negocio" type="tns:TipoNegocio" minOccurs="1" maxO ccurs="unbounded"/>

pero nos faltan los datos. donde encontrarás una carpeta nombrada src. una jerarquía de carpetas que contendrán las clases que cor responden al schema. este se llama. por lo que vamos a gene rar un documento xml.javaTipoNegocio.</xsd:sequence> </xsd:complexType> <xsd:complexType name="TipoNegocio"> <xsd:sequence> <xsd:element name="nombre" type="xsd:string"/> <xsd:element name="codigo" type="xsd:int"/> </xsd:sequence> </xsd:complexType> </xsd:schema> Created by GeSHI 1.xsd'> <ListaPersona> <Persona> <nombre>XXX</nombre> <apellido>A-XXX</apellido> <fechaNacimiento>1981-07-17</fechaNacimiento> <id>0</id> </Persona> <Persona> <nombre>YYY</nombre> <apellido>A-YYY</apellido> <fechaNacimiento>1982-07-17</fechaNacimiento> <id>1</id> </Persona> </ListaPersona> . 19:52 Author : csrinaldi Description: Purpose of the document follows.org/schema/schema' xmlns:xsi='http://www.netbeans.xml Created on : 22 de mayo de 2007. xjc.7.javaTipo Persona. el cual se debe ajustar al schema antes generado. en el proyecto de NetBeans aparecerá un paquete nuevo cont eniendo las clases generadas. Esto creará dentro de bin. en una consola de comandos. En el caso del archivo de ejemplo las clases generadas son las siguientes: ObjectFactory. Ya hemos realizado el schema.0.18 Una vez creado el archivo.javaTipoRoot.javaTipoListaNegocio. encontrarás el compilador de jaxb. Esto generará una estructura de directorios. Dentro de ésta copiarás lo qu e generó el compilador de jaxb.javaTipoListaPersona.0" encoding="UTF-8"?> <!-Document : xml. File->New File->XML->XML Document. El archivo xml que yo generé es el siguiente: Código GeSHi (xml): <?xml version="1.javaCon las clases ya definidas. o mediante las opciones del compilador direccioná la salida a otro directotio. Verifica que tengas permiso de escritura sobre la carpeta b in. --> <Root xmlns='http://xml.org/2001/XMLSchema-instance' xsi:schemaLocation='http://xml.org/schema/schema file:/home/csrina ldi/SoftwareJava/worckspace/JAXBexample/xml/schema. Esta tar ea la podemos realizar con NetBeans. Una vez realizado esto. Aquí ejecutas xjc <xml schema file>. pasamos a crear un proyecto Java Application con NetBeans. En las p antallas subsecuentes hay que asegurarse de colocar XML-Schema Constrained Docum ent para que el documento sea válido según el schema.javapackage-info.netbeans. te sitúas en el directorio donde tengas esté instalado el servidor de aplicaciones (Sun Java System Applicati on Server) y dentro de la carpeta bin. Donde <xml schema file> es la rut a al archivo antes generado.w3.

schema.bind. import java.newInstance("org.xml. Estos datos se levantarán del archi vo que generamos. import org.io. //"xml/myFile.netbeans.TipoNegocio. 00:25 * * To change this template.xml. import org.schema.xml. En mi caso el archivo se llama myFile.TipoListaNegocio. import org.xml. import javax.xml y se encuntra dentro de una carpeta xml en el proyecto. import javax. import org.7.TipoRoot.netbeans.util.Unmarshaller.schema.schema").xml"))).schema.getValue(). //Es necesario el cast a JAXBElement y luego la aplicacion del metodo getValue() porque el unmarshal no retorna el objeto de la clase TipoRoot.FileInputStream.bind.18 Una vez que tenemos todo esto creado.netbeans. vallamos a lo interesante.schema.xml.java * * Created on 23 de mayo de 2007.schema. import javax.schema.schema.netbeans. import javax.unmarshal( new FileInputStream("xml/myFile.netbeans.<ListaNegocio> <Negocio> <nombre>Java</nombre> <codigo>0</codigo> </Negocio> <Negocio> <nombre>Solaris</nombre> <codigo>1</codigo> </Negocio> </ListaNegocio> </Root> Created by GeSHI 1. import org.xml . La clase que codifiqué se llama Main y su código es el siguiente: Código GeSHi (java): /* * Main. /** * * @author csrinaldi */ public class Main { /** Creates a new instance of Main */ public Main(){ try { //"org.JAXBElement.xml.bind.TipoListaPersona. Creamos la clase que manejará los datos del XML.JAXBContext.xml.xml.xml.TipoPersona.schema.schema" -> Nombre del paquete donde encont rar las clases generadas con el //compilador de JAXB (xjc) Unmarshaller unmarshaller = JAXBContext.netbeans.schema. */ package jaxbexample.schema.Iterator.0.netbeans.JAXBException. .bind.schema.xml. choose Tools | Template Manager * and open the template in the editor.xml" archivo xml donde se encuentran los datos TipoRoot root = (TipoRoot)((JAXBElement)unmarshaller.createUnmarshaller(). import java.

println("El codigo es == " + tn.getListaPersona().xml"))).toString() ).getFechaN acimiento(). } } Created by GeSHI 1.18 Algunas explicaciones sobre el código: Unmarshaller unmarshaller = JAXBContext.xml al arbol de objetos. de otra manera no funciona. System. Aquí le dices cual es el paquete que contiene la jerarquía de clases generada con el compilador de JAXB.getNombre()).out.7.next().println("El id es == " + tp.out.println("********Lista Negocio**********"). TipoRoot es el elemento raiz del árbol. System.getListaNegocio().println("*********Lista Persona*********").getPersona(). System.netbeans. TipoRoot root = (TipoRoot)((JAXBElement)unmarshaller.out. Cabe destacar. para que se pueda realizar el mapeo del xml sobre el árbol de objetos.schema. System. System.xml. si bien la documentación dice lo contrar io.xml.out.getId()).println("El apellido es == " +tp.newInstance("org.getCodigo()).out. que es necesario realizar el cast a (J AXBElement) y luego aplicar el método getValue() para obtener el elemento de la cl ase TipoRoot.hasNext() ){ TipoNegocio tn = itNg. El resto del código es sencillo y se realizan iteraciones sobre los objetos del árbo l. while ( it.schema. La salida de la ejecución del programa es la siguiente: Código GeSHi (bash): El apellido es == A-XXX La fecha de nacimiento es == 1981-07-17 El id es == 0 El nombre es == YYY El apellido es == A-YYY La fecha de nacimiento es == 1982-07-17 El id es == 1 . System.sch ema").TipoListaPersona tipoListaP = root.hasNext() ){ TipoPersona tp = it.out. } } /** * @param args the command line arguments */ public static void main(String[] args) { Main m = new Main().getNombre()). } } catch (Exception ex) { ex. Se realiza el mapeo desde el archivo myFile.println("La fecha de nacimiento es == " + tp.println("El nombre es == " + tn.netbeans.0. while ( itNg.getNegocio(). en nuestro caso "org.unmarshal( new FileInputSt ream("xml/myFile.printStackTrace().next().createUnmarshaller(). } System.getValue().getApellido()). System.schema". Iterator<TipoPersona> it = tipoListaP.iterator().out.iterator().println("El nombre es == " + tp. TipoListaNegocio listaNegocio = root. Iterator<TipoNegocio> itNg = listaNegocio.out.

html Espero que este simple ejemplo te sirva.6/tutorial/doc/JAXBUsing2. .) Saludos Cristian .com/web services/docs/1.sun. Si quieres re alizar el paso contrario deberías crear un objeto marshal. de todas maneras podés seguir preguntando .********Lista Negocio********** El nombre es == Java El codigo es == 0 El nombre es == Solaris El codigo es == 1 BUILD SUCCESSFUL (total time: 2 seconds) Created by GeSHI 1.0. Te dejo un link interes ante.7. pero en ingles donde existe documentación sobre JAXB http://java.D .18 El unmarchal sirve para el mapeo de xml hacia un arbol de objetos.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->