ホームページ  >  記事  >  バックエンド開発  >  BeanとXMLの相互変換を実現するJaxb2のサンプルコードの詳細説明

BeanとXMLの相互変換を実現するJaxb2のサンプルコードの詳細説明

黄舟
黄舟オリジナル
2017-03-31 14:40:072086ブラウズ

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;
	}
}
rreee

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。