Revisited

2,662 views

Published on

2004/09/10
Talk about Try to create a Client of Web Services

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

  • Be the first to like this

No Downloads
Views
Total views
2,662
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Revisited

  1. 1. REVISITED KAZUHIRO FUJIE
  2. 2. intro code
  3. 3. intro digit
  4. 4. intro digit
  5. 5. Try to Create a WebServices Client Kazuhiro Fujie Itochu techno-science corporation
  6. 6. Follow the white rabbit.
  7. 7. Follow the white rabbit.
  8. 8. Follow the white rabbit.
  9. 9. quot; Have you ever had a dream, Neo, that you were so sure was real? What if you were unable to wake from that dream, Neo? How would you know the difference between the dream world and the real. quot; Morpheus
  10. 10. quot; You take the blue pill, the story ends; you wake up in your bed and believe... whatever you want to believe. You take the red pill, you stay in Wonderland; and I show you how deep the rabbit hole goes. quot; Morpheus
  11. 11. Red pill or Blue pill.
  12. 12. quot; Remember ... all I'm offering you is the truth. Nothing more. quot; Morpheus
  13. 13. グラサン
  14. 14. Web Services Architecture • よくみる図 Broker publish find Requester Provider bind • 初めて観た時は、何だか新しいモノのような気が したけど…
  15. 15. quot; There is no spoon. quot; Neo
  16. 16. There is no spoon.
  17. 17. Program • 普通のアプリケーションプログラム • 一つのマシンで実行する • ローカルなプログラム Main program Sub program
  18. 18. Program Code • ローカルなプログラムの場合、例えば… /* メインプログラム。サブルーチンを呼び出す。 */ String result = doSpellingSuggestion(quot;britnay sparsquot;); : /* サブルーチン*/ String doSpellingSuggestion(String phrase) { 特定の機能を担うサブルーチン。 例えば、スペル候補の処理などを行い結果を返り値として返す。 return result; } • 同じマシンでしか実行できない…
  19. 19. quot; He was so different. He was like you. quot; Persephone
  20. 20. Persephone
  21. 21. Separate Ways • 分散環境のアプリケーションでは? – 別々のマシンで実行するために… Socket… Server Client • Socket, PIPE, … – 自分で通信のやり取りの中味を考える必要がある。
  22. 22. RPC Remote Procedure Call • 基本的に同じように簡単に行いたい。 /* メインプログラム。サブルーチンを呼び出す。 */ String result = doSpellingSuggestion(quot;britnay sparsquot;); : APIのフック サーバー受信 通信処理 処理結果送信 /* サブルーチン*/ String doSpellingSuggestion(String phrase) { 特定の機能を担うサブルーチン。 例えば、スペル候補の処理などを行い結果を返り値として返す。 return result; }
  23. 23. distributed environment • 分散環境コンピューティング • プログラムが離れたマシンの上にあるサブ ルーチンを、同じマシン上にあるかのよう に簡易に呼び出すことができる。 • Remote Procedure Call (RPC) – 遠隔手続き呼び出し • Distributed Object – 分散オブジェクト
  24. 24. Genealogy of distributed environment • Sun RPC – ONC-RPC Open Network Computing – XDR (eXternal Data Representations) • DCE RPC (OSF) – Distributed Computing Environment (DCE) • CORBA (OMG) – CORBA (Common Object Request Broker Architecture) – CORBA IDL (Interface Definition Language) – IIOP (Internet Inter-ORB Protocol) • Java RMI – Remote Method Invocation (RMI) – Java Interface
  25. 25. quot; I’ll let you in on a little secret. Being the one is just like being love. No one can tell you you’re in love. You just knew it… through and through. Balls to bones. quot; The Oracle
  26. 26. Stub / Skeleton • 離れていても同じように。 Main program Sub program • なるべく簡単に出来るための…
  27. 27. Stub / Skeleton ( Tie ) • そのための仕組み。 Interface Interface Language Language Main program Sub program Stub Skeleton Runtime Runtime Transport
  28. 28. Web Services • JAX-RPC WSDL WSDL Web Service Web Service Client Implementation Application Stub Tie (Skeleton) JAX-RPC JAX-RPC Runtime Runtime SOAP/HTTP
  29. 29. Twins 1
  30. 30. Twins 2
  31. 31. Twins 3
  32. 32. Twins 4
  33. 33. quot; That’s a nice trick. quot; Trinity
  34. 34. Trinity
  35. 35. JAX-RPC • Java APIs for XML-based RPC – JavaでSOAPとWSDLを使った開発ができる。 • Standards – JCPによる標準仕様であるJSR 101 • Interoperability – クライアントのAPI、ツールやランタイム実装な どについて決められてポータブルなアプリケー ションを実現できるようにの工夫がされている。
  36. 36. quot; I Love Candy. quot; The Oracle
  37. 37. The Oracle
  38. 38. quot; When I see 3 objectives, 3 captains, 3 ships … I do not coincidence. I see providence. I see purpose. quot; Morpheus
  39. 39. 3 objectives, 3 captains, 3 ships
  40. 40. The Magi • 東方の三賢人 – Gaspar (Caspar), Melchior, Balthazar • 三種の神器 – 洗濯機, 冷蔵庫, 白黒テレビ • Webサービス – SOAP, WSDL, UDDI
  41. 41. Web Services Standards • SOAP – Simple Object Access Protocol • WSDL – Web Services Description Language • UDDI – Universal Description, Discovery, and Integration
  42. 42. quot; Free your mind quot; Morpheus
  43. 43. Morpheus
  44. 44. Web Services Architecture • もういちど。 UDDI registry publish find WSDL Client Service SOAP • UDDIを無視すれば、RPCと観ることも。
  45. 45. quot; That means buckle your seat belt, Dorothy, `cause Kansas is going` bye-bye.. quot; Cypher
  46. 46. Cypher
  47. 47. クライアントを作ってみる。 Google Web APIs
  48. 48. quot; But this is not a reason, this is not a why, The keymaker himself, his very nature, is a means, it is not an end. quot; Merovingian
  49. 49. Google Web Services • Google Web APIs (beta) – Google 提供のWebサービスのベータ版 – スペルの候補を教えてくれる?みたい。 – キーワードでの検索などができる?みたい。 • Webサービスのクライアントをつくってみる。 – 標準であるJAX-RPC のAPIをつかう。 – 予めStubを作成しておいて、それに面倒な事 は、お任せしたプログラムを作成する。
  50. 50. Google Step 0/3 • JDK – http://java.sun.com/j2se/1.4/ • JWSDP – Java Web Services Developer Pack – http://java.sun.com/webservices/jwsdp/ – JAX-RPC API, Runtime, Tools
  51. 51. Google Step 1/3 • サービスのWSDLを入手する。 – Webサービスを利用するための情報 • Download the developer's kit – http://www.google.co.jp/apis/index.html • アカウントの登録 • ライセンスの取得 – 検索機能を利用するためのライセンスキー
  52. 52. Google Step 2/3 • スタブクラスの作成 – WSDLインターフェースからスタブを生成する。 • 公開されているWSDL – http://api.google.com/GoogleSearch.wsdl • ツールでスタブを生成。 – wscompile で半自動生成。
  53. 53. Google Step 3/3 • クライアントプログラムの作成 – 必要なパッケージのインポート。 – スタブクラスのインスタンス生成。 – エンドポイントアドレスの指定。 – (遠隔オブジェクトの)メッセージの呼び出し。 • コンパイル • 実行
  54. 54. Execution Result
  55. 55. quot; Okey, dokey. quot; Neo
  56. 56. Neo Jump
  57. 57. やってみましょう。 Demonstration
  58. 58. quot; I know Kung Fu. quot; Neo
  59. 59. Neo
  60. 60. quot; Show me. quot; Morpheus
  61. 61. Show me
  62. 62. いまみたこと Revisited
  63. 63. WSDLをちょっとのぞく。 Look into Web Services Description Language
  64. 64. WSDL Document Structure WSDL Document Types Message Port Type Operation Binding Service Port
  65. 65. Google WSDL • http://api.google.com/GoogleSearch.wsdl <?xml version=quot;1.0quot; ?> <!-- Revision 2002-08-16 --> <definitions name=quot;GoogleSearchquot; targetNamespace=quot;urn:GoogleSearchquot; xmlns:typens=quot;urn:GoogleSearchquot; xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/ xmlns:soapenc=http://schemas.xmlsoap.org/soap/encoding/ xmlns:wsdl=http://schemas.xmlsoap.org/wsdl/ xmlns=quot;http://schemas.xmlsoap.org/wsdl/quot;> <types> :
  66. 66. Google WSDL cont. • http://api.google.com/GoogleSearch.wsdl : <!-- Messages for Google Web APIs - cached page, search, spelling. --> <message name=quot;doSpellingSuggestionquot;> <part name=quot;keyquot; type=quot;xsd:stringquot; /> <part name=quot;phrasequot; type=quot;xsd:stringquot; /> </message> <!-- Port for Google Web APIs, quot;GoogleSearchquot; --> <portType name=quot;GoogleSearchPortquot;> <!-- Binding for Google Web APIs - RPC, SOAP over HTTP --> <binding name=quot;GoogleSearchBindingquot; type=quot;typens:GoogleSearchPortquot;> :
  67. 67. Google WSDL cont. • http://api.google.com/GoogleSearch.wsdl : <!-- Endpoint for Google Web APIs --> <service name=quot;GoogleSearchServicequot;> <port name=quot;GoogleSearchPortquot; binding=quot;typens:GoogleSearchBindingquot;> <soap:address location= quot;http://api.google.com/search/beta2quot; /> </port> </service> </definitions>
  68. 68. quot; It is purpose that created us. Purpose that connects us. Purpose that pull us. That guides us. That drives us. It is purpose that defines. Purpose that bind us.quot; Smith (not Agent)
  69. 69. スタブを用意する。 Generate Static Stub
  70. 70. Generate Stub • WSDLを基にスタブクラスを生成する。 wscompile -verbose -gen:client -d build config-wsdl.xml • スタブクラス生成について設定ファイルで 指示できる。 – ex. config-wsdl.xml
  71. 71. wscompile configuration • wscompile 設定ファイルの例 <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?> <configuration xmlns=quot;http://java.sun.com/xml/ns/jax-rpc/ri/configquot;> <wsdl location=quot;http://api.google.com/GoogleSearch.wsdlquot; packageName=quot;jp.co.ctc_g.atd.google.stubquot; /> </configuration> • ダウンロード済みWSDLを指定しても可。
  72. 72. quot; It’s starts so simply… each line of the program creating a new effect, just like … poetry. quot; Merovingian
  73. 73. starts so simply
  74. 74. クライアントのコードを書く。 Coding a Static Stub Client
  75. 75. Static Stub 1/4 Creates a Stub object • Stubオブジェクトを生成する。 Stub stub = (Stub) (new GoogleSearchService_Impl().getGoogleSearchPort()); • 実装依存のオブジェクトからスタブを生成 する。 • 実装依存のオブジェクトは、wscompileに よって生成されたもの。
  76. 76. Static Stub 2/4 Set a endpoint address • サービスのアドレスを設定する。 stub._setProperty (javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, quot;http://api.google.com/search/beta2quot;); • アドレスはURLをStringで指定する。 – http://api.google.com/search/beta2
  77. 77. Static Stub 3/4 Cast stub to the service endpoint interface • サービスエンドポイントインターフェースに 型変換する。 GoogleSearchPort google = (GoogleSearchPort)stub; • これで該当のメソッドを呼び出す事が可能。
  78. 78. Static Stub 4/4 Coding a Client • クライアントコードの一部 Stub stub = (Stub) (new GoogleSearchService_Impl().getGoogleSearchPort()); endpointAddress = quot;http://api.google.com/search/beta2quot;; stub._setProperty (javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, endpointAddress); GoogleSearchPort google = (GoogleSearchPort)stub; // Call doSpellingSuggestion of Google Web Services String result = google.doSpellingSuggestion(googleLicenseKey, phrase ); System.out.println( quot;==> Candidate : quot; + result );
  79. 79. quot; I wrote it myself. quot; Merovingian
  80. 80. Merovingian
  81. 81. quot; Have fun. quot; Persephone
  82. 82. Persephone
  83. 83. もういちどやってみましょう。 Reloaded
  84. 84. quot; Almost no one comes down here. Unless, of course, there’s a problem. That’s new it is with people. Nobody cares how it works as long as it works. quot; Councillor Hamann
  85. 85. Councillor Hamann
  86. 86. tcpmon • SOAPで通信していることを視認する。 • tcpmon モニタでやり取りを診る。 set CLASSPATH=%AXIS_HOME%¥lib¥axis.jar java org.apache.axis.utils.tcpmon • Apache AXIS に付属。 • 多少難在り。
  87. 87. Actual tcpmon
  88. 88. SOAP Request <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?> <env:Envelope xmlns:env=http://schemas.xmlsoap.org/soap/envelope/ xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:xsi=quot;http://www.w3.org/2001/XMLSchema-instancequot; xmlns:enc=http://schemas.xmlsoap.org/soap/encoding/ xmlns:ns0=quot;urn:GoogleSearchquot; env:encodingStyle =quot;http://schemas.xmlsoap.org/soap/encoding/quot;> <env:Body> <ns0:doSpellingSuggestion> <key xsi:type=quot;xsd:stringquot;>XXXXX</key> <phrase xsi:type=quot;xsd:stringquot;>britnay spars</phrase> </ns0:doSpellingSuggestion> </env:Body> </env:Envelope>
  89. 89. SOAP Response <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?> <SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/ xmlns:xsi=http://www.w3.org/1999/XMLSchema-instance xmlns:xsd=quot;http://www.w3.org/1999/XMLSchemaquot;> <SOAP-ENV:Body> <ns1:doSpellingSuggestionResponse xmlns:ns1=quot;urn:GoogleSearch“ SOAP-ENV:encodingStyle =quot;http://schemas.xmlsoap.org/soap/encoding/quot;> <return xsi:type=quot;xsd:stringquot;>britney spears</return> </ns1:doSpellingSuggestionResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
  90. 90. quot; Do you proceed? quot; Agent (not Smith)
  91. 91. Agents
  92. 92. ふろく Appendix
  93. 93. クライアントの種類について Call Model of Web Services Client with JAX-RPC
  94. 94. JAX-RPC Client Types • Static Stub – 実行前にスタブを用意しておく。 • Dynamic Proxy – 実行前にインターフェースだけが必要。 – 実行時にプロキシクラスを作成する。 • Dynamic Invocation Interface (DII) – 直接ランタイムにアクセスする。 – 複雑なコーディング。
  95. 95. クライアントのコードを書く。 其の弐 Coding a Dynamic Proxy Client
  96. 96. Dynamic Proxy 1/2 Creates a Service object • Proxy オブジェクトを生成する。 Service googleService = serviceFactory.createService(googleWsdlUrl, new QName(nameSpaceUri, serviceName)); • WSDLアドレスはURLをStringで指定する。 – http://api.google.com/GoogleSearch.wsdl • サービス名、名前空間はWSDLの記載を Stringで指定する。
  97. 97. Dynamic Proxy 2/2 Creates a proxy with a service endpoint interface • インターフェースオブジェクトを生成する。 GoogleSearchPort googleProxy = (GoogleSearchPort) googleService.getPort(new QName(nameSpaceUri, portName), GoogleSearchPort.class); • getPort メソッドで呼び出す。 • エンドポイントインターフェースは wscompile などで事前に用意が必要。
  98. 98. クライアントのコードを書く。 其の参 Coding a DII Client
  99. 99. DII 1/6 Creates a Service object • Serviceオブジェクトを生成する。 Service service = factory.createService(new QName(qnameService)); • サービス名はWSDLでの service name を Stringで指定する。
  100. 100. DII 2/6 Creates a Call object • Call オブジェクトを生成する。 String qnamePort = quot;GoogleSearchPortquot;; QName port = new QName(qnamePort); Call call = service.createCall(port); • ポート名はWSDLでの port name を Stringで指定する。
  101. 101. DII 3/6 Set a endpoint address • サービスエンドポイントアドレスを設定する。 call.setTargetEndpointAddress(quot;http://api.google.com/search/beta2quot;); • アドレスはURLをStringで指定する。 – http://api.google.com/search/beta2
  102. 102. DII 4/6 Set a properties • プロパティを設定する。 call.setProperty(Call.SOAPACTION_USE_PROPERTY, new Boolean(true)); call.setProperty(Call.SOAPACTION_URI_PROPERTY, quot;quot;); call.setProperty(ENCODING_STYLE_PROPERTY, quot;http://schemas.xmlsoap.org/soap/encoding/quot;); • 詳細は、SOAP及びWSDLを参照の事。
  103. 103. DII 5/6 Specify parameter • 返り値や引数の型や呼び出すメソッドを指 定する。 QName QNAME_TYPE_STRING = new QName(NS_XSD, quot;stringquot;); call.setReturnType(QNAME_TYPE_STRING); call.setOperationName( new QName(BODY_NAMESPACE_VALUE, quot;doSpellingSuggestionquot;)); call.addParameter(quot;String_1quot;, QNAME_TYPE_STRING, ParameterMode.IN); call.addParameter(quot;String_2quot;, QNAME_TYPE_STRING, ParameterMode.IN);
  104. 104. DII 6/6 Invoke a remote method • メソッドを呼び出す。 String googleLicenseKey = “XXXXXXXXXXXXXXquot;; String phrase = quot;britnay sparsquot;; String[] params = { googleLicenseKey, phrase }; String result = (String)call.invoke(params); • ここではStringの配列で引数を渡す。 • ここでの返り値はString。
  105. 105. quot; There is a difference between knowing the road and following it. quot; Morpheus
  106. 106. Morpheus and Neo
  107. 107. 終わりに Conclusion
  108. 108. Round up • WebServices は、RPCとも云える • RPCは、Stub/Skeletonという仕組み • JAX-RPCは、SOAPとWSDL • WSDLは、インターフェース • WSDLは、一番だいじ。 • WSDLからStubができる • JAX-RPCでクライアントをつくる
  109. 109. Just after this • サーバーであるサービスをつくる • 相互運用性について考える • WSDLを詳しくみる • SOAPの構造、特徴を調べる • そして、UDDI? • BPELとは?
  110. 110. quot; But I can only show you the door, you have to walk through it. quot; Morpheus
  111. 111. Morpheus and Neo
  112. 112. Bibliography • XMLとJavaによるWebアプリケーション開 発 第2版 – 丸山 宏ほか – ISBN:4-89471-662-3 • Java Webサービス – David A.Chappell, Tyler Jewell (著), テ クノロジックアート (著), 長瀬 嘉秀 (翻訳) – ISBN4-87311-101-3
  113. 113. Philosophy • EXISTENTIAL PHENOMENOLOGY AND THE BRAVE NEW WORLD OF THE MATRIX – HUBERT DREYFUS & STEPHEN DREYFUS – http://whatisthematrix.warnerbros.com/ • PHILOSOPHY AND THE MATRIX – http://whatisthematrix.warnerbros.com/rl_cm p/phi.html
  114. 114. Resources • Java Technology and Web Services – http://java.sun.com/webservices/ • Java API for XML-Based RPC (JAX- RPC) Downloads & Specifications – http://java.sun.com/xml/downloads/jaxrpc.ht ml
  115. 115. Resources • Google Web APIs (beta) – http://www.google.co.jp/apis/index.html • Apache AXIS – http://ws.apache.org/axis/index.html
  116. 116. Resources • Web Services Description Language (WSDL) 1.1 – http://www.w3.org/TR/wsdl • Simple Object Access Protocol (SOAP) 1.1 – http://www.w3.org/TR/soap/
  117. 117. quot; You knew what that mean? It’s Latin. Means, ‘Know thyself’. quot; The Oracle
  118. 118. ‘Know thyself’
  119. 119. TO BE CONCLUDED.

×