- 浏览: 329763 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
cgs1999:
相关实现比较繁琐,有兴趣的朋友可以看看我的博客《用Java实现 ...
排列组合算法(JAVA实现) -
huhongda123:
很好,谢谢了
Eclipse/MyEclipse注释模板和格式化模板的使用 -
a785975139:
非常好
Eclipse/MyEclipse注释模板和格式化模板的使用 -
lightbulb:
写得非常详细
Eclipse/MyEclipse注释模板和格式化模板的使用 -
Ginger90:
感觉帆软报表这些采用的flash打印方式很不错啊
几种web报表打印方案的比较
JAXB(Java API for XML Binding),提供了一个快速便捷的方式将Java对象与XML进行转换。在JAX-WS(Java的WebService规范之一)中,JDK1.6 自带的版本JAX-WS2.1,其底层支持就是JAXB。
JAXB
可以实现Java对象与XML的相互转换,在JAXB中,将一个Java对象转换为XML的过程称之为Marshal,将XML转换为Java对象的过程
称之为UnMarshal。我们可以通过在 Java
类中标注注解的方式将一个Java对象绑定到一段XML,也就是说,在Java类中标注一些注解,这些注解定义了如何将这个类转换为XML,怎么转换,以
及一段XML如何被解析成这个类所定义的对象;也可以使用JAXB的XJC工具,通过定义schema的方式实现Java对象与XML的绑定(这个下次研
究)。
下面来了解一下如何通过标注注解来完成 Marshal 和 UnMarshal 的过程。我用的是 JAXB2_20101209.jar ,可以到http://jaxb.java.net/
下载最新版本。
首先看个小例子:
定义一个java类
Java代码
package com.why.jaxb;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class People {
public String id = "001";
public String name = "灰太狼";
public int age = 26;
}
package com.why.jaxb;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class People {
public String id = "001";
public String name = "灰太狼";
public int age = 26;
}Java To XML(Marshal)
Java代码
package com.why.jaxb;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
public class Java2XML {
/**
* @param args
* @throws JAXBException
*/
public static void main(String[] args) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(People.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING,"gb2312");//编码格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);//是否格式化生成的xml串
marshaller.setProperty(Marshaller.JAXB_FRAGMENT,
false);//是否省略xml头信息(<?xml version="1.0" encoding="gb2312"
standalone="yes"?>)
People people = new People();
marshaller.marshal(people, System.out);
}
}
package com.why.jaxb;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
public class Java2XML {
/**
* @param args
* @throws JAXBException
*/
public static void main(String[] args) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(People.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING,"gb2312");//编码格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);//是否格式化生成的xml串
marshaller.setProperty(Marshaller.JAXB_FRAGMENT,
false);//是否省略xml头信息(<?xml version="1.0" encoding="gb2312"
standalone="yes"?>)
People people = new People();
marshaller.marshal(people, System.out);
}
}
XML To Java(UnMarshal)
Java代码
package com.why.jaxb;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.xml.sax.SAXException;
public class XML2Java {
/**
* @param args
* @throws JAXBException
* @throws JAXBException
* @throws SAXException
*/
public static void main(String[] args) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(People.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
File file = new File("src/people.xml");
People people = (People)unmarshaller.unmarshal(file);
System.out.println(people.id);
System.out.println(people.name);
System.out.println(people.age);
}
}
package com.why.jaxb;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.xml.sax.SAXException;
public class XML2Java {
/**
* @param args
* @throws JAXBException
* @throws JAXBException
* @throws SAXException
*/
public static void main(String[] args) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(People.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
File file = new File("src/people.xml");
People people = (People)unmarshaller.unmarshal(file);
System.out.println(people.id);
System.out.println(people.name);
System.out.println(people.age);
}
}
其实Marshal 和
UnMarshal的过程并不复杂,只需要从JAXBContext中获得Marshaller或Unmarshaller对象,就可以让JAXB帮我们
来进行转换了。我们需要操作的主要内容是定义一个规则,告诉JAXB如何将一个类、按照什么样的格式转换为XML,下面是JAXB中主要的一些注解。
@XmlRootElement 将一个Java类映射为一段XML的根节点
参数:name 定义这个根节点的名称
namespace 定义这个根节点命名空间
@XmlAccessorType 定义映射这个类中的何种类型需要映射到XML。可接收四个参数,分别是:
XmlAccessType.FIELD:映射这个类中的所有字段到XML
XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XML
XmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)
XmlAccessType.NONE:不映射
@XmlElement 指定一个字段或get/set方法映射到XML的节点。如,当一个类的XmlAccessorType 被标注为PROPERTY时,在某一个没有get/set方法的字段上标注此注解,即可将该字段映射到XML。
参数:defaultValue 指定节点默认值
name 指定节点名称
namespace 指定节点命名空间
required 是否必须(默认为false)
nillable 该字段是否包含 nillable="true" 属性(默认为false)
type 定义该字段或属性的关联类型
@XmlAttribute 指定一个字段或get/set方法映射到XML的属性。
参数:name 指定属性名称
namespace 指定属性命名空间
required 是否必须(默认为false)
@XmlTransient 定义某一字段或属性不需要被映射为XML。如,当一个类的XmlAccessorType 被标注为PROPERTY时,在某一get/set方法的字段上标注此注解,那么该属性则不会被映射。
@XmlType 定义映射的一些相关规则
参数:propOrder 指定映射XML时的节点顺序
factoryClass 指定UnMarshal时生成映射类实例所需的工厂类,默认为这个类本身
factoryMethod 指定工厂类的工厂方法
name 定义XML Schema中type的名称
namespace 指定Schema中的命名空间
@XmlElementWrapper 为数组元素或集合元素定义一个父节点。如,类中有一元素为List items,若不加此注解,该元素将被映射为
<items>...</items>
<items>...</items>
这种形式,此注解可将这个元素进行包装,如:
@XmlElementWrapper(name="items")
@XmlElement(name="item")
public List items;
将会生成这样的XML样式:
<items>
<item>...</item>
<item>...</item>
</items>
@XmlJavaTypeAdapter
自定义某一字段或属性映射到XML的适配器。如,类中包含一个接口,我们可以定义一个适配器(继承自
javax.xml.bind.annotation.adapters.XmlAdapter类),指定这个接口如何映射到XML。
@XmlSchema 配置整个包的namespace,这个注解需放在package-info.java文件中。
发表评论
-
JAVA 多线程
2012-02-01 11:28 1147JAVA 多线程 线程与进程的区别:每个进程都需要操 ... -
Eclipse 插件收藏(1)
2011-11-22 16:50 10821.mylyn Mylin是taskt ... -
Eclipse中实用快捷键(二)
2011-11-22 15:40 1167导航 作用域 功能 快捷键 Java编辑器 打开结构 Ctrl ... -
Hibernate Validation
2011-09-15 10:44 1223Hibernate Validation 用 ... -
ant集成junit自动测试的build.xml标准模板 收藏
2011-03-16 12:55 4436本文来自CSDN博客,转载请标明出处:http://blo ... -
hibernate的Criteria Query
2011-02-15 16:50 1446当查询数据时,人们往往需要设置查询条件。在SQL ... -
Log4j的使用
2010-11-11 15:26 1300Log4j的使用 基本理论 ... -
Tomcat及相应Eclipse配置收集
2010-11-02 17:36 1472Java代码 一、下载: 下载地 ... -
Eclipse/MyEclipse注释模板和格式化模板的使用
2010-11-02 11:39 36794在一个项目的完整的生命周期中,其维护费用,往往是 ... -
Spring ApplicationContext.xml配置的12个技巧
2010-11-02 10:22 1421Spring是一个强有力的java程序框架 ... -
Eclipse中最实用快捷键(持续更新中...)
2010-11-01 17:04 1447Eclipse提供了大量的快捷键,结合自己在项目中的 ... -
常用正则表达式
2010-06-02 14:14 930"^\d+$" //非负整数(正整数 + ... -
浏览器菜单打印页眉页脚的设置
2010-05-11 14:50 2368先记下,备忘。。。 <!DOCTYPE HTML P ... -
几种web报表打印方案的比较
2010-05-11 14:42 5451web报表打印通常是系统的辅助部分,但是又必须解决,否则项目完 ... -
JS判断文本框的内容
2010-05-04 16:27 5989判断指定的内容是否为空,若为空则弹出 警告框*/functio ... -
唯一序列的生成
2010-03-22 18:37 1427UUID(Universally Unique ... -
JavaScript控制网页播放器的一些相关函数及参数
2010-03-19 11:46 1143<object classid="clsid: ... -
用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等收藏
2010-03-18 17:42 30011.文本框只能输入数字代码(小数点也不能输入)<inpu ... -
JavaScript字符串函数大全 【收藏】
2010-03-18 17:28 1233JS自带函数 concat 将两个或多个字符的文本组合起来 ... -
java List分组和排序处理
2010-01-24 17:53 43137在一些应用中,需要将List中的对象按某种情况分组或者排序处理 ...
相关推荐
JAXB注解相关技术JAXB注解相关技术JAXB注解相关技术JAXB注解相关技术JAXB注解相关技术JAXB注解相关技术
Jaxb annotation 使用 Jaxb annotation初步使用
JAXB-XML 注解应用 一、JAXB 概念和特点 JAXB(Java Architecture for XML Binding)是一项业界标准,它可以根据 XML Schema 产生 Java 类的技术。该过程中,JAXB 也提供了将 XML 实例文档反向生成 Java 对象树的...
当使用的JDK为1.6版本的时候,JAXB注解命名空间使用到的jar包
JAXB注解 java 关于xml的注解,自动生成xml文件
使用jaxb生成XML例子,含有例子和注解解析
JAXB的使用JAXB的使用JAXB的使用JAXB的使用
JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式
jaxb-libs.jar 下载 JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML...JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等。
无需安装,解压后即可。jaxb-api.jar,jaxb-xjc.jar,jaxb-impl.jar,activation.jar等相关jar包在lib文件夹下。
jaxb-api-2.2.jar 下载 JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成...JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等。
JAXB的安装包及插件
jaxb-api jaxb-impl jar
JAXB的 eclipse插件 JAXB的 eclipse插件 JAXB的 eclipse插件 JAXB的 eclipse插件 JAXB的 eclipse插件
在使用webservice,mule esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader这个错误,按照打出的信息Use the endorsed directory mechanism to place jaxb-api.jar in ...
maven-jaxb2-plugin-0.14.0 下载 maven包 JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-...JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等。
activation.jar jaxb1-impl.jar jaxb-api.jar jaxb-impl.jar jaxb-xjc.jar jsr173_1.0_api.jar系列jar下载
java -jar JAXB2_20060607.jar On Windows, you can just double-click the jar file to execute. Release Notes Browse the release notes online, including what's new. Technical Support Please subscribe to...
一个jaxb小项目的源码,可以帮助理解jaxb的执行和注解。
有关Maven项目中缺少jaxb-api的异常报错解决,jaxb-api-2.3.0.jar