http://www.wakhok.ac.jp/~tatsuo/ws2/ 2006年10月18日 植田龍男 Webサービス II (第4回) http://www.wakhok.ac.jp/~tatsuo/ws2/ 2006年10月18日 植田龍男
JAXB JAXB(Java architecture for XML Binding) Java と XML とのマッピングを提供 新しい Webサービスを支える基礎技術 アノテーションをフルに活用
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> -- フィールドに対応
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クラスからスキーマを生成 ツール schemagen schemagen persen/*.java サンプルでは person.Person.java , person.Name.java
アノテーションの例(要素の性質) @XmlElement アノテーション 個々の要素の性質(デフォルト値など) @XmlElement( defaultValue=“0” ) public int x;
アノテーションの例(属性に変換) @XmlAttribute アノテーション public class Point { public int x; 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 x=“0” y=“1” />
補足: ant ツールの使用 Apache プロジェクトが提供するオープンソース http://ant.apache.org/ コマンドラインで操作できるビルドツール 開発の手順、環境を xml で記述 デフォルトのビルドファイル build.xml ant で実行 必要に応じて「ターゲット」を指定
build.xml の例(クラスパス) <property name="jwsdp.home" value="/Sun/jwsdp-2.0" /> <path id="classpath"> <pathelement path="." /> <fileset dir="${jwsdp.home}" includes="jaxb/lib/*.jar" /> </path>
build.xml の例(コンパイル) <target name="compile"> <echo message="Compiling the java source files..." /> <javac destdir="." debug="on"> <src path="." /> <classpath refid="classpath" /> </javac> </target>
build.xml の例(実行) <target name="run" depends="compile"> <echo message="Running the sample application..." /> <java classname="Java2SchemaTest"> <classpath refid="classpath" /> </java> </target>