jaxb可以自定义序列化方式

转载 2013年12月06日 10:58:13
jaxb可以自定义序列化方式,高手指点自己写了一个Adapter,可以实现要求了,附上代码
01 public class DataXmlAdapter extends XmlAdapter<Object, List<Map<String, String>>> {
02  
03     /**
04      * 序列化方法。
05      *
06      * 把java bean转换成Element,方便JAXB按照指定格式序列化。
07      */
08     @Override
09     public Object marshal(List<Map<String, String>> rows) throws Exception {
10         // TODO Auto-generated method stub
11         DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
12         Document document = builder.newDocument();
13         Element rootEle = document.createElement("rows");
14          
15         for(Map<String, String> row:rows){
16             Element rowEle = document.createElement("row");
17              
18             Iterator<Entry<String, String>> itera = row.entrySet().iterator();
19             while (itera.hasNext()) {
20                 Entry<String, String> entry = itera.next();
21                 String key = entry.getKey();
22                 String value = entry.getValue();
23                 if (key == null || key.equals("")) {
24                     continue;
25                 }
26                 if (value == null) {
27                     value = "";
28                 }
29                 Element detailEle = document.createElement(key);
30                 detailEle.setTextContent(value);
31                 rowEle.appendChild(detailEle);
32             }
33             rootEle.appendChild(rowEle);
34         }
35         document.appendChild(rootEle);
36         return rootEle;
37     }
38  
39     /**
40      * 反序列化方法。
41      *
42      * 把Element转换成java bean。
43      */
44     @Override
45     public List<Map<String, String>> unmarshal(Object datas) throws Exception {
46         // TODO Auto-generated method stub
47         if(datas==null){
48             return null;
49         }
50         NodeList rowlist = ((Element)datas).getChildNodes();
51         if(rowlist == null){
52             return null;
53         }
54         int rowCount = rowlist.getLength();
55         if(rowCount == 0){
56             return null;
57         }
58          
59         List<Map<String, String>> result = new ArrayList<Map<String,String>>();
60         for(int i = 0; i<rowCount; i++){
61             Node rowNode = rowlist.item(i);
62             if(!"detail".equals(rowNode.getNodeName())){
63                 continue;
64             }
65              
66             NodeList detailList = rowNode.getChildNodes();
67             if(detailList == null){
68                 continue;
69             }
70             int detailCount = detailList.getLength();
71             if(detailCount == 0){
72                 continue;
73             }
74              
75             Map<String, String> detailMap = new HashMap<String, String>();
76             for(int j = 0; j < detailCount; j++){
77                 Node detailNode = detailList.item(j);
78                 String key = detailNode.getNodeName();
79                 String value = detailNode.getTextContent();
80                 if(key == null || "".equals(key)){
81                     continue;
82                 }
83                 detailMap.put(key, value);
84             }
85             result.add(detailMap);
86         }
87         return result;
88     }
89  
90 }
有帮助

相关文章推荐

JAXB序列化常用注解

一.Jaxb处理java对象和xml之间转换常用的annotation有: @XmlType@XmlElement@XmlRootElement@XmlAttribute@XmlAccessor...
  • jqncc
  • jqncc
  • 2013-12-09 16:41
  • 1169

hbasesink 自定义序列化类

  • 2017-09-14 14:50
  • 69KB
  • 下载

Gson Advanced — 自定义反序列化基础

本文将介绍使用 Gson 自定义反序列化基础,我们很多情况是客户端不需要完全匹配服务端返回的 JSON 数据。自定义反序列化应用中很常见 Server 端返回数据并不是我们想要的结构,这种情况就需要我...

使用自定义属性实现Java和.net的XML序列化

在.net中的编码规范中属性首字母都是大写的,而java的首字母是小写的,这就导致两个系统的交互,有人说xml不是通用了吗,这个倒是事实,但是java序列化后的xml流,在.net的系统中,都出现大小...

Hadoop Serialization -- hadoop序列化详解 (3)【ObjectWritable,集合Writable以及自定义的Writable】

http://blog.csdn.net/mrcharles/article/details/50409596 回顾: 前面了解到hadoop本身支持java的基本类型的序列化,并且提供相...

.NET 插件系统框架设计(二) 使用对象序列化实现自定义配置文件管理

.NET 插件系统框架设计(二) 使用对象序列化实现自定义配置文件管理 2009年11月26日 博客园 yaoshiyou   一、 为什么要这样做   问题:在程序开发中,经常会涉及对XML...
  • anyqu
  • anyqu
  • 2012-06-21 16:26
  • 711
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)