More Related Content
Similar to Beginning Java EE 6 勉強会(6) #bje_study (20)
Beginning Java EE 6 勉強会(6) #bje_study
- 1. Beginning Java EE 6 勉強会(6)
-SOAP WEB サービス-
担当者:@masato_ka
Masato Kawamura
2012/06/26
- 4. SOAP Webサービス
• Webサービスの一種
– SOAP, REST(15章), XML-RPC
• 疎結合型のWEBサービス
– 開発に使用された言語をしらなくておk
– メソッドシグネチャをしらなくておk
– 利用できるビジネスメソッドの一目瞭然で知れる
– XML形式でメッセージを送受信する
• HTTPプロトコルを利用する
– インターネットや企業のイントラネット内にある
サービスを統合できる(EAI)
12/06/27 Beginning JavaEE6 勉強会(6) 4
- 5. 14.1 SOAP Webサービスとは
• 図解!これがSOAP Webサービスだ
12/06/27 Beginning JavaEE6 勉強会(6) 5
<<レジストリ>>
UDDI
コンシューマ
SOAP Webサービス
WEBサービスを利用
するクライアント
SOAP Webサービスの
アドレスと呼び出し方法
を記録している
XML/HTTP
メッセージのリクエスト
とレスポンスの形式を
定義
WDSL
SOAP形式でのメッ
セージをやりとり
- 7. WSDL(Web Services Description Language)
• インタフェース定義言語
– XML
– コンシューマとサービスのやりとりを定義
– Javaのインタフェース相当をXMLで記述
12/06/27 Beginning JavaEE6 勉強会(6) 7
クライアントJVM Webサービスコンテナ
<<コンポーネント>>
コンシューマ
<<コンポーネント>>
SOAP Webサービス
WSDL
• 次の内容を定義している
メッセージタイプ、ポート、通信プロトコル、サポート対象の操作、場所、予
想される返値
- 11. 14.2 SOAP Webサービスの仕様概要
• Webサービスの全体の仕様は多岐にわたる
– W3C
• HTML RDF CSS
• XML XMLスキーマ SOAP WSDL
– OASIS
• UUID
• Java EEでの仕様(Java Web Services)
– JAX-WS 2.2
– Web Service 1.2⇒本を参照
– JAXB 2.2
– WebServices Metadata 2.0⇒本を参照
– JAXR 1.0⇒本を参照
12/06/27 Beginning JavaEE6 勉強会(6) 11
- 12. JAX-WS 2.2
• Webサービス作成のAPI およびアノテーション
– SOAP経由でのリクエストの送受信機能
– プロトコルの複雑さも隠蔽!
– 低レベルの処理を受け持ってくれる
• SOAP メッセージの生成と解析をすべて任せら
れる。
12/06/27 Beginning JavaEE6 勉強会(6) 12
- 16. 14.4.1 バインド
• JAXBでできること。
12/06/27 Beginning JavaEE6 勉強会(6) 16
<xs:schema>
<xs:element/>
<xs:complexType>
<xs:element>
・・・・・・・・
</xs:sequence>
</xs:complexType>
</xs:schema>
<xs:schema>
<xs:element/>
<xs:complexType>
<xs:element>
・・・・・・・・
</xs:sequence>
</xs:complexType>
</xs:schema>
<xs:schema>
<xs:element/>
<xs:complexType>
<xs:element>
・・・・・・・・
</xs:sequence>
</xs:complexType>
</xs:schema>
<CreditCard>
<controlNumber>
<expiryDate>
<number>
<type>VISA</type>
</CreditCard>
XML Schema クラス
オブジェクトXMLオブジェクト
スキーマコンパイラ (xjc)
スキーマコンジェネレータ
(schemagen)
アンマーシャリング
マーシャリング
- 21. 14.5 内部動作
• WDSLを使用してインタフェース定義
• SOAPはWSDLにあわせたメッセージを送信
12/06/27 Beginning JavaEE6 勉強会(6) 21
クライアントJVM Webサービスコンテナ
<<コンポーネント>>
コンシューマ
<<コンポーネント>>
SOAP Webサービス
WSDL
SOAP/
HTTP
- 23. WSDLのXML要素の紹介
• 実際にWDSL をみながら確認してみよう。
– 詳しくは演習2で
12/06/27 Beginning JavaEE6 勉強会(6) 23
XML要素 説明
<definitions> WSDLのルート要素、ドキュメント全体で参照可能な名前空間
のグローバル宣言を定義
<types> メッセージで使用するデータ型を定義。先ほどの例では、Web
サービスリクエスト(CreditCardオブジェクト)とレスポンス
(Boolean)に渡すパラメーターを表すXML(スキーマ定義)
<message> WebサービスのコンシューマとWebサービス自体の間で交換
されるデータの形式を定義。(例:リクエストとレスポンス)
<portType> Webサービスの操作を指定。
<binding> 具体的なプロトコルと、特定のポート種類に定義される操作と
メッセージのデータ形式を表す。
<service> 各ポートがエンドポイントと関連図蹴られている<port>要素の
コレクションを含む
- 24. SOAP
• 交換するメッセージのXML構造
• HTTPリクエストでXML メッセージを送信
• EnvelopeとBodyは必須
12/06/27 Beginning JavaEE6 勉強会(6) 24
XML要素 説明
<Envelope> ドキュメントで使用するメッセージと名前空間を定義。
必須のルート要素。
<Header> メッセージまたはアプリケーション固有のインフラスト
ラクチャのオプション属性を含む。
<Body> アプリケーション間で交換されるメッセージを含む。
<Fault> メッセージ処理中に発生したエラーについての情報を
提供。
- 25. SOAPメッセージの例
• リクエストのSOAPエンベローブ
12/06/27 Beginning JavaEE6 勉強会(6) 25
<soap:Envelope xmlns:soap=“http://schemas.xmlsoap.org/envelope/”
xmlns:cc=“http://chapter14.javaee6.org/”>
<soap:Header/>
<soap:Body>
<cc:validate>
<arg0>
<controlNumber>1234</controlNumber>
<expiryDate>10/10</expireDate>
<number>9999</number>
<type>VISA</type>
</arg0>
</cc:validate>
</soap:Body>
</soap:Envelope>
メッセージ(クレジットカード)
Envelopeと名前空間
- 27. 14.6 Java API for XML-Based Web Services
• JAX-WSがWSDLなどの複雑さを隠蔽してくれ
るが、Javaコードを書くときに直接参照、解析
をしなければいけない場合がある。
– トップダウンアプローチ
• WSDLの定義を作成し、クラスを実装する
– ボトムアップアプローチ
• 既存のクラスをWSDL に変換する。
• WSDLに適合させるため、コードの調整が必要
それ、JAX-WSが提供するアノテーションで実現
できるよ?
※それ以外にもwsimportというツールもある。
12/06/27 Beginning JavaEE6 勉強会(6) 27
- 28. 14.6.1 JAX-WSモデル
• Webサービス化の要件
– クラスには@javax.jws.WebServiceアノテーショ
ンを付加するか同等のXMLディスクリプタを使用
– WebサービスをEJBエンドポイントにする場合、ク
ラスに@javax.ejb.Statelessアノテーションを付加
する必要がある。
– クラスをpublicで定義final abstruct定義は不可
– クラスはデフォルトのパブリックコンストラクタが
必要
– クラスはfinalize()メソッドの実装は不可
– サービスはステートレスオブジェクトとして実装。
複数回のメソッド呼び出し間にクライアント固有の
状態を保存しない。
12/06/27 Beginning JavaEE6 勉強会(6) 28
- 37. WebServiceContext のメソッド
メソッド 説明
getMessageContext このメソッドが呼び出されたときに処理
中のリクエストのMessageContextを返す。
これは、SOAPメッセージのヘッダーや本
文などにアクセスするために使用可能
getUserPrincipal 現在調整中のリクエストの送信元を識別
するPrincipalを返す
isUserInRole 認証済みのユーザーが指定された論理
ロールに含まれているかどうかを示す
boolean値を返す
getEndpointReference このエンドポイントに関連する
EndpointReferenceを返す。
12/06/27 Beginning JavaEE6 勉強会(6) 37
- 39. SOAP Webサービスの呼び出し
• サービスエンドポイントインタフェース
(SEI)
– WSDLから生成されたJavaインタフェース
– HTTPを使用してローカルJava呼び出しをリモート
のWeb サービスにルーティングする
– SEIからプロキシクラスを取得する。
12/06/27 Beginning JavaEE6 勉強会(6) 39
クライアントJVM Webサービスコンテナ
<<コンポーネント>>
コンシューマ
<<コンポーネント>>
SOAP Webサービス
WSDL
SOAP/
HTTP <<コンポーネント>>
SOAP Webサービスのエンド
ポイント
<<コンポーネント>>
コンシューマプロキシ
Javaインタ
フェース
Javaインタ
フェース
- 42. まとめ
• SOAP Webサービスの概要
– 関連技術
– SOAPを使ったWebサービスの呼び出し方法
• JAXB
– オブジェクトとXMLのバインド
– スキーマとクラスのバインド
• Webサービスの内部動作
• JAX-WS
12/06/27 Beginning JavaEE6 勉強会(6) 42