XMLBeans

XMLBeans（エックスエムエルビーンズ）は、JavaとXMLデータバインディングとの変換を行うフレームワーク。Apacheソフトウェア財団のXMLプロジェクトの一部である。2013年6月に開発を一旦終了したが、その後Apache POIプロジェクトの一部として2018年6月に開発が再開された。
概要.
XMLBeans は、Java が扱いやすい形でXMLの全ての能力へのアクセスを可能にするツールである。すなわち、XMLと XML Schema の表現能力の豊かさと機能を利用し、それらの機能を可能な限り自然な形でJava言語とその型付き構成要素にマッピングする。XMLBeans は XML Schema を使って Java インタフェースとクラスをコンパイルし、その生成物を使ってXMLインスタンスデータのアクセスと変更を行う。XMLBeans を使うと、新たなインタフェースやクラスを使うのと同じ感覚でXMLインスタンスデータにアクセスできる。XMLインスタンスデータへのアクセスを提供する以外に、XML Infoset への完全なアクセスを可能にするAPIを備え、XML Schema Object モデルを通して XML Schema 自体へのリフレクションも可能にする。
目的.
XMLBeans の主な目的は、ストリーミング以外の（メモリ上の）あらゆるXMLプログラミングで利用可能なものを構築することであった。XML Schema をコンパイルしてJavaクラスを生成したいとき
API.
以上のような目的を達成するため、XMLBeans は以下の3つのAPIを提供している。
これらは全て、性能を考慮して構築されている。XMLBeans は一般に非常に性能がよいと言われている。
例.
以下は、国を表現したXMLスキーマ定義の簡単な例である。
 <?xml version="1.0" encoding="UTF-8"?>
 <xs:schema targetNamespace="http://www.openuri.org/domain/country/v1"
 xmlns:tns="http://www.openuri.org/domain/country/v1"
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 elementFormDefault="qualified"
 attributeFormDefault="unqualified"
 version="1.0">
 <xs:element name="Country" type="tns:Country"/>
 <xs:complexType name="Country">
 <xs:sequence>
 <xs:element name="Name" type="xs:string"/>
 <xs:element name="Population" type="xs:int"/>
 <xs:element name="Iso" type="tns:Iso"/>
 </xs:sequence>
 </xs:complexType>
 <xs:complexType name="Iso">
 <xs:annotation><xs:documentation>ISO 3166</xs:documentation></xs:annotation>
 <xs:sequence>
 <xs:element name="Alpha2" type="tns:IsoAlpha2"/>
 <xs:element name="Alpha3" type="tns:IsoAlpha3"/>
 <xs:element name="CountryCode" type="tns:IsoCountryCode"/>
 </xs:sequence>
 </xs:complexType>
 <xs:simpleType name="IsoCountryCode">
 <xs:restriction base="xs:int">
 <xs:totalDigits value="3"/>
 </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IsoAlpha2">
 <xs:restriction base="xs:string">
 <xs:pattern value="[A-Z]{2}"/>
 <xs:whiteSpace value="collapse"/>
 </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IsoAlpha3">
 <xs:restriction base="xs:string">
 <xs:pattern value="[A-Z]{3}"/>
 <xs:whiteSpace value="collapse"/>
 </xs:restriction>
 </xs:simpleType>
 </xs:schema>
このスキーマをXMLBeanクラスに（例えば Antを使って）コンパイルすると、スキーマ定義に従ったXMLデータを容易に生成・操作できるコードが生成される。以下のJavaコードは、XML文書の生成と評価の様子を簡単に示したものである。
 import org.openuri.domain.country.v1.Country;
 import org.openuri.domain.country.v1.Iso;
 public class CountrySample 
 public static void main(String[] args) {
 Country country = Country. Factory.newInstance();
 country.setName("Denmark");
 country.setPopulation(5450661); // wikipedia より :-)
 // country XMLBean を XML として表示
 System.out.println(country.xmlText());
 // 文書が妥当かチェック - "Document is invalid" と表示するだろう
 // オブジェクトに必要な Iso 子要素が生成されていないため
 System.out.println ("Document is " + (country.validate() ? "valid" : "invalid"));
 // 複合型 Iso の子要素を追加し、文書を妥当なものにする
 Iso iso = country.addNewIso();
 iso.setAlpha2("DK");
 iso.setAlpha3("DNK");
 iso.setCountryCode(208);
 // country XMLBean を XML として表示
 System.out.println(country.xmlText());
 // 文書が妥当かチェック - "Document is valid" と表示されるだろう
 System.out.println ("Document is " + (country.validate() ? "valid" : "invalid"));
歴史.
David Bau はBEAシステムズ在籍時（現在はGoogle勤務）に XMLBeans プロジェクトを開始した。彼はそのツールの主任設計者であり、チームを率いて XMLBeans 1.0 を設計・実装した。
XMLBeans は、BEA WebLogic にかつて含まれていたXMLバインディングツール XMLMaps を基盤としていた。XMBeans は当初 BEA WebLogic Workshop Framework というプロプライエタリな製品の一部として開発された。しかし2003年1月27日に初めて発表された当初から、BEA はこれをオープン標準にしたいと表明していた。その時点では、BEAが標準化をどの団体に任せるかは明らかではなかったが、2003年中にApacheソフトウェア財団への寄贈が行われた。