JAXB
介绍
JAXB(即Java Architecturefor XML Binding),将Java对象与xml进行相互转换。
JAXBContext
整个 JAXB API 的入口,用来构建 JAXB 实例(newInstance())。
提供与XML/Java绑定信息相关的抽象,如编组(createMarshaller())、解组(createUnmarshaller())和验证(createValidator())。
createMarshaller()
context.createMarshaller(),编组。创建一个Marshaller对象,用于将Java对象转换为XML数据。
createUnmarshaller()
context.createUnmarshaller(),解组。创建一个 Unmarshaller 对象,用来将 XML 数据转换为 java 对象。
Bean中xml相关注解
@XmlRootElement(name="Xxx") 根节点
@XmlElement(name="Xxx") 节点
@XmlAttribute(name="Xxx") 属性
XML转换工具类XMLUtils
public class XMLUtils {
@SuppressWarnings("unchecked")
public static <T> T xmlToObj(Class<T> cls, String text) {
JAXBContext context = null;
try {
context = JAXBContext.newInstance(cls);
Reader reader = new StringReader(text);
Unmarshaller unmarshaller = context.createUnmarshaller();
T result = (T) unmarshaller.unmarshal(reader);
return cls.isInstance(result) ? result : ((JAXBElement<T>) result).getValue();
} catch (JAXBException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static String objectToXML(Object obj) {
return objectToXML(obj, false);
}
public static String objectToXML(Object obj, boolean prettyPrint) {
JAXBContext context;
try {
context = JAXBContext.newInstance(obj.getClass());
Marshaller mar = context.createMarshaller();
mar.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, prettyPrint);
StringWriter writer = new StringWriter();
mar.marshal(obj, writer);
return writer.toString();
} catch (JAXBException e) {
e.printStackTrace();
}
return "";
}
}