Si te fijas la variable alumnos esta sin usar. Has creado una variable get que no es necesaria. Sustituye la variable get por la de alumnos, como puedes ver a continuacion;
CursoType cursoType = (CursoType) jaxbElement.getValue();
Alumnos alumnos = cursoType.getAlumnos();
alumnos.getAlumno();
Alumnos.Alumno alum = new Alumnos.Alumno();
alum.setNombreAlumno("Pablo");
alum.setEdad(34);
alum.setDireccion("Calle Marte 20");
alum.setComentario("Prueba");
alum.setTelefono(new BigInteger("623547687"));
alumnos.getAlumno().add(alum);
Saludos.
Hola!!
Tengo un problema en el que no paro de dar vuelta y me gustaría saber si me podéis ayudar.
Necesito crear un alumno más en el XML ejecutando el JAXB desde Java, pero por alguna razón no me lo crea, aunque tampoco me da fallo alguno.
Os dejo el código tanto de la clase principal, como la del JAXB y el XML
CLASE PRINCIPAL:
package jaxb_clase;
import JAXB_claseBinding.*;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigInteger;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.util.ArrayList;
import java.util.List;
public class JAXB_clase{
public static void main(String[] args) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance("JAXB_claseBinding");
Unmarshaller u = jaxbContext.createUnmarshaller();
JAXBElement jaxbElement = (JAXBElement) u.unmarshal(
new FileInputStream("clase.xml"));
CursoType cursoType = (CursoType) jaxbElement.getValue();
Alumnos alumnos = cursoType.getAlumnos();
Alumnos get = new Alumnos();
get.getAlumno();
Alumnos.Alumno alum = new Alumnos.Alumno();
alum.setNombreAlumno("Pablo");
alum.setEdad(34);
alum.setDireccion("Calle Marte 20");
alum.setComentario("Prueba");
alum.setTelefono(new BigInteger("623547687"));
get.getAlumno().add(alum);
// Crear un objeto de tipo Marshaller para posteriormente convertir un
// el árbol de objetos Java a datos XML
Marshaller m = jaxbContext.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(jaxbElement, System.out);
} catch (JAXBException je) {
System.out.println(je.getCause()) ;
} catch (IOException ioe) {
System.out.println(ioe.getMessage());
}
}
}
CLASE ALUMNO DEL JAXB:
//
// Este archivo ha sido generado por la arquitectura JavaTM para la implantaci�n de la referencia de enlace (JAXB) XML v2.2.5-2
// Visite http://java.sun.com/xml/jaxb
// Todas las modificaciones realizadas en este archivo se perder�n si se vuelve a compilar el esquema de origen.
// Generado el: AM.05.16 a las 01:15:16 AM CEST
//
package JAXB_claseBinding;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Clase Java para alumnos complex type.
*
* <p>El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase.
*
* <pre>
* <complexType name="alumnos">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="alumno" maxOccurs="unbounded">
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="nombreAlumno" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="edad">
* <simpleType>
* <restriction base="{http://www.w3.org/2001/XMLSchema}positiveInteger">
* <maxExclusive value="100"/>
* </restriction>
* </simpleType>
* </element>
* <element name="direccion" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element ref="{}comentario" minOccurs="0"/>
* <element name="telefono" type="{http://www.w3.org/2001/XMLSchema}positiveInteger"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </element>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "alumnos", propOrder = {
"alumno"
})
public class Alumnos {
@XmlElement(required = true)
List<Alumnos.Alumno> alumno;
/**
* Gets the value of the alumno property.
*
* <p>
* This accessor method returns a reference to the live list,
* not a snapshot. Therefore any modification you make to the
* returned list will be present inside the JAXB object.
* This is why there is not a <CODE>set</CODE> method for the alumno property.
*
* <p>
* For example, to add a new item, do as follows:
* <pre>
* getAlumno().add(newItem);
* </pre>
*
*
* <p>
* Objects of the following type(s) are allowed in the list
* {@link Alumnos.Alumno }
*
*
*/
public List<Alumnos.Alumno> getAlumno() {
if (alumno == null) {
alumno = new ArrayList<Alumnos.Alumno>();
}
return this.alumno;
}
/**
* <p>Clase Java para anonymous complex type.
*
* <p>El siguiente fragmento de esquema especifica el contenido que se espera que haya en esta clase.
*
* <pre>
* <complexType>
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="nombreAlumno" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element name="edad">
* <simpleType>
* <restriction base="{http://www.w3.org/2001/XMLSchema}positiveInteger">
* <maxExclusive value="100"/>
* </restriction>
* </simpleType>
* </element>
* <element name="direccion" type="{http://www.w3.org/2001/XMLSchema}string"/>
* <element ref="{}comentario" minOccurs="0"/>
* <element name="telefono" type="{http://www.w3.org/2001/XMLSchema}positiveInteger"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"nombreAlumno",
"edad",
"direccion",
"comentario",
"telefono"
})
public static class Alumno {
@XmlElement(required = true)
protected String nombreAlumno;
protected int edad;
@XmlElement(required = true)
protected String direccion;
protected String comentario;
@XmlElement(required = true)
@XmlSchemaType(name = "positiveInteger")
protected BigInteger telefono;
/**
* Obtiene el valor de la propiedad nombreAlumno.
*
* @return
* possible object is
* {@link String }
*
*/
public String getNombreAlumno() {
return nombreAlumno;
}
/**
* Define el valor de la propiedad nombreAlumno.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setNombreAlumno(String value) {
this.nombreAlumno = value;
}
/**
* Obtiene el valor de la propiedad edad.
*
*/
public int getEdad() {
return edad;
}
/**
* Define el valor de la propiedad edad.
*
*/
public void setEdad(int value) {
this.edad = value;
}
/**
* Obtiene el valor de la propiedad direccion.
*
* @return
* possible object is
* {@link String }
*
*/
public String getDireccion() {
return direccion;
}
/**
* Define el valor de la propiedad direccion.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setDireccion(String value) {
this.direccion = value;
}
/**
* Obtiene el valor de la propiedad comentario.
*
* @return
* possible object is
* {@link String }
*
*/
public String getComentario() {
return comentario;
}
/**
* Define el valor de la propiedad comentario.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setComentario(String value) {
this.comentario = value;
}
/**
* Obtiene el valor de la propiedad telefono.
*
* @return
* possible object is
* {@link BigInteger }
*
*/
public BigInteger getTelefono() {
return telefono;
}
/**
* Define el valor de la propiedad telefono.
*
* @param value
* allowed object is
* {@link BigInteger }
*
*/
public void setTelefono(BigInteger value) {
this.telefono = value;
}
}
}
XML A MODIFICAR:
<?xml version="1.0" encoding="utf-8"?>
<curso xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="clase.xsd">
<profesor>
<nombre>Juan Carlos</nombre>
Acceso a Datos
<especialidad>Bases de Datos</especialidad>
<curso>Segundo de DAM</curso>
<modalidad>00223</modalidad>
</profesor>
<comentario>hola</comentario>
</curso>
Estaría muy agradecido si me podéis decir donde está el fallo.
Muchas gracias de antemano!!