SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

オープンソースApache Tuscanyで楽しむSOA

オープンソースApache Tuscanyで楽しむSOA
第5回「Webサービスでコンポーネント同士をワイヤリングしましょう」

WSDLもSOAPも現れない不思議なWebサービスの世界


  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルコード (19.1 KB)

サービスの呼び出し側を確認する

 では、サービス側を実行します。サーバを立ち上げると、致命的なエラーは無くなったようですが、まだ警告が出てきます(図6)。警告といえども無視することはできません。言語のコンパイルに慣れすぎると少々の警告は無視してもいいような感覚になってしまいがちですが、サーバ立ち上げ時の警告は見逃さないようにしましょう。

図6:実行結果のログ その2
図6:実行結果のログ その2

 警告を無視して実行し、画面表示した結果が図7です。送料と合計金額が表示されていません。要するに、CalcChargeコンポーネントが呼び出されていないのです。

図7:警告が出ている状態での画面
図7:警告が出ている状態での画面

 幸い、この警告の意味は分かりやすくすぐに理解できます。「CalcChargeサービスのバインディングにマッチするcalcChargeを参照するコンポーネントにバインディングがない」というものです。大文字小文字の区別に注意すればcalcChargeを参照するコンポーネントとはBasketコンポーネントということが分かります。つまり、ワイヤリングは両方のコンポーネントでバインディングの指定をしないとうまくいかないのです。修正したコンポジットの抜粋が図8です。CalcChargeのサービス要素の子要素にbinding.ws要素を追加しています。

図8:Basketコンポーネントのサービスにbinding.ws要素を追加
図8:Basketコンポーネントのサービスにbinding.ws要素を追加

 この状態で実行した結果のログが図9です。警告も致命的なエラーも無くなっています。

図9:実行結果のログ その3
図9:実行結果のログ その3

 画面を確認しましょう。先ほど表示されていなかった、送料と合計金額が正しく表示されています。これで、BasketとCalcChargeはWebサービスでワイヤリングされました。

図10:正しく表示された画面
図10:正しく表示された画面

 皆さんお気づきになったでしょうか? 実はAtomやJSONRPCの場合、頭にTuscanyの名前空間であるtが付いているのですが、今回のWebサービスには付いていません。実は第1回で紹介しているのですが、AtomやJSONRPCはSCAで標準化されているわけではありません。Tuscany独自の実装のためTuscanyの名前空間であるtを付けているのです。それではWebサービスを表すbinding.wsにtを付けたらエラーになるのでしょうか。実はTuscany自身の実装も存在するためtを付けても正常に動作します。当連載ではTuscanyという実装を扱っているため、これ以降はWebサービスの場合も頭にtを付けます。

 警告を少しずつ修正していくことで、Webサービスでのワイヤリングには何が必要かを理解していただけたでしょうか。図2では次のようなクラスが水面下で動いていることが分かります。

  • CompositeBindingURIBuilderImpl
  • BindingWSDLGenerator
  • ComponentReferenceWireBuilderImpl

 JavaからWSDLを生成してくれるクラスや、コンポーネントのワイヤリングに必要なクラスが動いているのが確認できます。もし、最初から動くサンプルを示していたら、図9のようにこれらのクラスを知ることもなかったでしょう。皆さんもすんなり成功するより失敗から学ぶことの方が多いことに気づかれていると思います。筆者の場合も、何かを学習するときは、なるべくサンプルプログラムが付属しているものを選び、サンプルプログラムを変更したり、削除したりして、何のためにあるのか分からないクラスやメソッドの役割を調べたりします。少し脱線しましたが、今回のサンプルプログラムも分からない部分は変更を加えたり、削除したりしてその役割を理解していただければと思います。

 ここまでWebサービスによるワイヤリングを説明してきましたが、本当にWebサービスが使用されているのかと信じられない方も多いと思います。図11はWSDLファイルですが、Javaコードから自動的に生成されたものです。ファイルの中をよく見ると、RPCベースのSOAPではなくドキュメントベースのSOAPであることが分かります。

図11:自動生成されたWSDLファイル
図11:自動生成されたWSDLファイル

次のページ
タイムセールスの機能を組み込む

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
オープンソースApache Tuscanyで楽しむSOA連載記事一覧

もっと読む

この記事の著者

川久保 智晴(カワクボ トモハル)

haruプログラミング教室(https://haru-idea.jp/)主宰。COBOL、FORTRANで13年、Javaを中心としたWeb開発で11年。3つしか言語知らないのかというとそうでもなく、sed/awk、Perl、Python, PHP,  C#, JavaScriptなども一時期は業...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4474 2009/11/25 19:57

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング