1. 重要なクラスの説明
JAXBContext クラスはアプリケーションへの入り口であり、XML/Java バインディング情報を管理するために使用されます。
MarshallerInterface、Java ペアを XML データに変換します。
Unmarshaller インターフェースは、XML を Javaオブジェクト に変換します。
@XmlType、Java クラスまたは列挙型を XML スキーマ型にマップします。
@XmlAccessorType(XmlAccessType.FIELD)、フィールドまたはプロパティのシリアル化を制御します。 FIELD は、JAXB が Java クラス内のすべての非 static (static)、
非一時 (@XmlTransient でマークされた) フィールドをすべて XML に自動的にバインドすることを意味します。他の値は XmlAccessType.PROPERTY と XmlAccessType.NONE です。
@XmlAccessorOrder は、JAXB バインディング クラスのプロパティとフィールドの順序を制御します。
@XmlJavaTypeAdapter は、カスタム アダプター (つまり、抽象クラス XmlAdapter を拡張し、marshal() メソッドと unmarshal() メソッドをオーバーライドする) を使用して、Java クラスを XML にシリアル化します。
@XmlElementWrapper は、 array またはコレクション (つまり、複数の要素を含むメンバー variable) に対して、配列またはコレクションをラップする XML 要素 (ラッパーと呼ばれる) を生成します。
@XmlRootElement、Java クラスまたは列挙型を XML 要素にマップします。
@XmlElement、Java クラスの属性を、その属性と同じ名前の XML 要素にマップします。
@XmlAttribute は、Java クラスの属性を、その属性と同じ名前を持つ XML 属性にマップします。
2. 例
1. JavaBean
import java.util.Date; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import com.tzz.util.xml.JaxbDateSerializer; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "country") @XmlType(propOrder = { "id", "createDate", "name", "provinceList" }) public class Country { private Integer id; @XmlJavaTypeAdapter(JaxbDateSerializer.class) private Date createDate; @XmlElement(name = "name") private String name; @XmlElementWrapper(name = "provinces") @XmlElement(name = "province") private List<Province> provinceList; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Province> getProvinceList() { return provinceList; } public void setProvinceList(List<Province> provinceList) { this.provinceList = provinceList; } }
2. 変換ツールクラス
import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { "name", "provCity" }) public class Province { @XmlElement(name = "name") private String name; @XmlElement(name = "provCity") private String provCity; public String getProvCity() { return provCity; } public void setProvCity(String provCity) { this.provCity = provCity; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
4. テスト結果
4.1. testBeanToXml メソッドを実行します
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; /** * Jaxb 2.0 * */ public class JaxbXmlUtil { @SuppressWarnings("unchecked") public static <T> T xmlToBean(String xml, Class<T> beanClass) { try { JAXBContext jaxbContext = JAXBContext.newInstance(beanClass); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); T user = (T) unmarshaller.unmarshal(new StringReader(xml)); return user; } catch (JAXBException e) { e.printStackTrace(); return null; } } /**Bean转XML*/ public static String beanToXml(Object obj) { String result = null; try { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); //决定是否在转换成xml时同时进行格式化(即按标签自动换行,否则即是一行的xml) marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //Marshaller.JAXB_ENCODING xml的编码方式 marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8"); StringWriter writer = new StringWriter(); marshaller.marshal(obj, writer); result = writer.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } }
4.2.方法を教えてください
rreee以上がBeanとXMLの相互変換を実現するJaxb2のサンプルコードの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。