JAXB Java Architecture for XML Binding
JAXB, es el acrónimo de Java Architecture for XML Binding, se utilizan notaciones JAXB para convertir objetos Java a un XML String y viceversa. En este tutorial, se mostrará cómo utilizar JAXB haciendo uso de lo siguiente:
- Marshalling – Convertir objetos Java a XML String
- Unmarshalling – Convertir un XML String a un Objeto de Java
Tecnologías utilizadas:
1.- Dependencias
No se requieren librerías extras de jaxb si estas utilizando JDK1.6 o superior, ya que estas librerías de JAXB vienen incluídas en el JDK 1.6
2.- Notaciones JAXB
Para un objeto que necesita ser convertido a un XML String, se tiene que utilizar notaciones JAXB.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 | package com.tutorial.pruebas;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "root")
@XmlAccessorType (XmlAccessType.FIELD)
public class Root {
private String adress;
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
@XmlElement(name = "data")
private Data data;
@XmlElement(name="parametros")
private Parametros parametros;
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
public Parametros getParametros() {
return parametros;
}
public void setParametros(Parametros parametros) {
this.parametros = parametros;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 | package com.tutorial.pruebas;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;
@XmlRootElement(name = "data")
@XmlAccessorType (XmlAccessType.FIELD)
public class Data {
@XmlAttribute(name = "id")
private int id;
@XmlAttribute(name = "oficina")
private String oficina;
@XmlValue
private String data;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public String getOficina() {
return oficina;
}
public void setOficina(String oficina) {
this.oficina = oficina;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | package com.tutorial.pruebas;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "parametro")
@XmlAccessorType (XmlAccessType.FIELD)
public class Parametros {
private List<Parametro> parametro;
public List<Parametro> getParametro() {
return parametro;
}
public void
setParametro(List<Parametro> parametro) {
this.parametro = parametro;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 | package com.tutorial.pruebas;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;
@XmlRootElement(name = "parametro")
@XmlAccessorType (XmlAccessType.FIELD)
public class Parametro {
@XmlAttribute(name = "nombre")
private String nombre;
@XmlValue
private String valor;
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getValor() {
return valor;
}
public void setValor(String valor) {
this.valor = valor;
}
}
|
3.- Convertir objeto a XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 | package com.tutorial.pruebas;
import java.io.StringWriter;
import java.util.ArrayList;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class Tutorial {
public static void main(String[] args){
Root root = new Root();
root.setAdress("Street no 7");
Data data = new Data();
data.setId(1000);
data.setData("valor1");
data.setOficina("oficina no. 20");
Parametros parametros = new Parametros();
parametros.
setParametro(new ArrayList<Parametro>());
Parametro parametro = new Parametro();
parametro.setNombre("Mario");
parametro.setValor("SI");
parametros.getParametro().add(parametro);
parametro = new Parametro();
parametro.setNombre("Hugo");
parametro.setValor("NO");
parametros.getParametro().add(parametro);
parametro = new Parametro();
parametro.setNombre("Luis");
parametro.setValor("SI");
parametros.getParametro().add(parametro);
root.setData(data);
root.setParametros(parametros);
try{
JAXBContext jaxbContext = JAXBContext.
newInstance(Root.class);
Marshaller jaxbMarshaller = jaxbContext.
createMarshaller();
java.io.StringWriter sw = new StringWriter();
jaxbMarshaller.
setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
jaxbMarshaller.marshal(root, sw);
System.out.println(sw.toString());
}catch(Exception ex){
ex.printStackTrace();
}
}
}
|
Salida:
1
2
3
4
5
6
7
8
9
10 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<adress>Street no 7</adress>
<data id="1000" oficina="oficina no. 20">valor1</data>
<parametros>
<parametro nombre="Mario">SI</parametro>
<parametro nombre="Hugo">NO</parametro>
<parametro nombre="Luis">SI</parametro>
</parametros>
</root>
|
4.- Convertir XML a objeto
Entrada:
1
2
3
4
5
6
7
8
9
10 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<adress>Street no 7</adress>
<data id="1000" oficina="oficina no. 20">valor1</data>
<parametros>
<parametro nombre="Mario">SI</parametro>
<parametro nombre="Hugo">NO</parametro>
<parametro nombre="Luis">SI</parametro>
</parametros>
</root>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 | package com.tutorial.pruebas;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class Tutorial {
public static void main(String[] args){
try{
StringBuffer xmlStr
= new StringBuffer(
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
+"<root>"
+"<adress>Street no 7</adress>"
+"<data id=\"1000\" oficina=\"oficina no. 20\">valor1</data>"
+"<parametros>"
+"<parametro nombre=\"Mario\">SI</parametro>"
+"<parametro nombre=\"Hugo\">NO</parametro>"
+"<parametro nombre=\"Luis\">SI</parametro>"
+"</parametros>"
+"</root>");
JAXBContext jaxbContext = JAXBContext.
newInstance(Root.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.
createUnmarshaller();
Root root = (Root)
jaxbUnmarshaller.
unmarshal(
new StringReader( xmlStr.toString()
));
System.out.println(root.getAdress());
System.out.println(root.getData().
getData());
System.out.println(root.getData().
getId());
System.out.println(root.getData().
getOficina());
System.out.println(root.getParametros().
getParametro().get(0).getNombre());
System.out.println(root.getParametros().
getParametro().get(0).getValor());
}catch(Exception ex){
ex.printStackTrace();
}
}
}
|
Salida:
1
2
3
4
5
6 | Street no 7
valor1
1000
oficina no. 20
Mario
SI
|