##關於betwixtjava
##如何引用apache
在maven項目中添加如下依賴maven
<dependency> <groupId>commons-betwixt</groupId> <artifactId>commons-betwixt</artifactId> <version>0.8</version> </dependency>
##注意事項 轉化過程對 大小寫是敏感的,ide
例如 XML中的結點名稱是大寫的,而Java類中的成員變量是小寫的。那麼轉換將不會成功,獲得的結點值是空的。
##核心代碼測試
###建立一個測試對象this
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; } @Override public String toString() { return "TestObj [name=" + name + ", age=" + age + "]"; } }
###轉換對象code
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 version='1.0' encoding='UTF-8' ?>"; /** * 將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); } }
<?xml version='1.0' encoding='UTF-8' ?><TRANSACTION><age>18</age><name>xiaoming</name></TRANSACTION> TestObj [name=xiaoming, age=18]