1. JAXB介紹
JAXB是一項可以根據XML Schema産生Java類的技術。該過程中,JAXB也提供了将XML執行個體文檔反向生成java對象樹的方法,并能将Java對象樹的内容重新寫到XML執行個體文檔。從另外一個方面講,JAXB提供了快速而簡便的方法将XML模式綁定到java表示。
2. JDK中JAXB相關的重要Class和Interface
- JAXBContext類,是應用的入口,用于管理XML/Java綁定資訊;
- Marshaller接口,将Java對象序列化成XML對象;
- Unmarshaller接口,将XML資料反序列化為Java對象。
3. JDK中JAXB相關的重要Annotation
- @XmlType,将Java類或枚舉類型映射到XML模式類型;
- @XmlAccessorType(XmlAccessType.FIELD) ,控制字段或屬性的序列化。FIELD表示JAXB将自動綁定Java類中的每個非靜态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值還有XmlAccessType.PROPERTY和XmlAccessType.NONE。
- @XmlRootElement,将Java類或枚舉類型映射到XML元素。
- @XmlElement,将Java類的一個屬性映射到與屬性同名的一個XML元素。
- @XmlAttribute,将Java類的一個屬性映射到與屬性同名的一個XML屬性。
4. Java對象和XML檔案互相操作的核心代碼XMLUtil.java
package com.xml;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
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;
/**
* 封裝了XML轉換成object,object轉換成XML的代碼
*
* @author Steven
*
*/
public class XMLUtil {
/**
* 将對象直接轉換成String類型的 XML輸出
*
* @param obj
* @return
*/
public static String convertToXml(Object obj) {
// 建立輸出流
StringWriter sw = new StringWriter();
try {
// 利用jdk中自帶的轉換類實作
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml輸出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
// 将對象轉換成輸出流形式的xml
marshaller.marshal(obj, sw);
} catch (JAXBException e) {
e.printStackTrace();
}
return sw.toString();
}
/**
* 将對象根據路徑轉換成xml檔案
*
* @param obj
* @param path
* @return
*/
public static void convertToXml(Object obj, String path) {
try {
// 利用jdk中自帶的轉換類實作
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml輸出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
// 将對象轉換成輸出流形式的xml
// 建立輸出流
FileWriter fw = null;
try {
fw = new FileWriter(path);
} catch (IOException e) {
e.printStackTrace();
}
marshaller.marshal(obj, fw);
} catch (JAXBException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
/**
* 将String類型的xml轉換成對象
*/
public static Object convertXmlStrToObject(Class clazz, String xmlStr) {
Object xmlObject = null;
try {
JAXBContext context = JAXBContext.newInstance(clazz);
// 進行将Xml轉成對象的核心接口
Unmarshaller unmarshaller = context.createUnmarshaller();
StringReader sr = new StringReader(xmlStr);
xmlObject = unmarshaller.unmarshal(sr);
} catch (JAXBException e) {
e.printStackTrace();
}
return xmlObject;
}
@SuppressWarnings("unchecked")
/**
* 将file類型的xml轉換成對象
*/
public static Object convertXmlFileToObject(Class clazz, String xmlPath) {
Object xmlObject = null;
try {
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = context.createUnmarshaller();
FileReader fr = null;
try {
fr = new FileReader(xmlPath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
xmlObject = unmarshaller.unmarshal(fr);
} catch (JAXBException e) {
e.printStackTrace();
}
return xmlObject;
}
}