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 将java继承的类序列化xml

JAXB是将java实体类序列化和反序列化处理中比较方便的一个工具,在jaxb的使用中,若是实体类中存在继承的层次关系,那么就需要一些值得注意的地方了。 比如在开发百度轻应用时候就需要处理到: ...

Jaxb处理obj(泛型)<--->xml

处理Jaxb应用中泛型带来的问题
  • wttyzy
  • wttyzy
  • 2015年12月28日 13:44
  • 2766

JAXB序列化常用注解

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

JAXB序列化和反序列化XML源码(可直接使用)

用法参考:  Document document = (Document) JAXBTool.unmarshalXml("D:\\temp\\LightRequirmentDocument1.3.x...

JMS&MQ系列之JMS的请求和回应

代理类: /** * * @author geloin * @date 2012-9-14 下午5:57:36 */ package com.geloin.activemq.test4...
  • geloin
  • geloin
  • 2012年09月17日 10:17
  • 10998

tomcat集成activeMq 简单例子

使用spring 的jms发送和接收消息 新建工程  导入spring的jar包,  spring-aop-4.0.6.RELEASE.jar  spring-aspects-4.0.6.RE...

Java多种方式自定义序列化

我们知道,通过实现java.io.Serializable接口可以使得该类的实例能够被序列化。例如如下的Person类, import java.io.Serializable; public...

winform 自定义序列化源码

  • 2009年11月26日 14:48
  • 19KB
  • 下载

jaxb xml序列化与Java类的转化

JAXB基本使用 JAXB主要用来实现对象和XML之间的序列化和反序列化,关于JAXB的介绍就不多说了,网上一搜一大把,这里主要总结下基本使用方法和一些注意事项 首先定义两个示例类...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jaxb可以自定义序列化方式
举报原因:
原因补充:

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