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; } }
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>
É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; } }
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>
Exécutez la méthode de test testXml2Obj, sortie de la console :
Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
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; } }
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>
É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; } }
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>
Exécutez la méthode de test testXml2Obj, sortie de la console :
Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
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) !