关于JavaBean转XML格式的字符串,目前有很多集成的技术像DOM技术、JAXB技术等,尤其是JAXB的功能简单而强大,只需要几个注解就能够把任何一个实体转为指定的XML格式,方便的不要不要的。本人在做银行报文组装的时候刚开始也这么做,后来发现这么做并没想象中的省事,因为想要组成什么样结构的报文完全体现在我们封装的实体对象内,而很多时候我们业务是杂碎多变的,可能要东拼西凑,需要这个对象的某些字段,那个对象的某些字段,另外,某些枚举对象没写无参构造器,而Marshaller接口在将Java对象序列化为XML数据时必须访问对象的无参构造器,有时候就是这么操蛋,业务上不支持只能想其他办法了。基于以上的业务场景,使用JAXB这种系统集成的技术实现起来反而显得更复杂,不如直接自己拼字符串快,写一个统一的工具类,然后拼报文时候调用就可以,很简单实用。思路是把需要的字段放Map里,用linkedHashMap实现,键充当元素,值充当元素对应的值。以下是本人实际工作写的一个报文接口测试实例。
工具类
package com.nstc.gdms.blogger;
import java.util.List;
/**
*
* description JavaBeanToStringXML
* @author SWX
* date 2016-12-22
*/
public class ToXMLString {
/**
* 合成Element 比如:
* <元素1>值1</元素1>
* <元素2>值2</元素2>
* <元素3>值3</元素3>
* @return StringBuilder
* TIME 下午03:04:11
*/
public static StringBuilder getElement(Map<String, String> map){
StringBuilder stringBuilder = new StringBuilder();
int index = 0, size = map.size();
for (String key : map.keySet()) {
index += 1;
stringBuilder.append("<" + key + ">" + (String)map.get(key) + "</" + key + ">");
if (index < size) {
stringBuilder.append("\r\n");
}
}
return stringBuilder;
}
/**
* 合成RootElement 比如:
* <元素>
* <元素1>值1</元素1>
* <元素2>值2</元素2>
* <元素3>值3</元素3>
* </元素>
* @return StringBuilder
* TIME 下午03:04:11
*/
public static StringBuilder getRootElement(Map<String, String> map, String str) {
StringBuilder stringBuilder = new StringBuilder();
int index = 0, size = map.size();
stringBuilder.append("<").append(str).append(">").append("\r\n");
for (String key : map.keySet()) {
index += 1;
stringBuilder.append("\t").append("<" + key + ">" + (String)map.get(key) + "</" + key + ">");
if (index < size) {
stringBuilder.append("\r\n");
}
}
stringBuilder.append("\r\n").append("<").append("/").append(str).append(">");
return stringBuilde