この章の内容は次のとおりです。
JDeveloperを使用してWebサービスを開発します。
Webサービスは、一連のメッセージ・プロトコルとプログラミング規格で構成され、オープン・スタンダードを使用してインターネット上でビジネス機能を公開します。Webサービスは、プログラムによってインターネット上でアクセスされ、レスポンスを戻す、再利用可能な独立したソフトウェア・コンポーネントです。
アプリケーションでWebサービスを使用する場合は、JDeveloperを使用して次のタスクを実行します。
Webサービスを開発および実行するためにJDeveloperを構成します
次のタスクを1つ以上実行してWebサービス・クライアントを作成します。
Universal Description, Discovery, and Integration (UDDI)レジストリでWebサービスを検索します。
既存のWebサービスにアクセスし、これをアプリケーションに組み込むために、クライアントおよびプロキシ・クラスを作成します。
次のタスクを1つ以上実行してWebサービスを作成します。
基礎となるJava実装からWebサービスを作成します(ボトムアップ)。
WSDLからSimple Object Access Protocol (SOAP) Webサービスを作成します(トップダウン)。
SOAPサービスのWSDLファイルを管理します。
ポリシーを使用してWebサービスを保護します。
Webサービスをテストおよびデバッグします。
統合WebLogic ServerまたはOracle WebLogic ServerにWebサービスをデプロイします
Webサービスを監視、分析、デプロイします。
UDDIレジストリにWebサービスを公開します。
次の各項では、JDeveloperを使用したWebサービスの開発および保護について説明します。
JDeveloperを使用したJava EE Webサービスの開発
JDeveloperを使用したJava EE Webサービスの保護
JDeveloperでは、表21-1に定義されているJava EE Webサービスの開発および保護のためのWebサービス・テクノロジおよび標準をサポートしています。
表21-1 JDeveloperでサポートされているJava EE Webサービス・テクノロジおよび標準
Webサービス・テクノロジ | Webサービス標準 | 説明 |
---|---|---|
Simple Object Access Protocol |
Java API for XML-Based Web services (JAX-WS) 2.2 |
SOAP Webサービスは、JAX-WSを使用してJavaクラスおよびEJBのリモート・インタフェースから作成できます。Webサービス作成ウィザードではデプロイメント・ファイルが作成されるため、Webサービスの作成後、最後のステップではこれをアプリケーション・サーバーにデプロイします。 また、JAX-WS Webサービスは、WSDLから始めてトップ・ダウンWebサービスとして作成できます。 WebLogic ServerのJAX-WS実装は、Glassfishコミュニティによって開発されたJAX-WSリファレンス実装(RI)から拡張されています( 「JAX-WS Webサービスおよびクライアントの作成」を参照してください。 |
Representational State Transfer (REST) |
Java API for RESTful Webサービス(JAX-RS) 2.0 |
RESTは、SOAPのように追加のメッセージ層を使用することなく、HTTPなどの標準化されたインタフェースでデータを転送するためのシンプルなインタフェースを記述したものです。 JAX-RSを使用して、JavaクラスからRESTに基づくWebサービス(「RESTful Webサービス」と呼ばれる)を開発できます。 WebLogic Serverでは、次のJAX-RS参照実装(RI)がサポートされています:
Jersey 2.5.1 (JAX-RS 2.0 RI)共有ライブラリは、統合WebLogic Serverに自動デプロイされます。 注意: Jersey 2.5.1 (JAX-RS 2.0 RI)を使用して構築されたRESTful Webサービスおよびクライアントは、OWSMポリシーを使用して保護されます。Jersey 2.5.1 (JAX-RS 2.0 RI)を使用して作成されたRESTful Webサービスとクライアントを保護する場合の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』の「RESTful Webサービスおよびクライアントの保護」を参照してください。 「RESTful Webサービスおよびクライアントの作成」を参照してください。 注意: WebLogic ServerのJersey 1.18 (JAX-RS 1.1RI)クライアントAPIのサポートは非推奨になりました。ただし、サポートは下位互換性を維持する目的で保持されています。以前のJersey/JAX-RSリリースとの互換性の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』を参照してください |
SOAPテクノロジとRESTテクノロジのどちらか一方を選択する際に考慮すべきガイドラインは、『Oracle WebLogic Server WebLogic Webサービスの理解』のSOAPとRESTの使い分けに関する項を参照してください。
JDeveloperを使用してJava EE Webサービスを保護するには、次の表に定義されたポリシー・タイプのいずれかをアタッチします。
表21-2 Java EE Webサービスを保護するためのポリシーのタイプ
ポリシーのタイプ | 説明 |
---|---|
Oracle Web Services Manager (OWSM)ポリシー |
OWSMによって提供されるポリシー。『Oracle Web Services Managerの理解』を参照してください。 OWSMセキュリティ・ポリシーは、Java EE Webサービスにのみアタッチできます。 OWSMポリシーは、Oracle Enterprise Manager Fusion Middleware Controlから管理します。『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』を参照してください。 |
WebLogic Webサービス・ポリシー |
WebLogic Serverによって提供されるポリシー。WebLogic Webサービス・ポリシーは、JAX-WS Webサービスにのみアタッチできます。『Oracle WebLogic ServerのWebLogic Webサービスの保護』を参照してください。 WebLogic Webサービス・ポリシーは、WebLogic管理コンソールから管理します。 注意: Java EE 7の場合、Java API for RESTful Web Services (JAX-RS) 2.0では、事前作成された共有ライブラリとしてJersey 2.5.1 Java API for RESTful Web Services (JAX-RS) 2.0 Reference Implementation (RI)のサポートが追加されました。Jersey 2.5.1 (JAX-RS 2.0 RI)を使用して構築されたRESTful Webサービスおよびクライアントは、Oracle Web Services Manager (OWSM)セキュリティ・ポリシーを使用して保護されます。 |
可能な場合、WebLogic Webサービス・ポリシーよりもOWSMポリシーを使用することをお薦めします。同じWebサービスで、OWSMポリシーとWebLogic Webサービス・ポリシーを混在して使用することはできません。
既存のWebサービスをアプリケーションで使用するためのクライアントが簡単に作成できます。詳細は、次を参照してください。
また、JDeveloperにはUDDIブラウザが組み込まれており、社内のUDDIレジストリなどへの接続を定義できます。詳細は、「UDDIレジストリのWebサービスの使用」を参照してください。
Webサービスの作成に役立つJDeveloperの機能とツールについて説明します。
次の項では、Webサービスについて理解を深める情報を提供し、JDeveloperを使用したWebサービスの作成、構成および使用方法を説明します。
デフォルトでは、JDeveloperはインターネットへの接続時にプロキシを使用しません。JDeveloperからの接続で問題が発生した場合は、使用するプロキシ・サーバー設定の変更が必要になることがあります。
HTTPアナライザを使用する場合、アナライザ自身がプロキシであり、これにより監視されるトラフィックは、通常のプロキシ・サーバーのようにアナライザでルーティングされます。JDeveloperにプロキシを設定してある場合、アナライザでは、トラフィックが元のプロキシに届く前に、確実にアナライザを通過するようにします。
注意:
JDeveloperでは、NTLMプロキシ・サーバーはサポートされていません。
次の各項では、JDeveloperを使用してプロキシ設定を有効化および無効化する方法について説明します。
デフォルト・ブラウザで構成されているプロキシ設定を使用すると便利な場合があります。
デフォルト・ブラウザのプロキシ設定を使用する手順は次のとおりです。
カスタム・プロキシ設定を構成できます。これは、リストから特定のIPアドレスまたはホスト名を除外する必要がある場合に便利です。
たとえば、プロキシ・サーバーを経由してIPアドレスに接続し、マシンも同じプロキシ・サーバーを経由している場合は、Webプロキシ設定で、接続先のIPアドレスを除外していることを確認します。
カスタム・プロキシ設定を構成する手順は次のとおりです。
コンテキスト・ルート(コンテキスト・パスとも呼ばれる)は、生成されるWebサービスのWebサービス・エンドポイントの一部となります。このため、適切な値に設定することが重要です。
Webサービスのコンテキスト・ルートは、WebサービスURLのhost:port
部分の後に使用される文字列です。たとえば、WebLogic WebサービスのデプロイされたWSDLがhttp://hostname:7001/financial/GetQuote?WSDL
であるとします。
financial
が、このWebサービスのコンテキスト・パスです。
プロジェクト・レベルでは、統合WebLogic ServerにデプロイされているJava EE Webアプリケーションに割り当てるコンテキスト・ルートを設定できます。コンテキスト・ルートのデフォルト値は次のとおりです。
applicationname-projectname-context-root
Webサービスのコンテキスト・ルートを設定する手順は次のとおりです。
統合WebLogic Serverを使用してテストできる単純なWebサービスを開発できます。ただし、複雑なWebサービスの開発およびWebサービスのデプロイには、適切な接続が必要になります。
WebサービスをOracle WebLogic Serverにデプロイするには、「Webサービスのデプロイ」に示すように、アプリケーション・サーバー接続が必要です。
Universal Description, Discovery and Integration (UDDI)レジストリを使用してWebサービスを検索するには、レジストリへの接続を作成する必要があります。詳細は、「UDDIレジストリ接続の定義方法」を参照してください。
Webサービスとの間で受け渡しが可能なオブジェクトは、XML型にシリアライズしたり、また元の型にデシリアライズできる必要があります。自動的に処理されるオブジェクトは、Javaプリミティブ型および特定のJava標準型です。自動的にシリアライズされないオブジェクトを使用してWebサービスを作成するには、独自のカスタム・シリアライザを記述します。
Webサービスとの間で受け渡しが可能なオブジェクトは、JavaBeanの規則に準拠しているオブジェクトです。JavaBeanは、Webサービスを目的として、次の制限に準拠しているJavaクラスです。
publicデフォルト(ゼロ引数)コンストラクタを含んでいること。
アクセッサとして関心のある属性をすべて表示する必要があること。
プロパティのアクセッサ(setMethod()
とgetMethod()
)の順序が重要でないこと。
アクセッサは大/小文字混合で1文字目は小文字であること。たとえば、属性がname
の場合、アクセッサはgetName
およびsetName
となります。
詳細は、JavaBean仕様(http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138795.html
)を参照してください。
Webサービスでは、各オブジェクトのプロパティはJava型の1つで、XMLスキーマの単純な型にマップされる必要があります。XMLスキーマ・データ型とそれに対応するJavaデータ型のリストは、『Oracle WebLogic Server JAX-WS Webサービスの開発』のビルトイン・データ型のXMLからJavaへのマッピングに関する項を参照してください。また、サービス・メソッドによって、org.w3c.dom.Element
として渡される単一のXML要素データを受け取り、戻すことができます。
JAX-WS Webサービスでは、Java Architecture for XML Binding (JAXB) (http://jcp.org/en/jsr/detail?id=222
を参照)を使用して、すべてのデータ・バインディング・タスクを管理します。具体的には、JAXBによりJavaメソッド・シグネチャとWSDLのメッセージおよび操作がバインドされるため、実行時の変換が自動的に処理される一方で、そのマッピングをカスタマイズすることができます。これにより、XMLに関する知識がそれほどなくても、XMLデータと処理関数を、Javaテクノロジに基づくアプリケーションに簡単に組み込むことができます。
JAXBバインディング言語を使用すると、カスタム・バインディング宣言を定義したり、JAXBアノテーションを指定してXMLとJava間のデータ変換を制御することができます。
WebLogic Serverには、2種類のデータ・バインディングおよびJAXBプロバイダが用意されています。
EclipseLink MOXy (WebLogic Serverの本リリースにおけるデフォルト)は、JAXB実装に完全に準拠しています。EclipseLink MOXyにはJAXBの標準機能に加えて、外部メタデータ・ファイルを使用して参照先のJavaソースを変更せずにJAXBアノテーションに相当するものを構成する機能やXPathベースのマッピングなど、便利な拡張が用意されています。JAXB拡張機能は、サービス・エンドポイント・インタフェース(SEI)のアノテーションまたはSEIで使用されるいずれかの値タイプで使用できます。JAXBをスタンドアロン・モードで使用しているユーザーも同様にこれらの機能を利用できます。
EclipseLink MOXyでは次のような追加拡張機能が提供されます。
JPAエンティティからXMLへのマッピングのための拡張機能
双方向のマッピング
仮想プロパティ
メタデータからブートストラップし、メモリー内ドメイン・クラス(Dynamic MOXy)を生成する機能
Webサービスでは、サーバー側でJavaからWSDLを生成する場合にのみEclipseLink MOXy拡張機能を利用できます。この場合、SEIと値タイプでEclipseLinkの拡張機能を使用できます。これらの拡張機能およびEclipseLink MOXyの詳細は、The EclipseLink MOXy (JAXB) User's Guide(http://wiki.eclipse.org/EclipseLink/UserGuide/MOXy
)を参照してください。
EclipseLink MOXyプロバイダを使用する場合、構成は必要ありません。
デフォルトのGlassfish JAXB実装であるGlassfish RI JAXBは、以前のリリースのWebLogic Serverではデフォルトで提供されるJAXBでした。Glassfish RI JAXBの固有機能は、EclipseLink MOXyでは機能しません。機能させる場合は、サーバー・レベルまたはアプリケーション・レベルでGlassfish RI JAXBデータ・バインディングおよびJAXBプロバイダを有効にできます。詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のGlassfish RI JAXBデータ・バインディングおよびJAXBプロバイダの使用に関する項を参照してください。
JAX-WS WebサービスでのJAXBの使用の詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のJAXBデータ・バインディングの使用に関する項を参照してください。
プロジェクトでWebサービスを初めて作成するとこのダイアログが表示され、選択したバージョンがプロジェクトで作成するすべてのWebサービスに対して使用されます。
SOAP Webサービスの場合、既存のWSDLを右クリックして「Webサービスの作成」を選択した場合もこのダイアログが表示されます。次に、そのWSDLから新しいWebサービス・プロジェクトを作成することを選択します。
プロジェクトにWebサービスを初めて作成するときに、表21-3 (SOAP Webサービスの場合)および表21-4 (RESTful Webサービスの場合)に示すように、デプロイメント・プラットフォームを選択できます。選択するプラットフォームにより、ウィザードで使用可能なオプションや、デプロイメント用としてWAR/EARファイルに追加されるライブラリが決まります。
注意:
Java EE 7はサポートされています。表21-3に、SOAP Webサービスに利用可能なデプロイメント・プラットフォームを示します。
表21-3 SOAP Webサービスのデプロイメント・プラットフォーム
デプロイメント・プラットフォーム | 説明 |
---|---|
Java EE 6 (JAX-WS注釈のサポート付き) |
Java EE 1. 6の一部としてリリースされるJAX-WS WebサービスAPIを利用するWebサービスを生成します。このオプションでは、JAX-WS注釈仕様を使用したJava注釈により、WebLogic Serverへのデプロイがサポートされています。 |
Java EE 6 (JAX-WS RIのサポート付き) |
JAX-WS参照実装をサポートする任意のコンテナをデプロイするためのJAX-WS Webサービスを生成します。JAX-WS参照実装の詳細は、 |
表21-4に、RESTful Webサービスに利用可能なデプロイメント・プラットフォームを示します。
表21-4 RESTful Webサービスのデプロイメント・プラットフォーム
デプロイメント・プラットフォーム | 説明 |
---|---|
JAX-RS 1.0スタイル |
Jersey 1.18 (JAX-RS 1.1 RI)と互換性のあるRESTful Webサービスを生成します。 |
JAX-RS 2.0スタイル |
Jersey 2.5.1 (JAX-RS 2.0 RI)と互換性のあるRESTful Webサービスを生成します。 Jersey 2.5.1 (JAX-RS 2.0 RI)共有ライブラリは、統合WebLogic Serverに自動デプロイされます。 注意: Jersey 1.18 (JAX-RS 1.1 RI) RESTful Webサービスを使用して構築されたRESTful WebサービスおよびクライアントにOWSMポリシーをアタッチでき、Jersey 2.5.1 (JAX-RS 2.0 RI)を使用して構築されたクライアントはOWSMポリシーを使用して保護されます。Jersey 2.5.1 (JAX-RS 2.0 RI)を使用して作成されたRESTful Webサービスとクライアントを保護する場合の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』の「RESTful Webサービスおよびクライアントの保護」を参照してください。 |
Javaクラスへの注釈の入力時に、Webサービスのコード・インサイトによって注釈が補完されます。このツールは、XMLエディタでWSDLドキュメントに対しても使用できます(「ソース」タブでの入力時)。
コード・インサイトが反応する速度を構成できます。JDeveloperで「コード・インサイト」ページにアクセスするには、「ツール」→「プリファレンス」→「コード・エディタ」→「コード・インサイト」を選択します。
ソース・エディタで注釈を追加してJavaクラスからJAX-WS Webサービスを作成する場合、コード・インサイト機能であるクイック修正とコード・アシストを使用すると便利です。
たとえば、@WebService
注釈を手動で追加してJavaクラスからWebサービスを作成する場合、注釈の下に波線が表示されます。監査修正アイコンをクリックし、「Webサービス用のプロジェクトの構成」を選択します。
「デプロイメント・プラットフォームの選択」ダイアログで、サービスに対して次のいずれかのJAX-WSプラットフォームを選択します。
Java EE 6 (JAX-WS注釈のサポート付き)。この場合、JDeveloperでは次が追加されます。
クラスに対するimport javax.jws.WebService;
文
プロジェクトに対するweb.xml
ファイル
Java EE 6 (JAX-WS RIのサポート付き)。この場合、JDeveloperでは次が追加されます。
クラスに対するimport javax.jws.WebService;
文
プロジェクトに対するsun-jaxws.xml
ファイルおよびweb.xml
ファイル
注意:
Java EE 7はサポートされています。他の例は、次のとおりです。
ポリシー注釈をJAX-WS Webサービスに追加し、JDeveloperを使用して必要なポリシーを完了できます。たとえば、@Pol
を入力し、[Alt]キーを押しながら[Enter]キーを押すと、単一のポリシーに@Policy
を使用するか、複数のポリシーに@Policies
を使用するかを選択できます。適切なインポート文もクラスに追加されます。
ソース・エディタでWSDL文書を使用している場合、コード補完を使用すると、スキーマ要素を入力しやすくなります。たとえば、<と入力して1秒待つと、ポップアップが表示され、必要なエントリを選択できます。
WSDLとWebサービスのソース・ファイルが同期しなくなった場合、Webサービスをソースから再生成できます。
JavaクラスでJavaクラスの名前を変更する場合、監査修正アイコンをクリックし、不一致を調整する方法を選択します。
UDDIレジストリとその使用方法について説明します。
Universal Description, Discovery and Integration (UDDI)は、Webサービスを支える標準およびプロトコルの1つです。これによって、Webサービスに関する情報を公開および検出するための共通の標準が提供されます。また、UDDIブラウザが付属しており、指定した検索基準を使用してUDDIレジストリを検索し、WSDLにより記述されたWebサービスを検出できます。UDDIの仕様を含む詳細は、UDDI OASIS標準(http://uddi.xml.org/
)を参照してください。
次の項では、UDDIレジストリのWebサービスの使用方法について説明します。
UDDIレジストリへの接続を定義することで、たとえば、社内のUDDIレジストリを参照できます。また、定義したUDDIレジストリ接続はすべて、どのワークスペースまたはプロジェクトからでもアクセスできます。
UDDIの仕様を含む詳細は、UDDI OASIS標準(http://uddi.xml.org/
)を参照してください。
後続の項では、UDDIレジストリ接続の定義方法について説明します。
パブリックまたはプライベート(社内)であるUDDIレジストリに対する新規接続を作成できます。UDDIレジストリ接続は、「リソース」ウィンドウの「接続」パネルにリストされます。
UDDIレジストリ接続を作成する手順は次のとおりです。
既存のUDDIレジストリ接続を編集できます。たとえば、接続の名前を変更したり、照会エンドポイントのURLを変更します。
UDDIレジストリ接続を編集する手順は次のとおりです。
WebサービスがUDDIレジストリにリストされる順序は、カテゴリ・ビューからビジネス・ビューへ、またはビジネス・ビューからカテゴリ・ビューからへ変更できます。詳細は、「UDDIレジストリ接続のビューの選択に関する必知事項」を参照してください。
UDDIレジストリ接続のビューを変更する手順は次のとおりです。
接続の下に格納されている情報を最新にするために、UDDIレジストリ接続をリフレッシュできます。
UDDIレジストリ接続をリフレッシュする手順は次のとおりです。
「UDDIレジストリ接続の定義方法」に示すように、接続を作成する場合、レジストリのWebサービスをビジネス・ビューとカテゴリ・ビューのどちらに表示するか尋ねられます。選択するビューにより、レジストリのサービスを検索する方法が決まります。
UDDIレジストリには、Webサービスの情報を分類するための次の4種類のデータ構造が含まれます。
ビジネス・エンティティ: Webサービスを提供するビジネスの情報を含む最上位レベルのデータ構造を定義します。Webサービスが見つかると、「リソース」ウィンドウでビジネスがUDDIブラウザに追加されます。
ビジネス・サービス: サービス・ファミリの説明的な情報が含まれます。名前や簡単な説明およびカテゴリ情報があります。
バインディング・テンプレート: Webサービス・エントリ・ポイント、およびインタフェース仕様への参照に関する情報が含まれます。
tModel: Webサービスの技術仕様を表します。Webサービスの検索ウィザードでWebサービスが見つかると、そのtModelと互換性を持つWebサービスが他にも表示されます。
「ビジネス・ビュー」を選択すると、サービスは「ビジネス・エンティティ」および「ビジネス・サービス」の下にリストされます。
「カテゴリ・ビュー」を選択すると、次の1つ以上のカテゴリを使用してWebサービスを検索できます。
ISO 3166: 国際標準化機構(ISO) 3166標準コードを使用して場所で検索します。
NAICS: 北米産業分類システム(NAICS: North American Industry Classification System)を使用して産業のタイプを指定します。
SIC: 標準産業分類(SIC)を使用して産業のタイプを指定します。
UDDIタイプ: UDDIタイプを使用して検索します。
UDDI WSDLタイプ: UDDI WSDLタイプを使用して検索します。
UNSPSC: United Nations Standard Products and Services Code (UNSPC)を使用してサービスのタイプで検索します。
名前で検索するときは、名前全体または名前の一部を入力でき、ワイルドカードも使用できます。名前が検索基準と一致するtModelが結果として返されます。同じtModelを含むWebサービスが複数ある場合は、それらがウィザードに表示されるので、要件に最も適したサービスを選択できます。
Webサービスの「リソース」ウィンドウでUDDIレジストリ接続を検索できます。
注意:
トップ・ダウンWebサービスを作成する場合、Webサービスの検索ウィザードを使用して、「WSDLからJava Webサービスを作成」ウィザードからUDDIレジストリ接続を検索できます。
UDDIレジストリのWebサービスを検索するには、次のようにします。
「リソース」ウィンドウでUDDIレジストリ接続のWebサービスに対するプロキシを作成できます。
注意:
Webサービスに対するプロキシを作成できるのは、サービスにWSDLリンクが使用される場合のみです。これを確認するには、Webサービス・ポートを開き、レポートの「tModelインスタンス」セクションの「サマリーの説明」がwsdl link
であることを確認します。
UDDIレジストリで検索したWebサービスを使用するためのプロキシを生成する手順は次のとおりです。
UDDIレジストリのWebサービスのレポートを表示できます。
UDDIレジストリのWebサービスのレポートを表示する手順は次のとおりです。
「アプリケーション・サーバー」ウィンドウでレジストリへの接続を介してUDDIレジストリにWebサービスを公開できます。UDDIレジストリにサービスを公開する前に、リソース・カタログにレジストリへの接続がすでに存在する必要があります。詳細は、「UDDIレジストリ接続の作成」を参照してください。
UDDIレジストリにWebサービスを公開するには、次のようにします。
Java API for XML Web Services (JAX-WS)は、XMLを使用して通信するWebサービスやクライアントを作成するためのテクノロジです。JDeveloperを使用してWebサービスやクライアントを作成する方法について説明します。
JDeveloperを使用してJAX-WS Webサービスおよびクライアントを作成するには、次のいずれかを実行します。
「JAX-WS Webサービスの作成方法(ボトムアップ)」の説明に従って、JavaクラスおよびEJBのリモート・インタフェースからJAX-WS Webサービスを作成します。
「WSDLからのJAX-WS Webサービスの作成方法(トップダウン)」の説明に従って、JAX-WS Webサービスを、WSDLから始めてトップダウンWebサービスとして作成します。
「JAX-WS Webサービス・クライアントの作成方法」の説明に従って、「Webサービス・クライアントおよびプロキシの作成」ウィザードを使用してサービスにアクセスするためのJAX-WSクライアントおよびプロキシ・クラスを作成します。
「Webサービスの原子性トランザクションの使用方法」の説明に従って、Webサービス実装の原子性トランザクションを有効にします。
「SOAP over JMSトランスポートの使用方法」の説明に従って、SOAP over JMSトランスポートを使用して、HTTP接続ではなくJMS宛先を使用して通信します。
Webサービス実装に対してFast Infosetを有効にします。「XML伝送を最適化するためのFast Infosetの使用方法」を参照してください。
Webサービス実装に対してMTOMを有効にします。「バイナリ伝送を最適化するためのMTOMの使用方法」を参照してください。
「WSDLファイルの管理方法」の説明に従って、WSDLファイルを作成、表示および保存します。
「JAX-WS Webサービスの編集方法」および「JAX-WS Webサービスの削除方法」の説明にそれぞれ従って、JAX-WS Webサービスを編集または削除します。
Webサービスは、トップ・ダウンとボトム・アップという2つの開発方式を使用して作成できます。ボトムアップ開発は、SOAPを使用して基礎となるJava実装からWebサービスを開発するプロセスを意味します。
次の各項では、様々なタイプのWebサービスをボトム・アップ方式で生成する方法について説明します。
詳細の参照先は、次のとおりです。
WSDLから開始するトップダウン開発の詳細は、「WSDLからのJAX-WS Webサービスの作成方法(トップダウン)」を参照してください。
Webサービスの原子性トランザクションの使用の詳細は、「Webサービスの原子性トランザクションの使用方法」を参照してください。
SOAP over JMSトランスポートの使用の詳細は、「SOAP over JMSトランスポートの使用方法」を参照してください。
Webサービスは、次のものから作成できます。
Javaクラス
EJBのリモート・インタフェース
Webサービス作成公開ウィザードによってデプロイメント・ファイルは自動的に作成されるため、Webサービスの作成が済んだら、後はこれをデプロイするだけです。
作業を始める前に、次のようにします。
コンテキスト・ルートをまだ設定していない場合は、Webサービスの適切なコンテキスト・ルートを設定します。詳細は、「Webサービスのコンテキスト・ルートの設定方法」を参照してください。
Java Webサービスを作成する手順は次のとおりです。
また、Webサービスの作成元として使用するJavaクラスを右クリックし、「Webサービスの作成」を選択して、「Java Webサービスの作成」ウィザードを起動することもできます。
注意:
「デプロイメント・プラットフォームの選択」ページが表示されるのは、プロジェクトでWebサービスが初めて作成される場合のみです。その後、同じプロジェクトで追加されるWebサービスにはすべて同じバージョンが使用されます。詳細は、「デプロイメント・プラットフォームの選択方法」を参照してください。
「Java Webサービスの作成」ウィザードを使用するときに、存在しないJavaクラスのクラス名を入力すると、ウィザードには、Webサービスの実装クラスとして使用するString helloWorld(String)
メソッドが1つ含まれたデフォルトのJavaクラスを生成するためのオプションが表示されます。デフォルトのJavaクラスの生成を拒否すると、有効なクラス名の選択を求めるメッセージが表示されます。
JSR-181仕様はWebサービスのメタデータを規定したもので、これにより、注釈を宣言的に使用して簡単にWebサービスを作成および管理することが可能になります。注釈は、メソッドおよびクラスでWebサービスのエンドポイントとしてメソッドを公開するために使用します。
注釈は、手動でクラスに追加するか、JDeveloperを使用してWebサービスの作成時にクラスに追加するか、または「Webサービスの編集」ダイアログを使用してWebサービスの編集時に追加できます。
詳細は、次のリファレンスを参照してください。
JSR-181仕様: http://jcp.org/en/jsr/detail?id=18
JAX-WS仕様: http://jcp.org/aboutJava/communityprocess/mrel/jsr224/index2.html
JAX-RS仕様: http://jax-rs-spec.java.net
WebLogic Serverで使用できるJWSアノテーションの詳細は、「JWSアノテーション・リファレンス」を参照してください。
注意:
「Webサービスの編集」ダイアログを使用して注釈を削除すると、手動で入力した注釈もすべて削除されます。
Webサービス注釈を使用する手順は次のとおりです。
「プロパティ」ウィンドウを使用して、Webサービス・プロジェクトに@WebService注釈とサポート・ファイルを追加できます。
「プロパティ」ウィンドウでJAX-WS Webサービスを作成する手順は次のとおりです。
「TopLink DB Webサービス・プロバイダの作成」ウィザードを使用すると、TopLinkデータベース用のJAX-WS Webサービス・プロバイダを構築し、次のいずれかタスクを実行できます。
ストアド・プロシージャおよびファンクションへのアクセス
SQL問合せの実行
表に対するCRUD操作の実行
選択したサービスのタイプに基づいて、Oracle WebLogic Serverなどのアプリケーション・サーバーにデプロイできるWebサービス・プロバイダおよびWSDLドキュメントがウィザードによって生成されます。TopLink Webサービス・プロバイダのデプロイは、他のJ2EE Webアプリケーションのデプロイと似ています。詳細は、「Webサービスのデプロイ」を参照してください。
次の点に注意する必要があります。
JAX-WS Webサービス・プロバイダが生成されます。
TopLink Webサービス・プロバイダを編集する場合、データベース接続が存在することを確認してください。存在しない場合、エラー・メッセージが表示されます。データベース接続が削除されている場合は新規に作成し、削除前と同じ名前を付けます。
プロジェクトからTopLink DB Webサービス・プロバイダを作成する手順は次のとおりです。
Webサービスは再生成が必要な場合があります。たとえば、サービスの最初の生成元のソースが変更された場合などです。
注意:
Webサービスを再生成すると、JDeveloperでは最後に生成されてからWSDLに対して行った変更がすべて破棄されます。
Webサービス・クライアントを再生成した後、Webサービスに対してクライアントを再生成する必要がある場合があります。そうしない場合、コンパイル・エラー(クライアントがWebサービスと同じプロジェクトにある場合)や、ランタイム・エラー(クライアントがWebサービスと別のプロジェクトにある場合)が発生する場合があります。
注釈を使用していないときに基礎となるクラスのメソッドの名前を変更する場合、サービスを再生成すると、メソッドが選択されていないというエラー・メッセージが表示されます。これは、メソッドがネームスペースにより追跡され、ネームスペースを変更するとJDeveloperで再生成の対象を決定できなくなるためです。このエラーを修正するには、Webサービス・コンテナをダブルクリックしてWebサービス・エディタを開き、「メソッド」ページに移動してWebサービスの基にするメソッドを選択する必要があります。
ソースからWebサービスを再生成するには、次のようにします。
JDeveloperでは、ハンドラ・クラスを指定してWebサービス・メッセージで編集できます。ハンドラは、初期設定済パラメータ、SOAPロールまたはSOAPヘッダーを使用できます。詳細は、「SOAPメッセージ・ハンドラの作成と使用」を参照してください。
ハンドラを定義するには、次のようにします。
Webサービスの基として使用するJavaクラスにオーバーロード・メソッドが含まれている場合、JDeveloperではそのメソッドが自動処理されます。
JAX-WS Webサービスの場合、@WebMethod
注釈を使用してオーバーロード・メソッドの名前を変更できます。次に例を示します。
public class SimpleImpl { @WebMethod(operationName="sayHelloOperation") public String sayHello(String message) { System.out.println("sayHello:" + message); return "Here is the message: '" + message + "'"; } ... }
この例では、SimpleImpl JWSファイルのsayHello()
メソッドがWebサービスのパブリック操作として公開されています。ただし、operationName
属性は、WSDLファイル内の操作のパブリック名がsayHelloOperation
であることを指定しています。
@WebMethod
の詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のパブリック操作としてのJWSメソッドの公開の指定(@WebMethodおよび@OneWay注釈)に関する項を参照してください。
JDeveloperでは、トップダウンWebサービスを開発(つまり、WSDLから開始)できます。JDeveloperにより、サービス実装とそのデプロイメント・ディスクリプタが生成されます。ファイル・システム内でWSDLを参照するか、「リソース」ウィンドウのUDDIレジストリ接続でWebサービスを検索します。
WSDLからJAX-WS Webサービスを作成する(トップダウン)手順は次のとおりです。
JDeveloperでは、「Webサービス・クライアントおよびプロキシの作成」ウィザードを使用してWebサービスにアクセスするためのJAX-WSクライアントおよびプロキシ・クラスを作成することにより、アプリケーションでのWebサービスの使用が容易になります。このウィザードは、Webサービスを検索または作成するときに起動できます。または直接ウィザードを起動して、WebサービスのURLを入力したり「Webサービスの検索」ウィザードを使用してUDDIレジストリ内のWebサービスを検索することもできます。
JDeveloperでは、RPCまたはドキュメント・スタイルのWebサービスについては、適切なタイプのプロキシが自動的に生成されます。
注意:
JAX-WS Webサービスは、RPCスタイルをサポートしていません。
詳細は、次を参照してください。
Webサービス・クライアントの開発の詳細は、「基本的なJAX-WS Webサービス・クライアントの開発」を参照してください。
Webサービスおよびクライアントの管理の詳細は、Webサービスの管理を参照してください。
次の各項では、JAX-WS Webサービス・クライアントを作成および使用する方法について説明します。
Webサービス・クライアントの作成に使用するWSDLの表示および管理方法を説明している次の各項も参照してください。
JDeveloperを使用して、Webサービスにアクセスしてそのメソッドをアプリケーションで呼び出すために、クライアントおよびプロキシ・クラスを自動的に作成します。ウィザードを使用して、必要に応じて、非同期メソッドの生成、ポリシーのアタッチおよびSOAPハンドラの定義を行うこともできます。
「Webサービス・クライアントおよびプロキシの作成」ウィザードを使用して、Webサービスにアクセスするためのクライアントおよびプロキシ・クラスを作成できます。公開されているポートごとに新規サービス・クラス(JAX-WS)およびサービス・インタフェースが生成され、これらが「アプリケーション」ウィンドウにリストされます。生成されたクライアント・ファイルport-nameClient.java
はソース・エディタで開かれます。生成後は、アプリケーションでメソッドを呼び出すことができます。
注意:
場合によっては、インターネット上でアクセスするWebサービス用として作成したか、UDDIレジストリを使用して作成したWebサービス・クライアントを実行すると、エラーが発生する可能性があります。Webサービス標準は常に進化しているため、検索したWebサービスが最新の標準に準拠していない場合や、これらが準拠する標準が、クライアントが実行されているサーバーでサポートされている標準と互換性がない場合があります。JDeveloperで作成したWebサービス・クライアントによってエラーが返された場合は、エラー・メッセージを確認し、同じサービスを提供するがサーバーと互換性があり問題なく動作する別のWebサービスに対してクライアントを作成することを検討してください。
「Webサービス・クライアントおよびプロキシの作成」ウィザードにアクセスするには、次のいずれかの方法を使用します。ウィザードの操作のヘルプを参照するには、ウィザード内で[F1]を押すか「ヘルプ」をクリックします。
JDeveloperの外部で定義されているWebサービスのクライアントおよびプロキシ・クラスは、Webサービス・クライアント・プロキシの作成ウィザードを起動してそのWebサービスのWSDLを指定することで生成できます。
Webサービスにアクセスするためのクライアントおよびプロキシ・クラスを作成する手順は次のとおりです。
現在JDeveloperで定義されているWebサービスのクライアントおよびプロキシ・クラスは、「アプリケーション」ウィンドウで生成できます。
JDeveloperで定義されたWebサービスにアクセスするためのクライアントおよびプロキシ・クラスを作成するには、次のようにします。
「アプリケーション」ウィンドウでWebサービス・コンテナを右クリックし、「Webサービス注釈のクライアントの作成」を選択します。
「Webサービス・クライアントおよびプロキシの作成」ウィザードが開き、選択したWebサービス・プロジェクトが移入されます。
注意:
JavaBeanパラメータを使用するEJB Webサービスのクライアントおよびプロキシ・クラスを作成する場合は、JavaBeanにjava.io.Serializable
インタフェースを実装する必要があります。
JDeveloperでは、Webサービスに対するプロキシを定義する多数のファイルが生成されます。生成されたファイルを使用して、次のタイプのWebサービス・クライアント・アプリケーションを開発できます。
スタンドアロン・クライアント・アプリケーション
Java Standard Edition (SE)クライアント・アプリケーション
Oracle WebLogic ServerにデプロイされるJava EEコンポーネント
注意:
次の手順以外にも、Webサービス・インジェクション(@WebServiceRef
メソッドを使用)を使用して、Webサービスの参照を定義し、Webサービス・クライアントでインジェクション・ターゲットを識別できます。詳細は、「@WebServiceRef注釈を使用したWebサービスの参照」を参照してください
スタンドアロン・クライアント・アプリケーションは、その最もシンプルな形式において、java
コマンドを使用して呼び出すMain publicクラスを持つJavaプログラムです。これは、WebLogic Serverから完全に独立して動作します。
スタンドアロン・クライアント・アプリケーションを開発する手順は次のとおりです。
port_name
Client.java
と呼ばれるクライアント・プロキシ・クラスをソース・エディタで開きます。
このファイルは、Webサービス・クライアント・プロキシを最初に作成するときに自動的に開きます。クラスを再度開くには、クライアント・プロキシ・コンテナを右クリックし、「クライアント・クラスに移動」を選択するか、「アプリケーション」ウィンドウでそのままファイルをダブルクリックします。
// Add your code to call the desired methods
というコメントを見つけて、Webサービスの呼出しに適したコードを追加します。
クライアントを実行します。
生成されたプロキシ・クラスをJava Standard Edition (SE)アプリケーションの一部として組み込み、これらを参照してリモートWebサービスにアクセスします。
Java SEクライアント・アプリケーションを開発する手順は次のとおりです。
生成されたクライアント・プロキシ・クラスをJava SEアプリケーション・ソース・ディレクトリにコピーします。
port_name
Client.java
と呼ばれるメイン・クライアント・プロキシ・クラスをガイドとして使用し、アプリケーションからWebサービスへのアクセスに適したメソッドを追加します。
アプリケーションを実行します。
このタイプのWebサービスは、EJB、サーブレット、または他のWebサービスなど、WebLogic ServerにデプロイされたJavaプラットフォーム、Enterprise Edition (Java EE)バージョン6コンポーネント内で動作します。したがって、JEE Webサービス・クライアント・アプリケーションはWebLogic Serverコンテナ内で動作します。
WebLogic ServerにデプロイされたJava EEコンポーネント・クライアント・アプリケーションを開発する手順は次のとおりです。
port_name
Client.java
と呼ばれるメイン・クライアント・プロキシ・クラスをソース・エディタで開きます。
このファイルは、Webサービス・クライアント・プロキシを最初に作成するときに自動的に開きます。クラスを再度開くには、クライアント・プロキシ・コンテナを右クリックし、「クライアント・クラスに移動」を選択するか、「アプリケーション」ウィンドウでそのままファイルをダブルクリックします。
Webサービスにアクセスして必要な操作を行うための独自のメソッドにメイン・メソッドを置き換えます。メイン・メソッドで生成されたコードをガイドとして使用できます。
JDeveloperで生成されたクライアント・モジュール・クラスの完全なセットをデプロイします。
Java EEアプリケーションでクライアント・プロキシ・クラスを参照します。
javax.xml.ws.WebServiceRef
注釈を使用する場合、Webサービスへの参照を任意のコンテナ管理のJavaクラスに挿入できます。
@WebServiceRef
注釈をJavaクラスに迅速かつ簡単に追加するには、Javaクラス・エディタ内でWebサービス参照を挿入する場所を右クリックし、次のいずれかのオプションを選択します。
ポップアップ・メニューで「プロキシの作成および参照の挿入」を選択します。
このコマンドにより、「Webサービス・クライアントおよびプロキシの作成」ウィザードが起動し、Webサービス・クライアントおよびプロキシ・クラスを生成できます。次に、javax.xml.ws.WebServiceRef
およびWebサービスのプロキシ・クラスが自動的にインポートされ、選択したWebサービスへの参照が指定した場所に挿入されます。
コンテキスト・メニューから「プロキシ参照の挿入」を選択し、ドロップダウン・リストから既存のWebサービス・プロキシを選択します。
次に、javax.xml.ws.WebServiceRef
およびWebサービスのプロキシ・クラスが自動的にインポートされ、選択したWebサービスへの参照が指定した場所に挿入されます。Webサービスのプロキシ・クラスが現在使用可能ではない場合、このオプションはグレー表示されます。
次の抜粋は、Javaクラスに自動的に追加されるコードの例を示しています。
import java.xml.ws.WebServiceRef; import ratingservice.CreditRatingService; ... /** ** Injectable field for service WebServiceClient **/ @WebServiceRef CreditRatingService creditRatingService1; ...
詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』の@WebServiceRef注釈を使用したWebサービス参照の定義に関する項を参照してください。
Webサービスの原子性トランザクションの詳細は、「Webサービスの原子性トランザクションの使用方法」を参照してください。
Webサービス・クライアントのインジェクション可能なターゲットでWebサービスの原子性トランザクションを有効化できます。
Webサービス・クライアントのインジェクション可能なターゲットでWebサービスの原子性トランザクションを有効にするには、次のようにします。
Webサービス・クライアントおよびプロキシ・クラスは再生成が必要な場合があります。たとえば、Webサービスが前回の生成以降に更新された場合などです。
注意:
Webサービス・クライアントおよびプロキシ・クラスを再生成すると、JDeveloperではクライアントが最後に生成されてからクラス、WSDLまたはサポート・ファイルに対して行った変更がすべて破棄されます。
Webサービス・クライアントおよびプロキシ・クラスを再生成するには、次のようにします。
次のように、「Webサービス・クライアントおよびプロキシ・エディタ」ウィザードに最後に定義された一連のプロパティや現在ローカルに格納されているWSDLを使用して、Webサービス・クライアントおよびプロキシ・クラスを迅速かつ簡単に再生成できます。
「アプリケーション」ウィンドウで、再生成するWebサービス・クライアント・ノードを右クリックして、ポップアップ・メニューから「Webサービス・プロキシの再生成」を選択します。
Webサービス・クライアント・クラス、WSDLおよびサポート・プロキシ・ファイルが再生成されます。
Webサービス・クライアントはWebサービス・クライアントおよびプロキシ・エディタを使用して編集できます。
Webサービス・クライアントを編集する手順は次のとおりです。
「アプリケーション」ウィンドウ内で、Webサービス・クライアント・コンテナをダブルクリックします。
「アプリケーション」ウィンドウ内でクライアントを右クリックし、「プロパティ...」を選択します。
ウィザードの操作のヘルプを参照するには、ウィザード内で[F1]を押すか「ヘルプ」をクリックします。
WebLogic Webサービスは、次の仕様のサポートを通じて、Websphere、JBoss、Microsoft .NETなどの他の外部トランザクション処理システムとの相互運用を可能にします。
WS-AtomicTransaction (バージョン1.0、1.1および1.2): http://docs.oasis-open.org/ws-tx/wstx-wsat-1.2-spec-cs-01/wstx-wsat-1.2-spec-cs-01.html
WS-Coordination (バージョン1.0、1.1および1.2): http://docs.oasis-open.org/ws-tx/wstx-wscoor-1.2-spec-cs-01/wstx-wscoor-1.2-spec-cs-01.html
これらの仕様は、一連の参加者の間で分散されたアクティビティを調整するための拡張フレームワークを定義するものです。コーディネータは中央のコンポーネントで、トランザクションの状態(調整コンテキスト)を管理し、WebサービスおよびWebクライアントを参加者として登録することを可能にします。Webサービスの原子性トランザクションの詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のWebサービスの原子性トランザクションの使用に関する項を参照してください。
Webサービス実装の原子性トランザクションをクラス・レベルまたは同期メソッド(双方向メソッドの場合のみ)で有効にするには、次のいずれかの方法を使用します。
@weblogic.wsee.wstx.wsat.Transactional
注釈をJavaクラスに直接追加します。この場合、JDeveloperコード・インサイト機能が役に立ちます。詳細は、「JavaクラスでのWebサービスの原子性トランザクションの有効化」を参照してください。
「プロパティ」ウィンドウを使用します。詳細は、「「プロパティ」ウィンドウでのWebサービスの原子性トランザクションの有効化」を参照してください。
Webサービス・クライアントの原子性トランザクションを有効にするには、次のいずれかの方法を使用します。
@WebServiceRef
注釈またはWebサービスのインジェクション可能なターゲットを右クリックし、メニューから「トランザクションの追加」を選択し、@Transactional
注釈を追加します。
Webサービス・プロキシまたはWebサービス・ディスパッチの作成時のパラメータとしてweblogic.wsee.wstx.wsat.TransactionalFeature
を渡します。詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のWebサービスの原子性トランザクションの使用に関する項を参照してください。
Webサービスの原子性トランザクションを有効にする場合、次の情報を構成します。
バージョン: Webサービスおよびクライアントで使用されるWebサービスの原子性トランザクションの調整コンテキストのバージョン。クライアントの場合、アウトバウンド・メッセージに使用されるバージョンのみを指定します。指定した値は、トランザクション全体で一致している必要があります。有効な値は、WSAT10
、WSAT11
、WSAT12
およびDEFAULT
です。WebサービスのDEFAULT
値は3つのバージョンすべてです(インバウンド・リクエストによって決定します)。Webサービス・クライアントのDEFAULT
値はWSAT10
です。
フロー・タイプ: 調整コンテキストがトランザクション・フローとともに渡されるかどうかを指定するフラグ。次の表は、有効な値およびWebサービスおよびクライアントでのそれらの意味の概要を示します。この表では、@TransactionAttribute
アノテーションを使用するEJB型のWebサービスに対してWebサービス原子性トランザクションを構成する際の有効な値の組合せも示しています。
表21-5 トランザクション構成
値 | Webサービス・クライアント | Webサービス | EJB @TransactionAttributeの有効な値 |
---|---|---|---|
|
JTAトランザクションがある場合: トランザクションの調整コンテキストをエクスポートしません。 JTAトランザクションがない場合: トランザクションの調整コンテキストをエクスポートしません。 |
トランザクション・フローが存在する場合: トランザクションの調整コンテキストをインポートしません。 トランザクション・フローがない場合: トランザクションの調整コンテキストをインポートしません。 |
|
|
JTAトランザクションがある場合: トランザクションの調整コンテキストをエクスポートします。 JTAトランザクションがない場合: トランザクションの調整コンテキストをエクスポートしません。 |
トランザクション・フローが存在する場合: トランザクション・コンテキストをインポートします。 トランザクション・フローがない場合: トランザクションの調整コンテキストをインポートしません。 |
|
|
JTAトランザクションがある場合: トランザクションの調整コンテキストをエクスポートします。 JTAトランザクションがない場合: 例外がスローされます。 |
トランザクション・フローが存在する場合: トランザクション・コンテキストをインポートします。 トランザクション・フローがない場合: サービス側の例外がスローされます。 |
|
Javaクラス、「プロパティ」ウィンドウ、またはWebサービス・クライアントのインジェクション可能なターゲットでWebサービスの原子性トランザクションを有効化できます。方法については、次の各項で説明します。
JavaクラスでWebサービスの原子性トランザクションを有効化できます。
JavaクラスでWebサービスの原子性トランザクションを有効にするには、次のようにします。
「プロパティ」ウィンドウでWebサービスの原子性トランザクションを有効化できます。
「プロパティ」ウィンドウでWebサービスの原子性トランザクションを有効にするには、次のようにします。
@Transactional
注釈がインポートされて、publicクラスに追加されます。
通常、Webサービスおよびクライアントは、接続プロトコルとしてSOAP over HTTP/Sを使用して通信します。ただし、クライアント・アプリケーションがトランスポートとしてJMSを使用するようにWebLogic Webサービスを構成することもできます。
SOAP over JMSトランスポートを使用すると、WebサービスとクライアントがHTTP接続ではなくJMS宛先を使用して通信するようになるため、次のような利点があります。
信頼性
スケーラビリティ
サービス品質
Webサービスの信頼性のあるメッセージングの場合と同様に、メソッド呼出しがまだキューに入っているときにWebLogic Serverが停止しても、再起動すればすぐに処理が行われます。クライアントは、Webサービスを呼び出す際にレスポンスを待機しないため、クライアントの実行は続行可能です。ただし、SOAP over JMSトランスポートを使用する場合は、HTTP/Sより若干オーバーヘッドが大きくなり、プログラムが複雑になります。
指定する各トランスポートに対し、WebLogic ServerはWSDL内に追加のポートを生成します。このため、Webサービス呼出し時に使用できるトランスポート(JMS、HTTPまたはHTTPS)をクライアント・アプリケーションで選択できるようにするには、明示的に各トランスポートを構成する必要があります。
注意:
SOAP over JMSトランスポートは、Webサービス機能のうち、信頼性のあるメッセージングおよびHTTPトランスポート固有のセキュリティとは互換性がありません。
Javaクラス、「プロパティ」ウィンドウ、またはWebサービス・クライアントでSOAP over JMSトランスポートを有効化できます。方法については、次の各項で説明します。
SOAP over JMSトランスポートの詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のSOAP Over JMSトランスポートの使用に関する項を参照してください。
JMSトランスポートを使用してWebサービスを開発するには、次のいずれかの方法を使用します。
@com.oracle.webservices.api.jms.JMSTransportService
注釈をJavaクラスに直接追加します。詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』の@JMSTransportService注釈の使用に関する項を参照してください。
「プロパティ」ウィンドウを使用します。詳細は、「「プロパティ」ウィンドウでのJMSトランスポートの有効化」を参照してください。
構成を単純化するために、「プロパティ」ウィンドウでJMSトランスポートを有効化できます。
「プロパティ」ウィンドウでJMSトランスポートを有効にする手順は次のとおりです。
ソース・エディタでWebサービス・クラスを開いた状態で、「ウィンドウ」→「プロパティ」を選択して「プロパティ」ウィンドウを開きます。
詳細を参照するには、「プロパティ」ウィンドウ内で[F1]を押すか「ヘルプ」をクリックします。
publicクラス@WebService
またはクラスの双方向メソッド行にカーソルを置いた状態で、「プロパティ」ウィンドウのJMSノードにナビゲートします。
「JMS」を選択します。
「プロパティ」ウィンドウがリフレッシュされ、SOAP over JMSトランスポートを構成するためのオプションが表示されます。構成オプションの詳細は、表21-6を参照してください。
必要に応じて、JMSトランスポートのプロパティを構成します。
JMSトランスポートを有効にすると、次の表に定義されているプロパティを構成できます。
表21-6 SOAP over JMSトランスポートの構成プロパティ
名前 | 説明 |
---|---|
アクティブ化プロパティ |
JMSプロバイダに渡されるアクティブ化構成プロパティ。アクティブ化プロパティを編集するには、「...」をクリックして、「プロパティの編集: アクティブ化プロパティ」ダイアログを開き、アクティブ化プロパティの「値」列に値を指定します。 サポートされているアクティブ化プロパティのリストは、『Oracle WebLogic Server JAX-WS Webサービスの開発』のJMSトランスポートのプロパティの構成に関する項を参照してください。 |
バインディング・バージョン |
SOAP JMSバインディングのバージョン。この値は、このリリースの この値は、 |
配信モード |
リクエスト・メッセージが永続的かどうかを示す配信モード。有効な値は、 |
宛先名 |
宛先キューまたはトピックのJNDI名。この値のデフォルトは |
宛先タイプ |
宛先タイプ。有効な値は、 この値は、「アクティブ化プロパティ」フィールドのエントリとして指定された トピックは、一方向通信でのみサポートされます。 |
WSDLアクセスの有効化 |
HTTPによりWSDLを公開するかどうかを指定するBooleanフラグ。このフラグのデフォルトは |
ヘッダー・プロパティ |
JMSヘッダー・プロパティ。各プロパティは、セミコロン(;)で区切られた名前と値のペアを使用して指定されます。例: |
メッセージ・プロパティ |
JMSメッセージ・プロパティ。各プロパティは、セミコロン(;)で区切られた名前と値のペアを使用して指定されます。例: |
接続ファクトリ |
JMS接続を確立するために使用される接続ファクトリのJNDI名。この値のデフォルトは |
コンテキスト・パラメータ |
JNDIプロパティ。各プロパティは、セミコロン(;)で区切られた名前と値のペアを使用して指定されます。例: JNDIプロバイダの |
コンテキスト・ファクトリ |
JNDIルックアップの初期コンテキスト・ファクトリ・クラスの名前。この値は、 |
URL |
JNDIプロバイダのURL。この値のデフォルトは この値は、 |
接続当たりのMDB |
リクエストされた宛先ごとに1つのリスニング・メッセージドリブンBean (MDB)を作成するかどうかを指定するBooleanフラグ。この値のデフォルトは
|
メッセージ・タイプ |
リクエスト・メッセージで使用するメッセージ・タイプ。有効な値は、 メッセージ・タイプの構成の詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のJMSメッセージ・タイプの構成に関する項を参照してください。 |
優先度 |
リクエストおよびレスポンス・メッセージに関連付けられたJMS優先度。この値として、0(低優先度)から9(高優先度)の正の整数を指定します。デフォルト値は |
返信先の名前 |
レスポンス・メッセージが送信されるJMS宛先のJNDI名。 双方向動作の場合、デフォルトで一時レスポンス・キューが生成されます。デフォルトの一時レスポンス・キューを使用することで、必要となる構成が最小限に抑えられます。ただし、サーバーの障害時には、レスポンス・メッセージが失われる可能性があります。 この属性により、クライアントは、応答を受信するためにデフォルトの一時的なキューまたはトピックを使用するのではなく、以前に定義された「永続的な」キューまたはトピックを使用できます。JMSレスポンス・キューの構成の詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のJMSレスポンス・キューの構成に関する項を参照してください。 この値はリクエスト・メッセージの |
プリンシパル名として実行 |
リスニングMDBの実行に使用されるプリンシパル。 |
ロールとして実行 |
リスニングMDBの実行に使用されるロール。 |
ターゲット・サービス |
Webサービスのポート・コンポーネント名。この値は、サービス・リクエストを送信するためにサービスの実装によって使用されます。指定しない場合は、WSDLまたは この値は、 |
有効時間 |
リクエスト・メッセージの存続期間(ミリ秒単位)。値0は、無限の存続期間を意味します。指定しない場合は、JMS定義のデフォルト値( サービス側では、この値により各MDBトランザクションの有効期限も指定されます。 |
JMSトランスポートを使用してWebサービス・クライアントを開発するには、次のいずれかの方法を使用します。
次のいずれかの方法を使用して、Webサービス・クライアントを更新してJMSトランスポートを有効化および構成します。
@com.oracle.webservices.ap.jms.JMSTransportClient
注釈を追加します。詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』の@JMSTransportClient注釈の使用に関する項を参照してください。
@com.oracle.webservices.ap.jms.JMSTransportClientFeature
機能クライアントAPIを追加します。詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のJMSTransportClientFeatureクライアントAPIの使用に関する項を参照してください。
同期クライアントのターゲット・エンドポイント・アドレスとしてJMS URIを構成します。詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のターゲット・エンドポイント・アドレスとしてのJMS URIの構成に関する項を参照してください。
非同期Webサービス・クライアントを更新して、JMSトランスポートを有効化および構成します。詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のAsyncClientTransportFeatureを使用した非同期クライアントの構成に関する項を参照してください。
これらの方法の詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のJMSトランスポートを使用したWebLogic Webサービスの呼出しに関する項を参照してください。
Fast Infosetは、テキストベースのXML形式よりも効率的にシリアライズできる、圧縮バイナリ・エンコーディング形式です。Fast Infosetによって、ドキュメント・サイズと処理パフォーマンスの両方が最適化されます。
有効にすると、Fast Infosetでは、データの送信前に、SOAPエンベロープのXML情報セットが圧縮バイナリ形式に変換されます。Fast Infosetは、暗号化メッセージ、署名付きメッセージ、MTOM対応メッセージおよびSOAPアタッチメントを最適化します。また、HTTPトランスポートとJMSトランスポートの両方をサポートします。
Fast Infoset仕様ITU-T Rec.X.891およびISO/IEC 24824-1 (Fast Infoset)は、ITU-TおよびISOの両方の標準化団体によって規定されています。この仕様は、ITUのWebサイト(http://www.itu.int/rec/T-REC-X.891-200505-I/en
)からダウンロードできます。
Fast Infoset機能は、すべてのWebサービスにおいて、デフォルトで有効です。Webサービス・クライアントの場合、Fast Infosetは、Webサービスで有効化されWSDLで通知されている場合にのみ有効となります。
次の項では、WebサービスとクライアントでFast Infosetを明示的に有効化および無効化する方法について説明します。
Fast Infoset機能は、すべてのWebサービスにおいて、デフォルトで有効です。
次の方法を使用して、Webサービスに対するFast Infosetの明示的な有効化(グローバル・ポリシー・アタッチメントによって機能が無効化されていないことを確認するなど)、無効化および構成が可能です。
com.oracle.webservices.api.FastInfosetService
注釈をJavaクラスで直接追加します。この場合、JDeveloperのコード・インサイト機能が役に立ちます。詳細は、「JavaクラスでのFast Infosetの構成」を参照してください。
「Webサービス」ウィザードを使用します。詳細は、「Webサービス・ウィザードでのFast Infosetの構成」を参照してください。
「プロパティ」ウィンドウを使用します。詳細は、「「プロパティ」ウィンドウでのFast Infosetの構成」を参照してください。
JavaクラスでFast Infosetを有効化できます。
JavaクラスでFast Infosetを構成するには:
ソース・エディタでWebサービス・クラスを開きます。
注釈(@FastInfosetService
など)の入力を開始します。中断するか[Ctrl]キーと[Shift]キーを押しながら[Space]キーを押すと、ポップアップが表示され、文を正しく完成するためのエントリを選択できます。
次の例に示すように、有効化された属性を使用して、機能を有効と無効のどちらにするかを明示的に指定できます。
package examples.webservices.hello_world; import javax.jws.WebService; import com.oracle.webservices.api.FastInfosetService; @WebService(name="HelloWorldPortType", serviceName="HelloWorldService") @FastInfosetService(enabled=true) public class HelloWorldImpl { public String sayHelloWorld(String message) { try { System.out.println("sayHelloWorld:" + message); } catch (Exception ex) { ex.printStackTrace(); } return "Message from FI Enabled Service: '" + message + "'"; } }
新規Webサービスの作成時にはWebサービス・ウィザードで、すでに存在するWebサービスの更新時にはWebサービス・エディタで、Fast Infosetを有効化できます。
「Java Webサービスの作成」ウィザードを使用したWebサービスの作成の詳細は、「Java Webサービスの作成」を参照してください。
Webサービス・ウィザードでFast Infosetを構成するには:
「Java Webサービスの作成」ウィザードまたはWebサービス・エディタで、「メッセージの書式」ページに移動して「Fast Infosetの有効化」チェック・ボックスを選択します。詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。
Fast Infosetは、「プロパティ」ウィンドウで有効化できます。
「プロパティ」ウィンドウでFast Infosetを構成するには:
ソース・エディタでWebサービス・クラスを開いた状態で、「ウィンドウ」→「プロパティ」を選択して「プロパティ」ウィンドウを開きます。
詳細を参照するには、「プロパティ」ウィンドウ内で[F1]を押すか「ヘルプ」をクリックします。
publicクラスまたはクラスの@WebService
行にカーソルを置いた状態で、「プロパティ」ウィンドウのJAX-WS拡張機能ノードに移動します。
「Fast Infosetの有効化」を選択します。
@FastInfosetService
注釈がインポートされて、publicクラスに追加されます。
Webサービス・クライアントの場合、Fast Infosetは、Webサービスで有効化されWSDLで通知されている場合にのみ有効となります。
Webサービス・クライアントに対するFast Infosetの有効化、無効化および構成を明示的に行うには、Webサービス・プロキシまたはディスパッチの作成時にcom.oracle.webservices.api.FastInfosetClientFeature
をパラメータとして渡します。コンテンツのネゴシエーション戦略の構成の詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のコンテンツのネゴシエーション戦略の構成に関する項を参照してください。
次のコードの抜粋は、com.oracle.webservices.api.FastInfosetClientFeature
機能クラスを使用して、設計時にWebサービスでFast Infosetを有効化および構成する例です。
package examples.webservices.hello_world.client; import javax.xml.namespace.QName; import java.net.MalformedURLException; import java.net.URL; import com.oracle.webservices.api.FastInfosetClientFeature; import com.oracle.webservices.api.FastInfosetContentNegotiationType; public class Main { public static void main(String[] args) { HelloWorldService service; FastInfosetContentNegotiationType clientNeg = FastInfosetContentNegotiationType.PESSIMISTIC; FastInfosetClientFeature feature = FastInfosetClientFeature.builder().fastInfosetContentNegotiation(clientNeg).enabled(true).build(); try { service = new HelloWorldService(new URL(args[0] + "?WSDL"), new QName("http://hello_world.webservices.examples/", "HelloWorldService") ); } catch (MalformedURLException murl) { throw new RuntimeException(murl); } HelloWorldPortType port = service.getHelloWorldPortTypePort(feature); String result = null; result = port.sayHelloWorld("Hi there!"); System.out.println( "Got result: " + result ); } }
クライアントでFast Infosetを無効にするには、enabled
フラグをfalse
に設定するか、機能クラスでコンテンツのネゴシエーション戦略をNONE
に設定します。
設計時にFast Infosetを明示的に無効にするには次のようにします。
Webサービスの場合、注釈でenabled
フラグをfalse
に設定します。詳細は、「JavaクラスでのFast Infosetの構成」を参照してください。
Webサービス・クライアントの場合、注釈(機能クラス)でenabled
フラグをfalse
に設定するか、コンテンツのネゴシエーション戦略をNONE
に設定します。詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のコンテンツのネゴシエーション戦略の構成に関する項と設計時のFastInfosetClientFeatureクラスの使用例に関する項を参照してください。
次のコードの抜粋は、com.oracle.webservices.api.FastInfosetService
アノテーションを使用して、設計時にWebサービスでFast Infosetを無効化する例です。
package examples.webservices.hello_world; import javax.jws.WebService; import com.oracle.webservices.api.FastInfosetService; @WebService(name="HelloWorldPortType", serviceName="HelloWorldService") @FastInfosetService(enabled=false) public class HelloWorldImpl { public String sayHelloWorld(String message) { try { System.out.println("sayHelloWorld:" + message); } catch (Exception ex) { ex.printStackTrace(); } return "Message from FI Enabled Service: '" + message + "'"; } }
SOAP MTOM/XOP (Message Transmission Optimization Mechanism/XML-binary Optimized Packaging)では、SOAPメッセージ内のxs:base64Binary
型またはxs:hexBinary
型のXMLデータの転送を最適化する方法が定義されています。トランスポート・プロトコルがHTTPの場合、Multipurpose Internet Mail Extension (MIME)添付ファイルを使用して、送信側と受信側の両方に対して同時にSOAPメッセージ内のXMLデータへの直接アクセスを許可する間にデータを伝達します。このとき、base64Binary
またはhexBinary
データのマーシャリングにMIMEアーティファクトが使用されていたことを意識する必要はありません。
バイナリ・データ最適化プロセスの手順は次のとおりです:
バイナリ・データのエンコード
SOAPエンベロープからのバイナリ・データの削除
バイナリ・データの圧縮
MIMEパッケージへのバイナリ・データの添付
SOAPエンベロープ内のMIMEパッケージへの参照の追加
MTOM/XOPのサポートは、JWSアノテーションの使用によって、JAX-WSでは標準となっています。MTOM仕様では、MTOMを有効化する場合、base64binary
またはhexBinary
データの伝送時にWebサービス・ランタイムでXOPバイナリ最適化を使用する必要はありません。むしろ、この仕様では、ランタイムがこれを選択して行うようになっています。これは場合によっては、直接SOAPメッセージ内にバイナリ・データを送信するほうがより効率的であるとランタイムが判断することがあるためです。一例としては、トランスポートされるデータが少量で、単にデータをそのままインライン処理するよりも多くのリソースが変換およびトランスポートのオーバーヘッドによって消費されてしまう場合が挙げられます。
デフォルトでbase64Binary
XMLデータ型にマップされるJavaタイプは、javax.activation.DataHandler
、java.awt.Image
とjavax.xml.transform.Source
です。base64Binary
またはhexBinary
型の要素は、デフォルトでbyte[]
にマップされます。
次の項では、WebサービスおよびクライアントでMTOMを有効にする方法について説明します。
次の操作により、Webサービスに対してMTOMを有効化できます。
javax.xml.ws.soap.MTOM
注釈をJavaクラスに直接追加します。この場合、JDeveloperのコード・インサイト機能が役に立ちます。詳細は、「JavaクラスでのFast Infosetの構成」を参照してください。
「Webサービス」ウィザードを使用します。詳細は、「Webサービス・ウィザードでのFast Infosetの構成」を参照してください。
「プロパティ」ウィンドウを使用します。詳細は、「「プロパティ」ウィンドウでのFast Infosetの構成」を参照してください。
JavaクラスでMTOMを有効化できます。
JavaクラスでMTOMを有効化するには:
ソース・エディタでWebサービス・クラスを開きます。
注釈(@MTOM
など)の入力を開始します。中断するか[Ctrl]キーと[Shift]キーを押しながら[Space]キーを押すと、ポップアップが表示され、文を正しく完成するためのエントリを選択できます。
次に、Webサービスに対するMTOMの有効化の例を示します。
package examples.webservices.mtom;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.soap.MTOM;
@MTOM
@WebService(name="MtomPortType",
serviceName="MtomService",
targetNamespace="http://example.org")
public class MTOMImpl {
@WebMethod
public String echoBinaryAsString(byte[] bytes) {
return new String(bytes);
}
}
MTOMを有効化するには、『Oracle WebLogic Server JAX-WS Webサービスの開発』のWS-PolicyファイルのアタッチによるWebサービスでのMTOMの有効化に関する項の説明に従って、WebLogic Webサービス・ポリシーをアタッチします。
新規Webサービスの作成時にはWebサービス・ウィザードで、すでに存在するWebサービスの更新時にはWebサービス・エディタで、MTOMを有効化できます。
「Java Webサービスの作成」ウィザードを使用したWebサービスの作成の詳細は、「Java Webサービスの作成」を参照してください。
「Webサービス」ウィザードでMTOMを使用可能にするには、「Java Webサービスの作成」ウィザードまたはWebサービス・エディタで、「メッセージの書式」ページに移動して、「MTOMの有効化」チェック・ボックスを選択します。詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。
「プロパティ」ウィンドウでMTOMを有効化できます。
「プロパティ」ウィンドウでMTOMを有効化するには:
ソース・エディタでWebサービス・クラスを開いた状態で、「ウィンドウ」→「プロパティ」を選択して「プロパティ」ウィンドウを開きます。
詳細を参照するには、「プロパティ」ウィンドウ内で[F1]を押すか「ヘルプ」をクリックします。
publicクラスまたはクラスの@WebService
行にカーソルを置いた状態で、「プロパティ」ウィンドウの「JAX-WS」ノードに移動します。
「MTOMの有効化」を選択します。
@FastInfosetService
注釈がインポートされて、publicクラスに追加されます。
WebサービスのクライアントでMTOMを有効化するには、次の例に示されているように、Webサービス・プロキシまたはディスパッチの作成時にjavax.xml.ws.soap.MTOMFeature
のインスタンスをパラメータとして渡します。関連するコードは太字で示されています。
package examples.webservices.mtom.client;
import javax.xml.ws.soap.MTOMFeature;
public class Main {
public static void main(String[] args) {
String FOO = "FOO";
MtomService service = new MtomService()
MtomPortType port = service.getMtomPortTypePort(new MTOMFeature());
String result = null;
result = port.echoBinaryAsString(FOO.getBytes());
System.out.println( "Got result: " + result );
}
}
設計時に次の内容を構成できます。
xs:binary64
データがインラインで送信される場合やアタッチメントとして送信される場合に指定するアタッチメントのしきい値を設定します。デフォルトの添付ファイルのしきい値は0バイトです。詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のアタッチメントのしきい値の設定に関する項を参照してください。
トランスポート・レイヤーでHTTPチャンクを有効にして、MTOMアタッチメントの処理時にクライアント側で過度のバッファを最小限に抑えます。詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のHTTPチャンクの有効化に関する項を参照してください。
JDeveloperには、次の各項に示すように、WebサービスのWSDLファイルを管理する方法が多数用意されています。
WebサービスのWSDLを表示できます。WSDLファイルは、Webサービスに定義されている注釈に基づいて一時ディレクトリに生成され、表示されます。
ユーザーがローカルに保存されているWADLファイルを表示したときに、元のWSDLの場所がエディタで読取り専用フィールドとして保存されることを示すように、「WSDLファイルの管理」を更新します。
Webサービス・プロジェクトにWSDLを表示するには、次のようにします。
「アプリケーション」ウィンドウで、WSDLを表示するWebサービスを右クリックし、ポップアップ・メニューから「Webサービス注釈のWSDLの表示」を選択します。
WSDLファイルが一時ディレクトリに生成され、表示されます。
Webサービス用のWSDLファイルを生成し、次に示す手順を使用してこれをプロジェクトに追加できます。WSDLファイルは自動的に生成され、プロジェクト内のWebアプリケーション用のWEB-INF/wsdl
ディレクトリおよびEJBアプリケーション用のMETA-INF/wsdl
ディレクトリに追加されます。また、ローカルWSDLの場所を参照するためにwsdlLocation
属性を使用して@WebService
注釈が更新されます。次に例を示します。
@WebService(wsdlLocation="WEB-INF/wsdl/CreditRatingService.wsdl")
WSDLをWebサービス・プロジェクトに追加するには、次のようにします。
「アプリケーション」ウィンドウで、WSDLを追加するWebサービスを右クリックし、ポップアップ・メニューから「WSDLを生成し、プロジェクトを追加します」を選択します。WSDLが自動的に生成され、WEB-INF/wsdl
ディレクトリでプロジェクトに追加されます。
注意:
WSDLファイルがWEB-INF/wsdl
またはMETA-INF/wsdl
ディレクトリにすでに存在する場合は、既存のWSDLファイルを上書きするかどうかを尋ねられます。
WebサービスのリモートWSDLを表示する場合、WSDLをローカル・ディレクトリに保存できます。
注意:
WSDLをWebサービス・プロジェクト内で使用する場合、プロジェクト・ディレクトリ(たとえば、Webアプリケーションの場合はWEB-INF/wsdl
、EJBアプリケーションの場合はMETA-INF/wsdl
)によってアクセスされる場所にこれをコピーし、WSDLの場所を参照するように@WebService
注釈を更新します。
ローカル・ディレクトリにWSDLを保存するには、次のようにします。
Webサービス・クライアントの生成に使用されたWSDLを表示できます。次の点に注意してください。
可能な場合、WSDLファイルのローカル・コピーが表示されます。Webサービス・クライアントを生成する場合、ソースWebサービスのWSDLをローカル・ディレクトリにコピーできます。「クライアントおよびプロキシ・クラスの作成」を参照してください。
注意:
ほとんどの場合、WSDLのローカル・コピーはリモートWebサービスのWSDLと一致します。リモートWebサービスが変更されると、ローカルWSDLがリモートWSDLと同期しなくなる可能性があります。Webサービス・クライアントがリモートWebサービスにアクセスできることを確認するには、必要に応じて、リモートWSDLを使用してローカルWSDLを再生成します。「Webサービス・クライアントおよびプロキシ・クラスの再生成」を参照してください。
ローカル・バージョンが使用できない場合、リモートWSDLが表示されます。
Webサービス・クライアントの作成に使用されたWSDLを表示する手順は次のとおりです。
元のWSDLの場所からWSDLのローカル・コピーをリフレッシュできます。WSDLがリフレッシュされると、Webサービス・クライアントおよびプロキシ・クラスが再生成されます。
WSDLのローカル・コピーをリフレッシュする手順は次のとおりです。
場合によっては、Webサービスの説明の一部であるソースとは異なるソースからインポートされたXMLリソース(WSDLやXSDなど)を参照するため、アプリケーションを更新する必要がある可能性があります。この方法によるXMLリソースのリダイレクトは、パフォーマンスを向上させるため、またはローカル環境においてアプリケーションを常に正しく実行できるようにするために必要になる場合があります。
たとえば、クライアントの生成時にはWSDLにアクセスできても、クライアントの実行時にはWSDLにアクセスできなくなることがあります。ネットワーク経由で参照できるリソースではなく、ローカルのリソースやアプリケーションにバンドルされているリソースを参照する必要が生じることもあります。
次のいずれかのメソッドを使用すると、実行時にWebサービスによって使用されるWSDLの場所を変更できます。
XMLカタログ・ファイル
Webサービス・インジェクション(@WebServiceRef
)およびデプロイメント・プラン
Webサービス・クライアントを作成または再生成すると、jax-ws-catalog.xml
ファイルがMETA-INF
ディレクトリに自動的に作成されます。このファイルは、Oasis XMLカタログの仕様(http://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html
)で説明されているように、OASIS XMLスキーマに準拠しています。
WebサービスWSDLを更新するには、jax-ws-catalog.xmlファイルの<system>要素のuri属性を変更します。指定した値は実行時に使用されます。
次の例は、リモートWSDLのXMLカタログ(jax-ws-catalog.xml)ファイルを示しています。
<catalog xmln="urn:oasis:names:tc:entity:xmlns:xml:catalog"
prefer="system">
<system systemId="http://foo.org/hello?wsdl"
uri="http://foo.org/hello?wsdl" />
</catalog>
次の例は、ローカルWSDLのXMLカタログ(jax-ws-catalog.xml)ファイルを示しています。
<catalog xmln="urn:oasis:names:tc:entity:xmlns:xml:catalog"
prefer="system">
<system systemId="http://foo.org/hello?wsdl"
uri="../org/foo/HelloService.wsdl" />
</catalog>
前述の例で、各要素の意味は次のとおりです。
<catalog>
ルート要素は、XMLカタログ・ネームスペースを定義し、prefer
属性をsystem
に設定してシステムとの一致が優先されるよう指定しています。
<system>
要素により、URI参照がシステムIDに関連付けられています。
注意:
同じエンドポイントを共有するローカル・システム上で複数のWebサービスに対してクライアントおよびプロキシ・クラスを作成することにより、jaxws-catalog.xml
ファイルでWebサービスごとにURLが一意であるようにすると、サービスQNameがアンカー・テキストとして追加されます。次に例を示します。
http://foo.org/helloworld?wsdl
これは次のようになります。
http://foo.org/helloworld#%7Bhttp%3A%2F%2Fexample.com%2F%7DHelloService?wsdl
このメソッドには、次の手順が含まれます。
@WebServiceRef
注釈を使用して、Webサービスへの参照を定義し、インジェクション・ターゲットを識別します。
デプロイメント・プランを更新し、実行時に参照されるWebサービスWSDLの値を変更します。
手順1: @WebServiceRef注釈の使用方法
@WebServiceRef
注釈は、web.xml
ファイルに定義されているWebサービス・インタフェースのエンドポイントをインジェクトします。次の例は、@WebServiceRef
注釈を使用して、Webサービスへの参照を定義し、インジェクション・ターゲットを識別する方法を示しています。
...
@WebService
public class LoansApprover {
/**
** Credit rating service injected from web.xml
**/
@WebServiceRef(name = "CreditRatingService")
CreditRating creditRating;
/**
** @return Loan application with approval code if approved.
**/
public LoanApprovalReponse approveLoan(LoanApplication la) {
...
}
}
次の例に示すように、CreditRatingService
のWebサービス・クラスはweb.xml
ファイルにハードコード化されています。
<?xml version = '1.0' encoding = 'windows-1252'?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> ... <service-ref> <service-ref-name>CreditRatingService</service-ref-name> <service-interface> com.somecreditrating.xmlns.rating.CreditRating_Service </service-interface> </service-ref> </web-app>
手順2: デプロイメント・プランの更新方法
実行時に使用されるWSDLの値を変更するため、デプロイメント・プランを生成および更新できます。
デプロイメント・プランは、特定のWebLogic Server環境にデプロイするアプリケーションの構成に使用するオプションのXML文書です。デプロイメント・プランは、通常はアプリケーションのWebLogic Serverデプロイメント・ディスクリプタに定義されるデプロイメント・プロパティ値を定義または上書きします。アプリケーションの構成を更新するには、デプロイメント・プランの変数を追加または更新し、WebLogic Serverディスクリプタ・プロパティの場所とプロパティに割り当てる値の両方を定義します。詳細は、WebLogic Serverへのアプリケーションのデプロイを参照してください。
次の例は、CreditRatingService WebサービスWSDLの値をオーバーライドするデプロイメント・プランを示しており、各要素の意味は、次のとおりです。
variable-definition
要素は、CreditRatingService
変数とこの変数に割り当てる値を定義します。
LoanApplication-LoanApprover-context-root.war
のmodule-override
要素の一部として、variable-assignment要素は、CreditRatingService
変数、およびプロパティがオーバーライドされるディスクリプタ内の正確な場所を定義します。
<?xml version='1.0' encoding='UTF-8'?> <deployment-plan xmlns="http://www.bea.com/ns/weblogic/deployment-plan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/deployment-plan http://www.bea.com/ns/weblogic/deployment-plan/1.0/deployment-plan.xsd" global-variables="false"> <application-name>production</application-name> <variable-definition> <variable> <name>CreditRatingService</name> <value>http://www.somecreditrating.com/xmlns/rating?WSDL</value> </variable> </variable-definition> <module-override> <module-name>production.ear</module-name> <module-type>ear</module-type> <module-descriptor external="false"> <root-element>weblogic-application</root-element> <uri>META-INF/weblogic-application.xml</uri> </module-descriptor> <module-descriptor external="false"> <root-element>application</root-element> <uri>META-INF/application.xml</uri> </module-descriptor> <module-descriptor external="true"> <root-element>wldf-resource</root-element> <uri>META-INF/weblogic-diagnostics.xml</uri> </module-descriptor> </module-override> <module-override> <module-name> LoanApplication-LoanApprover-context-root.war </module-name> <module-type>war</module-type> <module-descriptor external="false"> <root-element>weblogic-web-app</root-element> <uri>WEB-INF/weblogic.xml</uri> </module-descriptor> <module-descriptor external="false"> <root-element>web-app</root-element> <uri>WEB-INF/web.xml</uri> <variable-assignment> <name>CreditRatingService</name> <xpath> /web-app/service-ref/[service-ref-name="CreditRatingService"]/wsdl-file </xpath> <operation>add</operation> </variable-assignment> </module-descriptor> <module-descriptor external="true"> <root-element>weblogic-webservices</root-element> <uri>WEB-INF/weblogic-webservices.xml</uri> </module-descriptor> <module-descriptor external="false"> <root-element>webservices</root-element> <uri>WEB-INF/webservices.xml</uri> </module-descriptor> <module-descriptor external="true"> <root-element>webservice-policy-ref</root-element> <uri>WEB-INF/weblogic-webservices-policy.xml</uri> </module-descriptor> </module-override> <config-root> D:\prom-demo\jdeveloper\mywork\LoanApplication\deploy\production\.\plan </config-root> </deployment-plan>
JDeveloperで作成したJAX-WS Webサービスを編集して、公開するメソッドやファイルの場所などを変更できます。
JAX-WS Webサービスを編集すると、以前に生成されたWSDLファイルは上書きされるため、それまでに行った変更はすべて失われます。Webサービスがすでにデプロイされているときにこれを編集する場合、これを再デプロイする必要があります。
JAX-WS Webサービスを編集する手順は次のとおりです。
Webサービス・ファイルを編集した後、Webサービスを再デプロイする必要があります。詳細は、「Webサービスのデプロイ」を参照してください。
不要になったJAX-WS Webサービスを削除できます。
JDeveloperからWebサービスを削除すると、Webサービス・コンテナとそれに含まれるファイル(WSDLファイル、および場合によってはインタフェース)が削除されます。Webサービスのエントリはweb.xml
から削除されますが、ファイル自体は削除されません。WebServices.deploy
ファイルは、他のWebサービスでも使用される場合があるため、変更されません。
Webサービスを削除するには、次のようにします。
「アプリケーション」ウィンドウで、Webサービスを右クリックして「削除」を選択します。「削除の確認」ダイアログが開き、ファイルの使用状況が表示されます。「OK」をクリックします。
REpresentational State Transfer (REST)は、Webサービスがリソースとして表示され、それらのURLによって識別できるステートレス・クライアント/サーバー・アーキテクチャを採用した主要な設計方法です。JDeveloperを使用してWebサービスやクライアントを作成する方法について説明します。
REST (Representational State Transfer)とは、SOAPのように追加のメッセージ層を使用することなく、HTTPなどの標準化されたインタフェースでデータを転送するためのシンプルなインタフェースを記述したものです。RESTは、リソース(特定の情報のソース)と見なされて一意のURIによって特定できるステートレス・サービスを作成するための設計ルールを提供します。クライアントは、メソッドの標準化された固定セットであるURIを使用してリソースにアクセスし、リソースの表現が返されます。クライアントは、新しいリソース表現ごとに状態を転送するよう指示されます。
HTTPプロトコルを使用してRESTfulリソースにアクセスする際は、リソース識別子がリソースのURLとなります。そのリソースに対して実行する標準操作は、HTTPメソッドの1つ(GET
、PUT
、DELETE
、POST
またはHEAD
)です。
JAX-RSは、アノテーションを使用して、RESTful Webサービスの開発を簡略化するJavaプログラミング言語APIです。JAX-RSアノテーションは実行時アノテーションです。JAX-RSリソース・クラスを含むJava EEアプリケーション・アーカイブをWebLogic Serverにデプロイすると、ランタイムはリソースを構成し、ヘルパー・クラスおよびアーティファクトを生成し、リソースをクライアントに公開します。
WebLogic Serverでは、次のJAX-RS参照実装(RI)がサポートされています:
Jersey 1.18 (JAX-RS 1.1 RI): これはデフォルトの実装であり、http://jcp.org/en/jsr/summary?id=311
で定義されているJSR-311 JAX-RS 1.1仕様の本番品質実装を提供します。
注意:
WebLogic ServerのJersey 1.18 (JAX-RS 1.1RI)クライアントAPIのサポートは非推奨になりましたが、下位互換性のためにサポートが維持されています。以前のJersey/JAX-RSリリースとの互換性の詳細は、「以前のJersey/JAX-RSリリースとの互換性」を参照してください。Jersey 2.5.1 (JAX-RS 2.0 RI): この実装は共有ライブラリとして用意されており、http://jcp.org/en/jsr/detail?id=339
で定義されているJSR-339 JAX-RS 2.0仕様の本番品質実装を提供します。
Jersey 2.5.1 (JAX-RS 2.0 RI)共有ライブラリは、統合WebLogic Serverに自動デプロイされます。
注意: Jersey 1.x JAX-RS RIを使用して構築されたRESTful WebサービスおよびクライアントにOWSMポリシーをアタッチできます。Jersey 2.5.1 (JAX-RS 2.0 RI)を使用して構築されたRESTful Webサービスおよびクライアントも、OWSMポリシーを使用して保護されます。Jersey 2.5.1 (JAX-RS 2.0 RI)を使用して作成されたRESTful Webサービスとクライアントを保護する場合の詳細は、「RESTful Webサービスとクライアントの保護」を参照してください。
JAX-RSを使用したRESTful Webサービスおよびクライアントの開発の詳細は、次のリソースを参照してください。
Oracle WebLogic Server RESTful Webサービスの開発と保護
Jersey RIドキュメント: https://wikis.oracle.com/display/Jersey/Main
次の各項では、JDeveloperを使用してRESTful Webサービスおよびクライアントを迅速かつ簡単に作成する方法について説明します。
JDeveloperを使用してRESTful Webサービスを迅速かつ簡単に開発できます。コード・インサイトやインポート・アシスタンスなどの標準Javaソース・エディタのすべての機能がRESTful Webサービス・コールと連携して機能するようになります。
次の各項では、RESTful Webサービスを開発する方法について説明します。
詳細の参照先は、次のとおりです。
RESTful Webサービスの開発の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のRESTful Webサービスおよびクライアントの保護に関する項を参照してください。
RESTful Webサービスの管理の詳細は、Webサービスの管理を参照してください。
次に示すのは、RESTful Webサービスの実装の簡単な例です。この例の各要素の意味は次のとおりです。
helloWorld
クラスは/helloworld
として定義された相対URIパスを含むリソースです。実行時に、WARファイルのコンテキスト・ルートがhttp://examples.com
として定義されている場合、リソースにアクセスするためのフルURIはhttp://examples.com/helloworld
です。詳細は、「ルート・リソースおよびサブリソースの相対URIの定義」を参照してください
sayHello
メソッドはHTTP GETメソッドをサポートします。詳細は、「受信HTTPリクエストのJavaメソッドへのマッピング」を参照してください
sayHello
メソッドはMIMEメディア・タイプtext/plain
のコンテンツを生成します。詳細は、「リクエスト・メッセージおよびレスポンス・メッセージのメディア・タイプのカスタマイズ」を参照してください
その他の例は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のRESTful Webサービスの詳細に関する項に記載されています。
package samples.helloworld; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; // Specifies the path to the RESTful web service @Path("/helloworld") public class helloWorld { // Specifies that the method processes HTTP GET requests @GET @Path("hello") @Produces("text/plain") public String sayHello() { return "Hello World!"; } }
「RESTfulサービスの作成」ウィザードを使用して、新しいRESTful Webサービス・クラスを作成したり、既存のJavaクラスからRESTful Webサービスを生成したりできます。
デプロイメント・ファイルはウィザードによって自動的に作成されるため、Webサービスの作成が済んだら、後はこれをデプロイするだけです。HTTPアナライザを使用してそれらをテストできます。詳細は、「HTTPアナライザを使用したWebサービスの調査方法」を参照してください。
「デプロイメント・プラットフォームの選択方法」の説明に従って、「RESTfulサービスの作成」ウィザードを使用してRESTful Webサービスを作成する場合、デプロイメント・プラットフォームの選択が求められ、Jersey 1.0または2.0スタイルを選択できます。
JAX-RS Jerseyライブラリは、プロジェクトに自動的に追加されます。アプリケーションで必要であれば、製品にバンドルされているJAX-RS Jersey JacksonライブラリまたはJAX-RS Jersey Jettisonライブラリをプロジェクトに追加できます。JAX-RS Jersey Romeライブラリは製品にバンドルされていません。プロジェクトに追加できるライブラリの詳細は、「ライブラリの管理方法」を参照してください。
注意:
サーバー側のJersey 1.x APIのサポートは使用できないため、対応するJAX-RS 2.0標準を使用してください。必要な場合は、Jersey 2.x APIを使用します。WebLogic ServerのJersey 1.18 (JAX-RS 1.1RI)クライアントAPIのサポートは非推奨になりました。ただし、サポートは下位互換性を維持する目的で保持されています。以前のJersey/JAX-RSリリースとの互換性の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』を参照してください。Jersey 2.5.1 (JAX-RS 2.0 RI)共有ライブラリは、統合WebLogic Serverに自動デプロイされます。
注意:
Jersey 1.18 (JAX-RS 1.1 RI)を使用して構築されたRESTful WebサービスおよびクライアントにOWSMポリシーをアタッチできます。Jersey 2.5.1 (JAX-RS 2.0 RI)を使用して構築されたRESTful Webサービスおよびクライアントは、OWSMポリシーを使用して保護されます。Jersey 2.5.1 (JAX-RS 2.0 RI)を使用して作成されたRESTful Webサービスとクライアントを保護する場合の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』の「RESTful Webサービスおよびクライアントの保護」を参照してください。RESTful Webサービスを作成する手順は次のとおりです。
「アプリケーション」ウィンドウで、新しいRESTful Webサービスを作成するプロジェクトか、RESTful Webサービスの作成元として使用するJavaクラスまたはRESTful Webサービスを作成するJavaクラスが含まれるプロジェクトを選択します。
「ファイル」→「新規」→「ギャラリから」を選択して「新規ギャラリ」を開きます。
「カテゴリ」リストで「ビジネス層」を開き、「Webサービス」を選択します。
「項目」リストで「RESTfulサービス」を選択し、「OK」をクリックして、「RESTfulサービスの作成」ウィザードを起動します。
ウィザードの操作の詳細なヘルプを参照するには、ウィザード内で[F1]を押すか「ヘルプ」をクリックします。
また、RESTful Webサービスの作成元として使用するJavaクラスを右クリックし、「RESTfulサービスの作成」を選択して、「RESTfulサービスの作成」ウィザードを起動することもできます。
リソースのクラス・レベルでjavax.ws.rs.Path
注釈を追加し、RESTful Webサービスの相対URIを定義します。このようなクラスは、ルート・リソース・クラスと呼ばれます。ルート・リソース・クラスの詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』の次の内容に関する項を参照してください。:
「ルート・リソース・クラスの定義」
「リソース・クラスの相対URI (@Path)"の定義方法」
特定の機能をグループ化するためのサブリソースを定義するため、@Path
もルート・リソース・クラスのメソッドに追加できます。詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のサブリソースの相対URI (@Path)の定義方法に関する項を参照してください。
URIは定数値または変数値(「URIパス・テンプレート」と呼ばれる)として定義できます。
URIを定数値として定義するには、定数値を@Path
アノテーションに渡します。先頭と末尾のスラッシュ(/)はオプションです。
URIをURIパス・テンプレートとして定義するには、1つまたは複数の変数値を@Path
アノテーションに中カッコで囲んで渡します。これにより、javax.ws.rs.PathParam
注釈を使用して、@Path
注釈で定義されたリクエストURIから変数情報を抽出し、メソッド・パラメータの値を初期化できます(「リクエスト・メッセージからの情報の抽出」を参照)。
詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のリソース・クラスの相対URI (@Path)の定義方法に関する項を参照してください。
JDeveloperを使用して、次のいずれかの方法で@Path
注釈を指定できます。
「RESTfulサービスの作成」ウィザードを使用してRESTful Webサービスを作成する場合は、「「RESTfulサービス」ウィザードでの@Path注釈の定義」の説明に従ってください。
Javaクラスで行う場合は、「Javaクラスでの@Path注釈の定義」の説明に従ってください。
「プロパティ」ウィンドウで行う場合は、「「プロパティ」ウィンドウでの@Path注釈の定義」の説明に従ってください。
「RESTfulサービスの作成」ウィザードを使用してRESTfulサービスを作成するときに、ルート・リソースおよびサブリソースの相対URIを定義できます。ウィザードの起動方法の詳細は、「RESTful Webサービスの作成」を参照してください。
「RESTfulサービス」ウィザードで@Path注釈を定義する手順は次のとおりです。
「RESTfulサービスの作成」ウィザードで、RESTfulサービス・クラスを新規に作成するのか、既存のJavaクラスから作成するのかに応じて、次のいずれかのページにナビゲートします。
新規RESTfulサービスの作成
JavaクラスからのRESTfulサービスの作成
次のように相対URIを定義します。
ルート・リソース・クラスの相対URIを定義するには、「ルート・パス」フィールドに値を入力します。
サブリソースの相対URIを定義するには、「HTTPメソッド」表の「パス」フィールドに値を入力します。
詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。
@Path
注釈をJavaクラスに直接追加してRESTfulサービスを作成するときに、ルート・リソースおよびサブリソースの相対URIを定義できます。この場合、コード・インサイト機能が役に立ちます。詳細は、「Webサービスのコード・インサイトの使用方法」を参照してください。
Javaクラスで@Path注釈を定義する手順は次のとおりです。
ソース・エディタでRESTfulサービス・クラスを開きます。
次のタスクを1つ以上実行します。
リソースのクラス・レベルで@Path
注釈を追加して、RESTfulサービスの相対URIを定義します。
リソースのメソッドに@Path
注釈を追加して、サブリソースを定義します。
コード・インサイトを使用すると役に立ちます。注釈(@Path
など)の入力を開始します。中断するか[Ctrl]キーと[Shift]キーを押しながら[Space]キーを押すと、ポップアップが表示され、文を正しく完成するためのエントリを選択できます。
注意:
ポップアップからjavax.ws.rs.Path
を選択したことを確認します。たとえば、誤ってjava.nio.file.Path
を選択しないでください。
@Path
注釈の定義の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のルート・リソースおよびサブリソースの相対URIの定義に関する項を参照してください。
「プロパティ」ウィンドウを使用して、ルート・リソースおよびサブリソースの相対URIを定義できます。
「プロパティ」ウィンドウで@Path注釈を定義する手順は次のとおりです。
ソース・エディタでRESTfulサービス・クラスを開いた状態で、「ウィンドウ」→「プロパティ」を選択して「プロパティ」ウィンドウを開きます。
詳細を参照するには、「プロパティ」ウィンドウ内で[F1]を押すか「ヘルプ」をクリックします。
リソース・クラスの相対URIを定義する手順は次のとおりです。
リソースのクラス・レベルにカーソルを置きます。
「プロパティ」ウィンドウで、JAX-RSを開いて「RESTfulリソース・クラス」をクリックします。
サービスが更新され、リソース・クラスの上に@Path
注釈が追加されてjavax.ws.rs.Path
がインポートされます。
「パス」フィールドに値を入力して、URIを定義します。URIは、定数値またはURIパス・テンプレートとして定義できます。
詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のリソース・クラスの相対URI (@Path)の定義方法に関する項を参照してください。
サブリソースの相対URIを定義する手順は次のとおりです。
リソースのメソッドにカーソルを置きます。
まだリソース・メソッドをHTTPメソッドにマップしていない場合は、「プロパティ」ウィンドウで、JAX-RSを開いて「メソッド・タイプ」ドロップダウン・メニューからHTTPメソッドを選択します。有効なHTTPメソッドは、GET
、POST
、PUT
またはDELETE
です。
サービスが更新されて、リソース・メソッドの上にメソッド注釈が含められ、適切なAPIがインポートされます。詳細は、「受信HTTPリクエストのJavaメソッドへのマッピング」を参照してください
「メソッド・パス」フィールドに値を入力して、サブリソースの相対URIを定義します。URIは、定数値またはURIパス・テンプレートとして定義できます。
詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のサブリソースの相対URI (@Path)の定義方法に関する項を参照してください。
RESTful WebサービスのベースURIは、次のように構成されます。
http://myHostName/contextPath/servletURI
/resourceURI
ベースURIパス構造の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』の実行時のベースURIの構成方法に関する項を参照してください。
プロジェクト・レベルのcontextPath
(つまりコンテキスト・ルート)では、統合WebLogic ServerにデプロイされているJava EE Webアプリケーションに割り当てる値を設定できます。詳細は、「Webサービスのコンテキスト・ルートの設定方法」を参照してください。この場合、contextPath
のデフォルトは次のようになります。
applicationname-projectname-context-root
JAX-RSはJavaアノテーションを使用して受信HTTPリクエストをJavaメソッドにマッピングします。表21-7に、同様の名前が付いたHTTPメソッドにマップする、使用可能な注釈を示します。
表21-7 HTTPリクエストをJavaメソッドにマップするためのjavax.ws.rs注釈
注釈 | 説明 | 多重呼出し不変 |
---|---|---|
|
URIにより識別されるリソースの表現をクライアントに送信します。フォーマットは、HTML、プレーン・テキスト、JPEGなどです。詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のリソースの表現の送信方法(@GET)に関する項を参照してください。 |
はい |
|
URIで識別された特定のリソースの表現を作成または更新します。詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のリソースの表現の作成または更新方法(@PUT)に関する項を参照してください。 |
はい |
|
URIで識別されたリソースの表現を削除します。詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のリソースの表現の削除方法(@DELETE)に関する項を参照してください。 |
はい |
|
URIで識別された特定のリソースの表現でのアクションを作成、更新、または実行します。詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のリソースの表現に対するアクションの作成、更新または実行方法(@POST)に関する項を参照してください。 |
いいえ |
|
レスポンス・ヘッダーのみを戻し、実際のリソースは戻しません(つまり、メッセージ本文はありません)。これは、実際にダウンロードせずにリソースの特性を確認して、バンド幅を節約するのに役に立ちます。詳細は、
|
はい |
|
URIで識別された特定のリソースのリクエスト/レスポンス・チェーンで使用可能な通信オプションを戻します。
|
はい |
|
アノテーションの付けられたメソッドを使用してHTTPリクエストを処理する必要があることを示します。詳細は、 |
N/A |
JDeveloperを使用して、次のいずれかの方法でHTTPリクエストをJavaメソッドにマップできます。
「RESTfulサービスの作成」ウィザードを使用してRESTful Webサービスを作成する場合は、「「RESTfulサービス」ウィザードでのHTTPリクエストのJavaメソッドへのマッピング」の説明に従ってください。
Javaクラスで行う場合は、「JavaクラスでのHTTPリクエストのJavaメソッドへのマッピング」の説明に従ってください。
「プロパティ」ウィンドウで行う場合は、「「プロパティ」ウィンドウでのHTTPリクエストのJavaメソッドへのマッピング」の説明に従ってください。
「RESTfulサービスの作成」ウィザードを使用してRESTful Webサービスを作成するときに、HTTPリクエストをJavaメソッドにマップできます。ウィザードの起動方法の詳細は、「RESTful Webサービスの作成」を参照してください。
「RESTfulサービス」ウィザードでHTTPリクエストをJavaメソッドにマップする手順は次のとおりです。
「RESTfulサービスの作成」ウィザードで、RESTfulサービス・クラスを新規に作成するのか、既存のJavaクラスから作成するのかに応じて、次のいずれかのページにナビゲートします。
新規RESTfulサービスの作成
JavaクラスからのRESTfulサービスの作成
次のタスクのいずれかを実行します。
新しいRESTfulサービス・クラスを作成する場合は、Javaメソッドを作成するHTTPメソッドを選択します。そのたびに、「数」列に値を入力して、HTTPメソッドにマップするJavaメソッドの数を指定します。
既存のクラスからRESTfulサービスを生成する場合は、「HTTPメソッドの構成」表で「タイプ」ドロップダウン・リストからHTTPメソッドを選択してHTTPリクエストをJavaメソッドにマップします。有効なHTTPメソッドは、GET
、POST
、PUT
またはDELETE
です。
詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。
表21-7に示されているいずれかのHTTPリクエスト注釈をJavaクラスに直接追加してRESTfulサービスを作成するときに、HTTPリクエストをJavaメソッドにマップできます。この場合、コード・インサイト機能が役に立ちます。詳細は、「Webサービスのコード・インサイトの使用方法」を参照してください。
JavaクラスでHTTPリクエストをJavaメソッドにマップする手順は次のとおりです。
ソース・エディタでRESTfulサービス・クラスを開きます。
表21-7のいずれかのHTTPリクエスト注釈をJavaクラスの1つまたは複数のメソッドに追加します。
コード・インサイトを使用すると役に立ちます。注釈(@GET
など)の入力を開始します。中断するか[Ctrl]キーと[Shift]キーを押しながら[Space]キーを押すと、ポップアップが表示され、文を正しく完成するためのエントリを選択できます。
HTTPリクエスト注釈の定義の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』の受信HTTPリクエストのJavaメソッドへのマッピングに関する項を参照してください。
「プロパティ」ウィンドウで、HTTPリクエストをJavaメソッドにマップできます。
「プロパティ」ウィンドウでHTTPリクエストをJavaメソッドにマップする手順は次のとおりです。
ソース・エディタでRESTfulサービス・クラスを開いた状態で、「ウィンドウ」→「プロパティ」を選択して「プロパティ」ウィンドウを開きます。
詳細を参照するには、「プロパティ」ウィンドウ内で[F1]を押すか「ヘルプ」をクリックします。
リソースのメソッドにカーソルを置きます。
「プロパティ」ウィンドウで、JAX-RSを開いて「メソッド・タイプ」ドロップダウン・メニューからHTTPメソッドを選択します。有効なHTTPメソッドは、GET
、POST
、PUT
またはDELETE
です。
サービスが更新されて、リソース・メソッドの上にメソッド注釈が含められ、適切なAPIがインポートされます。
HTTPリクエスト注釈の定義の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』の受信HTTPリクエストのJavaメソッドへのマッピングに関する項を参照してください。
リソースのクラス・レベルまたはメソッド・レベルでjavax.ws.rs.Consumes
注釈またはjavax.ws.rs.Produces
注釈を追加して、それぞれリクエスト・メッセージまたはレスポンス・メッセージのメディア・タイプをカスタマイズします。いずれの場合も複数のメディア・タイプを宣言できます。
JDeveloperを使用して、次のいずれかの方法でリクエスト・メッセージおよびレスポンス・メッセージのメッセージ・タイプをカスタマイズできます。
「RESTfulサービスの作成」ウィザードを使用してRESTful Webサービスを作成する場合は、「「RESTfulサービス」ウィザードでのメディア・タイプのカスタマイズ」の説明に従ってください。
Javaクラスで行う場合は、「Javaクラスでのメディア・タイプのカスタマイズ」の説明に従ってください。
「プロパティ」ウィンドウで行う場合は、「「プロパティ」ウィンドウでのメディア・タイプのカスタマイズ」の説明に従ってください。
「RESTfulサービスの作成」ウィザードを使用してRESTful Webサービスを作成するときに、メディア・タイプをカスタマイズできます。ウィザードの起動方法の詳細は、「RESTful Webサービスの作成」を参照してください。
「RESTfulサービス」ウィザードでのメディア・タイプをカスタマイズする手順は次のとおりです。
「RESTfulサービスの作成」ウィザードで、RESTfulサービス・クラスを新規に作成するのか、既存のJavaクラスから作成するのかに応じて、次のいずれかのページにナビゲートします。
新規RESTfulサービスの作成
JavaクラスからのRESTfulサービスの作成
次のようにメディア・タイプをカスタマイズします。
ルート・リソース・クラスのメディア・タイプをカスタマイズするには、「消費」フィールドまたは「生成」フィールドの横にある「...」をクリックし、「メディア・タイプの選択」ダイアログ・ボックスで1つまたは複数のメディア・タイプを選択して「OK」をクリックします。構成されたメディア・タイプの数がフィールドに表示されます。
メソッドのメディア・タイプをカスタマイズする手順は次のとおりです。
新しいRESTfulサービス・クラスを作成する場合は、「HTTPメソッドの選択」表で、メディア・タイプを構成するメソッドに対応する「消費」列または「生成」列内をクリックし、「メディア・タイプの選択」ダイアログ・ボックスでメディア・タイプを選択して「OK」をクリックします。構成されたメディア・タイプの数が表エントリに表示されます。
既存のクラスからRESTfulサービスを生成する場合は、「HTTPメソッドの構成」表で、メディア・タイプを構成するメソッドに対応する「消費」列または「生成」列内をクリックし、「メディア・タイプの選択」ダイアログ・ボックスでメディア・タイプを選択して「OK」をクリックします。構成されたメディア・タイプの数が表エントリに表示されます。
詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。
RESTfulサービスの作成時に、リソースのクラス・レベルまたはメソッド・レベルで@Produces
注釈または@Consumes
注釈をJavaクラスに直接追加して、それぞれリクエスト・メッセージまたはレスポンス・メッセージのメディア・タイプをカスタマイズすることで、メディア・タイプをカスタマイズできます。この場合、コード・インサイト機能が役に立ちます。詳細は、「Webサービスのコード・インサイトの使用方法」を参照してください。
Javaクラスでメディア・タイプをカスタマイズする手順は次のとおりです。
ソース・エディタでRESTfulサービス・クラスを開きます。
クラス・レベルまたはメソッド・レベルで@Produces
注釈または@Consumes
注釈を追加します。
コード・インサイトを使用すると役に立ちます。注釈(@Produces
など)の入力を開始します。中断するか[Ctrl]キーと[Shift]キーを押しながら[Space]キーを押すと、ポップアップが表示され、文を正しく完成するためのエントリを選択できます。
メディア・タイプのカスタマイズの詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のリクエスト・メッセージおよびレスポンス・メッセージのメディア・タイプのカスタマイズに関する項を参照してください。
「プロパティ」ウィンドウでメディア・タイプをカスタマイズできます。
「プロパティ」ウィンドウでメディア・タイプをカスタマイズする手順は次のとおりです。
ソース・エディタでRESTfulサービス・クラスを開いた状態で、「ウィンドウ」→「プロパティ」を選択して「プロパティ」ウィンドウを開きます。
詳細を参照するには、「プロパティ」ウィンドウ内で[F1]を押すか「ヘルプ」をクリックします。
リソースのクラス・レベルまたはメソッド・レベルにカーソルを置きます。
「プロパティ」ウィンドウで、JAX-RSを開いて、「消費タイプ」フィールドまたは「生成タイプ」フィールドの横にある「...」をクリックし、「プロパティの編集」ダイアログ・ボックスで1つまたは複数のメディア・タイプを選択して「OK」をクリックします。構成されたメディア・タイプの数がフィールドに表示されます。
サービスが更新されて、メソッド注釈が含められ、適切なAPIがインポートされます。
メディア・タイプのカスタマイズの詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のリクエスト・メッセージおよびレスポンス・メッセージのメディア・タイプのカスタマイズに関する項を参照してください。
javax.ws.rs
パッケージにより、リクエスト・メッセージから情報を抽出してJavaメソッドのパラメータに注入できるアノテーションのセット(表21-8を参照)が定義されます。
表21-8 リクエスト・メッセージから情報を抽出するためのjavax.ws.rs注釈
注釈 | 説明 |
---|---|
|
HTTP Cookie関連ヘッダーから情報を抽出し、メソッド・パラメータの値を初期化します。詳細は、 |
|
次に示すアノテーションのいずれかを使用してバインドされるリクエスト・メタデータのデフォルト値を定義します。 |
|
タイプ |
|
HTTPヘッダーから情報を抽出し、メソッド・パラメータの値を初期化します。詳細は、 |
|
URIパス・セグメントから情報を抽出し、メソッド・パラメータの値を初期化します。詳細は、 |
|
相対URIを変数値(URIパス・テンプレートと呼ばれる)として定義します。詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のリクエストURIからの変数情報の抽出方法(@PathParam)に関する項を参照してください。 |
|
リクエストURIの問合せ部分から情報を抽出し、メソッド・パラメータの値を初期化します。詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のリクエスト・パラメータの抽出方法 (@QueryParam)に関する項を参照してください。 |
JDeveloperを使用して、次のいずれかの方法でリクエスト・メッセージから情報を抽出できます。
「RESTfulサービスの作成」ウィザードを使用してRESTful Webサービスを作成する場合は、「「RESTfulサービス」ウィザードでのリクエスト・メッセージからの情報の抽出」の説明に従ってください。
Javaクラスで行う場合は、「Javaクラスでのリクエスト・メッセージからの情報の抽出」の説明に従ってください。
「プロパティ」ウィンドウで、次に示す注釈のいずれかを使用してバインドされるパラメータ値のエンコーディングを有効化できます。@FormParam
、@MatrixParam
、@PathParam
、@QueryParam
。詳細は、「「プロパティ」ウィンドウでのパラメータ値のエンコーディングの有効化」を参照してください。
「RESTfulサービスの作成」ウィザードを使用してRESTful Webサービスを作成する場合に、リクエストから情報を抽出できます。ウィザードの起動方法の詳細は、「RESTful Webサービスの作成」を参照してください。
「RESTfulサービス」ウィザードでリクエスト・メッセージから情報を抽出する手順は次のとおりです。
「RESTfulサービス」ウィザードを使用する場合は、既存のJavaクラスからRESTfulサービスを生成するときにのみリクエスト・メッセージから情報を抽出できます。
「RESTfulサービスの作成」ウィザードで、「JavaクラスからのRESTfulサービスの作成」ページに移動します。
「HTTPメソッドの構成」表でメソッドを選択します。そのメソッドの「タイプ」列でHTTPメソッドが選択されていることを確認します。
「パラメータの構成」表にメソッド・パラメータのリストが表示されます。
「パラメータの構成」表で、次の作業を行います。
「注釈」ドロップダウン・リストで、リクエスト・メッセージから情報を抽出するために使用する注釈を選択します。有効な注釈のリストは、表21-8を参照してください。
「パラメータ」フィールドで、抽出された値の格納に使用するパラメータの名前を入力します。
「デフォルト」フィールドで、リクエスト・メッセージで値が渡されなかった場合のパラメータのデフォルト値を入力します。
エンコードをクリックして、パラメータ値のエンコーディングを有効にします。このフィールドは、次に示す注釈に対してのみ有効になります。@FormParam
、@MatrixParam
、@PathParam
または@QueryParam
。
「次へ」をクリックして次の画面に進むか、「終了」をクリックしてRESTfulサービスを生成します。
詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。
RESTfulサービスの作成時に、Javaクラス内で、表21-8に示されている注釈をリソースのクラス・レベルまたはメソッド・レベルに直接追加することで、リクエスト・メッセージから情報を抽出できます。この場合、コード・インサイト機能が役に立ちます。詳細は、「Webサービスのコード・インサイトの使用方法」を参照してください。
Javaクラスでリクエスト・メッセージから情報を抽出する手順は次のとおりです。
ソース・エディタでRESTfulサービス・クラスを開きます。
表21-8に示されている注釈のいずれかをクラス・レベルまたはメソッド・レベルで追加します。
コード・インサイトを使用すると役に立ちます。注釈(@PathParam
など)の入力を開始します。中断するか[Ctrl]キーと[Shift]キーを押しながら[Space]キーを押すと、ポップアップが表示され、文を正しく完成するためのエントリを選択できます。
javax.ws.rs.Encode
注釈をクラス・レベルまたはメソッド・レベルで追加して、次に示す注釈のいずれかを使用してバインドされるパラメータ値のエンコーディングを有効にします。@FormParam
、@MatrixParam
、@PathParam
、@QueryParam
。クラス・レベルで指定した場合は、そのクラスのすべてのメソッドのパラメータがエンコードされます。詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のパラメータ値のエンコーディングの有効化 (@Encode)に関する項を参照してください。
リクエスト・メッセージからの情報の抽出の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のリクエスト・メッセージからの情報の抽出に関する項を参照してください。
「プロパティ」ウィンドウで、次に示す注釈のいずれかを使用してバインドされるパラメータ値のエンコーディングを有効化できます。@FormParam
、@MatrixParam
、@PathParam
、@QueryParam
。@Encode
注釈の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のパラメータ値のエンコーディング (@Encode)に関する項を参照してください。
「プロパティ」ウィンドウでパラメータ値のエンコーディングを有効にする手順は次のとおりです。
ソース・エディタでRESTfulサービス・クラスを開いた状態で、「ウィンドウ」→「プロパティ」を選択して「プロパティ」ウィンドウを開きます。
詳細を参照するには、「プロパティ」ウィンドウ内で[F1]を押すか「ヘルプ」をクリックします。
リソースのクラス・レベルまたはメソッド・レベルにカーソルを置きます。
「プロパティ」ウィンドウで、JAX-RSを開いて「エンコード値」をクリックします。
サービスが更新されて、@Encode
注釈が含められ、javax.ws.rs.Encoded
APIがインポートされます。
注意: クラス・レベルでエンコーディングを有効にした場合、すべての関連メソッドでエンコーディングが有効になり、「エンコード値」チェック・ボックスはメソッド・レベルでは使用できなくなります。
Java型のサブセットは、HTTPリクエストおよびレスポンスのエンティティ・ボディによって自動的にサポートされます。自動的にサポートされない戻り型の場合は、HTTPリクエストおよびレスポンスのエンティティ・ボディをメソッド・パラメータおよび戻り型にマップするエンティティ・プロバイダを定義する必要があります。サポートされるJava型のリストと、エンティティ・プロバイダの作成の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のエンティティ・プロバイダを使用したHTTPリクエストおよびレスポンスのエンティティ・ボディのマッピングに関する項を参照してください。
「RESTfulサービスの作成」ウィザード(Javaクラスを右クリックして、「RESTfulサービスの作成」を選択)を使用して、既存のJavaクラスからRESTful Webサービスを作成するときに、自動的にサポートされない型を使用するメソッドがクラスに含まれている場合は、次の警告メッセージが表示されます。
The return types for the following methods are not supported automatically for
HTTP response entities and require entity providers to map between
representations and Java types. Check and correct the code after the service is
generated.
methodName
次に示すコードの抜粋は、カスタム・タイプを返すメソッド(getClass
)を含むクラスの例を示しています。このコードにはエンティティ・プロバイダを記述する必要があります。
public class Class1 { public String hello() { return "Hello"; } public Class2 getClass(String name) { return new Class2(); }; } public class Class2 { public Class2() { } }
注意:
Jersey JSONには、jersey-jsonモジュールとともに配布されるJAX-RS MessageBodyReader
プロバイダおよびMessageBodyWriter
プロバイダのセットが用意されています。詳細は、『Jersey User Guide
』の「JSON Support」(http://jersey.java.net/documentation/1.18/json.html
)を参照してください。
アプリケーションで必要であれば、製品にバンドルされているJAX-RS Jersey Jacksonをプロジェクトに追加できます。プロジェクトに追加できるライブラリの詳細は、「ライブラリの管理方法」を参照してください。
Web Application Description Language (WADL)は、RESTful Webサービス・アプリケーションを記述するXMLベースのファイル形式です。デフォルトでは、基本WADLが実行時に生成され、JDeveloperからアクセスできます。
RESTful WebサービスのWADLにアクセスする手順は次のとおりです。
注意:
「HTTPアナライザ」ウィンドウからWADLを表示するには、「HTTPアナライザ」ウィンドウで「WADL URI」をクリックします。
図に示すように、読取り専用バージョンのWADLファイルがソース・エディタで開きます。
この図は、RESTful Webサービスのリソース、サブリソースおよびメソッドなどのWADLファイル構造を示しています。「テスト」を押してHTTPアナライザを起動できます。
次のビューを切り替えることができます。
プレビュー: 次の作業を行うことができます。
RESTful Webサービスのリソースおよびサブリソースのサマリーを表示します。
各リソースにマップされたメソッドと、リクエストおよびレスポンスの表現およびステータスを表示します。
「テスト」ボタンをクリックしてHTTPアナライザを起動し、各メソッドをテストします。
ソース: WADLのソースを表示します。
JDeveloperでは、「RESTfulプロキシ・クライアントの作成」ウィザードを使用してRESTful Webサービスにアクセスするためのクライアントおよびプロキシ・クラスを作成することにより、アプリケーションでのRESTful Webサービスの使用が容易になります。このウィザードは、RESTful Webサービスを検索または作成するときに起動できます。または直接ウィザードを起動して、RESTful WebサービスのURLを入力したり、「Webサービスの検索」ウィザードを使用してUDDIレジストリ内のRESTful Webサービスを検索することもできます。
「デプロイメント・プラットフォームの選択方法」の説明に従って、「RESTfulプロキシ・クライアントの作成」ウィザードを使用してRESTful Webサービス・クライアントを作成する場合、デプロイメント・プラットフォームの選択が求められ、Jersey 1.18 (JAX-RS 1.1)またはJersey 2.5 (JAX-RS 2.0 RI)を選択できます。
Jersey JAX-RSライブラリは、プロジェクトに自動的に追加されます。アプリケーションで必要であれば、製品にバンドルされているJAX-RS Jersey JacksonライブラリまたはJAX-RS Jersey Jettisonライブラリをプロジェクトに追加できます。(The Jersey JAX-RS Romeライブラリは製品にバンドルされていません。)プロジェクトに追加できるライブラリの詳細は、「ライブラリの管理方法」を参照してください。
Jersey 2.5.1 (JAX-RS 2.0 RI)共有ライブラリは、統合WebLogic Serverに自動デプロイされます。
次の点に注意してください。
Jersey 1.18 (JAX-RS 1.1 RI)の場合、RESTful Webサービス・クライアントAPIは、具体的にはJersey JAX-RS RIによって提供されます。つまり、これらはJAX-RS標準の一部ではありません。WebLogic ServerのJersey 1.18 (JAX-RS 1.1RI)クライアントAPIのサポートは非推奨になりましたが、下位互換性のためにサポートが維持されています。以前のJersey/JAX-RSリリースとの互換性の詳細は、「以前のJersey/JAX-RSリリースとの互換性」を参照してください。
Jersey 2.5.1 (JAX-RS 2.0 RI)の場合、標準クライアントAPIがサポートされます。
Jersey 1.18 (JAX-RS 1.1 RI)を使用して構築されたRESTful WebサービスおよびクライアントにOWSMポリシーをアタッチできます。Jersey 2.5.1 (JAX-RS 2.0 RI)を使用して構築されたRESTful Webサービスおよびクライアントも、OWSMポリシーを使用して保護されます。Jersey 2.5.1 (JAX-RS 2.0 RI)を使用して作成されたRESTful Webサービスとクライアントを保護する場合の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』の「RESTful Webサービスおよびクライアントの保護」を参照してください。
次の各項では、RESTful Webサービスを開発する方法について説明します。
詳細の参照先は、次のとおりです。
RESTful Webサービス・クライアントの開発の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のRESTful Webサービスおよびクライアントの開発に関する項を参照してください。
RESTful Webサービス・クライアントの保護の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のRESTful Webサービスの保護に関する項を参照してください。
RESTful Webサービス・クライアントの管理の詳細は、Webサービスの管理を参照してください。
この例は、前述の単純なRESTFulサービス・クライアントで定義したRESTfulサービスをコールする単純なRESTfulクライアントを示しています。具体的にはJersey 1.18 (JAX-RS 1.1 RI)によって提供されるクラスを使用しています。これらはJAX-RS標準の一部ではありません。
注意:
かわりに、com.sun.jersey.api.client.Client
クラスのインスタンスを作成することもできます。ただし、Oracle Web Services Manager (OWSM)ポリシーを使用したRESTfulクライアントの保護などのOracle拡張機能は使用できません。詳細は、「RESTful Webサービス・クライアントへのポリシーのアタッチ」を参照してください。
Jersey 2.5.1 (JAX-RS 2.0 RI)の場合、標準クライアントAPIがサポートされます。
package samples.helloworld.client; import weblogic.jaxrs.api.client.Client; import com.sun.jersey.api.client.WebResource; public class helloWorldClient { public helloWorldClient() { super(); } public static void main(String[] args) { Client c = Client.create(); WebResource resource = c.resource( "http://localhost:7101/RESTfulService/jersey/helloWorld"); String response = resource.get(String.class); } }
WebLogic Serverでは、WebSocketプロトコル(RFC 6455)がサポートされており、2つのピア間でTCPプロトコル経由の全二重通信を行うことができます。
WebLogic ServerにはWebSocketプロトコルとそれに付随するAPIが実装されているので、クライアントと双方向通信するアプリケーションを開発およびデプロイすることができます。WebSocket接続を開始するために、クライアントはハンドシェイク・リクエストをサーバーに送信します。ハンドシェイク・リクエストが検証に合格し、サーバーがリクエストを受け入れると、接続が確立されます。WebSocket接続が作成されると、ブラウザ・クライアントは、WebLogic Serverインスタンスにデータを送信し、同時にそのサーバー・インスタンスからデータを受け取ることができます。
いかなる種類のクライアント/サーバー通信にもWebSocketプロトコルを使用できますが、World Wide Web Consortium (W3C) JavaScript WebSocket APIを使用するWebページを実行するブラウザとの通信には、この実装が最もよく使用されます。HTML5仕様(http://www.w3.org/TR/html5/
)の一部として、WebSocketプロトコルは、ほとんどのブラウザでサポートされます。WebSocketプロトコルのWebLogic Server実装では、Javaクライアントもサポートされます。
WebSocketリファレンス実装RIのJSR 356 Java APIはWebLogic Serverでサポートされており、これを使用すると、WebアプリケーションでのWebSocketエンドポイントの作成、構成およびデプロイが可能です。APIには次のパッケージが含まれています。
javax.websocket.server
: サーバーのエンドポイントを作成および構成します。
javax.websocket
: クライアントを作成し、クライアントとサーバーのエンドポイントを構成します。
WebSocketプロトコルと、WebLogic Serverに対するそのサポートの詳細は、次を参照してください。
『Oracle WebLogic Serverアプリケーションの開発』の「WebLogic ServerでのWebSocketプロトコルの使用」
Tyrusプロジェクト: https://tyrus.java.net/
JSR 356仕様: https://java.net/projects/websocket-spec
WebSocketプロトコル(RFC 6455): http://tools.ietf.org/html/rfc6455
次の項では、JDeveloperを使用したWebSocketの構成について詳しく説明します。
Java API for WebSocket (JSR-356)では、WebアプリケーションにWebSocketエンドポイントを作成、構成およびデプロイできます。また、JSR-356で指定されているWebSocketクライアントAPIを使用すると、任意のJavaアプリケーションからリモートのWebSocketエンドポイントにアクセスできます。
WebSocketエンドポイントの作成およびデプロイのプロセスは次のようになります。詳細は、『Oracle WebLogic Serverアプリケーションの開発』の「WebLogic ServerでのWebSocketプロトコルの使用」を参照してください。:
WebSocket APIを使用したWebSocketサービスおよびクライアント・アプリケーションの作成と構成の詳細および例は、『Oracle WebLogic Serverアプリケーションの開発』のWebLogic ServerでのWebSocketプロトコルの使用に関する項を参照してください。
OWSMおよびOracle WebLogic Webサービス・ポリシーについて、およびそれらをWebサービスと一緒に使用する方法について説明します。
次の各項では、Webサービスおよびクライアントにポリシーをアタッチする方法と、カスタムWebサービス・ポリシーを使用するようにポリシー・リポジトリを構成する方法について説明します。
OWSMポリシーは、ポート・レベルでJAX-WS Webサービスにアタッチでき、サーブレット・レベルでRESTful Webサービスにアタッチできます。
注意:
Jersey 1.x JAX-RS RIを使用して構築されたRESTful WebサービスおよびクライアントにOWSMポリシーをアタッチできます。Jersey 2.5.1 (JAX-RS 2.0 RI)を使用して構築されたRESTful Webサービスおよびクライアントは、OWSMポリシーを使用して保護されます。「RESTful Webサービスとクライアントの保護」を参照してください。
JDeveloperは、「プリファレンス」ダイアログの「WSポリシー」ページにあるデフォルトの場所で設定されたOWSMポリシー・ストアを使用するよう事前構成されています。この場所には、次のいずれかの方法でアクセスできます。
「ツール」→「プリファレンス」→「WSポリシー・ストア」
「アプリケーション」→「アプリケーションのプロパティ」→「WSポリシー・ストア」
自社のカスタムOWSMポリシーを使用するために別のポリシー・ストアの場所を指定できます。異なるOWSMポリシー・ストアの使用方法に関する項および『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』を参照してください。
注意:
アタッチされたOWSMポリシーが実施されるようにするには、Webサービス・プロバイダをWSDLファイルでデプロイする必要があります。WSDLを使用してWebサービス・プロバイダをデプロイするには、@WebServiceProvider
注釈にwsdlLocation
要素を使用します。
Oracle WebLogic Webサービス・ポリシーは、ポート・レベルまたは操作レベルでJAX-WS Webサービスにアタッチできます。Oracle WebLogic Webサービス・ポリシーを使用すると、ポリシーの使用方向を指定できます。たとえば、インバウンド(リクエスト)メッセージまたはアウトバウンド(レスポンス)メッセージ、あるいはその両方に適用できます。
自社のOracle WebLogicのカスタムWebサービス・ポリシーを使用するようJDeveloperを構成できます。「カスタムWebサービス・ポリシーの使用方法」を参照してください。
Jersey 2. x (JAX-RS 2.0 RI) Webサービスは、Oracle Web Services Manager (OWSM)セキュリティ・ポリシーを使用して保護されます。『Oracle WebLogic ServerのWebLogic Webサービスの保護』を参照してください。
この項では、JDeveloperで作成されたJAX-WS Webサービスおよびクライアントにポリシーをアタッチする方法について説明します。次のタイプのポリシーを使用できます。
Oracle Web Service Manager (OWSM)ポリシー: セキュリティ・ポリシーのみをアタッチできます。
Oracle WebLogic Webサービス・ポリシー
2つのタイプのポリシーを同じWebサービスに混在させることはできないため、計画段階でどちらを使用するかを決定する必要があります。1つのタイプのポリシーをWebサービスに追加したら、現在アタッチされているポリシーを削除せずに他のタイプに切り替えることはできません。たとえば、OWSMポリシーを構成した後、Oracle WebLogic Webサービス・ポリシーを使用する必要がある場合、Oracle WebLogic Webサービス・ポリシーをアタッチする前にOWSMポリシーを削除する必要があります。
次の項では、Webサービスとともにポリシーを使用する方法について説明します。
作業を始める前に、次のようにします。
ポリシーを使用するために実行する必要のあるすべてのタスクについて、詳細な検討はこのガイドの範囲外ですが、一般的に実行が必要なステップは、次のとおりです。
JDeveloperでは、Oracle Web Service Manager (OWSM)ポリシーまたはOracle WebLogic Webサービス・ポリシーをWebサービスにアタッチできます。
Webサービスにポリシーをアタッチした後、ポリシーを構成する必要があります。詳細は、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』のWebサービスの保護に関する項を参照してください。
次の項で説明するように、Webサービスにポリシーをアタッチできます。
新規Webサービスの作成時にWebサービス・ウィザードでアタッチするポリシーを設定するか、すでに存在するWebサービスの更新時にWebサービス・エディタでアタッチするポリシーを設定することで、Webサービスにポリシーをアタッチできます。
「Java Webサービスの作成」ウィザードを使用したWebサービスの作成の詳細は、「Java Webサービスの作成」を参照してください。
Webサービス・ウィザードでポリシーをアタッチする手順は次のとおりです。
「Java Webサービスの作成」ウィザードまたはWebサービス・エディタで、「ポリシーの構成」ページにナビゲートします。詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。
OWSMポリシーをアタッチする場合、次の方法により、ポリシーおよびそのアサーションに関する詳細を表示できます。
「説明の表示」チェック・ボックスをクリックし、各ポリシーの説明を表示します。
「表示」をクリックし、ポリシー・ファイル内のポリシー・アサーションをレビューします。
「選択されたポリシーの表示」チェック・ボックスをクリックし、現在選択されているポリシーのみを表示します。
Javaクラスでポリシー注釈を直接追加して、Webサービスにポリシーをアタッチできます。コード・インサイト機能が役に立ちます(「Webサービスのコード・インサイトの使用方法」を参照)。
Javaクラスでポリシー注釈をアタッチするには、次のようにします。
ソース・エディタでWebサービス・クラスを開きます。
コード・インサイトを使用すると役に立ちます。
注釈(@SecurityPolicy
など)の入力を開始します。中断するか[Alt]キーを押しながら[Enter]キーを押すと、ポップアップが表示され、文を正しく完成するためのエントリを選択できます。
OWSMポリシーをアタッチするための注釈
Javaクラスでweblogic.wsee.jws.jaxws.owsm.SecurityPolicy
注釈を使用して単一のポリシーをアタッチできます。次はその例です。
@SecurityPolicy(uri = "oracle/wss11_message_protection_service_policy")
複数の@SecurityPolicy
要素が含まれるweblogic.wsee.jws.jaxws.owsm.SecurityPolicies
注釈を使用して、複数のポリシーをコンポジットとしてアタッチできます。次はその例です。
@SecurityPolicies( { @SecurityPolicy(uri = "oracle/wss_http_token_service_policy"), @SecurityPolicy(uri = "oracle/wss_oam_token_service_policy") } )
注意:
有効なポリシーのリストを表示するには、uri=""と入力して、空の引用符の中にカーソルを置き、[Ctrl]キーと[Alt]キーを押しながら[Space]キーを押します。
ポリシー注釈の使用の詳細は、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』の注釈を使用したJava EE Webサービスおよびクライアントへのポリシーのアタッチに関する項を参照してください。
WebLogic Webサービス・ポリシーをアタッチするための注釈
Javaクラスでweblogic.jws.Policy
注釈を使用して単一のポリシーをアタッチできます。次はその例です。
@Policy(uri = "policy:Wssp1.2-2007-Https-UsernameToken-Plain.xml")
複数の@Policy
要素が含まれるweblogic.jws.Policies
注釈を使用して、複数のポリシーをコンポジットとしてアタッチできます。次はその例です。
@Policies( { @Policy(uri = "policy:Wssp1.2-2007-Https-BasicAuth.xml"), @Policy(uri = "policy:Wssp1.2-2007-Https-UsernameToken-Plain.xml") } )
注意:
有効なポリシーのリストを表示するには、uri=""引数を入力して、空の引用符の中にカーソルを置き、[Ctrl]キーと[Alt]キーを押しながら[Space]キーを押します。
ポリシー注釈の詳細は、『Oracle WebLogic Server WebLogic Webサービスの保護』の@Policy注釈と@Policies注釈を使用したJWSファイルの更新に関する項を参照してください。
「プロパティ」ウィンドウを使用して、Webサービスにポリシーをアタッチできます。
「プロパティ」ウィンドウでのポリシーをアタッチする手順は次のとおりです。
ソース・エディタでWebサービス・クラスを開いた状態で、「ウィンドウ」→「プロパティ」を選択して「プロパティ」ウィンドウを開きます。
詳細を参照するには、「プロパティ」ウィンドウ内で[F1]を押すか「ヘルプ」をクリックします。
クラスのpublic class
行または@WebService
行にカーソルがある状態で、「ポリシー」ノードに移動します。このノードでOWSMポリシーまたはOracle WebLogic Webサービス・ポリシーの使用を選択できます。
「OWSMポリシーで保護」または「WLSポリシーで保護」を選択します。
「プロパティ」ウィンドウがリフレッシュされ、選択したポリシー・タイプ(OWSMまたはWLS)に対して単一のポリシーまたは複数のポリシーを選択するオプションが表示されます。
注意:
同じWebサービスで両方のタイプのポリシーを使用することはできません。間違ったタイプを選択した場合は、JAX-WSクラスからポリシー文が含まれる行を削除し、再度選択できるようにしてください。
「単一ポリシー」リストから単一のポリシーを選択するか、「プロパティの編集: 複数ポリシー」ダイアログで複数のポリシーをアタッチする場合は「...」をクリックします。
「プロパティの編集: 複数ポリシー」ダイアログを使用して複数のOWSMポリシー・ファイルをアタッチする場合、「表示」をクリックしてポリシー・ファイル内のポリシー・アサーションをレビューします。
JDeveloperでは、OWSMポリシーをJAX-WS Webサービス・クライアントにアタッチできます。
Webサービス・クライアントにOWSMポリシーをアタッチした後、ポリシーを構成する必要があります。詳細は、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』のWebサービスの保護に関する項を参照してください。
注意:
WebLogic Webサービス・ポリシーを使用するWebサービスを起動するためのクライアント・アプリケーションの更新の詳細は、『Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ保護付きWebサービスを起動するためのクライアント・アプリケーションの更新に関する項を参照してください。
Webサービス・クライアントにOWSMポリシーをアタッチする方法は、次のとおりです。
新規Webサービス・クライアントの作成時に「Webサービス・クライアントおよびプロキシ」ウィザードでアタッチするポリシーを設定するか、すでに存在するWebサービス・クライアントの更新時にWebサービス・クライアント・エディタでアタッチするポリシーを設定することで、Webサービス・クライアントにポリシーをアタッチできます。
「Webサービス・クライアントおよびプロキシの作成」ウィザードを使用したWebサービスの作成の詳細は、「クライアントおよびプロキシ・クラスの作成」を参照してください。
Webサービス・クライアントでOWSMポリシーをアタッチする手順は次のとおりです。
「Webサービス・クライアントおよびプロキシの作成」ウィザードまたはクライアント・エディタで、「クライアント・ポリシー構成」ページに移動します。詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。
OWSMポリシーをアタッチする場合、次の方法により、ポリシーおよびそのアサーションに関する詳細を表示できます。
「説明の表示」チェック・ボックスをクリックし、各ポリシーの説明を表示します。
「表示」をクリックし、ポリシー・ファイル内のポリシー・アサーションをレビューします。
「選択されたポリシーの表示」チェック・ボックスをクリックし、現在選択されているポリシーのみを表示します。
「選択用に互換性のあるクライアント・ポリシーのみ表示。」チェック・ボックスをクリックし、関連するWebサービスと互換性のあるポリシーを表示します。
インジェクション・ターゲット(@WebServiceRef
)にポリシー注釈を直接追加して、Webサービスにポリシーをアタッチできます。次のいずれかの注釈を使用します。
@weblogic.wsee.jws.jaxws.owsm.SecurityPolicy
注釈(単一のポリシーをアタッチする場合)
@weblogic.wsee.jws.jaxws.owsm.SecurityPolicies
注釈(複数のポリシーをアタッチする場合)
注釈を使用してOWSMセキュリティ・ポリシーをWebサービス・クライアントにアタッチする例を次に示します。
package wsrm_jaxws.example; import java.xml.ws.WebService; import java.xml.ws.WebServiceRef; import weblogic.wsee.jws.jaxws.owsm.SecurityPolicy; import weblogic.wsee.jws.jaxws.owsm.SecurityPolicies; import oracle.wsm.security.util.SecurityConstants.ClientConstants; ... @WebServiceRef(name="MyServiceRef") @SecurityPolicies({ @SecurityPolicy(uri="policy:oracle/wss10_message_protection_client_policy"), @SecurityPolicy(uri="policy:oracle/authorization_policy") }) Service service; ...
詳細は、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』の注釈を使用したJava EE Webサービスおよびクライアントへのポリシーのアタッチに関する項を参照してください。
注意:
機能クラスを使用したOWSMポリシーのアタッチは、注釈を使用したアタッチよりも優先されます(「RequestContextを使用したOWSMポリシー構成プロパティのオーバーライド」を参照)。
注釈を使用してOWSMポリシーをアタッチする手順は次のとおりです。
ソース・エディタでWebサービス・クライアントを開きます。
インジェクション・ターゲット行にカーソルを置いてマウスを右クリックし、ポップアップ・メニューから「JEEクライアント・ポリシー注釈の追加」を選択します。
「クライアント・ポリシー構成」ウィンドウが開き、OWSMセキュリティ・ポリシーのリストが表示されます。
クライアントにアタッチするセキュリティ・ポリシーを選択します。
OWSMポリシーをアタッチする場合、次の方法により、ポリシーおよびそのアサーションに関する詳細を表示できます。
「説明の表示」チェック・ボックスをクリックし、各ポリシーの説明を表示します。
「表示」をクリックし、ポリシー・ファイル内のポリシー・アサーションをレビューします。
「選択されたポリシーの表示」チェック・ボックスをクリックし、現在選択されているポリシーのみを表示します。
「選択用に互換性のあるクライアント・ポリシーのみ表示。」チェック・ボックスをクリックし、関連するWebサービスと互換性のあるポリシーを表示します。
「OK」をクリックします。
該当する注釈によってクライアント・コードが更新されます。
次の機能クラスのいずれかをWebサービス・クライアントに手動で追加して、Webサービスにポリシーをアタッチできます。
weblogic.wsee.jws.jaxws.owsm.SecurityPolicyFeature
クラス(単一のポリシーをアタッチする場合)
weblogic.wsee.jws.jaxws.owsm.SecurityPoliciesFeature
(複数のポリシーをアタッチする場合)
次の例は、SecurityPolicyFeature
クラスを使用してWebサービス・クライアントに1つのOWSMポリシーをアタッチする方法を示しています。
... JAXWSService jaxWsService = new JAXWSService (); weblogic.wsee.jws.jaxws.owsm.SecurityPolicyFeature securityFeature = new weblogic.wsee.jws.jaxws.owsm.SecurityPolicyFeature { new weblogic.wsee.jws.jaxws.owsm.SecurityPolicyFeature("policy:oracle/wss_username_token__over_ssl_client_policy") }; JAXWSServicePort port = jaxWsService.getJaxWsServicePort(securityFeature); ...
次の例は、SecurityPoliciesFeature
クラスを使用してWebサービス・クライアントに複数のOWSMポリシーをアタッチする方法を示しています。
... weblogic.wsee.jws.jaxws.owsm.SecurityPoliciesFeature securityFeature = new weblogic.wsee.jws.jaxws.owsm.SecurityPoliciesFeature (new String[] { "policy:oracle/wss_username_token_over_ssl_client_policy", "policy:oracle/authorization_policy"});
詳細は、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』の機能クラスを使用したJava EE Webサービス・クライアントへのポリシーのアタッチに関する項を参照してください。
注意:
機能クラスを使用したOWSMポリシーのアタッチは、注釈を使用したアタッチよりも優先されます(「注釈を使用したOWSMポリシー構成プロパティのオーバーライド」を参照)。
JDeveloperでは、JAX-WS Webサービス・クライアントにアタッチされたポリシーの構成プロパティをオーバーライドできます。
Webサービス・クライアントにOWSMポリシーをアタッチする方法は、次のとおりです。
「Webサービス・クライアントおよびプロキシ」ウィザードを使用してWebサービス・クライアントにポリシーをアタッチするときに、「クライアント・ポリシー構成」ページで、「プロパティのオーバーライド...」を選択して、「プロパティのオーバーライド」ダイアログを表示します。選択したポリシーの構成プロパティが表示されます。必要に応じて値を設定し、「OK」をクリックします。
「Webサービス・クライアントおよびプロキシの作成」ウィザードまたはクライアント・エディタで、「クライアント・ポリシー構成」ページに移動し、「プロパティのオーバーライド...」を選択します。「オーバーライド・プロパティの設定」ダイアログが表示されます。このダイアログで、選択したポリシーの構成プロパティを編集できます。詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。
「Webサービス・クライアントおよびプロキシの作成」ウィザードを使用したWebサービスの作成の詳細は、「クライアントおよびプロキシ・クラスの作成」を参照してください。
@SecurityPolicy
注釈を使用してOWSMセキュリティ・ポリシーをアタッチする場合、@Property
注釈を使用して設計時にOWSMセキュリティ・ポリシーのデフォルト構成プロパティをプログラムによってオーバーライドできます。詳細は、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』の注釈を使用したJava EE Webサービスおよびクライアントへのポリシーのアタッチに関する項を参照してください。
次の例は、注釈を使用してWebサービス・クライアントにポリシーをアタッチする方法を示しています。この例では、@Property
注釈は、クライアント・ポリシーをアタッチする際のキーストア受信者の別名の構成プロパティのオーバーライドに使用されます。
package wsrm_jaxws.example; import java.xml.ws.WebService; import java.xml.ws.WebServiceRef; import weblogic.wsee.jws.jaxws.owsm.SecurityPolicy; import weblogic.wsee.jws.jaxws.owsm.SecurityPolicies; import oracle.wsm.security.util.SecurityConstants.ClientConstants; ... @WebServiceRef(name="MyServiceRef") @SecurityPolicies({ @SecurityPolicy(uri="policy:oracle/wss10_message_protection_client_policy", properties = { @Property(name="ClientConstants.WSS_KEYSTORE_LOCATION", value="c:/mykeystore.jks") } ), @SecurityPolicy(uri="policy:oracle/authorization_policy") }) Service service; ...
次の機能クラスのいずれかをWebサービス・クライアントに手動で追加して、Webサービスにポリシーをアタッチできます。
weblogic.wsee.jws.jaxws.owsm.SecurityPolicyFeature
クラス(単一のポリシーをアタッチする場合)
weblogic.wsee.jws.jaxws.owsm.SecurityPoliciesFeature
(複数のポリシーをアタッチする場合)
詳細は、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』の設計時のクライアント・ポリシー構成プロパティのオーバーライドに関する項を参照してください。
WebLogic Webサービス・ポリシーを通知するWSDLからWebサービス・クライアントを作成または編集する場合、Webサービスを呼び出すための資格証明を構成できます。
WebLogic Webサービス・ポリシーを使用して保護されたWebサービスを起動する手順は次のとおりです。
クライアント・クラスが更新され、クライアント資格証明を設定するためのメソッドが組み込まれます。追加された後、資格証明値は必要に応じて変更できます。
次の例は、生成されてクライアント・クラスに組み込まれるコードを示しています。
@Generated("Oracle JDeveloper") public static void setPortCredentialProviderList( Map<String, Object> requestContext) throws Exception { // Values used from credential preference: TestCredential String username = "weblogic"; String password = "weblogic1"; String clientKeyStore = "/C:/temp/ClientIdentity.jks"; String clientKeyStorePassword = "ClientKey"; String clientKeyAlias = "identity"; String clientKeyPassword = "ClientKey"; String serverKeyStore = "/C:/temp/ServerIdentity.jks"; String serverKeyStorePassword = "ServerKey"; String serverKeyAlias = "identity"; List<CredentialProvider> credList = new ArrayList<CredentialProvider>(); // Add the necessary credential providers to the list credList.add(getUNTCredentialProvider(username, password)); credList.add(getBSTCredentialProvider(clientKeyStore, clientKeyStorePassword, clientKeyAlias, clientKeyPassword, serverKeyStore, serverKeyStorePassword, serverKeyAlias, requestContext)); credList.add(getSAMLTrustCredentialProvider()); requestContext.put(WSSecurityContext.CREDENTIAL_PROVIDER_LIST, credList); }
WebLogic Webサービス・ポリシーを使用して保護されたWebサービスを呼び出すようWebサービス・クライアントをプログラミングする方法の詳細は、『Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ保護付きWebサービスを起動するためのクライアント・アプリケーションの更新に関する項を参照してください。
次のいずれかの方法を使用して、ポリシーを編集したりWebサービスからポリシーを完全に削除できます。
Webサービス・エディタ(「Webサービス・エディタを使用したポリシーの編集または削除」を参照)。
ソース・エディタ(「Javaクラスでの注釈を使用したポリシーの編集または削除」を参照)。
「プロパティ」ウィンドウ(「「プロパティ」ウィンドウを使用したポリシーの編集または削除」を参照)。
Webサービス・エディタを使用してポリシーを編集または削除できます。
Webサービス・エディタを使用してポリシーを編集または削除する手順は次のとおりです。
「アプリケーション」ウィンドウでWebサービスを右クリックして、「Webサービス・プロパティ」を選択します。
詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。
「ポリシーの構成」ページに移動します。ここで、選択したポリシー・タイプのポリシーを変更したり、別のタイプのポリシーを使用するよう変更(たとえば、OWSMポリシーからOracle WebLogic Webサービス・ポリシーに変更)したり、「ポリシーなし」を選択できます。Webサービスは、エディタのこのページを終了するときに変更されます。
ソース・エディタでJavaクラスの注釈を使用してポリシーを編集または削除できます。
Javaクラスの注釈を使用してポリシーを編集または削除するには、ソース・エディタでWebサービス・クラスを開きます。ここでは、コード・インサイト機能が役立ちます。詳細は、「Webサービスのコード・インサイトの使用方法」を参照してください。必要に応じて注釈を編集または削除します。
「プロパティ」ウィンドウを使用して、ポリシーを編集または削除できます。
「プロパティ」ウィンドウを使用してポリシーを編集または削除する手順は次のとおりです。
ソース・エディタでJAX-WS Webサービス・クラスを開いた状態で、「ウィンドウ」→「プロパティ」を選択して「プロパティ」ウィンドウを開きます。
詳細を参照するには、「プロパティ」ウィンドウ内で[F1]を押すか「ヘルプ」をクリックします。
クラスのpublic class
行または@WebService
行にカーソルがある状態で、「ポリシー」ノードに移動します。
複数のポリシーを編集するには、「...」をクリックし、「プロパティの編集: 複数ポリシー」ダイアログを開きます。
単一のポリシーを編集するには、「単一ポリシー」リストから名前を削除し、別の名前を選択します。
ポリシーのタイプを他のタイプに変更するには、すべてのポリシーを削除して最初から再度実行できるようにします。
この項では、JDeveloperで作成されたRESTful Webサービスおよびクライアントにポリシーをアタッチする方法について説明します。
RESTful Webサービスを保護するために、RESTful WebサービスでサポートされているOWSMポリシーに関する項の説明に従って、いずれかのOWSM事前定義済セキュリティ・ポリシーをアタッチできます。
詳細の参照先は、次のとおりです。
RESTful Webサービスの保護の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のOWSMポリシーを使用したRESTful Webサービスおよびクライアントの保護に関する項を参照してください。
サポートされているセキュリティ・ポリシーの詳細は、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』の事前定義済のポリシーに関する項を参照してください。
セキュリティ・ポリシーの構成の詳細は、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』のWebサービスの保護に関する項を参照してください。
RESTful Webサービスにポリシーをアタッチする手順は次のとおりです。
RESTful Webサービスを保護するために、いずれかのOWSM事前定義済セキュリティ・ポリシーをアタッチできます。OWSM事前定義済セキュリティ・ポリシーは、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』のRESTful WebサービスでサポートされているOWSMポリシーに関する項に記載されています。
次の各項で説明されているいずれかの方法でRESTfulクライアントにOWSMポリシーをアタッチできます。
詳細は、次を参照してください。
RESTful Webサービスの保護の詳細は、『Oracle WebLogic Server RESTful Webサービスの開発と保護』のOWSMポリシーを使用したRESTful Webサービスおよびクライアントの保護に関する項を参照してください。
サポートされているセキュリティ・ポリシーの詳細は、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』の事前定義済のポリシーに関する項を参照してください。
セキュリティ・ポリシーの構成の詳細は、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』のWebサービスの保護に関する項を参照してください。
新規RESTfulクライアントの作成時に「RESTfulクライアントおよびプロキシ」ウィザードでアタッチするポリシーを設定して、Webサービス・クライアントにポリシーをアタッチできます。
「RESTfulプロキシ・クライアントの作成」ウィザードを使用したWebサービスの作成の詳細は、「RESTful Webサービス・クライアントの作成」を参照してください。
「RESTfulクライアントおよびプロキシ」ウィザードでRESTfulクライアントにOWSMポリシーをアタッチする手順は次のとおりです。
「RESTfulプロキシ・クライアントの作成」ウィザードで、「クライアント・ポリシー構成」ページに移動します。詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。
OWSMポリシーをアタッチする場合、次の方法により、ポリシーおよびそのアサーションに関する詳細を表示できます。
「説明の表示」チェック・ボックスをクリックし、各ポリシーの説明を表示します。
「表示」をクリックし、ポリシー・ファイル内のポリシー・アサーションをレビューします。
「選択されたポリシーの表示」チェック・ボックスをクリックし、現在選択されているポリシーのみを表示します。
「選択用に互換性のあるクライアント・ポリシーのみ表示。」チェック・ボックスをクリックし、関連するWebサービスと互換性のあるポリシーを表示します。
「クライアント・ポリシー構成」ダイアログでアタッチするポリシーを設定して、Webサービス・クライアントにポリシーをアタッチできます。
「クライアント・ポリシー構成」ダイアログでRESTfulクライアントにOWSMポリシーをアタッチする手順は次のとおりです。
「アプリケーション」ウィンドウで、「アプリケーション・ソース」フォルダにあるRESTful Webサービス・クライアント・ファイルを右クリックします。
「セキュアRESTfulクライアント」を選択します。
「クライアント・ポリシー構成」ダイアログが表示されます。
リストからセキュリティ・ポリシーを選択します。
アタッチできるのは、1つの認証ポリシーと1つの認可ポリシーのみです。
「OK」をクリックします。
クライアントでcustomizeClientConfiguration
メソッドが更新され、ポリシー・アタッチメントが含められます。
詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。
OWSMポリシーをアタッチする場合、次の方法により、ポリシーおよびそのアサーションに関する詳細を表示できます。
「説明の表示」チェック・ボックスをクリックし、各ポリシーの説明を表示します。
「表示」をクリックし、ポリシー・ファイル内のポリシー・アサーションをレビューします。
「選択されたポリシーの表示」チェック・ボックスをクリックし、現在選択されているポリシーのみを表示します。
「選択用に互換性のあるクライアント・ポリシーのみ表示。」チェック・ボックスをクリックし、関連するWebサービスと互換性のあるポリシーを表示します。
OWSMセキュリティ・ポリシーは、プログラムによってのみRESTful Webサービス・クライアントにアタッチできます(『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』の機能クラスを使用したRESTful Webサービス・クライアントへのポリシーのアタッチに関する項を参照)。
次の例に示すように、com.sun.jersey.api.client.config.ClientConfig
を使用して、OWSMポリシーをアタッチして構成プロパティをオーバーライドできます。次のコードでは、oracle/wss_http_token_client_policy
ポリシーをクライアントにアタッチし、CO_CSF_KEY
構成プロパティを値weblogic-csf-key
でオーバーライドします。
package samples.helloworld.client; import weblogic.jaxrs.api.client.Client; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; import oracle.wsm.metadata.feature.PolicyReferenceFeature; import oracle.wsm.metadata.feature.AbstractPolicyFeature; import oracle.wsm.metadata.feature.PolicySetFeature; import oracle.wsm.metadata.feature.PropertyFeature; ... public static void main(String[] args) { ClientConfig cc = new DefaultClientConfig(); cc.getProperties().put(AbstractPolicyFeature.ABSTRACT_POLICY_FEATURE, new PolicySetFeature( new PolicyReferenceFeature(( "oracle/wss_http_token_client_policy"), new PropertyFeature(SecurityConstants.ConfigOverride.CO_CSF_KEY, "weblogic-csf-key")))); Client c = Client.create(cc); ...
JDeveloperでは、RESTful Webサービス・クライアントにアタッチされたポリシーの構成プロパティをオーバーライドできます。
RESTful Webサービス・クライアントのOWSMポリシー構成プロパティを次の方法でオーバーライドできます。
「RESTfulクライアントおよびプロキシ」ウィザードまたはクライアント・エディタを使用してRESTful Webサービス・クライアントにポリシーをアタッチするときに、「クライアント・ポリシー構成」ページに移動して、アタッチするポリシーを1つまたは複数選択し、「プロパティのオーバーライド...」をクリックします。「オーバーライド・プロパティの設定」ダイアログが表示されます。このダイアログで、選択したポリシーの構成プロパティを編集できます。詳細を参照するには、ダイアログ内で[F1]を押すか「ヘルプ」をクリックします。必要に応じて値を設定し、「OK」をクリックします。
「RESTfulプロキシ・クライアントの作成」ウィザードを使用したRESTful Webサービス・クライアントの作成の詳細は、「RESTful Webサービス・クライアントの作成」を参照してください。
RESTful Webサービス・クライアントの作成時に、OWSMセキュリティ・ポリシーをプログラムによってアタッチする場合は、oracle.wsm.metadata.feature.PropertyFeature
クラスを使用してOWSMセキュリティ・ポリシーのデフォルト構成プロパティをオーバーライドできます。詳細は、『Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理』の機能クラスを使用したRESTful Webサービス・クライアントへのポリシーのアタッチに関する項を参照してください。
次の項で説明するように、RESTful Webサービスおよびクライアントのポリシーを編集したり完全に削除したりできます。
RESTful Webサービスのポリシーを編集または削除する手順は次のとおりです。
「アプリケーション」ウィンドウで、「Webコンテンツ」→WEB-INFフォルダにあるweb.xmlファイルを右クリックします。
「RESTfulアプリケーションの保護」を選択します。
「リストからのポリシーの選択」ダイアログが表示されます。
リストからセキュリティ・ポリシーを選択します。
アタッチできるのは、1つの認証ポリシーと1つの認可ポリシーのみです。
「OK」をクリックします。
セキュリティ・ポリシー構成がwsm-assembly.xml
デプロイメント・ディスクリプタ・ファイルに保存されます。wsm-assembly.xml
ファイルが存在しない場合は作成されます。
「RESTful Webサービス・クライアントへのポリシーのアタッチ」で説明されているいずれかの方法を使用して、RESTful Webサービス・クライアントのポリシーを編集または削除します。
OWSMポリシー・ストアは、JDeveloperの一部としてインストールされます。異なるポリシー・ストアを構成すると、たとえば、共有ポリシー・ストアを使用できます。ローカル・ファイル・ストアやリモート・アプリケーション・サーバーで使用可能なポリシー・ストアも使用できます。
異なるOWSMポリシー・ストアを使用する手順は次のとおりです
注意:
選択するリモート・アプリケーション・サーバーは、OWSMポリシー・マネージャを使用して構成する必要があります。OWSMポリシー・マネージャが正しく構成されていることを確認するには、URLとしてhttp://<host:<port/wsm-pm/validator
を使用します。求められたら、サーバーのユーザー名およびパスワードを入力します。OWSMポリシー・マネージャが使用可能な場合、事前定義済ポリシーのリストが説明とともに表示されます。OWSMポリシー・マネージャのトラブルシューティングの詳細は、『Webサービスの管理』のOracle OWSMの問題の診断に関する項を参照してください。
JDeveloper内でカスタム・ポリシーを使用できます。次の項で説明するように、このプロセスは、カスタムOWSMポリシーとOracle WebLogic Webサービス・ポリシーのどちらを使用するかによって異なります。
カスタムOWSMポリシーを使用するには、次のいずれかの手順を実行します。
カスタム・ポリシーを次のデフォルトのポリシー格納場所に追加します。
JDEV_USER_HOME\system12.1.2.0.x.x.x\DefaultDomain\store\gmds\owsm
設定されていない場合、JDEV_USER_HOME
のデフォルトはC:\Users\user-dir\AppData\Roaming\JDeveloper
です。
このディレクトリ内で、次のディレクトリ構造のいずれかを使用してポリシーを格納する必要があります。
事前定義済OWSMポリシー: policies/oracle/
policyname
カスタム・ユーザー・ポリシー: policies/
policyname
注意:
JDeveloperで使用するためにポリシー・ファイルをOWSMリポジトリからエクスポートする場合、このディレクトリ構造は維持されません。エクスポートされたポリシーをJDeveloper環境に追加する場合は、必ず前述の要求されるディレクトリ構造を使用して、ポリシーをzipアーカイブからJDeveloperポリシー・ストアに抽出する必要があります。そうしないと、ポリシーはJDeveloper環境で使用できなくなります。OWSMリポジトリからポリシーをエクスポートする詳細は、ポリシーのインポートとエクスポートの異なるメカニズムの理解に関する項を参照してください。
異なるポリシー・ストアを指定します。
リモート・アプリケーション・サーバーでのポリシー・ストア使用を選択する場合、Fusion Middleware ControlまたはWLSTを使用してカスタムOWSMポリシーをリモート・アプリケーション・サーバー上のMDSリポジトリにインポートできます。ポリシーのインポートとエクスポートの異なるメカニズムの理解に関する項を参照してください。
カスタム・ポリシー作成の詳細は、「カスタム・アサーションの作成」を参照してください。
Oracle WebLogicカスタムWebサービス・ポリシーを使用するには、次のいずれかのステップを実行します。
カスタム・ポリシーJARをクラスパスに配置し、WebLogic Serverのプロパティweblogic.wsee.policy.LoadFromClassPathEnabled
をtrue
に設定します。
カスタム・ポリシーJARをWEB-INF/policies
(Webアプリケーション)またはMETA-INF/policies
(EJB)に配置します。
カスタム・ポリシーXMLファイルをWEB-INF
(Webアプリケーション)またはMETA-INF
(EJB)に配置します。
ポリシーにアクセスするには、次のようにします。
@Policy
注釈を使用する場合、policy
接頭辞を追加することを確認します(policy:mypolicy.xml
など)。
Java Webサービス・エディタの「ポリシーの構成」ページで「カスタム・ポリシーの追加」ボタンをクリックし、「カスタム・ポリシー・ファイルの選択」ダイアログ・ボックスを使用してカスタム・ポリシー・ファイルを選択します。
JDeveloperには、Webサービスを作成してOracle WebLogic Serverにデプロイするときに役立つツールが用意されています。Oracle WebLogic Serverでは、WebサービスはJava EEコンテナ内で動作します。
次のことが可能です。
統合WebLogic ServerにWebサービスをデプロイします。「統合WebLogic ServerへのWebサービスのデプロイ方法」を参照してください。
Oracle WebLogic Serverまたはその他のアプリケーション・サーバーにWebサービスをデプロイします。「スタンドアロン・アプリケーション・サーバーへのWebサービスのデプロイ方法」を参照してください。
アーカイブ・ファイルにWebサービスをデプロイします。「Java JARへのデプロイ」を参照してください。
Webサービスを実行する統合WebLogic Serverとして別のWebLogic Serverドメインを定義し、そのドメインにWebサービスをデプロイします。「統合アプリケーション・サーバーでのJava EEアプリケーションの実行」を参照してください。
Webサービスをアンデプロイします。「Webサービスのアンデプロイ方法」を参照してください。
JDeveloperで生成されたWebサービスを統合WebLogic Serverにデプロイできます。詳細は、「統合アプリケーション・サーバーでのJava EEアプリケーションの実行」を参照してください。
Webサービスを統合WebLogic Serverにデプロイするには、次のようにします。
JDeveloperで生成されたWebサービスを次のいずれかのスタンドアロン・アプリケーション・サーバーにデプロイできます。
Oracle WebLogic Server
JBoss 5.x
Tomcat 6.x
WebSphere Server 7.x
Webサービスをスタンドアロン・アプリケーションにデプロイする手順は次のとおりです。
Webサービスを統合WebLogic Serverにデプロイした場合、統合サーバーが起動されるたびにサーバー自体が新規のアプリケーションおよびプロジェクトにリセットされるため、Webサービスをアンデプロイする必要はありません。
アプリケーション・サーバー接続を使用してWebサービスをサーバーにデプロイした場合は、「リソース」ウィンドウでWebサービスをアンデプロイできます。
Webサービスをアンデプロイするには、次のようにします。
application-name_project-name_ws
」を右クリックして「アンデプロイ」を選択します。Webサービスのテストおよびデバッグに役立つJDeveloperのツールについて説明します。
Developerには、Webサービスをデバッグおよびテストする方法がいくつか用意されています。
ブラウザ内で統合WebLogic ServerにデプロイされたJAX-WS Webサービスを実行し、予期した応答が得られるかどうかを確認します。「ブラウザでのWebサービスのテスト方法」を参照してください。
デバッガを使用します。デバッガでは、統合WebLogic Serverでローカルに作成したWebサービスと、Oracle WebLogic Serverでリモートに作成したWebサービスをデバッグできます。「Webサービスのデバッグ方法」を参照してください。
JUnitをインストールして使用します。「JUnitを使用したWebサービスのテスト方法」を参照してください。
Webサービス・メッセージ・ログを表示します。「アプリケーション・サーバーのWebサービス・メッセージ・ログの表示方法」を参照してください。
この項で説明した方法のほかに、HTTPアナライザを使用して、他のパケット情報の調査と同じようにHTTPを介してWebサービスのコンテンツを調査できます。詳細は、「Webサービスの監視と分析」を参照してください。
Webサービスを作成してデプロイした後、Webサービス・テスト・クライアントを使用してブラウザ内でWebサービスを実行してテストし、予期した応答が得られるかどうかを確認できます。Webサービス・テスト・クライアントを使用したWebサービスのテストの詳細は、『Webサービスの管理』のWebサービスのテストに関する項を参照してください。
デバッグ・ツールを使用すると、Webサービス・ウィザードで作成したWebサービスをデバッグできます。Webサービスのデバッグは、Javaプログラムのデバッグと似ています。そのため、サービスに対してデバッグ・モードでクライアントを実行することにより、ローカルまたはリモートでWebサービスをデバッグできます。Webサービスに対するプロキシであるクライアントにブレークポイントを設定し、サービスの機能を調べることができます。
JDeveloperでは、統合WebLogic Serverでローカルに実行されるWebサービスや、リモートでデプロイされるWebサービスをデバッグできます。
Webサービスをデバッグするときに、JDeveloperでは、コードの分析と問題領域の特定に役立つ、特定の用途向けのデバッグ・ウィンドウが数多く提供されます。デバッガ・ウィンドウを開くには、「ウィンドウ」→「デバッガ」を選択して、メニューからウィンドウを選択します。「データ」ウィンドウは、Webサービスのデバッグに特に役立ちます。詳細は、「Webサービスのデバッグでの「データ」ウィンドウの使用」を参照してください。
HTTPアナライザを使用すると、HTTPリクエスト/レスポンス・パケットを検証および監視できます。これは、JDeveloperのコードとコードの通信対象であるHTTPリソースの間のプロキシとして機能し、送受信されるHTTPトラフィックの観点からアプリケーションをデバッグする上で役に立ちます。詳細は、「HTTPアナライザを使用したWebサービスの調査方法」を参照してください。
Webサービスが統合WebLogic Serverで実行されたら、Webサービス・プロキシに対してプロキシ・クライアントを作成できます。このクライアントには、Webサービスで公開されている各メソッドに対して実行するメソッドが含まれます。また、独自のコードを追加したり、ブレークポイントを設定してWebサービスの実行状況を調べることができます。
JDeveloperで作成したWebサービスは、次のいずれかの方法を使用してローカルですぐにデバッグできます。
Webサービス・クラスにブレークポイントを挿入し、これに対してプロキシ・クライアントを実行します。これにより、サービス・クラス自体をデバッグできます。
クライアントにブレークポイントを挿入します。
Webサービスをローカル・デバッグする前に、プロキシ設定をオフにする必要があります。デバッグが完了したら、必ずプロキシ設定をオンに戻してください。
Webサービスをローカルでデバッグするには、次のようにします。
JDeveloperでは、リモートにデプロイされたWebサービスをデバッグできます。
Webサービスは、ローカル・マシン上のOracle WebLogic Serverで実行される場合、またはリモート・マシン上のサービスで実行される場合があります。いずれの場合も、サーバーに接続し、サーバーをデバッグ・モードで実行する必要があります。
Webサービスをリモートでデバッグする場合、サーバーをデバッグ・モードで起動し、サーバーにWebサービスをデプロイする必要があります。これにより、サービスに対するクライアントを作成し、クライアントにブレークポイントを設定し、クライアントをデバッグ・モードで起動できるようになります。
Webサービスをリモートでデバッグするには、次のようにします。
JDeveloperでは、コードの分析と問題領域の特定に役立つ、特定の用途向けのデバッグ・ウィンドウが数多く提供されます。「データ」ウィンドウは、Webサービスのデバッグに特に役立ちます。
「データ」ウィンドウには、現在のコンテキストのプログラムの変数に関する情報が表示されます。プログラムのデバッグ中、デフォルトでは「データ」ウィンドウにローカル変数情報が表示されます。Webサービスの場合は、「データ」ウィンドウには、Webサービスから導出された追加情報も表示されます。たとえば、プロキシ・クラスをデバッグした場合、次のメソッド・コールの戻り値が表示されます(これは完全なリストではありません)。
com.sun.xml.ws.client.RequestContext.getEndpointAddressString()
javax.xml.ws.Binding.getBindingID()
javax.xml.ws.BindingProvider.getResponseContext()
「データ」デバッガ・ウィンドウを開くには、「ウィンドウ」→「デバッガ」→「データ」を選択します。その他のデバッグ・ウィンドウへのアクセスおよび使用の詳細は、「デバッガ・ウィンドウの使用方法」を参照してください。
デバッグ中、フィルタを使用して、「オブジェクト設定」ダイアログを介して「データ」ウィンドウでオブジェクトを開いたときに表示されるフィールドの数を減らすことができます。フィールド数を減らすことにより、デバッグの対象範囲が絞られ、プログラムの問題を容易に検出して切り離すことができるようになります。「「フィルタ対象クラス」リストでフィールドの表示/非表示を切り替える方法」を参照してください。
JDeveloperでは、Webサービス対するJUnit回帰テストがサポートされています。JUnitは、JDeveloperのオプション機能として用意されているオープン・ソースのJava回帰テスト用のフレームワークです。JUnitを使用して、コードを検証するテストを記述および実行できます。JUnitの詳細は、http://www.junit.org
にあるJUnitのWebサイトを参照してください。
JUnitを使用するには、JUnit拡張機能をインストールする必要があります。JUnit拡張機能をインストールした後、テスト対象のWebサービスのJUnitテスト・クラスを作成できます。
Webサービスに対してJUnitテストを実行する手順は次のとおりです。
デフォルトでは、生成されたテストが実行されると、JUnitはWebサービス・エンドポイントをWebサービス・エンドポイント・パブリッシャに設定します。ただし、生成されたJUnitテスト・クラスからWebサービス・エンドポイント・パブリッシャを削除して、Webサービス・エンドポイントを、Webサービスが事前デプロイ済の任意のアプリケーション・サーバーに設定できます。
アプリケーション・サーバーにデプロイされたWebサービスにログ・ポリシーをアタッチしている場合、ログ・ポリシーによってSOAPメッセージがメッセージ・ログに書き込まれます。Webサービス・メッセージ・ログには、「アプリケーション・サーバー」ウィンドウを使用してアクセスできます。
アプリケーション・サーバー・ログ・ファイルは、統合サーバーとリモート・サーバーの両方の各アプリケーション・サーバー・ノードの下にある「ログ・ファイル」フォルダの配下にあります。各「ログ・ファイル」フォルダの下に、「OWSMログ」フォルダがあり、そこにWebサービス・ログ・ファイルが格納されています。
アプリケーション・サーバーにデプロイされたWebサービスのメッセージ・ログを表示する手順は次のとおりです。
Webサービスは様々な方法で分析できます(Web Services-Interoperability Organization (WS-I) Basic Profile 1.1への準拠の確認や、SOAPパケットのコンテンツの調査など)。
Oracleなどの主要企業によって設立されたWS-Iは、各種プラットフォーム、オペレーティング・システム、およびプログラミング言語間でのWebサービス技術の相互運用推進を目的としています。JDeveloperには、WebサービスがWS-I Basic Profile 1.1に準拠しているかどうかを確認することにより、そのWebサービスが相互運用性を持つかどうかをテストできるツールが提供されています。WS-Iの詳細は、「The Web Services-Interoperability Organization (WS-I)」のWebサイト(http://www.ws-i.org
)を参照してください。
ユーザーはWebサービスがWS-I規格に準拠しているかどうかを分析できます。サービスは、「アプリケーション」ウィンドウにリストされている自分が作成したサービスか、「リソース」ウィンドウにリストされているUDDIレジストリを使用して検索したWebサービスです。デプロイ済のWebサービスについても、クライアントおよびプロキシ・クラスを作成してアクセスしてHTTPアナライザでログ・ファイルを作成すれば、WS-I規格に準拠しているかどうかを分析できます。
WebサービスをWS-I Basic Profileに照らして監視したり、サービスの監視の結果得られたログ・ファイルを分析するには、WS-I準拠のアナライザをダウンロードして登録する必要があります。WS準拠のアナライザを登録するには、事前にWS-Iテスト・ツール拡張機能をインストールする必要があります。
次の各項では、Webサービスを監視および分析する方法について説明します。
Webサービスを分析するWS-I準拠のアナライザを使用するには、マシンにダウンロードした上で、JDeveloperに登録する必要があります。
WS-Iアナライザをダウンロードして登録するには、次のようにします。
Webサービスのレポートを作成して、WS-I Basic Profile 1.1標準に準拠しているかどうかを確認できます。レポート対象は、「アプリケーション」ウィンドウにリストされているWebサービスか、UDDIレジストリを使用して検索されて「リソース」ウィンドウにリストされているWebサービスです。そのためには、あらかじめ使用マシンにWS-I準拠のアナライザをダウンロードし、JDeveloperでの登録を実行しておく必要があります。
Webサービスとクライアントとの間でやり取りされるメッセージの内容を確認するWS-I Basic Profileの機能は、Webサービスに対してクライアントが実行されないかぎり使用できません。WS-Iアナライザを「アプリケーション」ウィンドウから起動した場合は、WSDLドキュメントのサービス記述のみが分析できます。
Webサービスを分析するには、次のようにします。
HTTPアナライザを使用すると、Webサービス・クライアントの実行中のログを生成できます。また、ダウンロードおよびJDeveloperでの登録が済んでいるWS-I準拠のアナライザを使用して、WebサービスがWS-I規格に準拠しているかどうかを確認することもできます。
アナライザはWebサービスのクライアントに対して実行するため、サービスの検出、説明およびメッセージがレポート対象となります。
注意:
ファイアウォール内で作業する場合は、Webサービスの実行に使用しているマシンのIPアドレスが、プロキシ・サーバー例外に含まれないようにする必要があります。
Webサービスを作成および分析するには、次のようにします。
Webサービスの分析を実行すると、問題の発生する原因が多数見つかります。その中にはJDeveloperドキュメントで説明されていないものもありますが、次の2つの問題が発生する可能性があります。
外部WebサービスのWSDLのエンドポイントに含まれているマシン名が大文字のみまたは大文字小文字混合で記述されているのに対し、JDeveloperで生成されたクライアントの_endPoint
変数のマシン名が小文字で記述されている場合に、このような現象が発生することがあります。これと類似する事例を、「統合サーバーで実行中のWebサービスの分析方法」で説明しています。
回避策としては、JDeveloperにWSDLをインポートしてナビゲータに表示し、WSDLのマシン名を小文字に編集します。これにより、クライアント(および関連するプロキシ・クラス)を生成してHTTPアナライザの実行中にそのクライアントを実行できます。
WSDLをナビゲータにインポートするには、次のようにします。
デフォルト値を使用して新規WSDLドキュメントを作成します。
ブラウザでWSDLドキュメントを開きます。ドキュメントのソースを表示して、WSDLのXMLソースをコピーします。
ここで作成したWSDLドキュメントの内容を、使用するWebサービスのWSDLドキュメントのソースで置き換えます。
WS-I準拠のアナライザは、一連の標準アサーションに対するログ・ファイル内のメッセージと相互関係があります。特に、WSDLドキュメント内のservice
要素のsoap:address
の下位要素は、wsi-log.xml
messageEntryのsenderHostAndPort
またはreceiverHostAndPort
と厳密に一致する必要があります。一致しない場合、そのメッセージのWS-I互換性は分析されません。
Webサービスを統合サーバーで実行し(Webサービスのポップアップ・メニューから「実行」を選択)、Webサービスに対して生成済クライアントを実行中にHTTPアナライザを実行してログを作成する場合は、WSDLのWebサービスのエンドポイントや生成済クライアントの_endPoint
変数を変更してから、実行中のクライアントのログ・ファイルを作成する必要があります。
Webサービスのエンドポイントがプロキシの_endPoint変数に一致していることを確認するには、次のようにします。
JAX-WS Webサービスの場合、次の例に示すように、WSDLを変更せずにエンドポイント・アドレスを変更できます。
import java.net.URI; import java.net.URL; import java.util.Map; import javax.xml.ws.BindingProvider; import javax.xml.ws.WebServiceRef; import project2.proxy.Hello; import project2.proxy.HelloService; public class HelloPortClient { @WebServiceRef private static HelloService helloService; public static void main(String [] args) { helloService = new HelloService(); Hello hello = helloService.getHelloPort(); setEndpointAddress(hello, "http://some.new.addr/endpoint"); hello.sayHello("Bob"); } public static void setEndpointAddress(Object port, String newAddress) { assert port instanceof BindingProvider : "Doesn't appear to be a valid port"; assert newAddress !=null :"Doesn't appear to be a valid address"; // BindingProvider bp = (BindingProvider)port; Map <String, object> context = bp.getRequestContext(); Object oldAddress = context.get( BindingProvider.ENDPOINT_ADDRESS_PROPERTY); context.put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, newAddress); } }
HTTPアナライザを使用して、JAX-WS WebサービスまたはRESTful Webサービスに接続するクライアントのネットワーク・トラフィックを調べることができます。詳細は、「Webサービスに対するHTTPアナライザの使用」を参照してください。
HTTPアナライザを使用すると、次の操作を実行できます。
WebサービスのTCPのリクエスト・パケットとレスポンス・パケットの詳細な内容を調べることができます。
リクエスト・パケットの編集と再送信、およびレスポンス・パケットの内容の確認ができます。
ポリシーを使用して保護されたWebサービスをテストできます。暗号化されたメッセージは復号化されます。
結果を使用して、ローカルまたはリモートにデプロイされているWebサービスをデバッグできます。
注意:
HTTPアナライザを使用する場合、プロキシ設定を更新する必要が生じることがあります。詳細は、「プロキシ設定の使用方法」を参照してください。
Webサービスのクライアントによって送受信されるパケットを調べるには、次のようにします。