Webサービス (第2回) 2007年10月3日 「WebサービスII」の内容 第2世代のWebサービス Java SE 6 の標準 アノテーションの利用 アプリケーションサーバ Glassfish EoD(Ease of Development) 移行期のため今年度3年前期の「応用 Java」と内容の一部が重複(JAXB) この時間の目標 JAXBとは?(復習) ツール schemagen Java のクラスからXML Schema を自動生成 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” />
© Copyright 2024 ExpyDoc