WebLogic Web サービス プログラマーズ ガイド
![]() |
![]() |
![]() |
![]() |
以下の節では、WebLogic Server で実装される WebLogic Web サービスの概要について説明します。
Web サービスとは、ネットワーク上の他のシステムからも利用でき、分散型 Web ベース アプリケーションのコンポーネントとして共有および使用可能な、1 つのエンティティにまとめられた一連の関数です。ネットワークは企業イントラネットの場合もあれば、インターネットの場合もあります。カスタマ リレーションシップ マネジメント システム、注文処理システム、その他の既存のバックエンド アプリケーションなど、他のシステムはこれらの関数を呼び出してデータを要求したり、処理を実行することができます。Web サービスはほとんどのシステムに備わっている基本的な標準技術に基づいているため、分散システムを統合する極めて優れた手段であるといえます。
従来、ソフトウェア アプリケーション アーキテクチャは、メインフレームなどで動作するモノリシック システムまたはデスクトップ上で動作するクライアント アプリケーションの 2 つのカテゴリに分けられていました。これらのアーキテクチャはそのアプリケーションの目的においては効率よく機能しますが、閉鎖的であり、その機能を新しいアプリケーションに簡単に組み込むことができませんでした。
そのため、ソフトウェア業界は、Web 上で動的に対話する疎結合のサービス指向アプリケーションを発展させました。このアプリケーションは、大規模なソフトウェア システムを小規模なモジュラー コンポーネントまたは共有サービスに分解するものです。これらのサービスは別々のコンピュータ上に常駐することができ、多様な技術を使用して実装することができますが、XML や HTTP などの標準の Web プロトコルを使用してパッケージ化し、アクセス可能にすることができます。そのため、Web 上のすべてのユーザが簡単にアクセスできるようになります。
サービスの概念は新しいものではありません。RMI、COM、および CORBA は、すべてサービス指向技術です。ただし、これらの技術に基づいたアプリケーションは、特定のベンダの特定の技術を使用して記述されていることが要求されます。このような要件は一般に、アプリケーションの機能をネットワーク上の他のサービスに広く統合することを妨げるものとなります。この問題を解決するために、Web サービスは、異種環境から簡単にアクセスできるようにするための次の特性を共有するように定義されています。
Web サービスは、XML や HTTP などの標準の Web プロトコルを使用してアクセスされるので、Web 上の多様な異種アプリケーション (一般的に XML および HTTP を理解する) は自動的に Web サービスにアクセスでき、相互の通信が可能になります。
これらの異なるシステムには Microsoft SOAP ToolKit クライアント、J2EE アプリケーション、レガシー アプリケーションなどがあります。アプリケーション作成に使用されているプログラミング言語は、Java、C++、Perl などです。アプリケーションの相互運用性が Web サービスの目標であり、それは、公開されている業界標準をサービス プロバイダがどれだけ忠実に遵守しているかによって左右されます。
WebLogic Web サービスはエンタープライズ Web サービス 1.1 仕様 (JSR-921) に従って実装されています。この仕様では、Java で Web サービスを実装するための標準の J2EE 実行時アーキテクチャを定義しています。また、標準 J2EE Web サービスのパッケージ化形式、デプロイメント モデル、実行時サービスについても記述されており、そのすべてを WebLogic Web サービスで実装しています。
注意 : JSR-921 は JSR-109 (Web サービスの J2EE 1.3 仕様) の 1.1 メンテナンス リリースです。JSR-921 は現在、JCP (Java Community Process) の最終リリースです。
エンタープライズ Web サービス 1.1 仕様によると、J2EE Web サービスは以下のいずれかのコンポーネントで実装されます。
Java クラスまたは EJB のコードは、Web サービスのビジネス ロジックを実装するものです。生の Java クラスまたは EJB を直接コーディングする代わりに、JWS アノテーション プログラミング モデルを使用することをお勧めします。それによって、WebLogic Web サービスのプログラミングがより簡単になります。
このプログラミング モデルでは、新しい JDK 5.0 メタデータ アノテーション機能を利用しています。アノテーション付きの Java ファイルを作成し、Ant タスクを使用してそのファイルを Java クラスにコンパイルし、関連するアーティファクトをすべて生成します。アノテーション付きの Java Web サービス (JWS) ファイルは、Web サービスの中核部分です。このファイルには Web サービスの動作を決定する Java コードが含まれています。JWS ファイルは、アノテーションを使用して Web サービスの形式や特性を指定した、通常の Java クラス ファイルです。JWS ファイルで使用できる JWS アノテーションには、Web Services Metadata for the Java Platform 仕様 (JSR-181) で定義された標準のアノテーションと、WebLogic 固有のアノテーションがあります。
JWS プログラミング モデルの詳細については、「JWS ファイルのプログラミング」を参照してください。
JWS ファイルを作成したら、エンタープライズ Web サービス 1.1 仕様で説明されているように、jwsc
WebLogic Web サービス Ant タスクを使用して、JWS ファイルを Java クラスまたはステートレス セッション EJB にコンパイルします。通常は、この Web サービスのバックエンドの実装をユーザが決定する必要はありません。jwsc
Ant タスクが、JWS ファイルに指定された JWS アノテーションに基づいて最適な実装を選択します。jwsc
Ant タスクは、Web サービスの補助的なアーティファクトもすべて生成し、アーカイブ ファイルにすべてをパッケージ化して、WebLogic Server にデプロイできるエンタープライズ アプリケーションを作成します。
jwsc
Ant タスクが Web サービスを Java クラスとして実装する場合、jwsc
は、web.xml
および weblogic.xml
デプロイメント記述子ファイルなどの標準の WAR アーティファクトをすべて含めて、Web サービスを標準の Web アプリケーション WAR ファイルにパッケージ化します。WAR ファイルには、その WAR ファイルが Web サービスでもあることを示す追加のアーティファクトが含まれています。追加のアーティファクトには、webservices.xml
および weblogic-webservices.xml
デプロイメント記述子ファイル、JAX-RPC データ型マッピング ファイル、Web サービスのパブリック規約を記述した WSDL ファイルなどがあります。
同様に、jwsc
Ant タスクが Web サービスをステートレス セッション EJB として実装する場合、jwsc
は、ejb-jar.xml
および weblogic-ejb.jar.xml
デプロイメント記述子ファイルなどの通常のアーティファクトをすべて含めて、Web サービスを標準の EJB JAR ファイルにパッケージ化します。EJB JAR ファイルには、前述のような、Web サービスであることを示す Web サービスに固有の追加のアーティファクトも含まれています。
注意 : jwsc
Ant タスクは実際には、JWS ファイルのステートレス EJB ラッパーを作成します。つまり、ビジネス ロジックは JWS アノテーションを含む Java クラスのままです。しかし、EJB ラッパーであるため、タスクはそのサービスを EJB JAR ファイルにパッケージ化する必要があり、Web サービスは EJB 実装であると見なされます。
ビジネス ロジックを実際の EJB に置く場合は、JWS ファイルで明示的に javax.ejb.SessionBean
を実装する必要があります。
JWS ファイルのプログラミングに加えて、Web サービス オペレーションの呼び出しで使用される要求および応答の SOAP メッセージを処理する必要もある場合は、1 つまたは複数の SOAP メッセージ ハンドラをコンフィグレーションすることもできます。
基本的な WebLogic Web サービスをコーディングしたら、追加の高度な機能をプログラミングおよびコンフィグレーションできます。Web サービスを確実に呼び出せるようにする機能 (WS-ReliableMessaging 仕様 (2004 年 2 月 4 日付) で規定) や、SOAP メッセージのデジタル署名や暗号化を指定できるようにする機能 (WS-Security 仕様で規定) があります。このような WebLogic Web サービスの高度な機能は、WS-Policy ファイルを使用してコンフィグレーションします。WS-Policy ファイルは WS-Policy 仕様に準拠する XML ファイルです。セキュリティや信頼性のあるメッセージングのコンフィグレーションを記述するための、セキュリティに固有の XML 要素や Web サービスの信頼性のあるメッセージングに固有の XML 要素が含まれています。
次の表に、WebLogic Web サービスを作成、デプロイ、および呼び出すための一般的なタスクのロードマップを示します。
Web サービスでは、以下の標準仕様の実装と準拠が必要です。
WebLogic Web サービス プログラミング モデルでは、Web Services Metadata for the Java Platform 仕様 (JSR-181) で指定されている標準の JDK 1.5 メタデータ アノテーションを使用しています。「Web Services Metadata for the Java Platform (JSR-181)」を参照してください。
WebLogic Web サービスは WebLogic Server でホストされ、Implementing Enterprise Web Services 1.1 仕様 (JSR-109 の 1.1 メンテナンス リリースである JSR-921) の説明に従って、標準の J2EE コンポーネントを使用して実装されます。「エンタープライズ Web サービス 1.1」を参照してください。
WebLogic Web サービスでは、Simple Object Access Protocol (SOAP) 1.1 をメッセージ フォーマットとして使用し、HTTP を接続プロトコルとして使用します。「SOAP 1.1」を参照してください。
WebLogic Web サービスは、SOAP with Attachments API for Java 仕様を実装して、SOAP メッセージの添付ファイルにアクセスします。「SAAJ 1.2」を参照してください。
WebLogic Web サービスは、XML ベースの仕様である Web Services Description Language (WSDL) 1.1 を使用して記述しています。「WSDL 1.1」を参照してください。
WebLogic Web サービスは WS-Policy を使用して、WSDL 1.1 では扱われていない追加の機能と要件を記述します。ポリシーを使用して信頼性のあるメッセージングやセキュリティ (デジタル署名と暗号化) の機能を記述する場合、WebLogic Web サービスは WS-Policy および WS-PolicyAttachment 仕様に準拠します。「WS-Policy 1.0」および「WS-PolicyAttachment 1.0」を参照してください。
WebLogic Web サービスは、クライアント アプリケーションから WebLogic および非 WebLogic の Web サービスを呼び出すのに使用できる、クライアント JAR の一環として Java API for XML-based RPC (JAX-RPC) 1.1 を実装しています。「JAX-RPC 1.1」を参照してください。
詳細については、「Web サービス セキュリティ (WS-Security) 1.0」を参照してください。
コールバック、アドレッシング、会話、Web サービスの信頼性のあるメッセージングなどの非同期の機能を使用する場合、WebLogic Web サービスは WS-Addressing 1.0 および WS-ReliableMessaging 1.0 仕様に準拠します。
Web サービスの標準を定義する仕様の多くは、業界全体で幅広く使用できるように記述されています。そのため、BEA による特定の仕様の実装では、その仕様で考慮されているすべての使い方がサポートされていない場合もあります。
BEA では、Web サービス仕様の考え得るあらゆる使用事例をサポートするよりも、Web サービス プラットフォームの相互運用性の方をより重要視しています。Web Services Interoperability Organization の Basic Profile 1.1 仕様に準拠し、それを Web サービス相互運用性の基準と見なしています。このガイドでは必ずしも Basic Profile 1.1 のすべての要件が説明されているわけではありません。ただし、このガイドでは Basic Profile 1.1 の要件を超えた機能が説明されています。
標準の JSR-921 の EJB または Java クラスを最初から手動でコーディングし、関連するアーティファクト (デプロイメント記述子ファイル、WSDL、ユーザ定義のデータ型のデータ バインディング アーティファクトなど) を手動で生成して、WebLogic Web サービスをプログラミングすることも可能ですが、そのプロセス全体が煩雑で単調になる可能性があります。そのため、新しい JDK 1.5 メタデータ アノテーション機能 (JSR-175 で規定) とプログラミング モデルを利用することをお勧めします。このプログラミング モデルでは、アノテーション付きの Java ファイルを作成し、Ant タスクを使用してそのファイルを標準の JSR-921 の Java クラスまたは EJB の Java ソース コードに変換し、関連するアーティファクトをすべて自動的に生成します。
アノテーション付きの Java Web サービス (JWS) ファイル (簡単に「JWS ファイル」と呼びます) は、Web サービスの中核部分です。このファイルには Web サービスの動作を決定する Java コードが含まれています。JWS ファイルは、JDK 1.5 メタデータ アノテーションを使用して Web サービスの形式や特性を指定した、通常の Java クラス ファイルです。JWS ファイルで使用できる JWS アノテーションには、Web Services Metadata for the Java Platform 仕様 (JSR-181) で定義された標準のアノテーションと、WebLogic 固有のアノテーションがあります。
Implementing Enterprise Web Services 1.1 仕様 (JSR-921) では、WebLogic Server などの J2EE アプリケーション サーバ上で動作する Web サービスを Java で実装するためのプログラミング モデルと実行時アーキテクチャを定義しています。特に、プログラマが次の 2 つのコンポーネントのいずれかを使用して J2EE Web サービスを実装することを規定しています。
また、標準 J2EE Web サービスのパッケージ化形式、デプロイメント モデル、実行時サービスについても記述されており、そのすべてを WebLogic Web サービスで実装しています。
注意 : JSR-921 は JSR-109 (Web サービスの J2EE 1.3 仕様) の 1.1 メンテナンス リリースです。
SOAP (Simple Object Access Protocol) は、分散型環境で情報を交換するために使用する軽量 XML ベースのプロトコルです。WebLogic Server には SOAP 1.1 仕様の独自の実装があります。プロトコルの構成は以下のとおりです。
この情報は、HTTP またはその他の Web プロトコル上で転送可能な Multipurpose Internet Mail Extensions (MIME) エンコード パッケージ内に埋め込まれています。MIME は、非 ASCII メッセージをインターネット上で送信できるようにフォーマットするための仕様です。
次の例は、HTTP リクエスト内に埋め込まれている株取引情報用の SOAP リクエストを示しています。
POST /StockQuote HTTP/1.1
Host: www.sample.com:7001
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) 仕様では、SOAP 1.1 仕様と SOAP with Attachments ノートに準拠するメッセージの作成と消費について記述されています。
API の javax.xml.soap というパッケージでは、MIME 添付ファイルを持つ SOAP メッセージの主要な抽象概念を提供しています。添付ファイルには、XML ドキュメント全体、XML フラグメント、画像、テキスト ドキュメント、または有効な MIME タイプを持つその他のコンテンツを使用できます。また、このパッケージでは、Web サービスとの要求および応答型の対話に関する単純なクライアントサイドのビューも提供しています。
詳細については、「SOAP With Attachments API for Java (SAAJ) 1.1」を参照してください。
Web Services Description Language (WSDL) は、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>
WSDL 仕様には、Web サービスを呼び出すときに使用できるさまざまなタイプのバインディングを指定するための、省略可能な拡張要素があります。WebLogic Web サービス ランタイムでは、
詳細については、「Web Services Description Language (WSDL) 1.1」を参照してください。
Java API for XML-based RPC (JAX-RPC) 1.1 は、XML ベースのリモート プロシージャ呼び出し (RPC) を行うための Java API を定義した Sun Microsystems の仕様です。特に、これらの API は、SOAP 1.1 (分散型環境で情報を交換するための XML ベースのプロトコル) を使用して、Web サービスを呼び出したり、Web サービスから応答を取得したりするのに使用されます。
WebLogic Server には、JAX-RPC バージョン 1.1 仕様の必要な機能がすべて実装されています。また、次の節で指定されているオプションのデータ型サポートも実装されています。
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 年 3 月の「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 サービス拡張機能やより高いレベルのアプリケーション固有プロトコルと一緒に使用して、さまざまなセキュリティ モデルおよび暗号化技術を実現することができるビルディング ブロックです。
前述のメカニズムは、独立して使用することも (たとえばセキュリティ トークンを渡すため)、密接に統合して使用することもできます (たとえば、メッセージの署名や暗号化を行い、署名や暗号化に使用するキーと関連付けられたセキュリティ トークン階層を提供するなど)。
WebLogic Web サービスでは以下のトークン プロファイルも実装しています。
詳細については、「OASIS Web Service Security」Web ページを参照してください。
Universal Description, Discovery and Integration (UDDI) 仕様では、Web サービスの記述、既知のレジストリへの Web サービスの登録、他の登録済み Web サービスの検索などの標準的な方法が定義されています。
詳細については http://www.uddi.org を参照してください。
Java API for XML Registries (JAXR) は、さまざまな XML レジストリにアクセスするための共通の標準 Java API を提供しています。XML レジストリは、Web サービスの構築、デプロイ、検索を可能にするインフラストラクチャです。
現在、XML レジストリのさまざまな仕様があり、特に知られているのは、OASIS と U.N./CEFACT が開発中の ebXML Registry and Repository 標準と、ベンダのコンソーシアムで開発中の UDDI 仕様です。
JAXR によって、Java ソフトウェア プログラマは、単一の使いやすい抽象 API を使用して、さまざまな XML レジストリにアクセスできるようになります。JAXR では、XML レジストリ内にコンテンツとメタデータを記述する共通の情報モデルによって、容易性と使いやすさを実現しています。
詳細については、「Java API for XML Registries」を参照してください。
WS-Addressing 仕様は、Web サービスとメッセージのアドレッシングを行うための、転送に依存しないメカニズムを提供します。特に、この仕様では、Web サービスのエンドポイントを識別したり、メッセージ内のエンドポイント ID をエンド ツー エンドで保護したりするのに使用される多数の XML 要素を定義しています。
WebLogic Web サービスのすべての非同期機能 (コールバック、会話、Web サービスの信頼性のあるメッセージング) では、実装でアドレッシングを使用していますが、Web サービス プログラマは、追加のアドレッシング機能が必要な場合に、この仕様に準拠する API を単独で使用することもできます。
「Web Services Addressing (WS-Addressing)」を参照してください。
Web Services Policy Framework (WS-Policy) 仕様では、Web サービスのポリシーを記述して通信するための、汎用的なモデルと対応する構文が提供されています。WS-Policy は、幅広いサービスの要件、優先事項、機能を記述するために、他の Web サービス仕様が使用したり拡張したりできる、構成の基本セットを定義しています。
「Web Services Policy Framework (WS-Policy)」を参照してください。
Web Services Policy Framework (WS-Policy) 仕様では、ポリシーの抽象モデルと XML ベースの式の文法を定義しています。この Web Services Policy Attachment (WS-PolicyAttachment) 仕様では、ポリシーとポリシーの適用先のサブジェクトを関連付けるための、2 つの汎用メカニズムを定義しています。また、それらの汎用メカニズムを使用して、WS-Policy を WSDL や UDDI の記述に関連付ける方法も定義しています。
「Web Services Policy Attachment (WS-PolicyAttachment)」を参照してください。
WS-ReliableMessaging 仕様 (2004 年 2 月 4 日) では、別々の WebLogic Server インスタンス上で動作する 2 つの Web サービスが、ソフトウェア コンポーネント、システム、またはネットワークに障害が発生した場合に、確実に通信するための方法を規定しています。特に、ソース エンドポイントから送り先エンドポイントに送信されるメッセージの配信またはエラーの生成を保証する、相互運用性プロトコルを提供しています。
「Web Services Reliable Messaging Protocol (WS-ReliableMessaging)」を参照してください。
![]() ![]() |
![]() |
![]() |