jaxb实现xml与javaBean相互转换
2014-11-17 00:00
507 查看
一、jaxb是什么
JAXB是Java Architecture for XML Binding的缩写。可以将一个Java对象转变成为XML格式,反之亦然。
我们把对象与关系数据库之间的映射称为ORM,其实也可以把对象与XML之间的映射称为OXM(Object XML Mapping)。原来JAXB是Java EE的一部分,在JDK1.6中,SUN将其放到了Java SE中,这也是SUN的一贯做法。JDK1.6中自带的这个JAXB版本是2.0,比起1.0(JSR 31)来,JAXB2(JSR 222)用JDK5的新特性Annotation来标识要作绑定的类和属性等,这就极大简化了开发的工作量。
二、jaxb应用模式
在JAVA EE 5\6中,jaxb可以很方便的与jax-rs、jax-ws集成,极大的简化了web service接口的开发工作量。
需要引入javax.xml.bind.jar,我是用myeclipse直接创建的web项目就不需要引入jar包,有自带的,所以建议创建web项目
一:从javabean到xml的转换
第一步:写一个简单的javabean
package test.entity;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlType(name="test",propOrder={"id","name","pro"})
@XmlRootElement(name="Test")
public class Test {
}
第二步: 把javabean转换成xml
package testApp;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import test.entity.Test;
public class TestApp {
public static void main(String[] args) throws JAXBException{
Test test = new Test();
test.setId("111");
test.setName("test");
test.setPro("pro");
JAXBContext context = JAXBContext.newInstance(Test.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");//编码格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 是否格式化生成的xml串
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);// 是否省略xm头声明信息
StringWriter writer = new StringWriter();
marshaller.marshal(test, writer);
System.out.println(writer.toString());
}
}
运行结果:
从xml到javabean的转换只需要写几句代码即可,把上面成生的xml字符串拷贝下来,如下:
package testApp;
import java.io.ByteArrayInputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import test.entity.Test;
public class XmlToJava {
}
运行结果:
JAXB是Java Architecture for XML Binding的缩写。可以将一个Java对象转变成为XML格式,反之亦然。
我们把对象与关系数据库之间的映射称为ORM,其实也可以把对象与XML之间的映射称为OXM(Object XML Mapping)。原来JAXB是Java EE的一部分,在JDK1.6中,SUN将其放到了Java SE中,这也是SUN的一贯做法。JDK1.6中自带的这个JAXB版本是2.0,比起1.0(JSR 31)来,JAXB2(JSR 222)用JDK5的新特性Annotation来标识要作绑定的类和属性等,这就极大简化了开发的工作量。
二、jaxb应用模式
在JAVA EE 5\6中,jaxb可以很方便的与jax-rs、jax-ws集成,极大的简化了web service接口的开发工作量。
需要引入javax.xml.bind.jar,我是用myeclipse直接创建的web项目就不需要引入jar包,有自带的,所以建议创建web项目
一:从javabean到xml的转换
第一步:写一个简单的javabean
package test.entity;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlType(name="test",propOrder={"id","name","pro"})
@XmlRootElement(name="Test")
public class Test {
private String id; private String name; private String pro; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPro() { return pro; } public void setPro(String pro) { this.pro = pro; }
}
第二步: 把javabean转换成xml
package testApp;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import test.entity.Test;
public class TestApp {
public static void main(String[] args) throws JAXBException{
Test test = new Test();
test.setId("111");
test.setName("test");
test.setPro("pro");
JAXBContext context = JAXBContext.newInstance(Test.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");//编码格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 是否格式化生成的xml串
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);// 是否省略xm头声明信息
StringWriter writer = new StringWriter();
marshaller.marshal(test, writer);
System.out.println(writer.toString());
}
}
运行结果:
从xml到javabean的转换只需要写几句代码即可,把上面成生的xml字符串拷贝下来,如下:
package testApp;
import java.io.ByteArrayInputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import test.entity.Test;
public class XmlToJava {
/** * @param args * @throws JAXBException */ public static void main(String[] args) throws JAXBException { String xml = "<Test><id>111</id><name>test</name><pro>pro</pro></Test>"; Test test = null; JAXBContext context = JAXBContext.newInstance(Test.class); Unmarshaller unMa = context.createUnmarshaller(); test = (Test)unMa.unmarshal(new ByteArrayInputStream(xml.getBytes())); System.out.println(test.getId()+"\t"+test.getName()+"\t"+test.getPro()); }
}
运行结果:
相关文章推荐
- JavaBean-XML组件轻松实现JavaBeans到XML的相互转换
- 利用jaxb实现xml和bean的相互转换
- JAXB实现JavaBean与XML互相转换
- 用 Jaxb 对 XML 和 JavaBean相互转换
- JavaBean-XML组件轻松实现JavaBeans到XML的相互转换
- jaxb实现XML与JavaBean的互相转换遇到的难点(二)
- JAXB实现JavaBean和xml互相转换
- 使用 XStream实现JavaBean 与 XML/JSON 之间相互转换
- XStream实现javabean与xml之间相互转换
- XML解析之JAXB (实现Java对象与XML的相互转换)
- 利用JAXB实现java对象和xml的相互转换
- JavaEE中利用JAXB来实现Java对象和XML文档进行相互转换
- 使用JDK中JAXBContext对JavaBean和xml相互转换
- JavaBean-XML组件轻松实现JavaBeans到XML的相互转换
- XStream实现javabean与xml之间相互转换
- jaxb实现XML与JavaBean的互相转换遇到的难点(一)
- XStream实现javabean与xml之间相互转换
- xstream:实现JavaBean与XML/JSON的相互转换
- JAXB实现xml与javabean的转换
- xstream:实现JavaBean与XML/JSON的相互转换