java报文封装_java通过实体类封装报文

/*** 报文组装类

* @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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值