Your SlideShare is downloading. ×
0
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Beginning Java EE 6 勉強会(6) #bje_study

2,794

Published on

Beginning Java EE 6 の14章SOAP WEBサービスの資料です。

Beginning Java EE 6 の14章SOAP WEBサービスの資料です。

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,794
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
86
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Beginning Java EE 6 勉強会(6) -SOAP WEB サービス- 担当者:@masato_ka Masato Kawamura 2012/06/26
  • 2. 目次 12/06/27 Beginning JavaEE6 勉強会(6) 2 1. SOAP Webサービス
  • 3. 第14章 SOAP Webサービス 12/06/27 Beginning JavaEE6 勉強会(6) 3
  • 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形式でのメッ セージをやりとり
  • 6. XML(Extenblish Markup language) • データの独立性と相互運用性のために利用 • SOAP Webサービスの様々な場面で利用する – メッセージ形式 – サービス定義(WSDL) – データの交換(SOAP) 12/06/27 Beginning JavaEE6 勉強会(6) 6
  • 7. WSDL(Web Services Description Language) • インタフェース定義言語 – XML – コンシューマとサービスのやりとりを定義 – Javaのインタフェース相当をXMLで記述 12/06/27 Beginning JavaEE6 勉強会(6) 7 クライアントJVM Webサービスコンテナ <<コンポーネント>> コンシューマ <<コンポーネント>> SOAP Webサービス WSDL • 次の内容を定義している メッセージタイプ、ポート、通信プロトコル、サポート対象の操作、場所、予 想される返値
  • 8. SOAP • 標準Webサービスアプリケーションプロトコル • 整形されたXMLデータ(詳細は後ほど) – エンベローブ – ヘッダ – 本文 • HTTPなどのネットワークプロトコルを使って 交換 • 特定の技術から独立し抽象化された通信プロト コル 12/06/27 Beginning JavaEE6 勉強会(6) 8
  • 9. UDDI • WebサービスのXMLベースレジストリ • Webサービスの場所と呼び出し方法を検出する 方法を提供する。 • そもそも企業間でのWebサービスの使い回しに 利用しようとしてたけど、知らないWebサービ スを使うケースが少なかったので使われなく なった。 12/06/27 Beginning JavaEE6 勉強会(6) 9
  • 10. 転送プロトコル • コンシューマとWebサービスがサポートしてれ ば転送プロトコルにはこだわらない。 • `例えば以下のいずれも利用できる。 – HTTP – TCP/IP – SMTP – FTP 12/06/27 Beginning JavaEE6 勉強会(6) 10 Webサービスの場合ほとんどがHTTPなのでHTTPを 利用するのが標準
  • 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
  • 13. JAXB 2.2 • XMLをJavaオブジェクトとして操作できる – API – アノテーション • マーシャリングとアンマーシャリングが簡単 • JAX-WSと統合されているがXMLのあらゆる目 的に使えます。 12/06/27 Beginning JavaEE6 勉強会(6) 13
  • 14. 14.3 SOAP Webサービスを呼び出す方法 • 実装はとっても楽ちん!今日から君もSOAPer 12/06/27 Beginning JavaEE6 勉強会(6) 14 Webサービス コンシューマ データオブジェクト JAX-WS JAXB
  • 15. 14.4 XMLバインド用のJavaアーキテクチャ • XMLを意識せずにアノテーションのみで実現! – マーシャリング – アンマーシャリング – XMLスキーマを自動生成 そう、JAXBならね! 12/06/27 Beginning JavaEE6 勉強会(6) 15 XML XMLスキーマ <xs:complexType….. のxsを名前空間という同じ名称のタグ のコンテキスト切り替えられる 例:XMLとXHTMLなど
  • 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) アンマーシャリング マーシャリング
  • 17. マーシャリング • マーシャリングもとっても簡単 – アンマーシャリングもほぼ同じ 12/06/27 Beginning JavaEE6 勉強会(6) 17
  • 18. JAXBでバインドを行う2つのシナリオ • xjcやschemaGenといったツールがある • Javaクラス – Javaクラスが存在する場合にXMLスキーマを生成 – WebサービスはWSDLを生成できる • XMLスキーマ – XMLスキーマが存在する場合に、スキーマコンパイ ラを使用してJavaクラスを生成 – WSDLからクラスを生成することができる 12/06/27 Beginning JavaEE6 勉強会(6) 18
  • 19. JAXBのアノテーション • JAXBもJPA同様にアノテーションでマッピング をカスタマイズ可能 – 詳しくは表14-1参照 12/06/27 Beginning JavaEE6 勉強会(6) 19
  • 20. 演習1 • Chapter14のサンプルプロジェクトを読み込み – 次のコードを確認してみよう • WEBサービス • CreditCardクラス • コンシューマ • マーシャリング • CreditCardクラス(アノテーション) • Consumer Serviceのどちらにあるでしょう? 12/06/27 Beginning JavaEE6 勉強会(6) 20
  • 21. 14.5 内部動作 • WDSLを使用してインタフェース定義 • SOAPはWSDLにあわせたメッセージを送信 12/06/27 Beginning JavaEE6 勉強会(6) 21 クライアントJVM Webサービスコンテナ <<コンポーネント>> コンシューマ <<コンポーネント>> SOAP Webサービス WSDL SOAP/ HTTP
  • 22. WSDL • Web サービスのコンテナでホストされる • XML形式で次の内容を記述している – サービスの処理内容 – 操作の呼び出し方法 – サービスの所在 12/06/27 Beginning JavaEE6 勉強会(6) 22
  • 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と名前空間
  • 26. 演習2WSDLをのぞいちゃおう • Chapter14のサーバをGlassFishにデプロイ • ポート4848の管理画面からアプリケーション を選択しCardValidatorのエンドポイントを選 択 12/06/27 Beginning JavaEE6 勉強会(6) 26
  • 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
  • 29. Webサービスのエンドポイント • JAX-WS2.2 POJOとステートレスEJBの両方を WEBサービスで公開できる。 – コードの違いはない(@Statelessの違いのみ) • EJB を使った場合のメリット – セキュリティとコンテナ管理のトランザクション – インターセプタ利用可能 – ビジネスコードをEJB Webサービスとして公開でき る。 12/06/27 Beginning JavaEE6 勉強会(6) 29 クラス パッケージ化 デプロイ場所 POJO .war(サーブレットエンドポイント) サーブレットコンテナ EJB .jar(EJBエンドポイント) EJBコンテナ
  • 30. JAX-WSのアノテーション • JavaオブジェクトからSOAPへの変換が必要 – WSDL(JAXB)同様アノテーションを利用する。 • WSDLのマッピングアノテーション – javax.jwsパッケージに属している – WSDLとJava間のマッピングを変更可能 • SOAPバインディングアノテーション – Javax.jws.soapパッケージに属している – SOAPバインドのカスタマイズが可能 12/06/27 Beginning JavaEE6 勉強会(6) 30
  • 31. @WebService • クラスをウェブサービスにする。 • WDSLファイルに関するカスタマイズが可能 – WSDLのWebサービス名 – 名前空間のカスタマイズ – WDSL自体の場所の変更 • クラスにアノテーションするとコンテナがイン タフェースを生成する。 • インタフェースに付加してクラスで実装するこ ともできる。 12/06/27 Beginning JavaEE6 勉強会(6) 31
  • 32. @WebMethod • デフォルトではクラスのパブリックメソッドが すべてWSDLで公開される。WSDLへのマッピ ングをカスタマイズする – マッピングした際のメソッド名の変更 – WSDLからメソッドの除外を可能とする 12/06/27 Beginning JavaEE6 勉強会(6) 32
  • 33. @WebResult、@WebParam • @WebResult – @WebMethodと連携してWSDLでメソッドの戻り 値につけられる名前を制御する。 • @WebParam – @WebResultと同様に、メソッドに渡すパラメータ のカスタマイズが可能となる。 12/06/27 Beginning JavaEE6 勉強会(6) 33
  • 34. @OneWay • 戻り値がない(void)メソッドに使用する。 – 非同期呼び出しなど – 呼び出しを最適化することができる。 12/06/27 Beginning JavaEE6 勉強会(6) 34
  • 35. ライフサイクルとコールバック • 存在しない状態と準備状態の2種類 • @PostConstruct と @PreDestroy 12/06/27 Beginning JavaEE6 勉強会(6) 35 存在しない状態 準備状態 @PostConstruct @PreDestroy メソッド呼び出し
  • 36. Webサービスコンテキスト • Webサービスの環境コンテキストにアクセスで きる – エンドポイント実装クラス – メッセージ・コンテキスト – 現在処理中のリクエストに関わるセキュリティ情報 など – @ResourceアノテーションでWebServiceContext を注入する 12/06/27 Beginning JavaEE6 勉強会(6) 36
  • 37. WebServiceContext のメソッド メソッド 説明 getMessageContext このメソッドが呼び出されたときに処理 中のリクエストのMessageContextを返す。 これは、SOAPメッセージのヘッダーや本 文などにアクセスするために使用可能 getUserPrincipal 現在調整中のリクエストの送信元を識別 するPrincipalを返す isUserInRole 認証済みのユーザーが指定された論理 ロールに含まれているかどうかを示す boolean値を返す getEndpointReference このエンドポイントに関連する EndpointReferenceを返す。 12/06/27 Beginning JavaEE6 勉強会(6) 37
  • 38. 演習3JAX-WSアノテーション • Ex16のソースコードとWSDLをのぞいてみま しょう! • アノテーションからWSDLの記述を予想しよ う! • @WebServiceのはどこについてますか? – クラス or インタフェース • @WebServiceを付加する場所を変えてWSDL を確認してみよう。 12/06/27 Beginning JavaEE6 勉強会(6) 38
  • 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インタ フェース
  • 40. プロキシの取得 • アノテーション@WebServiceRef – コンテナ内で実行しない場合は使えない • wsimportツールによって生成されるクラスを 利用 – GlassFish やJDKに同梱されている 12/06/27 Beginning JavaEE6 勉強会(6) 40 ローカルクラスと同じように記述するが、SEIがWebサービスに ルーティングしている。
  • 41. 演習4クライアントを動かす! • まずはサーバを停止した状態で、クライアント をビルドしよう。なぜビルドが失敗したか? – たぶん本来であれば ex04,ex08はビルドできるは ず。 • サーバを立ち上げてビルドしよう! – クライアント側のpomファイルにWSDLを設定する 必要があります。 • それぞれのサンプルの結果を確認してみよう! 12/06/27 Beginning JavaEE6 勉強会(6) 41
  • 42. まとめ • SOAP Webサービスの概要 – 関連技術 – SOAPを使ったWebサービスの呼び出し方法 • JAXB – オブジェクトとXMLのバインド – スキーマとクラスのバインド • Webサービスの内部動作 • JAX-WS 12/06/27 Beginning JavaEE6 勉強会(6) 42

×