レベル: 初級 米持 幸寿, テクノロジー・エバンジェリスト, IBM
2006年 8月 08日 Webサービスは、多くの場合インターネットに置かれています。WSDLを利用すれば簡単にアクセスできるため、システムインテグレーションを短期化したり、コストを削減することができます。
はじめに
現代のWebサービスの多くはHTTPを使ったSOAPサービスです。インターネットに置かれているWebサービスを呼び出すには、そのHTTPサーバーに直接アクセスする必要がありますが、多くの場合企業内のネットワークからTCPソケットはオープンできません。ファイアウォールがあるからです。しかし、Webサービスを呼び出すためには、HTTPプロキシー・サーバーを利用することができます。
この資料では、IBM WebSphere Studioを使って生成したSOAPプロキシー・クラスを使って、HTTPプロキシー・サーバー経由でインターネットに置かれているWebサービスを呼び出す手順をご紹介します。
この手順を皆さんの企業イントラネットから行うには、固定アドレスでHTTPプロキシー・サーバーが必要です。ここでは、proxy.mycompany.com:8080 をHTTPプロキシー・サーバーとして解説します。
注意
ここでは、WebSphere Studio Application Developerを使用していますが、SiteDeveloper Advanced、Application Developer - Integration Editionなど、いくつかの製品がWebサービス開発機能を装備しています。
WebSphere Studioを起動し、Webプロジェクトを作成してください。(既存のものを使ってもかまいません。手順を知らない方は、連載「WSADでWebサービスを作ってみよう」をご覧ください。ここでは、エンタープライズ・アプリケーション・プロジェクト「WSHTTP」とWebプロジェクト「WSHTTPWeb」を作りました。
アクセスするWebサービス
ここでは、WebSphere Studioのヘルプにも紹介されている
xmethods
サイトのWether - Temperatureサービスを企業イントラネットから呼び出す手順をご紹介します。
まず、xmethods サイトをブラウザーで開き、Weather - Temperatureサービスを探してください。現在ではトップページの下の方にリンクがあります。サービスのページを開くとWSDLの場所が書いてあります。
プロキシー・クラスを作成する
Webプロジェクト「WSHTTPWeb」の下にある「webApplicatioin」フォルダーの下に、新規にフォルダー「wsdl」を作り、次の手順で先程のWSDLファイルをインポートします。
|
1.
| ナビゲーター・ビューの上で、WSHTTPWeb/webApplication/wsdlフォルダーを選択する。 | |
2.
| メニューから「ファイル」-「インポート」を選択する。メニューから「ファイル」-「インポート」を選択する。 | |
3.
| インポート・ソースの選択で、HTTPを選び、「次へ」ボタンをクリックする。 | |
4.
| HTTP URLに先程のWSDLファイルのURLを入力する。 | |
5.
| 「拡張」ボタンを押し、「接続にプロキシーを使用」のチェックを入れて、HTTPプロキシー・サーバーのアドレスとポートを指定してOKボタンをクリックする。 |
|
6.
| ナビゲーター・ビュー上で、ダウンロードされたWSDLファイルを選択して右クリックし、「新規」-「その他」で「Webサービス」-「Webサービス・クライアント」を選んで「次へ」ボタンをクリックする。 |
|
7.
| 「終了」ボタンを押すと、WSDLファイルがHTTPでダウンロードされる。 |
|
8.
| 「サンプルの生成」「サンプルの起動」「警告なしにファイルを上書き」をチェックし、「次へ」ボタンを押す。 |
|
9.
| WSDLファイルが正しく指定されていることを確認して「終了」ボタンを押す。 |
以上で、標準的なプロキシー・クラスが生成されます。WebSphereテスト環境が起動し、ウィザードによって生成されたサンプルJSPファイルがブラウザーで表示されますが、このままではファイア・ウォールがあるために接続がうまくいきません。
プロキシー・クラスを改造する
SOAPプロキシー・クラスは、Webプロジェクト「WSHTTPWeb」の中に source/proxy/soap/TemperatureServiceProxy.javaという名前で生成されているはずです。これは、このWebプロジェクト上に proxy.soapパッケージがあり、その中にクラスが生成されているという意味です。
このプロキシーを少しだけ改造すると、HTTPプロキシー・サーバー経由でインターネットにあるWebサービスを呼び出すことができます。TemperatureServiceProxy.javaファイルをダブルクリックしてJavaエディターでオープンしてください。
プロキシー・クラスは、内部でApcheSOAP-APIを呼び出す代理オブジェクトです。プライベート・フィールドにある「Call」オブジェクトが、SOAP-RPC型のWebサービスを呼び出すときのApacheSOAP-APIのクラスです。もし、相手がSOAPメッセージング型のWebサービスの場合は、Messageクラスが使われます。
CallクラスやMessageクラスは、内部に「SOAPTransport」というプロパティを持っています。デフォルトでは、SOAPHTTPConnectionというサブ・クラスが使われます。このクラスはHTTPプロキシー・サーバー経由でSOAPサービスを呼び出す機能を持っていますので、これを使います。
まず、importステートメントを追加します。
import org.apache.soap.transport.http.SOAPHTTPConnection;
|
次に、コンストラクターを以下のように書き換えます。
public TemperatureServiceProxy()
{
SOAPHTTPConnection conn = new SOAPHTTPConnection();
conn.setProxyHost("proxy.mycompany.com");
conn.setProxyPort(8080);
call.setSOAPTransport(conn);
}
|
もし、HTTPプロキシーにログインする必要がある場合は、setProxyUserNameメソッド、setProxyPasswordメソッドを利用します。
Ctl+Sを押して保管、コンパイルしてください。WebSphereテスト環境上のオブジェクトは、サーバーを再起動しなくても自動的に置き換わります。
さぁ、サンプル・クライアントを実行して確認してみましょう。今度は温度(華氏)が表示されるはずです。
HTTP基本認証にも対応
これと同じ方法で、setUserNameメソッド、setPasswordメソッドを使えば、HTTP基本認証でアクセス制限されたWebサービスにログインさせることも可能です。
著者について  | |  | 1987年に日本アイ・ビー・エム入社。メインフレームOS、ミドルウェアの障害対応、障害解析ソフトウェアの開発、ワークフローシステム開発、オブジェクト指向開発、Web開発など経験。2000年より、ソフトウェアのテクノロジーエバンジェリストとして活動中。 |
記事の評価
|