250 likes | 410 Views
Web サービス ( 第 2 回). 200 7 年 10 月 3 日. 「 Web サービス II 」の内容. 第2世代の Web サービス Java SE 6 の標準 アノテーションの利用 アプリケーションサーバ Glassfish EoD(Ease of Development) 移行期のため今年度3年前期の「応用 Java 」と内容の一部が重複 (JAXB). この時間の目標. JAXB とは? ( 復習 ) ツール schemagen Java のクラスから XML Schema を自動生成
E N D
Webサービス (第2回) 2007年10月3日
「WebサービスII」の内容 • 第2世代のWebサービス Java SE 6 の標準 アノテーションの利用 アプリケーションサーバ Glassfish EoD(Ease of Development) • 移行期のため今年度3年前期の「応用Java」と内容の一部が重複(JAXB)
この時間の目標 • JAXBとは?(復習) • ツール schemagen Java のクラスからXMLSchema を自動生成 • XMLの文書 Javaのインスタンス • Javaのアノテーション • アノテーションとJAXB
JAXB • JAXB(Java architecture for XML Binding) • Java と XML とのマッピングを提供 • 新しい Webサービスを支える基礎技術 • アノテーションをフルに活用
Java SE 6 で追加-- JAXB • javax.xml.bind javax.xml.bind.annotation javax.xml.bind.annotation.adapters javax.xml.bind.attachment javax.xml.bind.helpers javax.xml.bind.util
Java と XML(1) • Java のクラスとインスタンス public class Name { String first; String last; } --------------------------------------------------- Name name = new Name(); name.first=“Tatsuo”; name.last=“Ueda”;
Java と XML(2) • XMLのドキュメント <nama> <first>Tatsuo</fist> <last>Ueda</last> </name> 要素<name> -- インスタンス name 要素<first>,<last> -- フィールドに対応
Java と XML(3) • インスタンスは個々の XML文書に対応 • クラスの定義は? • XML文書の定義はスキーマ言語 DTD(Document Type Definition) XML Schema W3C XML Schema RELAX NG Schematron
XML Schema の例(1) <xsd:schema xmlns:xsd ="http://www.w3.org/2001/XMLSchema"> <xsd:element name="name" type="nameType"/> <xsd:complexType name="nameType"> <xsd:sequence> <xsd:element name="first" type="xsd:string"/> <xsd:element name="last" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
Java との比較(1) • String first; public String getFirst() { returen first; } public void setFirst( String s ) { first = s; } • <xsd:element name="first" type="xsd:string"/>
Java との比較(2) • public class name { … } <xsd:element name="name“ type="nameType"/> <xsd:complexType name="nameType"> : • String first; String last; <xsd:sequence> <xsd:element name="first" type="xsd:string"/> <xsd:element name="last" type="xsd:string"/> </xsd:sequence>
XML Schema の例(2) <xsd:complexType name="peopleType"> <xsd:sequence> <xsd:element name="name" type="nameType" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType>
対応のまとめ • Java言語 < -- > W3C XML Schema • Java のクラス < -- > スキーマ定義ファイル • Java のインスタンス < -- > XML文書 • Java のプロパティ < -- > XMLの要素
新しいツール(1)xjc • xjc ( XML to Java compiler ) • W3C XML Schema 定義ファイルを Java のクラス定義に xjc name.xsd
新しいツール(2)schemagen • schemagen( schema generater ) • Javaのクラス定義を W3C XML Schema 定義ファイルに schemagen person/*.java デフォルト名で schema1.xsd が生成
Javaクラスからスキーマを生成 • サンプルでは person.Person.java , person.Name.java • パッケージ person を指定 (=格納されるディレクトリ名)
person.Name.java package person; import javax.xml.bind.annotation.*; @XmlType public class Name { public String first; public String last; }
person.Person.java package person; import javax.xml.bind.annotation.*; @XmlRootElement public class Person { public Name name; public String address; }
自動生成される schema1.xsd <xs:complexType name="name"> <xs:sequence> <xs:element name="first" type="xs:string" minOccurs="0"/> <xs:element name="last" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType>
schema1.xsd のつづき <xs:complexType name="person"> <xs:sequence> <xs:element name="address" type="xs:string" minOccurs="0"/> <xs:element name="name" type="name" minOccurs="0"/> </xs:sequence> </xs:complexType>
アノテーションの例(要素の性質) • @XmlElement アノテーション 個々の要素の性質(デフォルト値など) @XmlElement( defaultValue=“0” ) public int x;
生成される schema1.xsd <xs:complexType name="point"> <xs:sequence> <xs:element name="x" type="xs:int" default="0"/> <xs:element name="y" type="xs:int" default="0"/> </xs:sequence> </xs:complexType>
アノテーションの例(属性に変換) • @XmlAttribute アノテーション public class Point { @XmlAttribute public int x; @XmlAttribute pulbic int y; }
生成される XML Schema <xs:complexType name="point"> <xs:sequence/> <xs:attribute name="x" type="xs:int" use="required"/> <xs:attribute name="y" type="xs:int" use="required"/> </xs:complexType>
対応するXML文書の表現 <point> <x>0</x> <y>1</y> </point> ではなく、 <point x=“0” y=“1” />