此笔记留作备用,被解析的对象需要添加 @XmlRootElement 注解
xml 解析成bean
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;
import java.nio.charset.Charset;
/
**
* xml 解析成bean
* @param xmlString
* @param clazz
* @param <T>
* @return
*/
public static final <T> T xml2bean(String xmlString, Class<T> clazz) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
return (T) unmarshaller.unmarshal(new StringReader(xmlString));
} catch (JAXBException je) {
logger.error("解析xml失败,失败的bean是: {}", clazz);
logger.error("解析失败的xml是: {}", xmlString);
throw new UnsupportedOperationException(je);
}
}
bean 转成xml
public static final String bean2xml(Object object, Charset charset) {
String XML_DECLARATION_UTF8 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
String XML_DECLARATION_GBK = "<?xml version=\"1.0\" encoding=\"GBK\"?>";
String result = "";
JAXBContext context;
try {
context = JAXBContext.newInstance(object.getClass());
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
m.setProperty(Marshaller.JAXB_ENCODING, charset.name());
StringWriter writer = new StringWriter();
m.marshal(object, writer);
result = writer.toString();
result = (charset.name().equalsIgnoreCase("GBK") ? XML_DECLARATION_GBK : XML_DECLARATION_UTF8) + result;
return result;
} catch (JAXBException je) {
logger.info("转换失败,失败的bean是: {}", object.toString());
logger.info("转换失败的字符集是: {}", charset);
throw new UnsupportedOperationException(je);
}
}
测试
public static void main(String[] args) {
Rule dr = new Rule();
dr.setId("1111");
dr.setlExp(null);
dr.setRelExp("sdsddsd");
String bean2xml = bean2xml(dr, Charset.forName("UTF-8"));
//<?xml version="1.0" encoding="UTF-8"?><Rule><id>1111</id><relExp>sdsddsd</relExp></Rule>
System.out.println(bean2xml);
Rule xml2bean = xml2bean(bean2xml, DrlRule.class);
//Rule [id=1111, relExp=sdsddsd]
System.out.println(xml2bean);
}