Maison > développement back-end > Tutoriel XML/RSS > Tutoriel Java&Xml (11) JAXB implémente la conversion d'objets XML et Java

Tutoriel Java&Xml (11) JAXB implémente la conversion d'objets XML et Java

黄舟
Libérer: 2017-02-22 15:05:51
original
1926 Les gens l'ont consulté


JAXB est l'abréviation de Java Architecture for XML Binding, qui est utilisée pour établir un mappage entre les classes Java et XML, et peut aider les développeurs à convertir facilement les objets XML et Java entre eux.
Cet article utilise un exemple simple pour présenter l'utilisation de JAXB. Tout d'abord, nous devons comprendre les API couramment utilisées de JAXB.

  • La classe JAXBContext est le point d'entrée de l'application et est utilisée pour gérer les informations de liaison XML/Java.

  • Interface Marshaller, sérialise les objets Java en données XML.

  • Interface Unmarshaller, désérialise les données XML en objets Java.

  • @XmlType, mappe les classes Java ou les types d'énumération aux types de schéma XML

  • @XmlAccessorType(XmlAccessType.FIELD), champs de contrôle ou sérialisation de propriétés. FIELD signifie que JAXB liera automatiquement chaque champ non statique (statique) et non transitoire (marqué par @XmlTransient) de la classe Java à XML. Les autres valeurs sont XmlAccessType.PROPERTY et XmlAccessType.NONE.

  • @XmlAccessorOrder, contrôle l'ordre des propriétés et des champs dans les classes de liaison JAXB

  • @XmlJavaTypeAdapter, utilise un adaptateur personnalisé (c'est-à-dire étend la classe abstraite XmlAdapter et remplacez les méthodes marshal() et unmarshal()) pour sérialiser les classes Java en XML.

  • @XmlElementWrapper, pour un tableau ou une collection (c'est-à-dire une variable membre contenant plusieurs éléments), génère un élément XML (appelé wrapper) qui enveloppe le tableau ou la collection.

  • @XmlRootElement, mappe les classes Java ou les types d'énumération aux éléments XML.

  • @XmlElement, mappe un attribut d'une classe Java à un élément XML portant le même nom que l'attribut.

  • @XmlAttribute, mappe un attribut d'une classe Java à un attribut XML portant le même nom que l'attribut.

Le contenu du Java Bean que nous devons lier est le suivant :
Employee.java

package net.csdn.beans;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)  
@XmlRootElement  @XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" }) 
public class Employee {
    private String name;    
    private String gender;    
    private int age;    
    private String role;    
    public String getName() {        
    return name;
    }    public void setName(String name) {        
    this.name = name;
    }    public String getGender() {        
    return gender;
    }    public void setGender(String gender) {        
    this.gender = gender;
    }    public int getAge() {        
    return age;
    }    public void setAge(int age) {        
    this.age = age;
    }    public String getRole() {        
    return role;
    }    public void setRole(String role) {        
    this.role = role;
    }    @Override
    public String toString() {        
    return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender="
                + this.gender + " Role=" + this.role;
    }

}
Copier après la connexion

Le contenu du fichier XML qui doit être converti en objet Java est le suivant :
employee.xml

<?xml version="1.0"?><employee id="1">
    <name>Pankaj</name>
    <age>29</age>
    <role>Java Developer</role>
    <gender>Male</gender></employee>
Copier après la connexion
Copier après la connexion

Écrivez ensuite le code du scénario de test :
TestJAXB.java

package net.csdn.test;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import net.csdn.beans.Employee;
import org.junit.Test;public class TestJAXB {
    @Test
    public void testXml2Obj() throws Exception {
        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml");
        byte[] bytes = new byte[is.available()];
        is.read(bytes);
        String xmlStr = new String(bytes);
        JAXBContext context = JAXBContext.newInstance(Employee.class);  
        Unmarshaller unmarshaller = context.createUnmarshaller();  
        Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr));
        System.out.println(emp);
    }

    @Test
    public void testObj2Xml() {
        Employee  emp = new Employee();
        emp.setAge(10);
        emp.setGender("Male");
        emp.setName("Jane");
        emp.setRole("Teacher");
        String xmlStr = TestJAXB.convertToXml(emp,"utf-8");  
        System.out.println(xmlStr);
    }

    public static String convertToXml(Object obj, String encoding) {  
        String result = null;  
        try {  
            JAXBContext context = JAXBContext.newInstance(obj.getClass());  
            Marshaller marshaller = context.createMarshaller();  
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
            marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);  

            StringWriter writer = new StringWriter();  
            marshaller.marshal(obj, writer);  
            result = writer.toString();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  

        return result;  
    } 

}
Copier après la connexion

Exécutez le testObj2Xml méthode de test, sortie de la console :

<?xml version="1.0" encoding="utf-8" standalone="yes"?><employee>
    <name>Jane</name>
    <age>10</age>
    <role>Teacher</role>
    <gender>Male</gender></employee>
Copier après la connexion
Copier après la connexion

Exécutez la méthode de test testXml2Obj, sortie de la console :

Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
Copier après la connexion
Copier après la connexion

Remarque : dans cet exemple, JUnit4 est utilisé comme outil de test unitaire dans Eclipse. , cliquez sur le menu Fenêtre->Afficher la vue->OutLine pour l'ouvrir. Dans la vue Plan, cliquez avec le bouton droit sur les méthodes testXml2Obj et testObj2Xml respectivement ->Exécuter en tant que->JUnit Test.

JAXB est l'abréviation de Java Architecture for XML Binding, qui est utilisée pour établir un mappage entre les classes Java et XML, et peut aider les développeurs à convertir facilement les objets XML et Java entre eux.
Cet article utilise un exemple simple pour présenter l'utilisation de JAXB. Tout d'abord, nous devons comprendre les API couramment utilisées de JAXB.

  • La classe JAXBContext est le point d'entrée de l'application et est utilisée pour gérer les informations de liaison XML/Java.

  • Interface Marshaller, sérialise les objets Java en données XML.

  • Interface Unmarshaller, désérialise les données XML en objets Java.

  • @XmlType, mappe les classes Java ou les types d'énumération aux types de schéma XML

  • @XmlAccessorType(XmlAccessType.FIELD), champs de contrôle ou sérialisation de propriétés. FIELD signifie que JAXB liera automatiquement chaque champ non statique (statique) et non transitoire (marqué par @XmlTransient) de la classe Java à XML. Les autres valeurs sont XmlAccessType.PROPERTY et XmlAccessType.NONE.

  • @XmlAccessorOrder, contrôle l'ordre des propriétés et des champs dans les classes de liaison JAXB

  • @XmlJavaTypeAdapter, utilise un adaptateur personnalisé (c'est-à-dire étend la classe abstraite XmlAdapter et remplacez les méthodes marshal() et unmarshal()) pour sérialiser les classes Java en XML.

  • @XmlElementWrapper, pour un tableau ou une collection (c'est-à-dire une variable membre contenant plusieurs éléments), génère un élément XML (appelé wrapper) qui enveloppe le tableau ou la collection.

  • @XmlRootElement, mappe les classes Java ou les types d'énumération aux éléments XML.

  • @XmlElement, mappe un attribut d'une classe Java à un élément XML portant le même nom que l'attribut.

  • @XmlAttribute, mappe un attribut d'une classe Java à un attribut XML portant le même nom que l'attribut.

Le contenu du Java Bean que nous devons lier est le suivant :
Employee.java

package net.csdn.beans;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)  
@XmlRootElement  
@XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" }) 
public class Employee {
    private String name;    
    private String gender;    
    private int age;    
    private String role;    
    public String getName() {        
    return name;
    }    public void setName(String name) {        
    this.name = name;
    }    public String getGender() {        
    return gender;
    }    public void setGender(String gender) {        
    this.gender = gender;
    }    public int getAge() {        
    return age;
    }    public void setAge(int age) {        
    this.age = age;
    }    public String getRole() {        
    return role;
    }    public void setRole(String role) {        
    this.role = role;
    }    @Override
    public String toString() {        
    return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender="
                + this.gender + " Role=" + this.role;
    }

}
Copier après la connexion

Le contenu du fichier XML qui doit être converti en objet Java est le suivant :
employee.xml

<?xml version="1.0"?><employee id="1">
    <name>Pankaj</name>
    <age>29</age>
    <role>Java Developer</role>
    <gender>Male</gender></employee>
Copier après la connexion
Copier après la connexion

Écrivez ensuite le code du scénario de test :
TestJAXB.java

package net.csdn.test;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import net.csdn.beans.Employee;
import org.junit.Test;
public class TestJAXB {
    @Test
    public void testXml2Obj() throws Exception {
        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml");
        byte[] bytes = new byte[is.available()];
        is.read(bytes);
        String xmlStr = new String(bytes);
        JAXBContext context = JAXBContext.newInstance(Employee.class);  
        Unmarshaller unmarshaller = context.createUnmarshaller();  
        Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr));
        System.out.println(emp);
    }

    @Test
    public void testObj2Xml() {
        Employee  emp = new Employee();
        emp.setAge(10);
        emp.setGender("Male");
        emp.setName("Jane");
        emp.setRole("Teacher");
        String xmlStr = TestJAXB.convertToXml(emp,"utf-8");  
        System.out.println(xmlStr);
    }

    public static String convertToXml(Object obj, String encoding) {  
        String result = null;  
        try {  
            JAXBContext context = JAXBContext.newInstance(obj.getClass());  
            Marshaller marshaller = context.createMarshaller();  
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
            marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);  

            StringWriter writer = new StringWriter();  
            marshaller.marshal(obj, writer);  
            result = writer.toString();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  

        return result;  
    } 

}
Copier après la connexion

Exécutez le testObj2Xml méthode de test, sortie de la console :

<?xml version="1.0" encoding="utf-8" standalone="yes"?><employee>
    <name>Jane</name>
    <age>10</age>
    <role>Teacher</role>
    <gender>Male</gender></employee>
Copier après la connexion
Copier après la connexion

Exécutez la méthode de test testXml2Obj, sortie de la console :

Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
Copier après la connexion
Copier après la connexion

Remarque : dans cet exemple, JUnit4 est utilisé comme outil de test unitaire dans Eclipse. , cliquez sur le menu Fenêtre->Afficher la vue->OutLine pour l'ouvrir. Dans la vue Plan, cliquez avec le bouton droit sur les méthodes testXml2Obj et testObj2Xml respectivement ->Exécuter en tant que->JUnit Test.

Ce qui précède est le didacticiel Java&Xml (11) Implémentation JAXB de la conversion d'objets XML et Java Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal