一、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介面的開發工作量。
三、jaxb代碼舉例
第一步:需要引入javax.xml.bind.jar
第二步:編寫java bean;
package com.mkyong.core; import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement; @XmlRootElementpublic class Customer { String name;int age;int id; public String getName() {return name;} @XmlElementpublic void setName(String name) {this.name = name;} public int getAge() {return age;} @XmlElementpublic void setAge(int age) {this.age = age;} public int getId() {return id;} @XmlAttributepublic void setId(int id) {this.id = id;} }
第三步:main方法把java bean轉化為xml字串
package com.mkyong.core; import java.io.File;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller; public class JAXBExample {public static void main(String[] args) { Customer customer = new Customer(); customer.setId(100); customer.setName("mkyong"); customer.setAge(29); try { File file = new File("C:\\file.xml");JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); // output pretty printedjaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(customer, file);jaxbMarshaller.marshal(customer, System.out); } catch (JAXBException e) {e.printStackTrace(); } }}
下面是輸出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><customer id="100"> <age>29</age> <name>mkyong</name></customer>
四、jaxb開發常用
jdk提供了xjc工具可以使xsd自動產生相應的java bean,這大大提高了開發的效率。同時,我們也可以使用trang.jar把xml輕鬆轉化為xsd。下面是使用的舉例。
第一步:把資料庫表映射為xml
<?xml version="1.0" encoding="UTF-8"?><User u_id="1" u_name="moto" u_email="aaa@XXX.com" u_mood="今天放假了" u_state="online" u_mobile="12345678901" u_hometown="山西" u_job="IT軟體工程師" u_avatar="w34353453543r53" />
第二步:使用trang.jar轉化為xsd檔案。在命令列執行:
java -jar D:\lib\trang.jar user.xml user.xsd
下面,是產生的User.java。
//// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. // Generated on: 2011.11.13 at 01:26:07 ���� CST //package com.moto.server.bean;import java.math.BigInteger;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlAttribute;import javax.xml.bind.annotation.XmlRootElement;import javax.xml.bind.annotation.XmlSchemaType;import javax.xml.bind.annotation.XmlType;import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;/** * <p>Java class for anonymous complex type. * * <p>The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType> * <complexContent> * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> * <attribute name="u_avatar" use="required" type="{http://www.w3.org/2001/XMLSchema}NCName" /> * <attribute name="u_email" use="required" type="{http://www.w3.org/2001/XMLSchema}anySimpleType" /> * <attribute name="u_hometown" use="required" type="{http://www.w3.org/2001/XMLSchema}NCName" /> * <attribute name="u_id" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" /> * <attribute name="u_job" use="required" type="{http://www.w3.org/2001/XMLSchema}NCName" /> * <attribute name="u_mobile" use="required" type="{http://www.w3.org/2001/XMLSchema}integer" /> * <attribute name="u_mood" use="required" type="{http://www.w3.org/2001/XMLSchema}NCName" /> * <attribute name="u_name" use="required" type="{http://www.w3.org/2001/XMLSchema}NCName" /> * <attribute name="u_state" use="required" type="{http://www.w3.org/2001/XMLSchema}NCName" /> * </restriction> * </complexContent> * </complexType> * </pre> * * */@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "")@XmlRootElement(name = "User")public class User { @XmlAttribute(name = "u_avatar", required = true) @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlSchemaType(name = "NCName") protected String uAvatar; @XmlAttribute(name = "u_email", required = true) @XmlSchemaType(name = "anySimpleType") protected String uEmail; @XmlAttribute(name = "u_hometown", required = true) @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlSchemaType(name = "NCName") protected String uHometown; @XmlAttribute(name = "u_id", required = true) protected BigInteger uId; @XmlAttribute(name = "u_job", required = true) @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlSchemaType(name = "NCName") protected String uJob; @XmlAttribute(name = "u_mobile", required = true) protected BigInteger uMobile; @XmlAttribute(name = "u_mood", required = true) @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlSchemaType(name = "NCName") protected String uMood; @XmlAttribute(name = "u_name", required = true) @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlSchemaType(name = "NCName") protected String uName; @XmlAttribute(name = "u_state", required = true) @XmlJavaTypeAdapter(CollapsedStringAdapter.class) @XmlSchemaType(name = "NCName") protected String uState; /** * Gets the value of the uAvatar property. * * @return * possible object is * {@link String } * */ public String getUAvatar() { return uAvatar; } /** * Sets the value of the uAvatar property. * * @param value * allowed object is * {@link String } * */ public void setUAvatar(String value) { this.uAvatar = value; } /** * Gets the value of the uEmail property. * * @return * possible object is * {@link String } * */ public String getUEmail() { return uEmail; } /** * Sets the value of the uEmail property. * * @param value * allowed object is * {@link String } * */ public void setUEmail(String value) { this.uEmail = value; } /** * Gets the value of the uHometown property. * * @return * possible object is * {@link String } * */ public String getUHometown() { return uHometown; } /** * Sets the value of the uHometown property. * * @param value * allowed object is * {@link String } * */ public void setUHometown(String value) { this.uHometown = value; } /** * Gets the value of the uId property. * * @return * possible object is * {@link BigInteger } * */ public BigInteger getUId() { return uId; } /** * Sets the value of the uId property. * * @param value * allowed object is * {@link BigInteger } * */ public void setUId(BigInteger value) { this.uId = value; } /** * Gets the value of the uJob property. * * @return * possible object is * {@link String } * */ public String getUJob() { return uJob; } /** * Sets the value of the uJob property. * * @param value * allowed object is * {@link String } * */ public void setUJob(String value) { this.uJob = value; } /** * Gets the value of the uMobile property. * * @return * possible object is * {@link BigInteger } * */ public BigInteger getUMobile() { return uMobile; } /** * Sets the value of the uMobile property. * * @param value * allowed object is * {@link BigInteger } * */ public void setUMobile(BigInteger value) { this.uMobile = value; } /** * Gets the value of the uMood property. * * @return * possible object is * {@link String } * */ public String getUMood() { return uMood; } /** * Sets the value of the uMood property. * * @param value * allowed object is * {@link String } * */ public void setUMood(String value) { this.uMood = value; } /** * Gets the value of the uName property. * * @return * possible object is * {@link String } * */ public String getUName() { return uName; } /** * Sets the value of the uName property. * * @param value * allowed object is * {@link String } * */ public void setUName(String value) { this.uName = value; } /** * Gets the value of the uState property. * * @return * possible object is * {@link String } * */ public String getUState() { return uState; } /** * Sets the value of the uState property. * * @param value * allowed object is * {@link String } * */ public void setUState(String value) { this.uState = value; }}