一个基于JSON的简单的XML转为Bean的方法
之前在做一个WEB-SERVICE的交互的时候,写的一个基于JSON的XML转Bean的方法;就把它整理处理! 如下:
>
-
pom.xml
所有需要的依赖包如下:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<!-- https://mvnrepository.com/artifact/xom/xom -->
<dependency>
<groupId>xom</groupId>
<artifactId>xom</artifactId>
<version>1.2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
转换的工具类:
package com.xtonic.xml2javaBeanUtil;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.alibaba.fastjson.JSONObject;
import net.sf.json.xml.XMLSerializer;
public class XML2JaveBean {
private static final ConcurrentHashMap<String, Map<String, Field>> BEAN_FIELDS_CACHE = new ConcurrentHashMap<String, Map<String, Field>>();
private static final String DATETIME_REG = "\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{7}((\\+|-)\\d{2}:\\d{2})?";
private static final String DATE_REG = "\\d{4}[-/]\\d{2}[-/]\\d{2}";
private static final String DEFAULT_STRING_VALUE = "";
private XML2JaveBean() {
}
public static <T> T XmlToJavaBean(InputStream xmlInputStream,Class<T> clazz) throws Exception {
String xmlStr = new XMLSerializer().readFromStream(xmlInputStream).toString();
JSONObject xmlJson = JSONObject.parseObject(xmlStr);
System.out.println(xmlJson);
return (T) pareseJSon(xmlJson, clazz);
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private static <T> T pareseJSon(Map<String, Object> context, Class<T> clazz) throws Exception {
T obj = clazz.newInstance();
boolean isConllection = false;
boolean isMap = false;
Map<String, Field> fieldsCache = getFields(clazz);
Field field = null;
CollectionType collectionClass = null;
Object tmpOjbect = null;
String fieldKeyStr = null;
for (String key : context.keySet()) {
if (key.startsWith("@")) {
fieldKeyStr = key.substring(1);
} else {
fieldKeyStr = key;
}
field = fieldsCache.get(fieldKeyStr.toUpperCase());
// 判断XML里面的节点是否在实体类里面有对应的属性;
if (field