package com.wuxicloud.util; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import java.io.File; import java.io.StringReader; import java.io.StringWriter; /** * Created by EalenXie on 2018/6/11 11:34 * Notice : Class对象必须满足XML对象定义规范 * Class对象上面至少必须至少要有XML根节点注解 @XmlRootElement(name = "xxxx") 和节点注解(属性能被转换成xml)@XmlAccessorType(XmlAccessType.FIELD) */ public enum XMLUtils { getXMLUtil; /** * @param obj 要转换的对象引用(xxx) * @param clazz 要转换的对象类型(xxx.class) * @return 将Java对象转成XML字符串 */ public String beanToXml(Object obj, Class<?> clazz) throws JAXBException { StringWriter writer = new StringWriter(); Marshaller marshaller = JAXBContext.newInstance(clazz).createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false); marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); marshaller.marshal(obj, writer); return writer.toString().replace("standalone=\"yes\"", ""); } /** * @param xmlStr XML的String * @param clazz 要转换成的对象类型 * @return 将XML的字符串(String)转换成对象(Object) */ public Object xmlToBean(String xmlStr, Class<?> clazz) throws Exception { StringReader sr = new StringReader(xmlStr); return JAXBContext.newInstance(clazz).createUnmarshaller().unmarshal(sr); } /** * @param xmlFile XML文件对象 * @param clazz Java对象类型 * @return 将XML文件数据反序列化为Java对象。 * Notice : 该文件对象的属性必须和Java对象类型的属性一一对应 */ public Object xmlFileToBean(File xmlFile, Class clazz) throws JAXBException { return JAXBContext.newInstance(clazz).createUnmarshaller().unmarshal(xmlFile); } }
声明User对象进行测试 :
package com.wuxicloud.util; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; /** * Created by EalenXie on 2018/6/11 12:58 */ @XmlRootElement(name = "User") @XmlAccessorType(XmlAccessType.FIELD) public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
测试一下 :
package com.wuxicloud.util; import javax.xml.bind.JAXBException; import java.io.File; /** * Created by EalenXie on 2018/6/11 12:31 */ public class TestRun { public static void main(String[] args) throws Exception { User user = new User(); user.setUsername("EalenXie"); user.setPassword("admin"); //将Bean转换成Xml字符串 String beanToXmlResult = XMLUtils.getXMLUtil.beanToXml(user, User.class); System.out.println(beanToXmlResult); //将XML文件转成Java对象 File file = new File("C:\\EalenXie\\Temp\\User.xml"); User u = (User) XMLUtils.getXMLUtil.xmlFileToBean(file, User.class); System.out.println(u); //将XML字符串转成Java对象 String xmlStr = "<User><username>李四</username><password>456</password></User>"; User us = (User) XMLUtils.getXMLUtil.xmlToBean(xmlStr, User.class); System.out.println(us); } }
可以看到控制台打印 :