[CXF REST标准实战系列] 一、JAXB xml与javaBean的转换

前端开发 作者: 2024-08-21 03:30:02
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章Points: 1、不认识到犯错,然后得到永久的教训。 2、认识JAXB 3、代码实战   1、不认识到犯错,然后得到永久的教训。   也不是所谓的教训吧,真正的教训来自于对错误的剖析理解很深刻。然后有种“吃一堑,长一智”的感觉才叫教训。近日

1、不认识到犯错,然后得到永久的教训。

2、认识JAXB

  JDK中JAXB相关的重要Class和Interface:
 
  JDK中JAXB相关的重要Annotation:
 

3、代码实战

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package com.xidian.wq.imaopay.model.mesdata.base;
 
import javax.xml.bind.annotation.XmlRootElement;
 
/**
  *
* @author BYSocket
* 报文头-[报文基础信息]
*/
@XmlRootElement(name="data_bean")
public class DataBean
{
     // 版本信息(data_version)
String version;
     
////消息类型(data_type)
// 000001 - 注册[个人信息Post|Respose]
// 000002 - 绑定银行卡[首次绑定,保存个人信息]
// 000003 - 绑定银行卡[二次,校验个人信息]
// 100001 - 支付[钱包支付]
// 100002 - 查询
// 200001
String data_type;
     
////订单编号(order_id)
// 总长20位,有字母要用大写
String batch_no;
     
// 平台账号(platform_account)
String user_name;
     
////请求状态
// 000
String trans_state;
     
// 签名信息(msg_sign)
String msg_sign;
 
// 时间戳(randomTime)
private String rd_time;
 
// 随机数(randomNum)
private String rd_num;
 
// 密钥(keySign)
private String k_sign;
     
// 保留域
String reserve;
 
public String getVersion()
{
         return version;
}
 
public void setVersion(String version)
{
this.version = version;
}
 
public String getData_type()
{
return data_type;
}
 
public void setData_type(String data_type)
{
this.data_type = data_type;
}
 
public String getBatch_no()
{
return batch_no;
}
 
public void setBatch_no(String batch_no)
{
this.batch_no = batch_no;
}
 
public String getUser_name()
{
return user_name;
}
 
public void setUser_name(String user_name)
{
this.user_name = user_name;
}
 
public String getTrans_state()
{
return trans_state;
}
 
public void setTrans_state(String trans_state)
{
this.trans_state = trans_state;
}
 
public String getMsg_sign()
{
return msg_sign;
}
 
public void setMsg_sign(String msg_sign)
{
this.msg_sign = msg_sign;
}
 
public String getRd_time()
{
return rd_time;
}
 
public void setRd_time(String rd_time)
{
this.rd_time = rd_time;
}
 
public String getRd_num()
{
return rd_num;
}
 
public void setRd_num(String rd_num)
{
this.rd_num = rd_num;
}
 
public String getK_sign()
{
return k_sign;
}
 
public void setK_sign(String k_sign)
{
this.k_sign = k_sign;
}
 
public String getReserve()
{
return reserve;
}
 
public void setReserve(String reserve)
{
this.reserve = reserve;
}
 
}
122
< font size = "4" face "宋体" >package com.xidian.wq.imaopay.model.mesdata.base;
 
 
import javax.xml.bind.annotation.XmlRootElement;
 
/**
*
* @author BYSocket
* 报文体-[用户注册报文体信息]
*/
@XmlRootElement(name="reg_bean")
public class RegBean
{
     
// 注册报文体流水号(reg_data_sn)
private String reg_sn;
     
////用户编号(user_info_id)
// 业务系统的用户编号只做记录不在支付系统中逻辑处理
private Integer user_id;
 
// 注册账号(reg_account)
private String reg_no;
// 注册途径(reg_way)
private String reg_way;
     
// 保留域
private String reserve;
     
////提交日期(set_time)
// 业务系统上传
private String set_time;
     
// 后台信息返回路径(return_url)
private String ret_url;
     
// 备注
String remarks;
 
public String getReg_sn()
{
return reg_sn;
}
 
public void setReg_sn(String reg_sn)
{
this.reg_sn = reg_sn;
}
 
public Integer getUser_id()
return user_id;
public void setUser_id(Integer user_id)
this.user_id = user_id;
public String getReg_no()
return reg_no;
public void setReg_no(String reg_no)
this.reg_no = reg_no;
public String getReg_way()
return reg_way;
public void setReg_way(String reg_way)
this.reg_way = reg_way;
public String getReserve()
return reserve;
public void setReserve(String reserve)
this.reserve = reserve;
public String getSet_time()
return set_time;
public void setSet_time(String set_time)
this.set_time = set_time;
public String getRet_url()
return ret_url;
public void setRet_url(String ret_url)
this.ret_url = ret_url;
public String getRemarks()
return remarks;
public void setRemarks(String remarks)
this.remarks = remarks;
}
 
}
</ font >
注册报文体MsgRegBean.java,支持内容的列表。
43
package com.xidian.wq.imaopay.model.mesdata;
 
import java.util.List;
 
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
 
import com.xidian.wq.imaopay.model.mesdata.base.DataBean;
import com.xidian.wq.imaopay.model.mesdata.base.RegBean;
 
@XmlRootElement( name = "msg_bean" )
public class MsgRegBean
{
private DataBean dataBean;
     
private List< RegBean > regBeans;
 
     
public DataBean getDataBean()
{
return dataBean;
}
 
@XmlElement(name = "data_bean")
public void setDataBean(DataBean dataBean)
{
this.dataBean = dataBean;
}
 
@XmlElementWrapper(name = "reg_beans") 
@XmlElement(name = "reg_bean")
public List< > getRegBeans()
{
return regBeans;
}
 
public void setRegBeans(List< > regBeans)
{
this.regBeans = regBeans;
}
 
然后针对的我们用Jaxb实现一个转换的Util类:
108
>package com.xidian.wq.imaopay.util;
import java.io.StringReader; 
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Marshaller; 
import javax.xml.bind.Unmarshaller; 
 
import com.alibaba.fastjson.JSON;
import com.xidian.wq.imaopay.model.mesdata.MsgRegBean;
import com.xidian.wq.imaopay.model.mesdata.base.DataBean;
import com.xidian.wq.imaopay.model.mesdata.base.RegBean;
 
/**
*  
* @author BYSocket
* Jaxb2.0 处理Xml与Object转换
*
*/
public class JaxbObjectAndXmlUtil
       
/**
      * @param xmlStr 字符串
* @param c 对象Class类型
* @return 对象实例
*/
@SuppressWarnings("unchecked")
public static < T > T xml2Object(String xmlStr,Class< > c)
try
             JAXBContext context = JAXBContext.newInstance(c); 
Unmarshaller unmarshaller = context.createUnmarshaller(); 
             
T t = (T) unmarshaller.unmarshal(new StringReader(xmlStr)); 
             
return t; 
             
} catch (JAXBException e) {  e.printStackTrace();  return null; } 
         
       
/**
* @param object 对象
* @return 返回xmlStr
*/
public static String object2Xml(Object object)
try
{   
StringWriter writer = new StringWriter();
JAXBContext context = JAXBContext.newInstance(object.getClass()); 
Marshaller  marshal = context.createMarshaller();
             
marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true); // 格式化输出 
marshal.setProperty(Marshaller.JAXB_ENCODING,"UTF-8");// 编码格式,默认为utf-8 
marshal.setProperty(Marshaller.JAXB_FRAGMENT,false);// 是否省略xml头信息 
marshal.setProperty("jaxb.encoding","utf-8"); 
marshal.marshal(object,writer);
             
return new String(writer.getBuffer());
             
} catch (Exception e) { e.printStackTrace(); return null;}    
         
     
public static void main(String[] args)
          /** 构造测试报文头对象 */
DataBean dataBean = new DataBean();
dataBean.setBatch_no("N20150204");
dataBean.setData_type("000001");
dataBean.setVersion("v1.0");
dataBean.setUser_name("xx");
dataBean.setMsg_sign("未知");
dataBean.setRd_num("6631383");
dataBean.setRd_time("20150204");
dataBean.setK_sign("75CC479AAC09F00BA28F0E968B1BC9D1B90ADCC2");
 
/** 构造测试报文体对象 */
RegBean regBean = new RegBean();
regBean.setReg_sn("REG20150204");
regBean.setUser_id(12);
regBean.setReg_no("33");
regBean.setReg_way("pc");
regBean.setSet_time("20150204 16:18");
regBean.setRet_url("未知");
regBean.setRemarks("无备注");
         
MsgRegBean msgBean = new MsgRegBean();
List< > regBeans = new ArrayList< >();
regBeans.add(regBean);
regBeans.add(regBean);
         
msgBean.setRegBeans(regBeans);
msgBean.setDataBean(dataBean);
         
String xmlStr = JaxbObjectAndXmlUtil.object2Xml(msgBean);//构造报文 XML 格式的字符串
System.out.println("对象转xml报文: \n"+xmlStr);
         
MsgRegBean msgBean2 = JaxbObjectAndXmlUtil.xml2Object(xmlStr,MsgRegBean.class);
System.out.println("报文转xml转: \n"+JSON.toJSONString(msgBean2));
}
}  </ 运行下测试main函数,可以得到如下的输出:
?
37
对象转xml报文:
<? xml version "1.0" encoding "utf-8" standalone "yes" ?>
msg_bean >
data_bean >
batch_no >N20150204</ >
data_type >000001</ >
k_sign >75CC479AAC09F00BA28F0E968B1BC9D1B90ADCC2</ >
msg_sign >未知</ >
rd_num >6631383</ >
rd_time >20150204</ >
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_65873.html