map转java对象


pom依赖:


commons-beanutils
commons-beanutils
1.9.3


ConverEntity converEntity = new ConverEntity();   //映射的实体类
BeanUtils.populate(converEntity, map); //主要方法,直接调用就可以

此方法可以解析出soap文件并映射成java对象,网上很多帖子解析不出来标准的soap报文,这里也贴上代码


package com.kwg.sap.utils.test;

import com.kwg.sap.utils.MapToObjectUtil;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.WordUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;


public class ParseXml {

public Map map = new HashMap();

public Map parse(String soap) throws DocumentException {
Document doc = DocumentHelper.parseText(soap);//报文转成doc对象
Element root = doc.getRootElement();//获取根元素,准备递归解析这个XML树
getCode(root);
return map;
}

public void getCode(Element root) {
if (root.elements() != null) {
List list = root.elements();//如果当前跟节点有子节点,找到子节点
for (Element element : list) {//遍历每个节点
if (element.elements().size() > 0) {
getCode(element);//当前节点不为空的话,递归遍历子节点;
}
if (element.elements().size() == 0) {
//WordUtils.uncapitalize()方法是把首字符串变成小写,因为我这里需要处理map集合映射成java对象,对于映射的java命名规范,必须规范才能正确映射
map.put(WordUtils.uncapitalize(element.getName()), element.getTextTrim());
}//如果为叶子节点,那么直接把名字和值放入map
}
}
}

public static void main(String[] args) throws Exception {
String soap = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>000000000000000008250825http://esb.spdbbiz.com:7701/services/S120030432urn:/UnfSocCrdtNoQry00201709131621162900000000008251580000101643158064315806408251a021DM91123456789012300000000130000100000024 ";
//初始化报文,调用parse方法,获得结果map,然后按照需求取得字段,或者转化为其他格式
Map map = new ParseXml().parse(soap);
//获得字段s:SourceSysId的值;
ConverEntity converEntity = new ConverEntity();
MapToObjectUtil.mapToObject(map, converEntity.getClass());
BeanUtils.populate(converEntity, map);
System.out.println(StringUtils.isNotBlank(converEntity.getSourceSysId()));
}


}