JAXB入门

JAXB(Java Architecture for XML Binding) 是一个业界的标准,JDK中提供的支持包有:

javax.xml.bind

javax.xml.bind.annotation 等等


话说,那天需要个功能类,能够把使得JAVA对象和XML之间方便的转换,于是乎网上找了commons-digester.jar/xstream/dom4j  都遇到了一些问题,其中大名鼎鼎的commons-degester看了后发现貌似真没提供JAVA到XML的转换,其实开源的还有其他的一些也大多提供XML转JAVA对象的。

后来发现JDK中有提供JAVA对象转XML的,唉 不熟悉JDK走多少弯路啊。。。

下面记录个使用JAXB的入门代码

package jaxb;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

/**
 * jaxb的入门例子
 */
public class JAXBSimple {
	public static void main(String[] args) throws JAXBException, IOException {
		// JAXBContext 类提供到 JAXB API 的客户端入口点。
		JAXBContext jc = JAXBContext.newInstance(Person.class);
		// 创建一个可以用来将 java 内容树转换为 XML 数据的 Marshaller 对象。
		Marshaller m = jc.createMarshaller();
		// 设置 Marshaller 底层实现中的特定属性。 比如格式化显示XML
		m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

		String outPath = JAXBSimple.class.getResource(".").getFile()
				+ "person10.xml";
		FileWriter fw = new FileWriter(outPath);
		
		//java==>xml
		// 输出到流或文件
		// m.marshal(p, System.out);
		m.marshal(getPerson(), fw);
		
		//xml==>java
		Unmarshaller u = jc.createUnmarshaller();
		Object o = u.unmarshal(new File(outPath));
		System.out.println(o);
	}

	private static Person getPerson() {
		Person p = new Person();
		p.setName1("name1");
		p.setAge(123);
		Cat c = new Cat();
		c.setCatName("cat");
		p.setCat(c);
		return p;
	}
}

package jaxb;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

//代表类名为XML的根名
@XmlRootElement
public class Person {
	// @XmlElement(name="aaaa")
	private String name1;
	private int age;
	private Cat cat;

	// 如果要给输出的类成员变量设置别名,请在getXXX上进行注解,在字段上注解是没有效果的
	@XmlElement(name = "aaaa")
	public String getName1() {
		return name1;
	}

	public void setName1(String name1) {
		this.name1 = name1;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Cat getCat() {
		return cat;
	}

	public void setCat(Cat cat) {
		this.cat = cat;
	}

	@Override
	public String toString() {
		return "[name1:" + name1 + ",age:" + age + ",cat:" + cat + "]";
	}

}

package jaxb;

public class Cat {
	private String catName;
	private int catAge;

	public String getCatName() {
		return catName;
	}

	public void setCatName(String catName) {
		this.catName = catName;
	}

	public int getCatAge() {
		return catAge;
	}

	public void setCatAge(int catAge) {
		this.catAge = catAge;
	}

	@Override
	public String toString() {
		return "[catName:" + catName + ",catAge:" + catAge + "]";
	}

}

===>输出

java==>xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person>
    <age>123</age>
    <cat>
        <catAge>0</catAge>
        <catName>cat</catName>
    </cat>
    <aaaa>name1</aaaa>
</person>

xml转java:[name1:name1,age:123,cat:[catName:cat,catAge:0]]

你可能感兴趣的:(JAXB入门)