JAXB は Java Architecture for XML Binding の略称で、Java クラスと XML の間のマッピングを確立するために使用され、開発者が XML と Java オブジェクトを相互に簡単に変換するのに役立ちます。
この記事では、簡単な例を使用して JAXB の使用法を紹介します。まず、一般的に使用される JAXB の API を理解する必要があります。
JAXBContext クラスはアプリケーションのエントリ ポイントであり、XML/Java バインディング情報を管理するために使用されます。
Marshaller インターフェイス、Java オブジェクトを XML データにシリアル化します。
Unmarshaller インターフェースは、XML データを Java オブジェクトに逆シリアル化します。
@XmlType、Java クラスまたは列挙型を XML スキーマ型にマップします。
@XmlAccessorType(XmlAccessType.FIELD)、フィールドまたは属性のシリアル化を制御します。 FIELD は、JAXB が Java クラス内のすべての非静的 (静的)、非一時的 (@XmlTransient でマークされた) フィールドを XML に自動的にバインドすることを意味します。他の値は XmlAccessType.PROPERTY と XmlAccessType.NONE です。
@XmlAccessorOrder、JAXBバインディングクラスのプロパティとフィールドの順序を制御します。
@XmlJavaTypeAdapter、シリアル化のためにカスタマイズされたアダプタを使用します(つまり、抽象クラスXmlAdapterを拡張し、marshal()およびunmarshal()メソッドをオーバーライドします)。 Java クラスは XML です。
@XmlElementWrapper は、配列またはコレクション (つまり、複数の要素を含むメンバー変数) に対して、配列またはコレクションをラップする XML 要素 (ラッパーと呼ばれる) を生成します。
@XmlRootElement、Java クラスまたは列挙型を XML 要素にマップします。
@XmlElement は、Java クラスの属性を、その属性と同じ名前を持つ XML 要素にマップします。
@XmlAttribute は、Java クラスの属性を、その属性と同じ名前を持つ XML 属性にマップします。
バインドする必要がある Java Bean の内容は次のとおりです:
Employee.java
package net.csdn.beans; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement @XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" }) public class Employee { private String name; private String gender; private int age; private String role; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } @Override public String toString() { return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender + " Role=" + this.role; } }
Java オブジェクトに変換する必要がある XML ファイルの内容は次のとおりです:
employee.xml
<?xml version="1.0"?><employee id="1"> <name>Pankaj</name> <age>29</age> <role>Java Developer</role> <gender>Male</gender></employee>
次に、テスト ケース コードを記述します:
TestJAXB。 java
package net.csdn.test; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import net.csdn.beans.Employee; import org.junit.Test;public class TestJAXB { @Test public void testXml2Obj() throws Exception { InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml"); byte[] bytes = new byte[is.available()]; is.read(bytes); String xmlStr = new String(bytes); JAXBContext context = JAXBContext.newInstance(Employee.class); Unmarshaller unmarshaller = context.createUnmarshaller(); Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr)); System.out.println(emp); } @Test public void testObj2Xml() { Employee emp = new Employee(); emp.setAge(10); emp.setGender("Male"); emp.setName("Jane"); emp.setRole("Teacher"); String xmlStr = TestJAXB.convertToXml(emp,"utf-8"); System.out.println(xmlStr); } public static String convertToXml(Object obj, String encoding) { String result = null; try { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); StringWriter writer = new StringWriter(); marshaller.marshal(obj, writer); result = writer.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } }
testObj2Xml テスト メソッドを実行、コンソール出力:
<?xml version="1.0" encoding="utf-8" standalone="yes"?><employee> <name>Jane</name> <age>10</age> <role>Teacher</role> <gender>Male</gender></employee>
testXml2Obj テスト メソッドを実行、コンソール出力:
Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
注: この例では、JUnit4 がユニットとして使用されます。テスト ツールで、[ウィンドウ] -> [Eclipse でビューを表示] -> [OutLine] メニューをクリックしてアウトライン ビューを開き、testXml2Obj メソッドと testObj2Xml メソッドをそれぞれ右クリック -> [Run As] -> JUnit Test をクリックします。
JAXB は Java Architecture for XML Binding の略称で、Java クラスと XML の間のマッピングを確立するために使用され、開発者が XML と Java オブジェクトを相互に簡単に変換するのに役立ちます。
この記事では、簡単な例を使用して JAXB の使用法を紹介します。まず、一般的に使用される JAXB の API を理解する必要があります。
JAXBContext クラスはアプリケーションのエントリ ポイントであり、XML/Java バインディング情報を管理するために使用されます。
Marshaller インターフェイスは、Java オブジェクトを XML データにシリアル化します。
Unmarshaller インターフェースは、XML データを Java オブジェクトに逆シリアル化します。
@XmlType、Java クラスまたは列挙型を XML スキーマ型にマップします。
@XmlAccessorType(XmlAccessType.FIELD)、フィールドまたは属性のシリアル化を制御します。 FIELD は、JAXB が Java クラス内のすべての非静的 (静的)、非一時的 (@XmlTransient でマークされた) フィールドを XML に自動的にバインドすることを意味します。他の値は XmlAccessType.PROPERTY と XmlAccessType.NONE です。
@XmlAccessorOrder、JAXBバインディングクラスのプロパティとフィールドの順序を制御します。
@XmlJavaTypeAdapter、カスタマイズされたアダプタを使用します(つまり、抽象クラスXmlAdapterを拡張し、marshal()およびunmarshal()メソッドをオーバーライドします)。 Java クラスは XML です。
@XmlElementWrapper は、配列またはコレクション (つまり、複数の要素を含むメンバー変数) に対して、配列またはコレクションをラップする XML 要素 (ラッパーと呼ばれる) を生成します。
@XmlRootElement、Java クラスまたは列挙型を XML 要素にマップします。
@XmlElement は、Java クラスの属性を、その属性と同じ名前を持つ XML 要素にマップします。
@XmlAttribute は、Java クラスの属性を、その属性と同じ名前の XML 属性にマップします。
バインドする必要がある Java Bean の内容は次のとおりです:
Employee.java
package net.csdn.beans; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement @XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" }) public class Employee { private String name; private String gender; private int age; private String role; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } @Override public String toString() { return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender + " Role=" + this.role; } }
Java オブジェクトに変換する必要がある XML ファイルの内容は次のとおりです:
employee.xml
<?xml version="1.0"?><employee id="1"> <name>Pankaj</name> <age>29</age> <role>Java Developer</role> <gender>Male</gender></employee>
次に、テスト ケース コードを記述します:
TestJAXB。 java
package net.csdn.test; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import net.csdn.beans.Employee; import org.junit.Test; public class TestJAXB { @Test public void testXml2Obj() throws Exception { InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml"); byte[] bytes = new byte[is.available()]; is.read(bytes); String xmlStr = new String(bytes); JAXBContext context = JAXBContext.newInstance(Employee.class); Unmarshaller unmarshaller = context.createUnmarshaller(); Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr)); System.out.println(emp); } @Test public void testObj2Xml() { Employee emp = new Employee(); emp.setAge(10); emp.setGender("Male"); emp.setName("Jane"); emp.setRole("Teacher"); String xmlStr = TestJAXB.convertToXml(emp,"utf-8"); System.out.println(xmlStr); } public static String convertToXml(Object obj, String encoding) { String result = null; try { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); StringWriter writer = new StringWriter(); marshaller.marshal(obj, writer); result = writer.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } }
testObj2Xml テスト メソッドを実行、コンソール出力:
<?xml version="1.0" encoding="utf-8" standalone="yes"?><employee> <name>Jane</name> <age>10</age> <role>Teacher</role> <gender>Male</gender></employee>
testXml2Obj テスト メソッドを実行、コンソール出力:
Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer
注: この例では、JUnit4 がユニットとして使用されます。テスト ツールで、[ウィンドウ] -> [Eclipse でビューを表示] -> [OutLine] メニューをクリックしてアウトライン ビューを開き、testXml2Obj メソッドと testObj2Xml メソッドをそれぞれ右クリック -> [Run As] -> JUnit Test をクリックします。
上記は Java&Xml チュートリアル (11) XML と Java オブジェクト変換の JAXB 実装です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。