WebLogic Web サービス プログラマーズ ガイド
この章では、Web サービスの概要を説明し、Web サービスを WebLogic Server に実装する方法について簡単に説明します。
Web サービスは、分散型 Web ベース アプリケーションのコンポーネントとして共有および使用される特殊なタイプのサービスです。これらのサービスは一般的に、CRM (またはカスタマ リレーションシップ マネージメント)、注文処理システムなどの既存のバックエンド アプリケーションとインタフェースします。
従来、ソフトウェア アプリケーション アーキテクチャは、メインフレーム上で動作する巨大なモノリシック システムまたはデスクトップ上で動作するクライアント アプリケーションの 2 つのカテゴリに分けられていました。これらのアーキテクチャはアプリケーションが扱うことを意図しているという目的においては効率よく機能しますが、閉鎖的で、Web の多様なユーザが簡単にアクセスすることができません。
ソフトウェア業界は、Web 上で動的に対話する疎結合なサービス指向アプリケーションへと移行しました。このアプリケーションは、大規模なソフトウェア システムを小規模なモジュラー コンポーネントまたは共有サービスに分割します。 これらのサービスは別々のコンピュータ上に常駐することができ、多様なテクノロジを使用して実装できるにも関わらず、XML や HTTP などの標準の Web プロトコルを使用してパッケージ化され転送可能です。そのため、Web 上のすべてのユーザが簡単にアクセスできるようになります。
サービスの概念は新しいものではありません。RMI、COM、および CORBA は、すべてサービス指向テクノロジです。ただし、これらのテクノロジをベースにしたアプリケーションは、特定のベンダの特定のテクノロジを使用して記述されていることが要求されます。この要件は、一般的に Web 上のアプリケーションが広く受け入れられることの妨げになります。この問題を解決するために、Web サービスが異種環境から簡単にアクセスできるようにするための次の特性を共有するように定義されています。
Web サービスは、XML や HTTP などの標準の Web プロトコルを使用してアクセスされるので、Web 上の多様な異種アプリケーション (一般的に XML および HTTP を理解する) は自動的に Web サービスにアクセスでき、相互の通信が可能になります。
これらの異なるシステムには Microsoft SOAP ToolKit クライアント、J2EE アプリケーション、レガシー アプリケーションなどがあります。アプリケーション作成に使用されているプログラミング言語は、Java、C++、Perl などです。 アプリケーションの相互運用性が Web サービスの目標であり、それは、パブリッシュされている業界標準をサービス プロバイダがどれだけ忠実に遵守しているかによって左右されます。
WebLogic Web サービスは、WebLogic Server によってホストされ、標準の J2EE コンポーネント (エンタープライズ Java Beans など) および Java クラスを使用して実装され、標準の J2EE エンタープライズ アプリケーションとしてパッケージ化されます。
WebLogic Web サービスでは、Simple Object Access Protocol (SOAP) 1.1 および 1.2 をメッセージ フォーマットとして使用し、HTTP および JMS を接続プロトコルとして使用します。「SOAP」を参照してください。
WebLogic Web サービスは、XML ベースの仕様である Web Services Description Language (WSDL) 1.1 を使用して記述しています。「WSDL 1.1」を参照してください。
WebLogic Web サービスは、クライアント アプリケーションから WebLogic および非 WebLogic の Web サービスを呼び出すのに使用できる、クライアント JAR の一環として JAX-RPC (Java API for XML-based RPC) 1.0 を実装しています。「JAX-RPC 1.0」を参照してください。
詳細については、「Web サービス セキュリティ (WS-Security)」を参照してください。
WebLogic Web サービスは、UDDI (Universal Description, Discovery, and Integration) 仕様を実装しています。「UDDI 2.0」を参照してください。
Web サービスの規格を定義する仕様の多くは、業界全体で幅広く使用できるように意図してあいまいに記述されています。このあいまいさのため、BEA による特定の仕様の実装では、その仕様で考慮されているすべての使い方がサポートされていない場合もあります。
BEA では、Web サービス仕様の考え得るあらゆる使用事例をサポートするよりも、Web サービス プラットフォームの相互運用性の方をより重要視しています。このため、Web Services Interoperability Organization の Basic Profile 1.0 仕様をフルサポートし、それを Web サービス相互運用性の基準と見なしています。BEA では Basic Profile 1.0 のすべての要件を満たしていますが、このガイドでは必ずしもそれらすべての要件が説明されているわけではありません。ただし、このガイドでは Basic Profile 1.0 の要件を超えた機能が説明されています。
SOAP (Simple Object Access Protocol) は、分散型環境で情報を交換するために使用する軽量 XML ベースのプロトコルです。WebLogic Server には、SOAP 1.1 仕様、SOAP 1.2 仕様、添付ファイル付き SOAP (SAAJ) 仕様の実装が含まれています。プロトコルの構成は以下のとおりです。
この情報は、HTTP またはその他の Web プロトコル上で転送可能な Multipurpose Internet Mail Extensions (MIME) エンコード パッケージ内に埋め込まれています。 MIME は、非 ASCII メッセージをインターネット上で送信できるようにフォーマットするための仕様です。
次の例は、HTTP リクエスト内に埋め込まれている株取引情報用の SOAP リクエストを示しています。
POST /StockQuote HTTP/1.1
Host: www.sample.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:GetLastStockQuote xmlns:m="Some-URI">
<symbol>BEAS</symbol>
</m:GetLastStockQuote>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
詳細については、「SOAP 1.1」および「SOAP With Attachments API for Java (SAAJ) 1.1」を参照してください。
WSDL (Web Services Description Language) は、Web サービスを記述するための XML ベースの仕様です。WSDL ドキュメントには、Web サービス オペレーション、入力および出力パラメータ、およびクライアント アプリケーションから Web サービスへの接続方法を記述します。
WebLogic Web サービスの開発者は、WSDL ファイルを作成する必要はありません。これらのファイルは WebLogic Web サービス開発プロセスの一部として自動的に生成されます。
次の例は参照用で GetLastStockQuote メソッドを含む株取引 Web サービス StockQuoteService を記述する WSDL ファイルを示しています。
<?xml version="1.0"?>
<definitions name="StockQuote"
targetNamespace="http://sample.com/stockquote.wsdl"
xmlns:tns="http://sample.com/stockquote.wsdl"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
xmlns:xsd1="http://sample.com/stockquote.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="GetStockPriceInput">
<part name="symbol" element="xsd:string"/>
</message>
<message name="GetStockPriceOutput">
<part name="result" type="xsd:float"/>
</message>
<portType name="StockQuotePortType">
<operation name="GetLastStockQuote">
<input message="tns:GetStockPriceInput"/>
<output message="tns:GetStockPriceOutput"/>
</operation>
</portType>
<binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetLastStockQuote">
<soap:operation soapAction="http://sample.com/GetLastStockQuote"/>
<input>
<soap:body use="encoded" namespace="http://sample.com/stockquote"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="http://sample.com/stockquote"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>>
</binding>
<service name="StockQuoteService">
<documentation>My first service</documentation>
<port name="StockQuotePort" binding="tns:StockQuoteSoapBinding">
<soap:address location="http://sample.com/stockquote"/>
</port>
</service>
</definitions>
詳細については、「Web Services Description Language (WSDL) 1.1」を参照してください。
JAX-RPC (Java API for XML-based RPC) 1.0 は、Web サービス API を定義する Sun Microsystems の仕様です。
WebLogic Server には、JAX-RPC バージョン 1.0 仕様の必要な機能がすべて実装されています。また、次の節で指定されているオプションのデータ型サポートも実装されています。
WebLogic Server には、上記の節で説明されているもの以外の JAX-RPC 仕様のオプション機能は実装されていません。
次の表で、JAX-RPC の中心的なインタフェースとクラスを簡単に説明します。
JAX-RPC の詳細については、http://java.sun.com/xml/jaxrpc/index.html を参照してください。
JAX-RPC を使用して Web サービスを呼び出す方法に関するチュートリアルについては、http://java.sun.com/webservices/docs/ea1/tutorial/doc/JAXRPC.html を参照してください。
Web サービス セキュリティについての以下の説明は、2004 年 4 月 6 日付の「Web Services Security: SOAP Message Security」と題された OASIS 標準 1.0 仕様から直接引用したものです。
この仕様は、整合性と機密性を実現するセキュアな Web サービスを構築する際に使用できる SOAP の拡張機能の標準セットを提案するものです。この拡張機能のセットのことを、Web Services Security Language または WS-Security と呼びます。
WS-Security は柔軟性があり、さまざまなセキュリティ モデル (PKI、Kerberos、SSL など) の構築の土台として使用するように設計されています。具体的に言うと、WS-Security では複数のセキュリティ トークン、複数の信頼ドメイン、複数のシグネチャ フォーマット、および複数の暗号化技術がサポートされています。
この仕様は、主にセキュリティ トークンの伝播、メッセージの整合性、およびメッセージの機密性の 3 つのメカニズムを提供します。これらのメカニズムは、それだけでは完全なセキュリティ ソリューションとはなりません。WS-Security は、他の Web サービス拡張機能やより高いレベルのアプリケーション固有プロトコルと一緒に使用して、さまざまなセキュリティ モデルおよび暗号化技術を実現することができるビルディング ブロックです。
前述のメカニズムは、独立して使用することも (たとえばセキュリティ トークンを渡すため)、密接に統合して使用することもできます (たとえば、メッセージの署名や暗号化を行い、署名や暗号化に使用するキーと関連付けられたセキュリティ トークン階層を提供するなど)。
詳細については、「OASIS Web Service Security」Web ページを参照してください。
UDDI (Universal Description, Discovery and Integration) 仕様では、Web サービスの記述、既知のレジストリへの Web サービスの登録、他の登録済み Web サービスの検索などの標準的な方法が定義されています。
詳細については http://www.uddi.org を参照してください。
WebLogic Web サービス サブシステムには、以下の機能があります (WebLogic Server のバージョン 8.1 の新機能を最初に列挙します)。
web-services.xml
デプロイメント記述子の新しい要素を使用して、Web サービスと Web サービス クライアントのメッセージレベルのセキュリティをコンフィグレーションできます。「メッセージレベルのセキュリティのコンフィグレーション : 主な手順」を参照してください。
信頼性のある SOAP メッセージングというフレームワークでは、ある WebLogic Server インスタンスで稼動しているアプリケーションによって、別の WebLogic Server インスタンスで稼動している Web サービスを、非同期かつ確実に呼び出せます。「信頼性のある SOAP メッセージングの使い方」を参照してください。
clientgen
Ant タスクによって、Web サービス オペレーションを非同期に呼び出すスタブを生成できるようになりました。このスタブには、2 つのメソッドがあります。一方のメソッドは必要なパラメータを指定してオペレーションを呼び出しますが、結果を待機しません。もう一方のメソッドは呼び出し後に実際の結果を返します。信頼性のある SOAP メッセージングを使用するときには、この非同期クライアントを使用します。 「非同期クライアント アプリケーションの記述」を参照してください。
クライアントがサービスにアクセスするときの転送プロトコルとして、(デフォルト プロトコルの HTTP/S ではなく) JMS を使用するように Web サービスをコンフィグレーションすることができます。「JMS 転送を使用した WebLogic Web サービスの呼び出し」を参照してください。
WebLogic Server 内から Web サービスを呼び出すときにクラスがクラッシュしないように、ポータブル スタブ (WebLogic Web サービスの呼び出しに使用できる、バージョン化されたクライアント JAR ファイル) を使用できるようになりました。 「ポータブル スタブの作成と使い方」を参照してください。
開発者は、SAAJ を使用すると、SOAP 1.1 仕様や添付ファイル付き SOAP のメモに準拠したメッセージの作成と消費ができます。この仕様は、元々 JAXM 1.0 仕様で定義した javax.xml.soap
パッケージから派生したものです。
SOAP メッセージ ハンドラで SAAJ を使用して SOAP の添付ファイルを表示および操作する方法については、「SAAJ を使用した SOAP リクエスト メッセージおよび応答メッセージの直接操作」を参照してください。
WebLogic Server では、クライアントが Web サービス オペレーションを呼び出すときに、メッセージ フォーマットとして SOAP 1.2 を使用することをサポートします。「SOAP 1.2 の使い方」を参照してください。
「Web サービス規格」を参照してください。
Ant タスクは、Web サービスの実装およびパッケージ化を容易にします。「Web サービス Ant タスクとコマンドライン ユーティリティ」を参照してください。
WebLogic Server には、UDDI レジストリ、UDDI ディレクトリ エクスプローラ、UDDI クライアント API 実装などが組み込まれています。「UDDI を使用した Web サービスのパブリッシュと検索」を参照してください。
WebLogic Web サービスのオペレーションは、RPC 指向 (SOAP メッセージがパラメータと戻り値を格納) またはドキュメント指向 (SOAP メッセージがドキュメントを格納) がサポートされています。詳細については、「RPC 指向またはドキュメント指向の Web サービスの選択」を参照してください。
パラメータおよび戻り値に非組み込みデータ型が使用される WebLogic Web サービスを作成することができます。非組み込みデータ型は、サポートされている組み込みデータ型以外のデータ型として定義されます。組み込みデータ型の例としては、int
や String
があります。WebLogic Server の Ant タスクによって、非組み込みデータ型の使用が必須であるコンポーネントを生成することができます。この機能はオートタイピングと呼ばれます。また、これらのコンポーネントを手動で作成することができます。「Web サービス Ant タスクとコマンドライン ユーティリティ」と「非組み込みデータ型の使い方」を参照してください。
SOAP メッセージ ハンドラは、Web サービスのリクエストと応答の両方で SOAP メッセージとその添付ファイルにアクセスします。ハンドラは、Web サービスそのものと Web サービスを呼び出すクライアント アプリケーションの両方で作成することができます。「SOAP メッセージをインターセプトする SOAP メッセージ ハンドラの作成」を参照してください。
開発者は自動的に生成されるシン Java クライアントを使用して、WebLogic および非 WebLogic の Web サービスを呼び出す Java クライアント アプリケーションを作成することができます。「クライアント アプリケーションおよび WebLogic Server からの Web サービスの呼び出し」を参照してください。
注意 :クライアント機能に関する BEA の現在のライセンスの詳細については、BEA eLicense Web サイトを参照してください。
デプロイされた WebLogic Web サービスにはすべて自動的にホーム ページが設けられ、その Web サービスの WSDL へのリンク、Web サービスを呼び出すためにダウンロードできるクライアント JAR ファイル、および Web サービスが適切に動作しているかを確認するテスト メカニズムが配置されます。「WebLogic Web サービスのホーム ページおよび WSDL の URL」を参照してください。
WebLogic Server は、WebLogic Web サービス オペレーションに対して、Web サービス オペレーションの許可と認証をサポートするほか、接続指向のポイント ツー ポイント セキュリティもサポートします。「転送レベルのセキュリティ (SSL) のコンフィグレーション : 主な手順」を参照してください。
WebLogic Server の clientgen
Ant タスクは、J2ME で実行されるクライアント JAR ファイルを作成することができます。「クライアント アプリケーションおよび WebLogic Server からの Web サービスの呼び出し」を参照してください。
以下に、このリリースの WebLogic Web サービスではサポートされていない機能を示します。
ネストされたもう 1 つのモデル グループ (choice など) とコンテンツ要素 (element など) を含むモデル グループ (sequence など) は使用できません。したがって、ネストされたモデル グループが必要な場合は、もう 1 つのモデル グループだけが含まれ、その他のコンテンツ要素は含まれないようにする必要があります。
注意 :上記の構成のいずれかを使用する非組み込み XML スキーマ データ型があった場合に、そのデータ型のシリアライゼーション コンポーネントを生成するために、autotype
、servicegen
、clientgen
のいずれかの Ant タスクを使用する場合 (直接でもその構造を使用する型を入れても)、その Ant タスクによって、そのデータ型は javax.xml.soap.SOAPElement
にマップされます。これによって、DOM に似た API を介して、完全な XML にアクセスできるようになります。
さらに、autotype
Ant タスクは、XML スキーマのデータ型 (Java 表現を生成する対象) が特定の特性を備えている場合は JAX-RPC 仕様に準拠しません。詳細については、「JAX-RPC に準拠しないデータ型」を参照してください。
WebLogic Server の WL_HOME
/samples/server/examples/src/examples/webservices
ディレクトリには、WebLogic Web サービスの作成および呼び出しの方法として以下の例があります。WL_HOME
は、WebLogic Platform のメイン ディレクトリです。
basic.statelessSession
: パラメータと戻り値が組み込みデータ型の値となるステートレス セッション EJB バックエンド コンポーネントを使用します。basic.javaclass
: パラメータと戻り値が組み込みデータ型の値となる Java クラス バックエンド コンポーネントを使用します。complex.statelessSession
: パラメータと戻り値が非組み込みデータ型の値となるステートレス セッション EJB バックエンド コンポーネントを使用します。handler.log
: ハンドラ チェーンとステートレス セッション EJB の両方を使用します。handler.nocomponent
: バックエンド コンポーネントなしでハンドラ チェーンのみを使用します。client.static_no_out
: 非 WebLogic Web サービスを呼び出す静的クライアント アプリケーションの作成方法を示します。client.dynamic_wsdl
: WSDL を使用して非 WebLogic Web サービスを呼び出す動的クライアント アプリケーションの作成方法を示します。client.dynamic_no_wsdl
: WSDL を使用しないで非 WebLogic Web サービスを呼び出す動的クライアント アプリケーションの作成方法を示します。上記の例の構築と実行についての詳細な説明は、次の Web ページを参照してください。
WL_HOME
/samples/server/examples/src/examples/webservices/package-summary.html
以下は、WebLogic Web サービスを作成する高度な手順です。ほとんどの手順については、後述の章で詳しく説明します。「WebLogic Web サービスの作成 : 単純な例」では、Web サービスの作成例を簡単に説明します。
Web サービスは RPC 指向かドキュメント指向か、同期または非同期か、サービスを実装するバックエンド コンポーネントのタイプ、組み込みデータ型またはカスタム データ型のみを使用するサービスかどうか、送受信される SOAP メッセージをインターセプトする必要があるかどうか、などを決定します。
「WebLogic Web サービスの設計」を参照してください。
Web サービスを構成するバックエンド コンポーネントの Java コードを記述してコンパイルします。必要であれば、SOAP メッセージをインターセプトする SOAP メッセージ ハンドラや XML と Java 間のデータ変換を行う独自のシリアライゼーション クラスなどを作成します。
「WebLogic Web サービスの実装」を参照してください。
すべての実装クラス ファイルを、適切なディレクトリ構造に収集して Web サービス デプロイメント記述子ファイルを作成し、サービスのサポート部分 (クライアント JAR ファイルなど) を作成し、すべてをデプロイメント ユニット (EAR ファイルまたは展開ディレクトリ形式) にパッケージ化します。
簡素な Web サービスを作成する場合は、すべてのアセンブリ ステップを実行する servicegen
Ant タスクを使用してください。Web サービスがもっと複雑な場合は、個別の Ant タスクを使用します。
「Ant タスクを使用した WebLogic Web サービスのアセンブル」を参照してください。
Web サービスをリモート クライアントで使用できるようにします。WebLogic Web サービスは標準 J2EE エンタープライズ アプリケーションとしてパッケージ化されているため、Web サービスのデプロイはエンタープライズ アプリケーションのデプロイと同じです。
『WebLogic Server アプリケーションのデプロイメント』を参照してください。
「WebLogic Web サービスのデプロイとテスト」を参照してください。
『WebLogic Server アプリケーションのデプロイメント』を参照してください。
次の表に、WebLogic Web サービスを作成、デプロイ、および呼び出すときの一般タスクのロードマップを示します。
WebLogic Web サービスを作成する際または呼び出す際は、web-services.xml
Web サービス デプロイメント記述子ファイル、EJB デプロイメント記述子、Java Ant ビルド ファイルなどの XML ファイルを編集しなければならない場合があります。これらのファイルは、BEA XML エディタを使用して編集します。
注意 :このマニュアルでは、XML ファイルについての理解と各要素における Web サービスの記述方法についての理解を深めるため、web-services.xml
デプロイメント記述子を手動で作成および更新する方法について説明します。BEA XML エディタは、ファイルの更新にも使用できます。
BEA XML エディタは、XML ファイルを作成および編集するためのシンプルでユーザフレンドリな Java ベースのツールです。このツールでは、XML ファイルの中身を、階層的な XML ツリー構造と実際の XML コードの両方で表示します。このように、ドキュメントが 2 通りの方法で表示できるため、XML ドキュメントの編集には 2 つのオプションがあります。
BEA XML エディタは、指定した DTD または XML スキーマを基に XML コードを検証します。
使用方法の詳細については、BEA XML エディタのオンライン ヘルプを参照してください。
BEA XML エディタは、dev2dev Online からダウンロードできます。