1. Description des classes importantes
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.
Marshallerinterface, convertit les paires Java en données XML.
Interface Unmarshaller, convertit XML en Javaobjet.
@XmlType, mappe les classes Java ou les types d'énumération aux types de schéma XML
@XmlAccessorType(XmlAccessType.FIELD), contrôle la sérialisation des champs ou des attributs. FIELD signifie que JAXB liera automatiquement chaque champ non statique (statique),
non transitoire (marqué par @XmlTransient) de la classe Java au 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 remplace 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 qui contient plusieurs éléments), génère un élément XML qui enveloppe le tableau ou la collection (appelé un dispositif d'emballage).
@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.
2. Exemples
1. JavaBean
import java.util.Date; 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.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import com.tzz.util.xml.JaxbDateSerializer; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "country") @XmlType(propOrder = { "id", "createDate", "name", "provinceList" }) public class Country { private Integer id; @XmlJavaTypeAdapter(JaxbDateSerializer.class) private Date createDate; @XmlElement(name = "name") private String name; @XmlElementWrapper(name = "provinces") @XmlElement(name = "province") private List<Province> provinceList; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Province> getProvinceList() { return provinceList; } public void setProvinceList(List<Province> provinceList) { this.provinceList = provinceList; } }
import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { "name", "provCity" }) public class Province { @XmlElement(name = "name") private String name; @XmlElement(name = "provCity") private String provCity; public String getProvCity() { return provCity; } public void setProvCity(String provCity) { this.provCity = provCity; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
2. Classe d'outil de conversion
import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; /** * Jaxb 2.0 * */ public class JaxbXmlUtil { @SuppressWarnings("unchecked") public static <T> T xmlToBean(String xml, Class<T> beanClass) { try { JAXBContext jaxbContext = JAXBContext.newInstance(beanClass); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); T user = (T) unmarshaller.unmarshal(new StringReader(xml)); return user; } catch (JAXBException e) { e.printStackTrace(); return null; } } /**Bean转XML*/ public static String beanToXml(Object obj) { String result = null; try { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); //决定是否在转换成xml时同时进行格式化(即按标签自动换行,否则即是一行的xml) marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //Marshaller.JAXB_ENCODING xml的编码方式 marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8"); StringWriter writer = new StringWriter(); marshaller.marshal(obj, writer); result = writer.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } }
3. Classe de test
import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.junit.Test; import com.tzz.test.util.xml.entity.Country; import com.tzz.test.util.xml.entity.Province; import com.tzz.util.xml.JaxbXmlUtil; public class TestJaxbBeanToXmlUtil { @Test public void testBeanToXml() { Country country = new Country(); country.setId(1); country.setCreateDate(new Date()); country.setName("中国"); List<Province> list = new ArrayList<Province>(); Province province = new Province(); province.setName("广东省"); province.setProvCity("广州市"); Province province2 = new Province(); province2.setName("湖南省"); province2.setProvCity("长沙市"); list.add(province); list.add(province2); country.setProvinceList(list); String xml = JaxbXmlUtil.beanToXml(country); System.out.println(xml); } @Test public void testXmlToBean() { String xml = "<?xml version='1.0' encoding='utf-8' ?>" + "<country>" + "<id>1</id>" + "<createDate>2016-03-10 09:36:01</createDate>" + "<name>中国</name>" + "<provinces>" + "<province><name>广东省</name><provCity>广州市</provCity></province>" + "<province><name>湖南省</name><provCity>长沙市</provCity></province>" + "</provinces>" + "</country>"; Country country = JaxbXmlUtil.xmlToBean(xml, Country.class); System.out.println(country.getId() + "--" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(country.getCreateDate()) + "--" + country.getName()); for (Province p : country.getProvinceList()) { System.out.println(p.getName() + "---" + p.getProvCity()); } } }
4. Résultats des tests
4.1. Exécuter la méthode testBeanToXml
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <country> <id>1</id> <createDate>2016-03-10 05:24:57</createDate> <name>中国</name> <provinces> <province> <name>广东省</name> <provCity>广州市</provCity> </province> <province> <name>湖南省</name> <provCity>长沙市</provCity> </province> </provinces> </country>
4.2. Exécuter la méthode testXmlToBean
1--2016-03-10 09:36:01--中国 广东省---广州市 湖南省---长沙市
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!