/*** 报文组装类
* @Author:
* @Date:*/
public classMessageAssembly {/*** 测试 EC成员订购报文(发送)实体类 完成
* 问题:
* 1.业务文档修改版中
* 报文有:JoinECTime 标签,列表中不存在
* 列表有:ProdInfo --> SubsID 标签,报文中不存在
*@param*@return
*/@Testpublic voidtest(){//StringBuffer存储所有的<>>标签
StringBuffer sb = newStringBuffer();//封装实体类对象(主类,下面多个子类 == 根节点,下面多个子节点)
//(以下是实体类结构,自行复制代码,反封装model即可)
ECMemberOrderInfoRequest eCMemberOrderInfoRequest = newECMemberOrderInfoRequest();
MemInfo memInfo= newMemInfo();
memInfo.setOprSeq("33333333333");
memInfo.setRelOprSeq("33333333333");
memInfo.setOprTime("44444444");
memInfo.setOprCode("2222222222");
memInfo.setApplyChannel("111111111");
memInfo.setProdID("88888");
memInfo.setProdInstID("147258");
memInfo.setSubsID("789456");
memInfo.setProdInstEffTime("123456747");
memInfo.setProdInstExpTime("8852236");
ProdInfo prodInfo= newProdInfo();
prodInfo.setProdID("eeeeeee");
prodInfo.setPkgProdID("SDDFFFFF");
prodInfo.setProdInstID("BGTTTT");
prodInfo.setProdInstEffTime("12345666");
prodInfo.setProdInstExpTime("144565787");
prodInfo.setOprType("85520256");
ProdAttrInfo prodAttrInfo= newProdAttrInfo();
prodAttrInfo.setServiceID("14777231546");
prodAttrInfo.setAttrKey("12123457");
prodAttrInfo.setAttrValue("4568786999");
prodAttrInfo.setOprType("78985222366");
prodInfo.setProdAttrInfo(prodAttrInfo);
ServiceAttrInfo serviceAttrInfo= newServiceAttrInfo();
AttrInfo attrInfo= newAttrInfo();
attrInfo.setAttrKey("1111");
attrInfo.setAttrValue("2222");
serviceAttrInfo.setAttrInfo(attrInfo);
List attrInfoList = new ArrayList<>();
AttrInfo a= newAttrInfo();
a.setAttrKey("zxsasdasd");
a.setAttrValue("sdfsdfsfsf");
AttrInfo b= newAttrInfo();
b.setAttrKey("ertretetet");
b.setAttrValue("yuttyututu");
AttrInfo c= newAttrInfo();
c.setAttrKey("jhghgjg");
c.setAttrValue("qweqweqe");
attrInfoList.add(a);
attrInfoList.add(b);
attrInfoList.add(c);
serviceAttrInfo.setAttrInfoList(attrInfoList);
prodInfo.setServiceAttrInfo(serviceAttrInfo);
prodInfo.setSubsID("12345678888");
memInfo.setProdInfo(prodInfo);
memInfo.setCustomerNumber("5995444");
memInfo.setECProdInstID("ssss");
memInfo.setECSubsID("fhdfgdgf");
memInfo.setProvinceID("tttttttt");
OtherInfo otherInfo= newOtherInfo();
otherInfo.setInfoCode("12345477");
otherInfo.setInfoValue("sdfsdfsdfs");
memInfo.setOtherInfo(otherInfo);
eCMemberOrderInfoRequest.setMemInfo(memInfo);
getMessage(eCMemberOrderInfoRequest,sb);
System.out.println(sb.toString());
}/*** 通过对象实体类生成报文主体
* 注:
* 实体类中只能存在:实体类,list集合,字段
* 不能存在:hashMap<>,list
*@paramobj 实体类对象
*@paramsb StringBuffer
* @Author:
* @Date:*/
public voidgetMessage(Object obj,StringBuffer sb){//首先判断当前对象的类型
String objTypeName =obj.getClass().getTypeName();//如何使集合,就遍历集合
if("java.util.ArrayList".equals(objTypeName)){
List list = (List)obj;for(Object o: list) {//递归
getMessage(o,sb);
}
}else{ //否则就是对象//添加当前对象前标签
sb.append("");//获取当前对象的类类型
Class clazz =obj.getClass();//获取所有public方法
Field[] fields=obj.getClass().getDeclaredFields();//遍历
for(int i=0;i
Method declaredMethod= clazz.getDeclaredMethod("get" + firstUppercase(fields[i].getName()), newClass[]{});//调用当前数组中的方法,获取当前方法的返回值
Object invoke =declaredMethod.invoke(obj);
Type type=declaredMethod.getAnnotatedReturnType().getType();
String typeName=type.getTypeName();//判断返回值是String
if("java.lang.String".equals(typeName)){//设置前标签
sb.append(""));//设置内容
sb.append(invoke.toString());//设置后标签
sb.append(""+firstUppercase(fields[i].getName()+">"));
}else{//递归
getMessage(invoke,sb);
}
}catch(Exception e) {
System.out.println(sb.toString());
e.printStackTrace();
}
}//添加当前对象后标签
sb.append(""+obj.getClass().getSimpleName()+">");
}
}/*** 首字母大写
*@return
*/
privateString firstUppercase(String str){
str= (str.substring(0,1).toUpperCase())+str.substring(1);returnstr;
}
}