JAXB - Marshalling e Unmarshalling


10 Maggio 2021 - JAXB è l'acronimo di Java Architecture for XML Binding. Fornisce un meccanismo per scrivere oggetti Java in XML e convertire XML in oggetti.


JAXB è l'acronimo di Java Architecture for XML Binding. Fornisce un meccanismo per scrivere oggetti Java in XML e convertire XML in oggetti.

Java Architecture for XML Binding (JAXB) è un framework software che consente agli sviluppatori Java di associare classi Java a rappresentazioni XML. JAXB consente di eseguire il marshalling di oggetti Java in XML e unmarshalling di XML in oggetti Java.

JAXB utilizza le annotazioni nelle classi Java per aggiungere i metadati necessari per la conversione XML.

Di seguito una panoramica delle annotazioni importanti.

@XmlRootElement: contiene il nome dell'elemento XML radice.
@XmlAccessorType: definisce i campi e le proprietà delle classi Java che il motore JAXB utilizza per il collegamento. Ha quattro valori: PUBLIC_MEMBER, FIELD, PROPERTY e NONE.
@XmlAccessorOrder: definisce l'ordine sequenziale dei figli.
@XmlType: associa una classe Java a un tipo di schema. Definisce il nome del tipo e l'ordine dei suoi figli.
@XmlElement: definisce il nome dell'elemento XML effettivo.
@XmlAttribute: definisce il campo che viene mappato come un attributo.
@XmlTransient: definisce quei campi che vogliamo escludere dal XML.

JAXB Marshaller: Coversione di un oggetto in XML

In questo esempio vedremo come convertire gli oggetti Java in un documento XML. Innanzitutto, dobbiamo creare una classe di test, in questo caso User.class.

package com.saverioriotto;

@XmlRootElement(name = "user")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {"Name", "Surname", "Age", "Username", "Email"})
@XmlAccessorOrder(XmlAccessOrder.ALPHABETICAL)
public class User {
	
	@XmlAttribute	
	int id;	
	@XmlElement(name = "name")
	String Name;		
	@XmlElement(name = "surname")
	String Surname;	
	@XmlElement(name = "age")
	int Age;	
	@XmlElement(name = "email")
	String Email;	
	@XmlElement(name = "username")
	String Username;	
	@XmlTransient()
	String Phone;
	
	public User() {}

	//Metodi Get e Set
          ...

	public String toString() {
		
		 return "User{" +
			     "id=" + id +
			     ", name ='" + Name + '\'' +
			     ", surname ='" + Surname + '\'' +
			     ", age ='" + Age + '\'' +
			     ", email ='" + Email + '\'' +
			     ", username ='" + Username + '\'' +
			     ", phone ='" + Phone + '\'' +
			     '}';
	}
	
	
}

 Per la conversione utilizziamo il seguente metodo:

public void JAXBMarshalling() {
		
	JAXBContext jaxbContext = null;
       
	try {
           
            jaxbContext = org.eclipse.persistence.jaxb.JAXBContextFactory
                    .createContext(new Class[] {User.class}, null);
            
            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            
            jaxbMarshaller.marshal(CreateUserObject(), System.out);

        } catch (JAXBException e) {
            e.printStackTrace();
        }
}

public User CreateUserObject() {		
	User u = new User();
	
	u.setId(1);
	u.setName("Mario");
	u.setSurname("Rossi");
	u.setAge(31);
	u.setEmail("m.rossi@email.it");
	u.setUsername("m.rossi");
	u.setPhone("+000 231 2345");

	return u;
}

L'output generato sarà il seguente:

<?xml version="1.0" encoding="UTF-8"?>
<user id="1">
	<name>Mario</name>
	<surname>Rossi</surname>
	<age>31</age>
	<username>m.rossi</username>
	<email>m.rossi@email.it</email>						
</user>

JAXB Marshaller: Conversione di XML in oggetti

In questo esempio invece vedremo come convertire un XML in un oggetto JAVA.

public static void JAXBUnmarshalling() {
		
		
		String XMLString = 	 " <user id=\"1\">"
							+"  <name>Mario</name>"
							+"  <surname>Rossi</surname>"
							+"  <age>31</age>"
							+"  <username>m.rossi</username>"
							+"  <email>m.rossi@email.it</email>"							
							+" </user>";	
		
		
		JAXBContext jaxbContext = null;
		try {
	        
	          jaxbContext = org.eclipse.persistence.jaxb.JAXBContextFactory
	                  .createContext(new Class[]{User.class}, null);

	          Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();	          
	         
	          User u = (User) jaxbUnmarshaller.unmarshal(new StringReader(XMLString));

	          System.out.println(u.toString());

	      } catch (JAXBException e) {
	          e.printStackTrace();
	      }
	}

// #OUTPUT 
// User{id=1, name ='Mario', surname ='Rossi', age ='31', email ='m.rossi@email.it', username ='m.rossi', phone ='null'}

 



Commenti:

Nessun commento

Accedi al portale per commentare l'articolo. Accedi