2019独角兽企业重金招聘Python工程师标准>>>
##关于betwixt
##如何引用
在maven项目中添加以下依赖
##注意事项 转化过程对 大小写是敏感的,
例如 XML中的结点名称是大写的,而Java类中的成员变量是小写的。那么转换将不会成功,得到的结点值是空的。
##核心代码
###创建一个测试对象
package com.icim.entity;public class TestObj {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}/*** 必须有一个空的构造方法,否则会报错*/public TestObj() {}public TestObj(String name, Integer age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "TestObj [name=" + name + ", age=" + age + "]";}}
###转换对象
package com.icim.util;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;import org.apache.commons.betwixt.io.BeanReader;
import org.apache.commons.betwixt.io.BeanWriter;
import org.apache.log4j.Logger;import com.icim.entity.TestObj;public class XmlParseUtil {private static final Logger logger = Logger.getLogger(XmlParseUtil.class);private static final String XML_ROOT_NODE_NAME = "TRANSACTION";public static final String XML_HEADER = "";/*** 将XML字符串 转换成 对象* @param strInMsg : XML内容* @param clazz * @return*/public static Object inStr2Obj(String strInMsg, @SuppressWarnings("rawtypes") Class clazz) {BeanReader beanReader = new BeanReader();Object parse = null;StringReader xmlReader = new StringReader(strInMsg);beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);beanReader.getBindingConfiguration().setMapIDs(false);try {beanReader.registerBeanClass(XML_ROOT_NODE_NAME, clazz);parse = beanReader.parse(xmlReader);} catch (Exception ex) {logger.error(ex.toString());}return parse;}/*** 将 对象 转换成 XML字符串* @param inObj* @return*/public static String obj2Str(Object inObj) {StringWriter sw = new StringWriter();BeanWriter beanWriter = new BeanWriter(sw);sw.write(XML_HEADER);try {beanWriter.setEndOfLine("");beanWriter.getBindingConfiguration().setMapIDs(false);beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);beanWriter.write(XML_ROOT_NODE_NAME, inObj);} catch (Exception e) {logger.error(e.toString());}return sw.toString();}/*** 将XML文件转换成 对象* @param fileName* @param clazz* @return*/public static Object file2Object(String fileName, Class clazz) {String fileContent = file2String(fileName);return inStr2Obj(fileContent, clazz);}/*** 将XML文件转换成 对象* @param fileName* @param clazz* @return*/public static Object file2Object(File file, Class clazz) {String fileContent = file2tring(file);return inStr2Obj(fileContent, clazz);}/*** 读取文件全部内容* @param fileName* @return*/private static String file2String(String fileName) {File file = new File(fileName);return file2tring(file);}/*** 读取文件全部内容* @param file* @return*/private static String file2tring(File file) {String encoding = "ISO-8859-1";Long filelength = file.length();byte[] filecontent = new byte[filelength.intValue()];try {FileInputStream in = new FileInputStream(file);in.read(filecontent);in.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}try {return new String(filecontent, encoding);} catch (UnsupportedEncodingException e) {System.err.println("The OS does not support " + encoding);e.printStackTrace();return null;}}//测试方法public static void main(String[] args) {TestObj obj = new TestObj("xiaoming", 18);String xmlString = XmlParseUtil.obj2Str(obj);System.out.println(xmlString);TestObj obj2 = (TestObj) XmlParseUtil.inStr2Obj(xmlString, TestObj.class);System.out.println(obj2);}}
输出结果
TestObj [name=xiaoming, age=18]