Jaxb笔记
摘自: http://www.blogjava.net/eagle-daiq/archive/2012/01/30/369016.html
最近项目原因,研究了下jaxb。jaxb是Java api xml binding的简称,是为实现java与xml数据的相互转换而定义的一个api标准。该标准以annotation的方式实现xml的转换。不用开发人员单独解析每个对象属性与xml元素的mapping关系,只需在java bean中注入简单的java annotation,其他的交给工具去处理。该工具包类能给xml数据处理带来极大方便。具体实现见下。
Java bean对象定义:

/** *//**
* 促销xml对象类
* @author daiqiang
* 对应xml文件内容如下:
* <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<promotion>
<id>promotionId</id>
<name>元旦促销</name>
<type>CMS</type>
<typeDes>CMS主推促销</typeDes>
<startTime>2012-01-01</startTime>
<endTime>2012-01-03</endTime>
<products>
<product>
<merchantId>merchantid</merchantId>
<num>500</num>
<productCode>code1</productCode>
<productId>111</productId>
<requestId>codedata</requestId>
</product>
<product>
<merchantId>merchantid2</merchantId>
<num>800</num>
<productCode>code2</productCode>
<productId>2</productId>
<requestId>codedata</requestId>
</product>
</products>
</promotion>
*
*/
@XmlRootElement(name="promotion")
@XmlAccessorType(XmlAccessType.FIELD)
public class Promotion implements Serializable
{
private static final long serialVersionUID = 870036805093867083L;
private String id;
private String name;
private String type;
private String typeDes;
private String startTime;
private String endTime;
@XmlElementWrapper(name="products")
@XmlElement(name="product")
private List<Product> products;

/**//*@XmlTransient
the field is not binded to xml
private String testHiddenFields;*/
//此处省略具体set get 方法。
说明:上文定义了一个促销对象类Promotion.
类标注表示:
@XmlRootElement:用于定义该对象映射成xml根节点元素名,默认与类名一致。可通过@XmlRootElement(name="otherRootElement")方式指定具体名称。
@XmlAccessorType: 用于标识该java对象与xml映射的访问方式。有如下属性值。
PROPERTY/FIELD/PUBLIC_MEMBER/NONE
PROPERTY: 所有set/get方法对将被映射为xml元素.除非被XmlTransient标注例外.
FIELD:所有对象属性将被映射为xml元素。除非被XmlTransient标注例外.
PUBLIC_MEMBER:每个public的get/set对方法或public field将被映射为xml元素。除非被XmlTransient标注例外.
NONE:没有fields 或 property被映射,除非显示指定具体fields或property。
属性标注表示:
@XmlTransient:指对应属性不做xml映射。
@XmlElement(name="product"):指定属性映射时对应xml元素名称
@XmlElementWrapper(name="products"):在某些场景下,需要对映射的属性做包装处理。如例子中products List对象属性,在xml中我想在映射对所有的product元素再做一个products 元素包装,如下所示,就可以按此种方式实现。
<products>
<product> … </product>
<product> … </product>
…
</products>
Java与xml映射方法
Java对象到XML

/** *//**
* convent java object to xml format String.
*
* @param originalObj
* @param xmlCharset
* the format of charset for xml. ie "UTF-8", "GBK"
* @param isFragment
* whether or not display the header for the generated xml. such
* as <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
* @return
*/
public static String convertJava2XmlStr(Object originalObj,
String xmlCharset, boolean isFragment)
{
String xmlStr = "";
try
{
JAXBContext ctx = JAXBContext.newInstance(originalObj.getClass());
Marshaller marshaller = ctx.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, xmlCharset);
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, isFragment);
ByteArrayOutputStream os = new ByteArrayOutputStream();
marshaller.marshal(originalObj, os);
xmlStr = os.toString();
} catch (PropertyException e)
{
e.printStackTrace();
} catch (JAXBException e)
{
e.printStackTrace();
} catch (Exception e)
{
e.printStackTrace();
}
return xmlStr;
}
XML到Java对象

/** *//**
* convert xml string to Java object by JAXB.
* @param obj to convert java object.
* @param xmlStr
* @return
*/
public static Object convertXmlStr2Java(Object obj, String xmlStr)
{
try
{
JAXBContext ctx = JAXBContext.newInstance(obj.getClass());
InputStream source = new ByteArrayInputStream(xmlStr.getBytes());
Unmarshaller unmarshaller = ctx.createUnmarshaller();
obj = unmarshaller.unmarshal(source);
} catch (JAXBException e)
{
e.printStackTrace();
}
return obj;
}
Jaxb笔记的更多相关文章
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- JAXB性能优化
前言: 之前在查阅jaxb相关资料的同时, 也看到了一些关于性能优化的点. 主要集中于对象和xml互转的过程中, 确实有些实实在在需要注意的点. 这边浅谈jaxb性能优化的一个思路. 案列: 先来构造 ...
- Jaxb对xml报文头的小修小改
前言: 也是在实际工作中, 借助jaxb来实现xml到java对象的映射转换. 在实际应用中, 也遇到了一些有趣好玩的东西, 权当记录下来. 本文主要讲解jaxb如何生成约定的xml报文头的实现思路, ...
- 当Jaxb遇到泛型
前言: 最近的工作内容跟银行有些交互, 对方提供的数据格式采用xml(不是预期的json/protobuf). 为了开发方便, 需要借助jaxb来实现xml和java对象之间的映射. 它还是有点像ja ...
- 【Spring学习笔记-MVC-3】SpringMVC返回Json数据-方式1
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- SpringMvc 笔记
整理出来是 SpringMvc 笔记 方便以后查询 框架太多了 不经常使用 忘记的可能性很大 自己整理一套笔记 一看就明白了 1 对比 原始请求响应流程 1 发送请求 --> 2 控制层 --& ...
- 1.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:
转自:https://www.cnblogs.com/ssslinppp/p/4528892.html [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://w ...
- Spring MVC-学习笔记(3)参数绑定注解、HttpMessageConverter<T>信息转换、jackson、fastjson、XML
1.参数绑定注解 1>@RequestParam: 用于将指定的请求参数赋值给方法中的指定参数.支持的属性: 2>@PathVariable:可以方便的获得URL中的动态参数,只支持一个属 ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
随机推荐
- matlab 不要图像界面
参考文献matlab -nodesktop
- 学学数据库,记记sql
(1)Truncate 和 Drop 和 Delete 1. TRUNCATE TABLE 在功能上与不带 Where 子句的 Delete 语句相同:二者均删除表中的全部行.但 TRUNCATE T ...
- java 函数 运算符
1. 函数的重载:多个函数名相同,根据参数列表(个数,类型)选择执行不同函数,不能按返回值类型区分. 2. 运算符: / /两头都是int类型 则做求商运算,如果一头有小数就做正常的除运算 5/2 / ...
- mySQL CRUD操作(数据库的增删改查)
一.数据库操作 1.创建数据库 create database 数据库名称 2.删除数据库 drop database 数据库名称 二.表操作 1.创建表 create table 表名 ( ...
- java 代码分析工具——JDepend
最近学习Mybatis的官方文档,看到了[项目文档]一节有很多内容没有见过,做个笔记,理解一下. 百科上的介绍,我竟然都看懂了,那就不找其他地方的资料了. JDepend 一个开放源代码的可以用来评价 ...
- addcontentView之后如何让这个view消失掉
Dia dialog ; public void go(View view){ dialog = (Dia) getLayoutInflater().inflate(R.layout.main, nu ...
- python矩阵运算 不断收集整理
python矩阵运算 转自:http://blog.sina.com.cn/s/blog_5f234d4701012p64.html Python使用NumPy包完成了对N-维数组的快速便捷操作.使用 ...
- php 小知识积累
1.如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. 2.$row['id']的速度是$row[id]的7倍. 3.echo比print快,并且使用echo的多重 ...
- leetcode 154. Find Minimum in Rotated Sorted Array II --------- java
Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed? Would ...
- JavaWeb学习记录(七)——MVC操作数据库增删改查与分页功能
一.分页工具类 package blank.util;import java.util.List; import org.springframework.jdbc.core.JdbcTemplate; ...