import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
public class JAXB2Tester {
public static void main(String[] args) throws JAXBException,IOException {
JAXBContext context = JAXBContext.newInstance(Person.class);
//下面代码演示将对象转变为xml
Marshaller m = context.createMarshaller();
Address address = new Address("China","Beijing","Beijing","ShangDi West","100080");
Person p = new Person(Calendar.getInstance(),"JAXB2",address,Gender.MALE,"SW");
FileWriter fw = new FileWriter("person.xml");
m.marshal(p,fw);
//下面代码演示将上面生成的xml转换为对象
FileReader fr = new FileReader("person.xml");
Unmarshaller um = context.createUnmarshaller();
Person p2 = (Person)um.unmarshal(fr);
System.out.println("Country:"+p2.getAddress().getCountry());
}
}
@XmlRootElement//表示person是一个根元素
class Person {
@XmlElement
Calendar birthDay; //birthday将作为person的子元素
@XmlAttribute
String name; //name将作为person的的一个属性
public Address getAddress() {
return address;
}
@XmlElement
Address address; //address将作为person的子元素
@XmlElement
Gender gender; //gender将作为person的子元素
@XmlElement
String job; //job将作为person的子元素
public Person(){
}
public Person(Calendar birthDay, String name, Address address, Gender gender, String job) {
this.birthDay = birthDay;
this.name = name;
this.address = address;
this.gender = gender;
this.job = job;
}
}
enum Gender{
MALE(true),
FEMALE (false);
private boolean value;
Gender(boolean _value){
value = _value;
}
}
class Address {
@XmlAttribute
String country;
@XmlElement
String state;
@XmlElement
String city;
@XmlElement
String street;
String zipcode; //由于没有添加@XmlElement,所以该元素不会出现在输出的xml中
public Address() {
}
public Address(String country, String state, String city, String street, String zipcode) {
this.country = country;
this.state = state;
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
public String getCountry() {
return country;
}
}
运行该程序,我们会得到一个person.xml的文件,如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<person name="JAXB2">
<birthDay>2006-12-28T08:49:27.203+00:00</birthDay>
<address country="China">
<state>Beijing</state>
<city>Beijing</city>
<street>ShangDi West</street>
</address>
<gender>MALE</gender>
<job>SW</job>
</person>
控制台会输出
Country:China
注意:改功能也可用xStream加注释实现,xStream的jar包需要1.3或者以上。
jaxb2和xstream的区别:
jaxb2如果没有加@XmlElement等注释,是不会写入到xml中的,但是xstream不会
xstream没有加上注释,默认以属性名称写入子级的元素中
XStream还可以将bean转为json,功能比较强悍,个人建议使用xstream
分享到:
相关推荐
在给定的文档中,提到了几种用于Java对象与XML之间转换的技术,包括Jackson、xStream、castor、Jibx和Jaxb2。以下是对这些技术和Spring MVC整合的详细说明: 1. **Jackson**: Jackson是一个高性能的JSON库,支持...
此外,与JAXB相比,XStream的API更简洁,更易于理解和使用。 **应用场景:** 1. 数据持久化:将Java对象保存到XML文件,便于数据备份或跨进程通信。 2. Web服务:在RESTful API中,XML作为数据交换格式。 3. 配置...
尽管XStream不能像DOM或JAXB那样对生成的XML结构进行深度定制,但它简化了对象到XML的映射过程,使得代码更加简洁。 下面我们将详细探讨XStream的主要功能和使用方法: 1. **对象到XML转换**: 使用XStream,你...
- **与 JAXB**:虽然两者都可以将 Java 对象转换为 XML,但 JAXB 更侧重于基于注解的自动绑定,而 XStream 提供了更多的控制权和灵活性。 深入研究 XStream 的源码,开发者可以学习到如何利用反射、流处理和类型...
本篇将详细介绍两种常用的Java XML与Bean互转方法:XStream库和JAXB(Java Architecture for XML Binding)框架。 一、XStream库 1. **XStream简介**: XStream是一个用于Java的轻量级库,它提供了一种简单的API来...
通过这个实例,开发者可以熟悉JiBX的基本用法,理解其与传统的Java XML绑定工具(如XStream或JAXB)的区别,并学会如何在实际项目中应用JiBX来提高XML处理的效率。此外,它还提供了一个实践平台,让开发者可以尝试...
Axis2 支持多种协议,如 SOAP、REST、MTOM 和 SWA,以及多种数据绑定技术,如 ADB、XMLBeans、JAXB 和 JiBX。 **JAX-WS(Java API for XML Web Services)** JAX-WS 是 Java 平台上用于创建 SOAP Web 服务的标准 ...
在描述中提到,可以使用其他APIs来实现类似的转换,例如JAXB(Java Architecture for XML Binding)和Apache的XStream等。但JOX的优势在于其小巧且易于理解,对于简单的对象转换任务,它可能是一个快速且有效的解决...
2. 创建XStream实例:`XStream xstream = new XStream();` 3. 配置XStream:你可以设置别名、忽略字段等,比如`xstream.alias("person", Person.class);` 4. 序列化对象:`String xml = xstream.toXML(person);` ...
虽然具体的代码不可见,但通常会包含创建Java对象、配置和使用JAXB或XStream实例,以及生成XML输出的步骤。 8. **产品标准化.vsd**: 这个文件名可能是一个Visio绘图文件,可能与设计数据结构、类图或者流程图有关...
2. **对象与XML转换**:XStream的核心方法是`toXML()`和`fromXML()`。以下是一个简单的例子: ```java import com.thoughtworks.xstream.XStream; public class Main { public static void main(String[] args)...
7. **读写XML文件**:使用生成的Java对象,我们可以使用JAXB或XStream提供的API读取XML文件并创建相应的Java对象实例,或者将Java对象转换为XML文件进行保存。 在实际项目中,这样的映射机制对于实现数据交换、持久...
6. **其他库**:除了JAXB,Java还有其他库可以实现XML到Object的转换,例如Apache的`XStream`和Google的`Gson`。这些库提供了不同的功能和性能,可以根据项目需求选择。 7. **性能优化**:对于大型XML文件,可以...
2. **初始化XStream实例**:创建XStream对象,并可以设置各种配置,如命名空间、别名等。 3. **对象到XML**:使用`toXML()`方法将Java对象转换为XML字符串。 4. **XML到对象**:使用`fromXML()`方法将XML字符串转换...
本文将详细介绍如何在SpringMVC中集成并使用JSON和XML视图,以及相关的库如json-lib、Jackson、xStream、Jibx和Jaxb2。 首先,让我们理解JSON和XML的作用。JSON(JavaScript Object Notation)是一种轻量级的数据...
6. **扩展性**:DOM4J2的设计使得它易于扩展,可以与其他XML库如JAXB、XStream等集成,也可以自定义处理逻辑。 博文链接提到的ITEYE博客文章可能深入讲解了如何使用DOM4J2进行XML操作,包括具体的代码示例和最佳...
除了JAXB,还可以使用DOM API手动解析XML并设置JavaBean的属性,或者使用第三方库如Apache的Digester或XStream等进行转换。 在实际应用中,我们还需要关注一些细节问题,比如XML命名空间(Namespace)的处理、XML...
这些注解如`@XmlRootElement`、`@XmlElement`等,告诉JAXB如何映射XML元素和属性到类的字段。然后,可以使用`Unmarshaller`接口的`unmarshal()`方法将XML文档转换为Java对象。 2. **Bean到XML的转换**: 反过来,...
2. **JAXB使用示例**: - 首先,需要在Java类上添加JAXB注解,如`@XmlRootElement`,`@XmlElement`,`@XmlAttribute`等。 - 创建一个`Marshaller`实例,然后调用其`marshal`方法将Java对象转换为XML字符串或写入...
Spring WS支持多种XML数据绑定框架,如JAXB、Castor、XStream和Aegis,它们用于将Java对象转换为XML和XML转换回Java对象。这些数据绑定库使得与XML的交互更加直观和高效。 3. **契约优先的Web服务**: Spring WS...