JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
测试代码:
package com.jaxb; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User { private String name; private int age; public String getName() { return name; } @XmlElement public void setName(String name) { this.name = name; } public int getAge() { return age; } @XmlElement public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } }
package com.jaxb; import java.io.File; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import junit.framework.TestCase; public class TestJAXB extends TestCase { private static final String FILE_PATH = "C:\\TestJAXB.xml"; private static final File file = new File(FILE_PATH); public void testMarshalAndStringWriter() { User user = new User(); user.setAge(18); user.setName("yang"); try { JAXBContext jaxbContext = JAXBContext.newInstance(User.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(user, file); StringWriter stringWriter = new StringWriter(); jaxbMarshaller.marshal(user, stringWriter); System.out.println(stringWriter); } catch (JAXBException e) { e.printStackTrace(); } } public void testUnmarshalAndStringReader() { StringBuilder sb = new StringBuilder(); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"); sb.append("<user>"); sb.append("<age>19</age>"); sb.append("<name>yang</name>"); sb.append("</user>"); StringReader stringReader = new StringReader(sb.toString()); try { JAXBContext jaxbContext = JAXBContext.newInstance(User.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); User user = (User) jaxbUnmarshaller.unmarshal(file); System.out.println(user); user = (User) jaxbUnmarshaller.unmarshal(stringReader); System.out.println(user); } catch (JAXBException e) { e.printStackTrace(); } } }
对于StringWriter和StringReader,一般就是用在接口上的。平时用String类就行了,但是碰到像
public void marshal( Object jaxbElement, java.io.Writer writer ) throws JAXBException;
public Object unmarshal( java.io.File f ) throws JAXBException;
这样的接口,就可以用StringWriter和StringReader。
运行testMarshalAndStringWriter:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <user> <age>18</age> <name>yang</name> </user>
User [name=yang, age=18] User [name=yang, age=19]