JAXBを使用してobjectとxmlの変換を完了
4096 ワード
1.xmlファイルの各ノードと属性情報を対応するJavaモデルを作成します.
2.Javaモデルでxmlファイルに対応するノードと属性を作成するには、注釈で表す必要があります.
@XmlRootElement JavaクラスをXMLのルートノードパラメータにマッピングする:name このルートノードの名前namespaceを定義する このルートノードのネーミングスペースを定義するには
@XmlAccessorType このクラスにマッピングするタイプをXMLにマッピングする必要があるかを定義します.次の4つのパラメータを受信できます.
XmlAccessType.PROPERTY:XML XmlAccessType.PUBLIC_にこのクラスのプロパティ(get/setメソッド)をマップMEMBER:このクラスのすべてのpublicのfieldまたはpropertyをXML(デフォルト)XmlAccessType.NONEに同時にマップします:@XmlElementをマップしません フィールドまたはget/setメソッドをXMLにマッピングするノードを指定します.たとえば、クラスのXmlAccessorTypeがPROPERTYとしてマークされている場合、get/setメソッドのないフィールドに注釈をマークすると、そのフィールドをXMLにマッピングできます.パラメータ:defaultValue ノードのデフォルト名の指定 ノード名namespaceの指定 ノードネーミングスペースの指定required (デフォルトはfalse)nillableが必要かどうか このフィールドにnillable=「true」プロパティ(デフォルトfalse)typeが含まれているかどうか このフィールドまたは属性の関連タイプを定義@XmlAttribute フィールドまたはget/setメソッドをXMLにマッピングするプロパティを指定します.パラメータ:name 属性名namespaceの指定 属性ネーミングスペースの指定required 必要かどうか(デフォルトはfalse)@XmlTransient フィールドまたは属性を定義するには、XMLにマッピングする必要はありません.たとえば、クラスのXmlAccessorTypeがPROPERTYとしてマークされている場合、あるget/setメソッドのフィールドに注釈がマークされている場合、その属性はマッピングされません.@XmlType マッピングに関するルール・パラメータの定義:propOrder XMLマッピング時のノード順序factoryClassの指定 UnMarshalのマッピングクラスインスタンスを生成するために必要なファクトリクラスを指定します.デフォルトはこのクラス自体factoryMethodです. 工場クラスを指定する工場メソッドname XML Schemaのtypeの名前の定義 namespace Schemaのネーミングスペースを指定@XmlElementWrapper 配列要素または集合要素の親ノードを定義します.たとえば、クラスにリストitemsという要素があります.この注釈を付けないと、この要素は... ... とマッピングされます.この注釈は、@XmlElementWrapper(name="items")@XmlElement(name="item")public List itemsなどの要素をパッケージ化できます.このようなXMLスタイルが生成されます: - ...
- ...
@XmlJavaTypeAdapter フィールドまたは属性をXMLにマッピングするアダプタをカスタマイズします.たとえば、クラスにインタフェースが含まれている場合、javax.xml.bind.annotation.adapters.XmlAdapterクラスから継承されたアダプタを定義し、このインタフェースがXMLにどのようにマッピングされるかを指定できます.@XmlSchemaはパッケージ全体のnamespaceを構成します.この注釈はpackage-info.javaファイルに... という形式で配置する必要があります.この注釈は、@XmlElementWrapper(name="items")@XmlElement(name="item")public List itemsなどの要素をパッケージ化することができます.このようなXMLスタイルが生成されます: - ...
- ...
3.くだらないことは言わないで、私たちは直接とても簡単な例のプログラムに行きます.
3.1 2つの基本的なPOJOクラス.
2.Javaモデルでxmlファイルに対応するノードと属性を作成するには、注釈で表す必要があります.
@XmlRootElement JavaクラスをXMLのルートノードパラメータにマッピングする:name このルートノードの名前namespaceを定義する このルートノードのネーミングスペースを定義するには
@XmlAccessorType このクラスにマッピングするタイプをXMLにマッピングする必要があるかを定義します.次の4つのパラメータを受信できます.
XmlAccessType.PROPERTY:XML XmlAccessType.PUBLIC_にこのクラスのプロパティ(get/setメソッド)をマップMEMBER:このクラスのすべてのpublicのfieldまたはpropertyをXML(デフォルト)XmlAccessType.NONEに同時にマップします:@XmlElementをマップしません フィールドまたはget/setメソッドをXMLにマッピングするノードを指定します.たとえば、クラスのXmlAccessorTypeがPROPERTYとしてマークされている場合、get/setメソッドのないフィールドに注釈をマークすると、そのフィールドをXMLにマッピングできます.パラメータ:defaultValue ノードのデフォルト名の指定 ノード名namespaceの指定 ノードネーミングスペースの指定required (デフォルトはfalse)nillableが必要かどうか このフィールドにnillable=「true」プロパティ(デフォルトfalse)typeが含まれているかどうか このフィールドまたは属性の関連タイプを定義@XmlAttribute フィールドまたはget/setメソッドをXMLにマッピングするプロパティを指定します.パラメータ:name 属性名namespaceの指定 属性ネーミングスペースの指定required 必要かどうか(デフォルトはfalse)@XmlTransient フィールドまたは属性を定義するには、XMLにマッピングする必要はありません.たとえば、クラスのXmlAccessorTypeがPROPERTYとしてマークされている場合、あるget/setメソッドのフィールドに注釈がマークされている場合、その属性はマッピングされません.@XmlType マッピングに関するルール・パラメータの定義:propOrder XMLマッピング時のノード順序factoryClassの指定 UnMarshalのマッピングクラスインスタンスを生成するために必要なファクトリクラスを指定します.デフォルトはこのクラス自体factoryMethodです. 工場クラスを指定する工場メソッドname XML Schemaのtypeの名前の定義 namespace Schemaのネーミングスペースを指定@XmlElementWrapper 配列要素または集合要素の親ノードを定義します.たとえば、クラスにリストitemsという要素があります.この注釈を付けないと、この要素は
3.くだらないことは言わないで、私たちは直接とても簡単な例のプログラムに行きます.
3.1 2つの基本的なPOJOクラス.
package com.npf.jaxb;
public class Classroom {
private int id;
private String name;
}
package com.npf.jaxb;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Student {
private int id;
private String name;
private int age;
private Classroom room;
} 3.2测试方法package com.npf.jaxb; import java.io.StringReader; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import org.junit.Test; public class JAXBTest { @Test public void object2xml() throws JAXBException{ JAXBContext jaxbContext = JAXBContext.newInstance(Student.class); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); Student student = new Student(1, "zhangsan",1,new Classroom(1,"computer")); marshaller.marshal(student, System.out); } @Test public void xml2object() throws JAXBException{ JAXBContext jaxbContext = JAXBContext.newInstance(Student.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" + "<student><age>1</age><id>1</id><name>zhangsan</name><room><id>1</id>" + "<name>computer</name></room></student>"; Student student = (Student) unmarshaller.unmarshal(new StringReader(xml)); System.out.println(student.getName()+","+student.getRoom().getName()); } }