Webサービス (第1回) 2007年9月26日 「WebサービスII」の内容 第2世代のWebサービス Java SE 6 の標準 アノテーションの利用 アプリケーションサーバ Glassfish EoD(Ease of Development) 移行期のため今年度3年前期の「応用 Java」と内容の一部が重複(JAXB) 本講義のキーワード Webサービスの新しい流れ JAXB, JAX-WS 2.0へ Java SE 6 での位置付け xjc, schemagen, wsgen,wsimport Webサービスとアノテーション EoD( Ease of Development ) SOA( Service Oriented Architecture ) 新しいWebサービスの実現 JAX-WS 2.0 の API (JAX-RPC の後継、JAX-RPC 2.0 が改称) JAXB(Java Architecture for XML Binding ) に基づいて実現 アノテーションの活用 W3C XML Schema Java のクラス定義 Java自体の新しい流れ JDK 1.4 から J2SDK 5.0へ 新しい言語仕様の拡張 Generics, 列挙型の導入=>アノテーションの 実現 J2SDK 5.0 から Java SE 6 へ アノテーションによる EoD の本格的導入 JAXB, JAX-WS は Java SE 6 の標準に この時間の目標 Java SE 6 のXML関連のパッケージ(復習) JAXBとは? ツール xjc XML Schema から Javaのクラスを自動生成 XMLの文書 Javaのインスタンス J2SE 1.4以降のAPI javax.xml.parsers org.xml.sax org.w3c.dom javax.xml.transform javax.xml.transform.stream javax.xml.transform.sax Javax.xml.transform.dom J2SE 5.0 の追加パッケージ javax.xml javax.xml.datatype javax.xml.namespace javax.xml.validation javax.xml.xpath Java SE 6 で追加(1) -- 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 SE 6 で追加(2) – 電子署名 javax.xml.crypto javax.xml.crypto.dom javax.xml.crypto.dsig javax.xml.crypto.dsig.dom javax.xml.crypto.dsig.keyinfo javax.xml.crypto.dsig.spec Java SE 6 で追加(3) – 入出力 javax.xml.soap javax.xml.stream javax.xml.stream.events javax.xml.stream.util Java SE 6 で追加(4) – Webサービス javax.xml.ws javax.xml.ws.handler javax.xml.ws.handler.soap javax.xml.ws.http javax.xml.ws.soap javax.xml.ws.spi javax.jws javax.jws.soap 本講義では Java SE 6が必須 2F実習室 Linux または Windows 環境 自分のマシンの場合は Java SE 6 をイン ストール 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> -- フィールドに対応 Java と XML(3) インスタンスは個々の XML文書に対応 クラスの定義は? XML文書の定義はスキーマ言語 DTD(Document Type Definition) XML Schema W3C XML Schema RELAX NG Schematron W3C XML Schema の特徴 優れた表現力 厳密な定義 豊富なデータ型 名前空間の利用 それ自身がXMLである! 事実上の標準規格 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の要素 新しい ツール xjc (1) xjc ( XML to Java compiler ) W3C XML Schema 定義ファイルを Java のクラス定義に xjc name.xsd 元のスキーマファイル <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="name" type="Name"/> <xsd:complexType name="Name"> <xsd:sequence> <xsd:element name="first" type="xsd:string"/> <xsd:element name="last" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:schema> 自動生成された Name.java(1) package generated; import import import import javax.xml.bind.annotation.XmlAccessType; javax.xml.bind.annotation.XmlAccessorType; javax.xml.bind.annotation.XmlElement; javax.xml.bind.annotation.XmlType; 自動生成された Name.java(2) @XmlAccessorType(XmlAccessType.FIELD) @XmlType( name = "Name", propOrder ={ "first", "last" } ) public class Name { : : 自動生成された Name.java(3) 「プロパティ」とフィールド @XmlElement(required = true) protected String first; @XmlElement(required = true) protected String last; 自動生成された Name.java(4) getter と setter も生成 public String getFirst() { return first; } public void setFirst( String value) { this.first = value; } XML文書から Javaインスタンス <name> <first>Tatsuo</first> <last>Ueda</last> </name> XML文書から Javaインスタンス import javax.xml.bind.*; import generated.*; : : JAXBContext jc = JAXBContext.newInstance( "generated" ); XML文書から Javaインスタンス Unmarshaller u = jc.createUnmarshaller(); JAXBElement element = (JAXBElement)u.unmarshal( new FileInputStream( "name.xml" ) ); Name name = (Name)element.getValue(); XML文書から Javaインスタンス String first = name.getFirst(); String last = name.getLast(); System.out.println( first + " " + last ); JavaインスタンスからXML文書 Name name = new Name(); String first = "Fujio"; String last = "Maruyama"; name.setFirst( first ); name.setLast( last ); JavaインスタンスからXML文書 JAXBElement element =new JAXBElement( new QName( "name" ), Name.class, name ); Marshaller m = jc.createMarshaller(); m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
© Copyright 2024 ExpyDoc