ヘッダーをスキップ
Oracle® Fusion Middleware Oracle JDeveloperユーザーズ・ガイド
11gリリース2(11.1.2.3.0)
B66717-03
  目次へ移動
目次

前
 
次
 

16 Webサービスの開発および保護

この章では、既存のWebサービスを検出して使用し、新規のWebサービスを開発およびデプロイする上で役に立つ、JDeveloperが備える強力なツールについて説明します。

この章では、次の項目について説明します。

16.1 Webサービスの開発および保護について

Webサービスは、一連のメッセージ・プロトコルとプログラミング規格で構成され、オープン・スタンダードを使用してインターネット上でビジネス機能を公開します。Webサービスは、プログラムによってインターネット上でアクセスされ、レスポンスを戻す、再利用可能な独立したソフトウェア・コンポーネントです。

Webサービス・クライアントを作成することにより、既存のWebサービスにアクセスできます。アプリケーション内でWebサービスを使用する場合、次のように、Webサービスを下から上へ(Javaから開始)、および上から下へ(WSDLから開始)作成できます。

デプロイした後、Webサービスは他のアプリケーションでアクセスおよび使用できるようになります。

16.1.1 Webサービスの検出および使用

既存のWebサービスをアプリケーションで使用するためのクライアントが簡単に作成できます。アプリケーション内のすべてのWebサービスは、アプリケーション・ナビゲータの「Webサービス」フォルダに表示できます。

また、JDeveloperにはUDDIブラウザが組み込まれており、社内のUDDIレジストリなどへの接続を定義できます。詳細は、第16.3項「UDDIレジストリのWebサービスの使用」を参照してください。

16.1.2 Webサービスの開発およびデプロイ

Webサービスは、JavaクラスおよびEJBのリモート・インタフェースから作成できます。Webサービス作成ウィザードではデプロイメント・ファイルが作成されるため、Webサービスの作成後、最後のステップではこれをアプリケーション・サーバーにデプロイします。詳細は、第16.5項「SOAP Webサービスの作成(ボトム・アップ)」を参照してください。

また、Webサービスは、WSDLから始めてトップ・ダウンWebサービスとして作成できます。詳細は、第16.6項「WSDLからのSOAP Webサービスの作成(トップ・ダウン)」を参照してください。

最後に、Representational State Transfer (REST)に基づくWebサービスを開発できます。RESTful Webサービスは、SOAPなどの追加メッセージング・レイヤーなしで、標準化されたインタフェース(HTTPなど)を介してデータを送信する単純なインタフェースです。詳細は、第16.7項「RESTful Webサービスの作成」を参照してください。

JDeveloperは、一連の標準的なJava-to-XMLタイプのマッピングもサポートしています。自動サポートの対象とならないオブジェクト型向けのカスタム・シリアライザを作成することもできます。詳細は、第16.2項「JDeveloperを使用したWebサービスの作成および使用」を参照してください。

16.2 JDeveloperを使用したWebサービスの作成および使用

Webサービスについて理解を深める情報を提供し、JDeveloperを使用したWebサービスの作成、構成および使用方法を説明します。

16.2.1 プロキシ設定およびJDeveloperの使用方法

デフォルトでは、JDeveloperでは、同じマシン上のデフォルト・ブラウザのプロキシ設定が使用されます。JDeveloperと同じマシン上にあるアプリケーション・サーバーへの接続など、JDeveloperからの接続に問題がある場合は、使用するプロキシ・サーバーの設定を変更する必要があります。

たとえば、プロキシ・サーバーを経由してIPアドレスに接続し、マシンも同じプロキシ・サーバーを経由している場合は、Webプロキシ設定で、接続先のIPアドレスを除外していることを確認します。

HTTPアナライザを使用する場合、アナライザ自身がプロキシであり、これにより監視されるトラフィックは、通常のプロキシ・サーバーのようにアナライザでルーティングされます。JDeveloperにプロキシを設定してある場合、アナライザでは、トラフィックが元のプロキシに届く前に、確実にアナライザを通過するようにします。

IPアドレスを除外するには、次のようにします。

  1. 「ツール」→「プリファレンス」を選択し、「Webブラウザとプロキシ」を選択します。

    詳細を参照するには、「Webブラウザとプロキシ」ダイアログで[F1]または「ヘルプ」をクリックします。

  2. IPアドレスを「例外」リストに追加します。

ブラウザ・プロキシ・サーバーの使用を次のようにオフにします。

  1. 「ツール」→「プリファレンス」を選択し、「Webブラウザとプロキシ」を選択します。

    詳細を参照するには、「Webブラウザとプロキシ」ダイアログで[F1]または「ヘルプ」をクリックします。

  2. 「HTTPプロキシ・サーバーを使用」の選択を解除します。

16.2.2 Webサービスのコンテキスト・ルートの設定方法

コンテキスト・ルートは、生成されるWebサービスのWebサービス・エンドポイントの一部となります。このため、適切な値に設定することが重要です。コンテキスト・ルートはプロジェクト・レベルで設定します。

Webサービスのコンテキスト・ルートは、WebサービスURLのhost:port部分の後に使用される文字列です。たとえば、WebLogic WebサービスのデプロイされたWSDLがhttp://hostname:7001/financial/GetQuote?WSDLであるとします。

このセルフサービスのコンテキスト・パスは、financialです。

コンテキスト・ルートを設定するには、次のようにします。

  1. アプリケーション・ナビゲータで、プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択し、「プロジェクト・プロパティ」ダイアログを開きます。

    詳細を参照するには、「プロジェクト・プロパティ」ダイアログで[F1]または「ヘルプ」をクリックします。

  2. 「プロジェクトのソース・パス」を展開し、「Webアプリケーション」を選択します。

  3. デフォルトの「HTMLルート・ディレクトリ」のままにするか、新しい値を入力します。

    ローカル・ディレクトリを参照するには、「参照」をクリックします。

16.2.3 Webサービスとともに使用する接続の構成方法

統合WebLogic Serverを使用してテストできる単純なWebサービスを開発できます。ただし、複雑なWebサービスの開発およびWebサービスのデプロイには、適切な接続が必要になります。

16.2.4 型マッピングの使用方法

Webサービスとの間で受け渡しが可能なオブジェクトは、XML型にシリアライズしたり、また元の型にデシリアライズできる必要があります。自動的に処理されるオブジェクトは、Javaプリミティブ型および特定のJava標準型です。自動的にシリアライズされないオブジェクトを使用してWebサービスを作成するには、独自のカスタム・シリアライザを記述します。

Webサービスとの間で受け渡しができるオブジェクトは、JavaBeanの規則に準拠しているオブジェクトです。Webサービスを目的とする場合、JavaBeanは、次の制限に準拠する任意のJavaクラスになります。

  • publicデフォルト(ゼロ引数)コンストラクタを含んでいること。

  • アクセッサとして関心のある属性をすべて表示する必要があること。

  • プロパティのアクセッサ(setMethod()getMethod())の順序が重要でないこと。

  • アクセッサは大/小文字混合で1文字目は小文字であること。たとえば、属性がnameの場合、アクセッサはgetNameおよびsetNameとなります。

Webサービスでは、各オブジェクトのプロパティはJava型の1つで、XMLスキーマの単純な型にマップされる必要があります。これらは次の表のとおりで、Webサービス向けにパラメータと戻り値によってサポートされるプリミティブXMLスキーマ型およびプリミティブXMLスキーマ型の配列です。また、サービス・メソッドによって、org.w3c.dom.Elementとして渡される単一のXML要素データを受け取り、戻すことができます。

表16-1 XMLスキーマ型からJava型へのマッピング

XMLスキーマ型 Java型

string

java.lang.String

boolean

java.lang.Boolean

decima

java.lang.Double

float

java.lang.Float

double

java.lang.Double

dateTime

java.util.Date

time

java.util.Date

date

date java.util.GregorianCalendar

base64Binary

java.lang.Byte[]

normalizedString

java.lang.String

integer

java.lang.Integer

long

java.lang.Long

int

java.lang.Integer

short

java.lang.Short

byte

java.lang.Byte


JAX-WS Webサービスでは、Java Architecture for XML Binding (JAXB) (http://jcp.org/en/jsr/detail?id=222を参照)を使用して、すべてのデータ・バインディング・タスクを管理します。特に、JAXBでは、Javaメソッド・シグネチャとWSDLメッセージおよび操作がバインドされるため、ランタイム変換を自動的に処理しながらマッピングをカスタマイズできます。これにより、XMLに精通していなくても、Javaテクノロジに基づいてXMLデータおよび処理機能をアプリケーションに組み込むことができます。

16.2.5 PL/SQL Webサービスおよび型の使用方法

この項では、特定の状況下でPL/SQL Webサービスを作成できない制限事項について説明します。

オーバーロードされたプログラム・ユニット

同じパッケージ内の他のプログラム・ユニットと名前を共有するプログラム・ユニットが、オーバーロードされたプログラム・ユニットです。実行時に、同じ名前を持つプログラム・ユニットが複数存在する場合、WSDLプロセッサはどのプランニング・ユニットを実行する必要があるかを判断できません。このため、PL/SQLプランニング・ユニットをWebサービスとしてデプロイできません。

オーバーロードされたプログラム・ユニットの問題は、要件に応じて調整して回避できます。次のプログラムを含むPL/SQLパッケージに関する次の例について考えてみます。

-- promotes an employee to the specified rank
PROCEDURE promote_emp(empno IN NUMBER, rank IN NUMBER);

-- promotes an employee to the rank above their current rank
PROCEDURE promote_emp(empno IN NUMBER);

次のいずれかの方法で、型のオーバーロードに対処できます。

  • 既存のパッケージを変更できる場合は、この後に示す2つのプロシージャをパッケージに追加し、新しいプロシージャからWebサービスを公開できます。

    または

  • この後に示す2つのプロシージャを新規パッケージに追加し、新しいパッケージからWebサービスを公開できます。

2つのプロシージャを次に示します。

-- promotes an employee to the specified rank
PROCEDURE promote_emp_to_rank(empno IN NUMBER, rank IN NUMBER)
IS
BEGIN
promote_emp(empno, rank);
END;

-- promotes an employee to the rank above their current rank
PROCEDURE promote_emp_to_next_rank(empno IN NUMBER) IS
BEGIN
promote_emp(empno);
END;

BFILE型

PL/SQLのBFILE型は、OUT引数またはファンクション戻り値としてのみ使用されます。

BCLOB型

PL/SQL型のBCLOBはサポートされていません。

OUTおよびIN-OUTパラメータ

OUTまたはIN-OUTパラメータのあるプログラム・ユニットを公開すると、OUTまたはIN-OUTパラメータのそれぞれに属性が1つある戻り型の構造でコール元に戻されます。たとえば、次のシグネチャを持つサービスの場合、

PROCEDURE a_proc(val1 IN VARCHAR2, val2 IN OUT NUMBER, val3 OUT INTEGER) 

生成された結果のクラスにval2およびval3という最終値を返します。生成されたクラスでは、アクセッサ・メソッドを使用してこれらの値にアクセスできます。

PL/SQLレコードからのPL/SQL Webサービスの作成

JDeveloperでは、PL/SQLレコードを使用するPL/SQLパッケージからWebサービスを直接作成することはできません。旧バージョンのOracleデータベースから移行したPL/SQLパッケージを使用している場合、パッケージでやり取りされるパラメータがオブジェクト型ではなくレコード型であるために、機能のWebサービスとしての公開を試行しても実行できない場合があります。

レコード型を含むパッケージではOracle JPublisherを使用できます。詳細は、第28.3.1項「JPublisherの使用方法」を参照してください。

生成されるSQLファイルをデータベースに対して実行すると、オブジェクト型を含む同じ内容のパッケージが作成されます。この新しいパッケージを使用すると、通常どおりにPL/SQL Webサービスを作成できます。

複数のスキーマからアクセスできる同じ名前のストアド・プロシージャ

Oracle9i Databaseリリース2 (9.2)では、同じ名前とパッケージ名を持つストアド・プロシージャまたはストアド・ファンクションに複数のスキーマからアクセスできる場合、PL/SQL Webサービスの公開中に起動されたSQLJトランスレータは異常終了します。

この問題を解決するには、公開するパッケージが1つのスキーマのみで認識されるようにし、他のスキーマのパッケージで同じ名前を使用しないようにしてください。

戻り型Refカーソル

次の例のように、戻り型にrefカーソルを使用しているパッケージから、Webサービスを作成することはできません。

PACKAGE TEST AS
type EmpCurType is ref cursor;
function EmpData return TEST.EmpCurType;
END;

SYSスキーマ

任意のユーザーがSYS権限を引き継ぐことを防ぐため、中間層からはSYS権限のある接続を特定できません。つまり、SYSスキーマ内のパッケージからはWebサービスを作成できません。

たとえば、JDeveloper内にWebサービスを作成するために、中間層からSYSスキーマ内のPL/SQLパッケージにアクセスする必要がある場合には、SYSとしてデータベースにログオンし、自分の使用するユーザーにパッケージのEXECUTE権限を付与し、JDeveloperデータベース接続を作成します。

パッケージ仕様部で宣言される型

PL/SQLパッケージは、パッケージ仕様部で型を宣言できますが、このようなパッケージはWebサービスとして公開できません。これを回避するには、パッケージのスコープ外で型を作成します。

PL/SQLネスト表

JDeveloperでは、PL/SQLネスト表を使用するPL/SQLパッケージからWebサービスを直接作成することはできません。

16.2.6 デプロイメント・プラットフォームの選択方法

Webサービス・ウィザードを使用してWebサービスを作成する場合、表16-2に示すように、デプロイメント・プラットフォームを選択できます。選択するプラットフォームにより、ウィザードで使用可能なオプションや、デプロイメント用としてWAR/EARファイルに追加されるライブラリが決まります。

表16-2 デプロイメント・プラットフォーム

デプロイメント・プラットフォーム 説明

J2EE 1.4 JAX-RPC (WebLogic Server 10.3のサポート付き)

Oracle WebLogic Server 10.3にデプロイするために構成されるJAX-RPC Webサービスを生成します。

Java EE 1.5 (JAX-WS注釈のサポート付き)

Java EE 1.5の一部としてリリースされるJAX-WS WebサービスAPIを利用するWebサービスを生成します。このオプションでは、JAX-WS注釈仕様を使用したJava注釈により、WebLogic Server 10.3へのデプロイがサポートされています。

Java EE 1.5 (JAX-WS RIのサポート付き)

Sun JAX-WS参照実装をサポートする任意のコンテナをデプロイするためのJAX-WS Webサービスを生成します。


16.2.7 Webサービスのコード・インサイトの使用方法

Webサービスのコード・インサイトは、Javaクラスの入力時に注釈を完了し、XMLエディタでWSDL文書用として使用できます(つまり、「ソース」タブでの入力時)。コード・インサイトが反応する速度を構成できます。JDeveloperで「コード・インサイト」ページにアクセスするには、「ツール」メニュー→「プリファレンス」→「コード・エディタ」→「コード・インサイト」を選択します。


注意:

コード・インサイトは、JAX-RPC WebサービスのJavaクラスとは連携して機能せず、JAX-WS WebサービスのJavaクラスとのみ連携して機能します。


ソース・エディタで注釈を追加してJavaクラスからJAX-WS Webサービスを作成する場合、コード・インサイト機能であるクイック修正とコード・アシストを使用すると便利です。

たとえば、@WebService注釈を手動で追加してJavaクラスからWebサービスを作成する場合、注釈の下に波線が表示されます。監査修正アイコンをクリックし、「Webサービス用にプロジェクトを構成する」を選択します。

「デプロイメント・プラットフォームの選択」ダイアログで、サービスに対して次のいずれかのJAX-WSプラットフォームを選択します。

  • Java EE 1.5 (JAX-WS注釈のサポート付き)。この場合、次が追加されます。

    • クラスに対するimport javax.jws.WebService;

    • プロジェクトに対するweb.xmlファイル

  • Java EE 1.5 (JAX-WS RIのサポート付き)。この場合、次が追加されます。

    • クラスに対するimport javax.jws.WebService;

    • プロジェクトに対するsun-jaxws.xmlおよびweb.xmlファイル

他の例は、次のとおりです。

  • ポリシー注釈をJAX-WS Webサービスに追加し、JDeveloperを使用して必要なポリシーを完了できます。たとえば、@Polを入力し、[Alt]キーを押しながら[Enter]キーを押すと、単一のポリシーに@Policyを使用するか、複数のポリシーに@Policiesを使用するかを選択できます。適切なインポート文もクラスに追加されます。

  • ソース・エディタでWSDL文書を使用している場合、コード補完を使用すると、スキーマ要素を入力しやすくなります。たとえば、<と入力して1秒待つと、ポップアップが表示され、必要なエントリを選択できます。

  • WSDLとWebサービスのソース・ファイルが同期しなくなった場合、Webサービスをソースから再生成できます。

  • JavaクラスまたはWSDLでJavaクラスの名前を変更する場合、監査修正アイコンをクリックし、不一致を調整する方法を選択します。

16.2.8 JAX-RPC 10.1.3 Webサービスの移行方法

JDeveloper 10.1.3.nでJ2EE 1.4 JAX-RPC Webサービスとして作成したWebサービスを移行できます。


注意:

EJB 2.1 Webサービスは、JDeveloperのこのバージョンでは推奨されていないため、移行できません。JMS Webサービスは、Oracle固有のものであり、現在はサポートされていないため、移行できません。


アップグレード時には、次の処理が行われます。

  • JAX-RPC 10.1.3 Webサービス・ライブラリを削除し、JAX-RPC 11g Webサービス・ライブラリに置き換えます。

  • Oracle WebLogic Serverと互換性のあるJAX-RPC WebサービスとしてWebサービスを再生成します。詳細は、第16.5.6項「ソースからのWebサービスの再生成方法」を参照してください。

WSDLは変更されません。アップグレードの実行後、「Webサービスの編集」ダイアログを使用して、追加の変更を行うことができます。

移行したサービスの制限は、次のとおりです。

  • JDeveloperのこのバージョンのJAX-RPC WebサービスはSOAP 1.1のみをサポートしているため、SOAP 1.2に対するサポートは削除されます。

  • アタッチされているポリシーはすべて削除されます。新規ポリシーをアタッチするには、Webサービスを編集し、適切なOracle WebLogic Serverポリシーを適用します。詳細は、第16.9.3項「Webサービスへのポリシーのアタッチ方法」を参照してください。


    注意:

    JAX-RPC Webサービスでは、Oracle WebLogic Serverセキュリティ・ポリシーのみが使用可能です。


  • 前のバージョンのステートフル・サービスに対するサポートは削除されます。現在のバージョンのステートフル・サービスに対するサポートは、「Webサービスの編集」ダイアログで構成できます。詳細は、第16.10項「Webサービスの編集および削除」を参照してください。

  • RESTに対するサポートは削除されます。

  • サポートされていないコレクション戻り型があるメソッドは、実装では無効です。

Webサービスを移行するには、次のようにします。

  1. アプリケーション・ナビゲータで、ドロップダウン・リストから「アプリケーションを開く」を選択します。Webサービスが含まれるアプリケーションを開きます。

    移行ウィザードが自動的に呼び出され、アプリケーションおよびプロジェクトを移行できます。詳細は、[F1]を押すか、ウィザード内で「ヘルプ」をクリックしてください。

  2. 移行ウィザードの「Webapp 2.5移行」ページで、「Webapp 2.5へ移行」の選択を解除します。JAX-RPCは、web.xmlのバージョン2.5ではなくバージョン2.4と互換性があります。

  3. Webサービスをアップグレードするには、アプリケーション・ナビゲータでWebサービス・コンテナを右クリックし、「WebサービスをWLS JAX-RPC構成にアップグレード」を選択します。

  4. 「アップグレードの確認」メッセージを確認し、「はい」をクリックします。JAX-RPC 11g Webサービス・ライブラリを使用するようWebサービスがアップグレードされ、再生成されます。

  5. 必要に応じて、Webサービスを編集して追加の変更を行います。

16.3 UDDIレジストリのWebサービスの使用

Universal Description, Discovery and Integration (UDDI)は、Webサービスを支える標準およびプロトコルの1つです。これによって、Webサービスに関する情報を公開および検出するための共通の標準が提供されます。また、UDDIブラウザが付属しており、指定した検索基準を使用してUDDIレジストリを検索し、Web Services Description Language (WSDL)により記述されたWebサービスを検出できます。UDDIの仕様を含む詳細は、UDDI OASIS標準(http://uddi.xml.org/)を参照してください。

次の項では、UDDIレジストリのWebサービスの使用方法について説明します。

16.3.1 UDDIレジストリ接続の定義方法

UDDIレジストリへの接続を定義することで、たとえば、社内のUDDIレジストリを参照できます。また、定義したUDDIレジストリ接続はすべて、どのワークスペースまたはプロジェクトからでもアクセスできます。

UDDIの仕様を含む詳細は、UDDI OASIS標準(http://uddi.xml.org/)を参照してください。

後続の項では、UDDIレジストリ接続の定義方法について説明します。

16.3.1.1 UDDIレジストリ接続の作成

パブリックまたはプライベート(社内)であるUDDIレジストリに対する新規接続を作成できます。UDDIレジストリ接続は、「接続」パネルのリソース・パレットにリストされます。

新規接続を作成するには、次のようにします。

  1. アプリケーション・ナビゲータでプロジェクトを選択します。

  2. 「ファイル」→「新規」を選択して「新規ギャラリ」を開きます。

  3. 「カテゴリ」ツリーで、「ビジネス層」を開いて「Webサービス」を選択します。

  4. 「項目」リストで「UDDIレジストリ接続」をダブルクリックし、UDDIレジストリ接続の作成ウィザードを起動します。

    詳細を参照するには、UDDIレジストリ接続の作成ウィザードで[F1]を押すか、「ヘルプ」をクリックします。

また、第6.9項「WebDAVとOracle JDeveloperの使用」に示すように、リソース・パレットで接続を直接作成することもできます。

16.3.1.2 UDDIレジストリ接続の名前の編集

既存のUDDIレジストリ接続を編集して、接続の名前を変更したり、照会エンドポイントのURLを変更できます。

レジストリの照会エンドポイントを変更するには、次のようにします。

  1. メイン・メニューで、「表示」→「リソース・パレット」を選択します。デフォルトでは、リソース・パレットは「JDeveloper」ウィンドウの右側に表示されます。

  2. リソース・パレットで、「UDDIレジストリ」を開きます。

  3. 編集するUDDIレジストリ接続のポップアップ・メニューから「プロパティ」を選択します。

    再入可能なUDDIレジストリ接続ウィザードが起動します。

    詳細を参照するには、UDDIレジストリ接続の作成ウィザードで[F1]を押すか、「ヘルプ」をクリックします。

16.3.1.3 UDDIレジストリ接続のビューの変更

WebサービスがUDDIレジストリにリストされる順序は、カテゴリ・ビューからビジネス・ビューへ、またはビジネス・ビューからカテゴリ・ビューからへ変更できます。詳細は、第16.3.2項「UDDIレジストリ接続のビューの構成方法」を参照してください。

レジストリのビューを変更するには、次のようにします。

  1. メイン・メニューで、「表示」→「リソース・パレット」を選択します。デフォルトでは、リソース・パレットは「JDeveloper」ウィンドウの右側に表示されます。

  2. リソース・パレットで、「UDDIレジストリ」を開きます。

  3. 編集するUDDIレジストリ接続のポップアップ・メニューから「レンダー・ビジネス・パースペクティブ」または「レンダー・カテゴリ・パースペクティブ」を選択します。

16.3.1.4 UDDIレジストリ接続のリフレッシュ

接続の下に格納されている情報を最新にするために、UDDIレジストリ接続をリフレッシュできます。

接続をリフレッシュするには、次のようにします。

  1. メイン・メニューで、「表示」→「リソース・パレット」を選択します。デフォルトでは、リソース・パレットは「JDeveloper」ウィンドウの右側に表示されます。

  2. リソース・パレットで、「UDDIレジストリ」を開きます。

  3. 対象となるUDDIレジストリ接続のポップアップ・メニューから「リフレッシュ」を選択します。

16.3.1.5 UDDIレジストリ接続の削除

UDDIレジストリ接続は、不要になったらリソース・パレットから削除できます。

接続を削除するには、次のようにします。

  1. メイン・メニューで、「表示」→「リソース・パレット」を選択します。デフォルトでは、リソース・パレットは「JDeveloper」ウィンドウの右側に表示されます。

  2. リソース・パレットで、「UDDIレジストリ」を開きます。

  3. 削除するUDDIレジストリ接続のポップアップ・メニューから「削除」を選択します。

  4. 接続の削除を確認するメッセージが表示されます。「はい」をクリックします。

16.3.2 UDDIレジストリ接続のビューの構成方法

第16.3.1項「UDDIレジストリ接続の定義方法」に示すように、接続を作成する場合、レジストリのWebサービスをビジネス・ビューとカテゴリ・ビューのどちらに表示するか尋ねられます。選択するビューにより、レジストリのサービスを検索する方法が決まります。

16.3.2.1 ビジネス・ビューの選択

UDDIレジストリには、Webサービスの情報を分類するための次の4種類のデータ構造が含まれます。

  • businessEntity: Webサービスを提供するビジネスの情報を含む最上位レベルのデータ構造を定義します。Webサービスが見つかると、リソース・パレットでビジネスがUDDIブラウザに追加されます。

  • businessService: サービス・ファミリの説明的な情報が含まれます。名前や簡単な説明およびカテゴリ情報があります。

  • bindingTemplate: Webサービス・エントリ・ポイント、およびインタフェース仕様への参照に関する情報が含まれます。

  • tModel: Webサービスの技術仕様を表します。Webサービスの検索ウィザードでWebサービスが見つかると、そのtModelと互換性を持つWebサービスが他にも表示されます。

ビジネス・ビューを選択すると、サービスは「ビジネス・エンティティ」および「ビジネス・サービス」の下にリストされます。

16.3.2.2 カテゴリ・ビューの選択

カテゴリ・ビューを選択すると、次の1つ以上のカテゴリを使用してWebサービスを検索できます。

  • UDDIタイプ: UDDIタイプを使用して検索します。

  • NAICS: 産業の種類を指定します。

  • ISO 3166: 場所を使用して検索します。

  • UNSPSC: サービスのタイプを使用して検索します。

名前で検索するときは、名前全体または名前の一部を入力でき、ワイルドカードも使用できます。名前が検索基準と一致するtModelが結果として返されます。同じtModelを含むWebサービスが複数ある場合は、それらがウィザードに表示されるので、要件に最も適したサービスを選択できます。

16.3.3 UDDIレジストリのWebサービスの検索方法

Webサービスのリソース・パレットでUDDIレジストリ接続を検索できます。


注意:

トップ・ダウンWebサービスを作成する場合、Webサービスの検索ウィザードを使用して、WSDLからJava Webサービスを作成ウィザードからUDDIレジストリ接続を検索できます。


UDDIレジストリのWebサービスを検索するには、次のようにします。

  1. 必要に応じて、UDDIレジストリ接続を作成します。詳細は、第16.3.1項「UDDIレジストリ接続の定義方法」を参照してください。

  2. リソース・パレットで、Webサービスを検索します。詳細は、3.7項「リソース・パレットの操作」を参照してください。

16.3.4 UDDIレジストリのWebサービスを使用するためのプロキシの生成方法

リソース・パレットでUDDIレジストリ接続のWebサービスに対するプロキシを作成できます。


注意:

Webサービスに対するプロキシを作成できるのは、サービスにWSDLリンクが使用される場合のみです。これを確認するには、Webサービス・ポートを開き、レポートの「tModelインスタンス」セクションの「サマリーの説明」がwsdl linkであることを確認します。


プロキシを生成するには、次のようにします。

  1. リソース・パレットを開きます。

    メイン・メニューで、「表示」→「リソース・パレット」を選択します。デフォルトでは、リソース・パレットは「JDeveloper」ウィンドウの右側に表示されます。

  2. 目的のWebサービスへ移動するか、これを検索します。

  3. サービスに移動します。

  4. サービスを右クリックし、「Webサービス・プロキシの生成」を選択してWebサービス・プロキシ・ウィザードを起動します。

    詳細は、[F1]を押すか、ウィザード内で「ヘルプ」をクリックしてください。

16.3.5 UDDIレジストリのWebサービスのレポートの表示方法

UDDIレジストリのWebサービスのレポートを表示できます。

サービスのレポートを表示するには、次のようにします。

  1. リソース・パレットで、UDDIレジストリ接続を開き、サービスのエンドポイントにナビゲートします。

  2. サービスを右クリックして「レポートの表示」を選択します。

    ソース・エディタにWebサービスのレポートが表示されます。

16.3.6 UDDIレジストリへのWebサービスの公開方法

アプリケーション・サーバー・ナビゲータでレジストリへの接続を介してUDDIレジストリにWebサービスを公開できます。UDDIレジストリにサービスを公開する前に、リソース・カタログにレジストリへの接続がすでに存在する必要があります。詳細は、第16.3.1.1項「UDDIレジストリ接続の作成」を参照してください。

UDDIレジストリにWebサービスを公開するには、次のようにします。

  1. Oracle WebLogic ServerにWebサービスをデプロイします。


    注意:

    Webサービスを統合WebLogic Serverにデプロイする場合、公開先のUDDIレジストリは統合WebLogic Serverに対してローカルである必要があります。


  2. アプリケーション・サーバー・ナビゲータで、アプリケーション・サーバー・ノードを開きます。

  3. Webサービス・ノードを開き、公開するWebサービスのノード(WSDLを表すノード)を検索します。

  4. WSDLノードを右クリックし、「UDDIにWSDLを公開」を選択して「WSDLをUDDIレジストリに公開します」ダイアログを起動します。

    詳細を参照するには、「WSDLをUDDIレジストリに公開します」ダイアログで[F1]を押すか、「ヘルプ」をクリックします。

16.4 Webサービス・クライアントの作成

JDeveloperでは、Webサービス・クライアントおよびプロキシの作成ウィザードを使用してWebサービスにアクセスするためのクライアントおよびプロキシ・クラスを作成することにより、アプリケーションでのWebサービスの使用が容易になります。このウィザードは、Webサービスを検索または作成するときに起動できます。または直接ウィザードを起動して、WebサービスのURLを入力したりWebサービスの検索ウィザードを使用してUDDIレジストリ内のWebサービスを検索することもできます。

RPCまたはドキュメント・スタイルのWebサービスについては、適切なタイプのプロキシが自動的に生成されます。


注意:

JAX-WS Webサービスは、RPCスタイルをサポートしていません。


詳細は、次のリソースを参照してください。

次の項では、Webサービス・クライアントを作成および使用する方法について説明します。

16.4.1 クライアントおよびプロキシ・クラスの作成方法

JDeveloperを使用して、Webサービスにアクセスしてそのメソッドをアプリケーションで呼び出すために、クライアントおよびプロキシ・クラスを自動的に作成します。ウィザードを使用して、必要に応じて、非同期メソッドを生成し、ポリシーをアタッチすることもできます。

Webサービス・クライアントおよびプロキシの作成ウィザードを使用して、Webサービスにアクセスするためのクライアントおよびプロキシ・クラスを作成できます。公開されているポートごとに新規サービス・クラス(JAX-WS)またはスタブ(JAX-RPC)およびサービス・インタフェースが生成され、これらがアプリケーション・ナビゲータにリストされます。生成されたクライアント・ファイルport-nameClient.javaはソース・エディタで開かれます。生成後は、アプリケーションでメソッドを呼び出すことができます。


注意:

場合によっては、インターネット上でアクセスするWebサービス用として作成したか、UDDIレジストリを使用して作成したWebサービス・クライアントを実行すると、エラーが発生する可能性があります。Webサービス標準は常に進化しているため、検索したWebサービスが最新の標準に準拠していない場合や、これらが準拠する標準が、クライアントが実行されているサーバーでサポートされている標準と互換性がない場合があります。JDeveloperで作成したWebサービス・クライアントによってエラーが返された場合は、エラー・メッセージを確認し、同じサービスを提供するがサーバーと互換性があり問題なく動作する別のWebサービスに対してクライアントを作成することを検討してください。


Webサービス・クライアントおよびプロキシの作成ウィザードにアクセスするには、次のいずれかの方法を使用します。ウィザードの操作のヘルプを参照するには、ウィザード内で[F1]を押すか「ヘルプ」をクリックします。

Webサービスにアクセスするためのクライアントおよびプロキシ・クラスを作成するには、次のようにします。

  1. アプリケーション・ナビゲータで、使用するプロジェクトを選択します。

  2. 「ファイル」→「新規」を選択して「新規ギャラリ」を開きます。

  3. 「カテゴリ」リストで、「Webサービス」を選択します。

  4. 「項目」リストで「Webサービス」をダブルクリックし、Webサービス・クライアントおよびプロキシの作成ウィザードを起動します。

    詳細を参照するには、Webサービス・クライアントおよびプロキシの作成ウィザードで[F1]を押すか、「ヘルプ」をクリックします。

JDeveloperで定義されたWebサービスにアクセスするためのクライアントおよびプロキシ・クラスを作成するには、次のようにします。

  1. アプリケーション・ナビゲータでWebサービス・コンテナを右クリックし、次を選択します。

    • JAX-WS Webサービスの場合は「Webサービス注釈のクライアントの作成」

    • JAX-RPC Webサービスの場合は「Webサービス・プロキシの生成」

  2. Webサービス・クライアントおよびプロキシの作成ウィザードが開き、選択したWebサービス・プロジェクトが移入されます。


注意:

JavaBeanパラメータを使用するEJB Webサービスのクライアントおよびプロキシ・クラスを作成する場合は、JavaBeanにjava.io.Serializableインタフェースを実装する必要があります。


16.4.2 Webサービス・クライアントおよびプロキシ・クラスの使用方法

JDeveloperでは、Webサービスに対するプロキシを定義する多数のファイルが生成されます。生成されたファイルを使用して、次のタイプのWebサービス・クライアント・アプリケーションを開発できます。

  • スタンドアロン・クライアント・アプリケーション

  • Java Standard Edition (SE)クライアント・アプリケーション

  • Oracle WebLogic ServerにデプロイされるJava EEコンポーネント


注意:

次の手順以外にも、Webサービス・インジェクション(@WebServiceRefメソッドを使用)を使用して、Webサービスの参照を定義し、Webサービス・クライアントでインジェクション・ターゲットを識別できます。詳細は、第16.4.7項「@WebServiceRef注釈を使用したWebサービスの参照方法」を参照してください。


16.4.2.1 スタンドアロン・クライアント・アプリケーションの使用方法

スタンドアロン・クライアント・アプリケーションは、その最もシンプルな形式において、Javaコマンドを使用して呼び出すMain publicクラスを持つJavaプログラムです。これは、WebLogic Serverからは完全に独立して動作します。

スタンドアロン・クライアントで生成されたクライアント・プロキシ・クラスを使用するには、次のようにします。

  1. port_nameClient.javaと呼ばれるクライアント・プロキシ・クラスをソース・エディタで開きます。

    このファイルは、Webサービス・クライアント・プロキシを最初に作成するときに自動的に開きます。クラスを再度開くには、クライアント・プロキシ・コンテナを右クリックし、「クライアント・クラスに移動」を選択するか、アプリケーション・ナビゲータでそのままファイルをダブルクリックします。

  2. mainメソッド内のtry-catchブロック内にある「// ここに独自のコードを追加してください。」というコメントを検索し、Webサービスの呼出しに適したコードを追加します。

  3. クライアントを実行します。

16.4.2.2 Java Standard Edition (SE)クライアント・アプリケーションの使用方法

生成されたプロキシ・クラスをJava Standard Edition (SE)アプリケーションの一部として組み込み、これらを参照してリモートWebサービスにアクセスします。

JSEコンポーネントで生成されたクライアント・プロキシ・クラスを使用するには、次のようにします。

  1. 生成されたクライアント・プロキシ・クラスをJSEアプリケーション・ソース・ディレクトリにコピーします。

  2. port_nameClient.javaと呼ばれるメイン・クライアント・プロキシ・クラスをガイドとして使用し、アプリケーションからWebサービスへのアクセスに適したメソッドを追加します。

  3. アプリケーションを実行します。

16.4.2.3 WebLogic ServerにデプロイされたJava EEコンポーネント・クライアント・アプリケーションの使用方法

この場合、Webサービスは、EJB、サーブレット、または他のWebサービスなど、WebLogic ServerにデプロイされたJavaプラットフォーム、Enterprise Edition (Java EE)バージョン5コンポーネント内で動作します。したがって、このタイプのクライアント・アプリケーションはWebLogic Serverコンテナ内で動作します。

Java EEコンポーネントで生成されたクライアント・プロキシ・クラスを使用するには、次のようにします。

  1. port_nameClient.javaと呼ばれるメイン・クライアント・プロキシ・クラスをソース・エディタで開きます。

    このファイルは、Webサービス・クライアント・プロキシを最初に作成するときに自動的に開きます。クラスを再度開くには、クライアント・プロキシ・コンテナを右クリックし、「クライアント・クラスに移動」を選択するか、アプリケーション・ナビゲータでそのままファイルをダブルクリックします。

  2. Webサービスにアクセスして必要な操作を行うための独自のメソッドにメイン・メソッドを置き換えます。メイン・メソッドで生成されたコードをガイドとして使用できます。

  3. JDeveloperで生成されたクライアント・モジュール・クラスの完全なセットをデプロイします。

  4. Java EEアプリケーションでクライアント・プロキシ・クラスを参照します。

16.4.3 Webサービス・クライアントの作成に使用されたWSDLの表示方法

次の状況において、Webサービス・クライアントの生成に使用されたWSDLを表示できます。

  • 可能な場合、WSDLファイルのローカル・コピーが表示されます。Webサービス・クライアントを生成する場合、ソースWebサービスのWSDLをローカル・ディレクトリにコピーできます。第16.4.1項「クライアントおよびプロキシ・クラスの作成方法」を参照してください。


    注意:

    ほとんどの場合、WSDLのローカル・コピーはリモートWebサービスのWSDLと一致します。リモートWebサービスが変更されると、ローカルWSDLがリモートWSDLと同期しなくなる可能性があります。Webサービス・クライアントがリモートWebサービスにアクセスできることを確認するには、必要に応じて、リモートWSDLを使用してローカルWSDLを再生成します。第16.4.5項「Webサービス・クライアントおよびプロキシ・クラスの再生成方法」を参照してください。


  • ローカル・バージョンが使用できない場合、リモートWSDLが表示されます。

クライアントWSDLを表示するには、次のようにします。

  1. アプリケーション・ナビゲータ内でWebサービス・クライアントを右クリックします。

  2. ポップアップ・メニューで「WSDLに移動」を選択します。

    WSDLが表示されます。

16.4.4 実行時のWebサービスWSDLの更新方法

場合によっては、Webサービスの説明の一部であるソースとは異なるソースからインポートされたXMLリソース(WSDLやXSDなど)を参照するため、アプリケーションを更新する必要がある可能性があります。パフォーマンスを向上させたりアプリケーションがローカル環境で正しく動作することを確認するために、XMLリソースをこのようにリダイレクトすることが必要な場合があります。

たとえば、WSDLはクライアントの生成時にアクセス可能であるが、クライアントの実行時にはアクセスできない場合があります。ネットワークを介して使用可能なリソースではなく、アプリケーションに対してローカルであるかアプリケーションにバンドルされたリソースを参照することが必要な場合があります。

次のいずれかのメソッドを使用すると、実行時にWebサービスによって使用されるWSDLの場所を変更できます。

  • XMLカタログ・ファイル

  • Webサービス・インジェクション(@WebServiceRef)およびデプロイメント・プラン

16.4.4.1 XMLカタログ・ファイルの使用方法

Webサービス・クライアントを作成または再生成すると、jax-ws-catalog.xmlファイルがMETA-INFディレクトリに自動的に作成されます。このファイルは、Oasis XMLカタログの仕様(https://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参照をsystem識別子に関連付けています。


    注意:

    同じエンドポイントを共有するローカル・システム上で複数のWebサービスに対してクライアントおよびプロキシ・クラスを作成することにより、jaxws-catalog.xmlファイルでWebサービスごとにURLが一意であるようにすると、サービスQNameがアンカー・テキストとして追加されます。次に例を示します。

    http://foo.org/helloworld?wsdl

    これは次のようになります。

    http://foo.org/helloworld#%7Bhttp%3A%2F%2Fexample.com%2F%7DHelloService?wsdl


16.4.4.2 Webサービス・インジェクション(@WebServiceRef)およびデプロイメント・プランの使用方法

このメソッドには、次の手順が含まれます。

  1. @WebServiceRef注釈を使用して、Webサービスへの参照を定義し、インジェクション・ターゲットを識別します。

  2. デプロイメント・プランを更新し、実行時に参照される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ディスクリプタ・プロパティの場所とプロパティに割り当てる値の両方を定義します。詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverへのアプリケーションのデプロイ』を参照してください。

次の例は、CreditRatingService WebサービスWSDLの値を上書きするデプロイメント・プランを示しており、各要素の意味は、次のとおりです。

  • variable-definition要素は、CreditRatingService変数とこの変数に割り当てる値を定義します。

  • LoanApplication-LoanApprover-context-root.warmodule-overrideの一部として、variable-assignment要素は、CreditRating Service変数、およびプロパティが上書きされるディスクリプタ内の正確な場所を定義します。

<?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>

16.4.5 Webサービス・クライアントおよびプロキシ・クラスの再生成方法

Webサービス・クライアントおよびプロキシ・クラスは再生成が必要な場合があります。


注意:

Webサービス・クライアントおよびプロキシ・クラスを再生成すると、クライアントが最後に生成されてからクラス、WSDLまたはサポート・ファイルに対して行った変更がすべて破棄されます。


Webサービス・クライアントおよびプロキシ・クラスを再生成するには、次のようにします。

  1. アプリケーション・ナビゲータで、再生成するWebサービス・クライアント・ノードを右クリックして、ポップアップ・メニューから「プロパティ」を選択します。

    Webサービス・クライアントおよびプロキシ・エディタ・ウィザードが表示されます。

  2. 「Webサービス記述」を選択します。(デフォルトで選択されています。)

  3. 元の場所にあるWSDLを使用してローカルWSDLをリフレッシュするには、「元のWSDLの場所からコピーしたWSDLをリフレッシュ」を選択します。

  4. 「OK」をクリックします。

    WSDLのローカル・コピーがリフレッシュされ、Webサービス・クライアントおよびプロキシ・クラスが再生成されます。

Webサービス・クライアントおよびプロキシ・クラスを再生成するには、次のようにします。

次のように、Webサービス・クライアントおよびプロキシ・エディタ・ウィザードに最後に定義された一連のプロパティや現在ローカルに格納されているWSDLを使用して、Webサービス・クライアントおよびプロキシ・クラスを迅速かつ簡単に再生成できます。

  • アプリケーション・ナビゲータで、再生成するWebサービス・クライアント・ノードを右クリックして、ポップアップ・メニューから「Webサービス・プロキシの再生成」を選択します。

    Webサービス・クライアント・クラス、WSDLおよびサポート・プロキシ・ファイルが再生成されます。

16.4.6 Webサービス・クライアントの管理方法

JDeveloperには、Webサービス・クライアントの編集機能と削除機能の両方が用意されています。

Webサービス・クライアントを編集するには、次のようにします。

Webサービス・クライアントはWebサービス・クライアントおよびプロキシ・エディタを使用して編集できます。Webサービス・クライアントおよびプロキシ・エディタにアクセスするには、次のようにします。

  1. アプリケーション・ナビゲータ内でクライアントをダブルクリックします。

  2. アプリケーション・ナビゲータ内でクライアントを右クリックし、「プロパティ...」を選択します。

    ウィザードの操作のヘルプを参照するには、ウィザード内で[F1]を押すか「ヘルプ」をクリックします。

Webサービス・クライアントを削除するには、次のようにします。

  1. アプリケーション・ナビゲータで、Webサービス・クライアントのプロキシ・ファイルpackage.proxyを含むノードを開き、ファイルを選択します。

  2. 「ファイル」→「ディスクから削除」を選択します。JDeveloperで検出される使用状況はすべて無視できます。

  3. Webサービス・プロキシのランタイム・ファイルpackage.proxy.runtimeを含むノードを開いて、ファイルを選択します。

  4. 「ファイル」→「ディスクから削除」を選択します。

    ファイルは永久に削除されます。

16.4.7 @WebServiceRef注釈を使用したWebサービスの参照方法

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;
...

詳細は、GDの@WebServiceRef注釈を使用したWebサービス参照の定義に関する項を参照してください。

16.5 SOAP Webサービスの作成(ボトム・アップ)

Webサービスは、トップ・ダウンとボトム・アップという2つの開発方式を使用して作成できます。ボトム・アップ開発とは、基礎となるJava実装からSOAPを使用してWebサービスを開発するプロセスを表します。WSDLから開始するトップ・ダウン開発の詳細は、第16.6項「WSDLからのSOAP Webサービスの作成(トップ・ダウン)」を参照してください。

次の各項では、様々なタイプのWebサービスをボトム・アップ方式で生成する方法について説明します。

16.5.1 Java Webサービスの作成方法

J2EE Webサービスは、次のものから作成できます。

  • Javaクラス

  • EJBのリモート・インタフェース

Webサービス作成公開ウィザードによってデプロイメント・ファイルは自動的に作成されるため、Webサービスの作成が済んだら、後はこれをデプロイするだけです。

始める前に:

コンテキスト・ルートをまだ設定していない場合は、Webサービスの適切なコンテキスト・ルートを設定します。詳細は、第16.2.2項「Webサービスのコンテキスト・ルートの設定方法」を参照してください。

Webサービスを作成する手順は、次のとおりです。

  1. アプリケーション・ナビゲータで、Webサービスの作成元のJavaクラスまたはEJBが含まれるプロジェクトを選択します。

  2. 「ファイル」→「新規」を選択して「新規ギャラリ」を開きます。

  3. 「カテゴリ」リストで「ビジネス層」を開き、「Webサービス」を選択します。「項目」リストで「Java Webサービス」をダブルクリックして、Java Webサービスの作成ウィザードを起動します。

    ウィザードの操作の詳細なヘルプを参照するには、ウィザード内で[F1]を押すか、「ヘルプ」をクリックします。


注意:

「デプロイメント・プラットフォームの選択」ページが表示されるのは、プロジェクトでWebサービスが初めて作成される場合のみです。その後、同じプロジェクトで追加されるWebサービスにはすべて同じバージョンが使用されます。


16.5.2 JSR-181注釈の使用方法

JSR-181はWebサービスのメタデータを規定したもので、これにより、アノテーションを宣言的に使用して簡単にWebサービスを作成および管理することが可能になります。アノテーションは、メソッドおよびクラスでWebサービスのエンドポイントとしてメソッドを公開するために使用します。

JSR-181注釈は、手動でクラスに追加するか、JDeveloperを使用してWebサービスの作成時にクラスに追加するか、または「Webサービスの編集」ダイアログを使用してWebサービスの編集時に追加できます。


注意:

「Webサービスの編集」ダイアログを使用して注釈を削除すると、手動で入力した注釈もすべて削除されます。


注釈を追加するには、次のようにします。

  1. ソース・エディタでJavaクラスを開きます。

  2. 正しい行で@とタイプして2から3秒待機します。

    「コード・インサイト」に可能な値が表示されます。詳細は、第16.2.7項「Webサービスのコード・インサイトの使用方法」を参照してください。

詳細は、次のリファレンスを参照してください。

16.5.3 PL/SQL Webサービスの作成方法

PL/SQL Webサービスの作成ウィザードを使用すると、オブジェクト型を使用するPL/SQLパッケージまたはJavaストアド・プロシージャからWebサービスを生成する操作が容易になります。PL/SQL Webサービス・ウィザードでは、これらはパッケージと同様に処理されます。


注意:

作成できるのはJAX-RPC PL/SQL Webサービスのみです。詳細は、第16.2.6項「デプロイメント・プラットフォームの選択方法」を参照してください。


PL/SQL Webサービスは、Oracle WebLogic Serverにデプロイできます。PL/SQL Webサービスの作成ウィザードでは、PL/SQLをJavaでラップするOracle JPublisherの機能を使用して、サービスを公開します。詳細は、第28.3.1項「JPublisherの使用方法」を参照してください。

次のいずれかの方法が可能です。

  • アプリケーション・ナビゲータのプロジェクトからWebサービスを作成する方法。この場合、データベース接続とWebサービスを生成するPL/SQLパッケージを選択します。

  • データベース・ナビゲータまたはリソース・パレットのデータベース接続ノードの下でPL/SQLパッケージからWebサービスを作成する方法。この場合、Webサービスについて生成されるファイルのデプロイ先となるプロジェクトを選択する必要があります。

次の点に注意する必要があります。

  • PL/SQL Webサービスの編集は、データベース接続が存在している間に行わないと、エラー・メッセージが表示されます。データベース接続が削除されている場合は新規に作成し、削除前と同じ名前を付けます。

  • Webサービスが作成できない場合もあります。制限の詳細は、第16.2.5項「PL/SQL Webサービスおよび型の使用方法」を参照してください。

  • PL/SQL Webサービスのデプロイは、他のJ2EE Webアプリケーションのデプロイと似ています。詳細は、第16.12項「Webサービスのデプロイ」を参照してください。

プロジェクトからPL/SQL Webサービスを作成するには、次のようにします。

  1. アプリケーション・ナビゲータでプロジェクトを選択します。

  2. 「ファイル」→「新規」を選択して「新規ギャラリ」を開きます。

  3. 「カテゴリ」リストで「ビジネス層」を開き、「Webサービス」を選択します。「項目」リストで「PL/SQL Webサービス」をダブルクリックして、PL/SQL Webサービスの作成ウィザードを起動します。

    ウィザードの操作の詳細なヘルプを参照するには、ウィザード内で[F1]を押すか、「ヘルプ」をクリックします。

PL/SQLパッケージからWebサービスを作成するには、次のようにします。

  1. データベース・ナビゲータまたはリソース・パレットで、データベース接続ノード、スキーマ・ノード、「パッケージ」ノードの順に開き、さらにそのパッケージのノードを開きます。

  2. PL/SQLパッケージの本体を右クリックして、「Webサービスとして公開」を選択し、PL/SQLサービスの作成ウィザードを起動します。

16.5.4 TopLinkデータベースWebサービス・プロバイダの作成方法

TopLink DB Webサービス・プロバイダの作成ウィザードを使用すると、TopLinkデータベース用のJAX-WS Webサービス・プロバイダを構築し、次のいずれかタスクを実行できます。

  • ストアド・プロシージャおよびファンクションへのアクセス

  • SQL問合せの実行

  • 表に対するCRUD操作の実行

選択したサービスのタイプに基づいて、Oracle WebLogic Serverなどのアプリケーション・サーバーにデプロイできるWebサービス・プロバイダおよびWSDL文書がウィザードによって生成されます。TopLink Webサービス・プロバイダのデプロイは、他のJ2EE Webアプリケーションのデプロイと似ています。詳細は、第16.12項「Webサービスのデプロイ」を参照してください。

次の点に注意する必要があります。

  • JAX-WS Webサービス・プロバイダが生成されます。

  • TopLink Webサービス・プロバイダを編集する場合、データベース接続が存在することを確認してください。存在しない場合、エラー・メッセージが表示されます。データベース接続が削除されている場合は新規に作成し、削除前と同じ名前を付けます。

  • 場合によっては、TopLink Webサービス・プロバイダを生成できない可能性があります。制限の詳細は、第16.2.5項「PL/SQL Webサービスおよび型の使用方法」を参照してください。

プロジェクトからTopLink Webサービス・プロバイダを作成するには、次のようにします。

  1. アプリケーション・ナビゲータでプロジェクトを選択します。

  2. 「ファイル」→「新規」を選択して「新規ギャラリ」を開きます。

  3. 「カテゴリ」リストで「ビジネス層」を開き、「Webサービス」を選択します。「項目」リストで「TopLink DB Webサービス・プロバイダ」をダブルクリックして、TopLink Webサービス・プロバイダの作成ウィザードを起動します。

    ウィザードの操作の詳細なヘルプを参照するには、ウィザード内で[F1]を押すか、「ヘルプ」をクリックします。

16.5.5 Webサービスの原子性トランザクションの使用方法

WebLogic Webサービスは、次の仕様のサポートを通じて、Websphere、JBoss、Microsoft .NETなどの他の外部トランザクション処理システムとの相互運用を可能にします。

これらの仕様は、一連の参加者の間で分散アクティビティを調整するための拡張可能なフレームワークを定義します。コーディネータは中央のコンポーネントで、トランザクションの状態(調整コンテキスト)を管理し、WebサービスおよびWebクライアントを参加者として登録することを可能にします。Webサービスの原子性トランザクションの詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JAX-WS Webサービスの高度な機能のプログラミング』のWebサービスの原子性トランザクションの使用に関する項を参照してください。

Webサービス実装の原子性トランザクションをクラス・レベルまたは同期メソッド(双方向メソッドの場合のみ)で有効にするには、次のいずれかの方法を使用します。

Webサービス・クライアントの原子性トランザクションを有効にするには、次のいずれかの方法を使用します。

  • @WebServiceRef注釈またはWebサービスのインジェクション可能なターゲットを右クリックし、メニューから「トランザクションの追加」を選択し、@Transactional注釈を追加します。

  • Webサービス・プロキシまたはWebサービス・ディスパッチの作成時のパラメータとしてweblogic.wsee.wstx.wsat.TransactionalFeatureを渡します。詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JAX-WS Webサービスの高度な機能のプログラミング』のWebサービスの原子性トランザクションの使用に関する項を参照してください。

Webサービスの原子性トランザクションを有効にする場合、次の情報を構成します。

  • バージョン: Webサービスおよびクライアントで使用されるWebサービスの原子性トランザクションの調整コンテキストのバージョン。クライアントでは、送信メッセージでのみ使用されるバージョンを指定します。指定した値は、トランザクション全体で整合している必要があります。有効な値は、WSAT10WSAT11WSAT12およびDEFAULTです。WebサービスのDEFAULT値は3つのバージョンすべてです(インバウンド・リクエストによって決定します)。Webサービス・クライアントのDEFAULT値は、WSAT10です。

  • フロー・タイプ: 調整コンテキストがトランザクション・フローとともに渡されるかどうかを指定するフラグ。次の表は、有効な値およびWebサービスおよびクライアントでのそれらの意味の概要を示します。また、@TransacationAttribute注釈を使用するEJB型のWebサービス用にWebサービスの原子性トランザクションを構成する場合の有効な値の組合せの概要を示します。

表16-3 トランザクション構成

Webサービス・クライアント Webサービス EJB @TransactionAttributeの有効な値

NEVER

JTAトランザクションがある場合: トランザクションの調整コンテキストをエクスポートしません。

JTAトランザクションがない場合: トランザクションの調整コンテキストをエクスポートしません。

トランザクション・フローが存在する場合: トランザクションの調整コンテキストをインポートしません。CoordinationContextヘッダーにmustunderstand="true"が含まれている場合は、SOAPフォルトがスローされます。

トランザクション・フローがない場合: トランザクションの調整コンテキストをインポートしません。

NEVER、NOT_SUPPORTED、REQUIRED、REQUIRES_NEW、SUPPORTS

SUPPORTS(デフォルト)

JTAトランザクションがある場合: トランザクションの調整コンテキストをエクスポートします。

JTAトランザクションがない場合: トランザクションの調整コンテキストをエクスポートしません。

トランザクション・フローが存在する場合: トランザクション・コンテキストをインポートします。

トランザクション・フローがない場合: トランザクションの調整コンテキストをインポートしません。

SUPPORTS、REQUIRED

MANDATORY

JTAトランザクションがある場合: トランザクションの調整コンテキストをエクスポートします。

JTAトランザクションがない場合: 例外がスローされます。

トランザクション・フローが存在する場合: トランザクション・コンテキストをインポートします。

トランザクション・フローがない場合: サービス側の例外がスローされます。

MANDATORY、REQUIRED、SUPPORTS


JavaクラスでWebサービスの原子性トランザクションを有効にするには、次のようにします。

  1. ソース・エディタでWebサービス・クラスを開きます。

  2. JDeveloperコード・インサイトを使用すると便利です。

    @Transactionalのように、注釈の入力を開始します。中断するか[Ctrl]キーと[Shift]キーを押しながら[Space]キーを押すと、ポップアップが表示され、文を正しく完成するためのエントリを選択できます。

  3. 次のようにバージョンおよびフロー・タイプ値を指定できます。

    @Transactional(version=Transactional.Version.[WSAT10|WSAT11|WSAT12|DEFAULT],
            value=Transactional.TransactionFowType.[MANDATORY|SUPPORTS|NEVER])
    

プロパティ・インスペクタでWebサービスの原子性トランザクションを有効にするには、次のようにします。

  1. ソース・エディタでWebサービス・クラスが開かれた状態で「表示」→「プロパティ・インスペクタ」を選択し、プロパティ・インスペクタを開きます。

    詳細を参照するには、プロパティ・インスペクタ内で[F1]を押すか、「ヘルプ」をクリックします。

  2. publicクラス@WebServiceまたはクラスの双方向メソッド行にカーソルを置いた状態で、プロパティ・インスペクタのWebサービス拡張機能ノードにナビゲートします。

  3. 「トランザクションの追加」を選択します。

    プロパティ・インスペクタがリフレッシュされ、フロー・タイプおよびバージョンを設定するためのオプションが表示されます。構成オプションの詳細は、表16-3を参照してください。

  4. 「フロー・タイプ」ドロップダウン・リストから、フロー・タイプを選択します。有効な値は、SupportsNeverおよびMandatoryです。このフィールドのデフォルトはSupportsです。

  5. 「バージョン」ドロップダウン・リストから、バージョンを選択します。有効な値は、WS-AT 1.0WS-AT 1.1WS-AT 1.2およびDefaultです。WebサービスのDefault値は3つのバージョンすべてです(インバウンド・リクエストによって決定します)。Webサービス・クライアントのDefault値は、WS-AT 1.0です。

Webサービス・クライアントのインジェクション可能なターゲットでWebサービスの原子性トランザクションを有効にするには、次のようにします。

  1. ソース・エディタでWebサービス・クライアントを開きます。

  2. @WebServiceRef注釈またはインジェクション可能なターゲットを右クリックし、メニューから「トランザクションの追加」を選択します。

    @Transactional注釈がWebサービス・クライアントに追加されます。

  3. 次のようにバージョンおよびフロー・タイプ値を指定できます。

    @Transactional(version=Transactional.Version.[WSAT10|WSAT11|WSAT12|DEFAULT],
               value=Transactional.TransactionFowType.[MANDATORY|SUPPORTS|NEVER])
    

    構成オプションの詳細は、表16-3を参照してください。

16.5.6 ソースからのWebサービスの再生成方法

Webサービスは再生成が必要な場合があります。たとえば、サービスの最初の生成元のソースが変更された場合などです。


注意:

Webサービスを再生成すると、最後に生成されてからWSDLに対して行った変更がすべて破棄されます。


Webサービス・クライアントを再生成した後、Webサービスに対してクライアントを再生成する必要がある場合があります。そうしない場合、コンパイル・エラー(クライアントがWebサービスと同じプロジェクトにある場合)や、ランタイム・エラー(クライアントがWebサービスと別のプロジェクトにある場合)が発生する場合があります。

注釈を使用していないときに基礎となるクラスのメソッドの名前を変更する場合、サービスを再生成すると、メソッドが選択されていないというエラー・メッセージが表示されます。これは、メソッドがネームスペースにより追跡され、ネームスペースを変更するとJDeveloperで再生成の対象を決定できなくなるためです。このエラーを修正するには、Webサービス・コンテナをダブルクリックしてWebサービス・エディタを開き、「メソッド」ページに移動してWebサービスの基にするメソッドを選択する必要があります。

ソースからWebサービスを再生成するには、次のようにします。

  1. アプリケーション・ナビゲータで、再生成するWebサービス・コンテナを右クリックします。

  2. ポップアップ・メニューから「ソースからWebサービスを再生成」を選択します。

    サービスが自動的に再生成され、最後にサービスを生成した後にWSDLに加えた変更はすべて失われます。

16.5.7 ハンドラの使用方法

JDeveloperでは、ハンドラ・クラスを指定してWebサービス・メッセージを処理できます。ハンドラは、初期設定済パラメータ、SOAPロールまたはSOAPヘッダーを使用できます。

ハンドラを定義するには、次のようにします。

  1. Webサービスを作成します。詳細は、第16.5.1項「Java Webサービスの作成方法」を参照してください。

    または

    Webサービス・エディタを開きます。詳細は、第16.10項「Webサービスの編集および削除」を参照してください。

  2. 「ハンドラ詳細」ページで、使用する値を入力します。

    作業中に詳細を参照するには、[F1]を押すか、ダイアログ内から「ヘルプ」をクリックします。

16.5.8 JAX-RPCのスーパークラス・メソッドの公開方法


注意:

JAX-WS Webサービスの場合、スーパークラス・メソッドは常に公開されます。


JAX-RPCのスーパークラス・メソッドを公開する場合、次の2つの例を検討してください。

package mypackage;
public class Shape {
    public void area() {
    }
}

および

package mypackage;
public class Circle extends Shape {
    public Circle() {
    }
    public void callParentMethod() {
        super.area();
    }
}

Shapeを拡張するクラスCircleに、親クラスのメソッドareaをコールする責任を持つpublicメソッドcallParentMethod()があります。スーパークラス・メソッドarea()をコールするには、publicメソッドcallParentMethod ()を使用してCircleクラスを基にJ2EE Java Webサービスを作成します。

16.5.9 オーバーロードのメソッドの処理方法

Webサービスの基として使用するJavaクラスにオーバーロード・メソッドが含まれている場合、JDeveloperではそのメソッドが自動処理されます。ただし、J2EE 1.4 Webサービスを作成する場合で、サービスの基になるクラスを変更して既存のメソッドがオーバーロード・メソッドとなる場合は、マッピング・ファイルを更新する必要があります。

オーバーロード・メソッドを処理する手順は、開発するWebサービスのタイプ(JAX-WSまたはJAX-RPC)によって異なります。

JAX-WS Webサービスのオーバーロード・メソッドの処理

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 Fusion Middleware Oracle WebLogic Server JAX-WS Webサービス・スタート・ガイド』のパブリック操作としてのJWSメソッドの公開の指定(@WebMethodおよび@OneWay注釈)に関する項を参照してください。

JAX-RPC Webサービスのオーバーロード・メソッドの処理

JAX-RPC Webサービスの場合、オーバーロード・メソッドを処理する方法は2通りあります。

  • マッピング・ファイルを手動で変更します。

  • マッピング・ファイルを削除してWebサービスを再作成します。

マッピング・ファイルを手動で変更するには、次のようにします。

Javaクラスを基にWebサービスを作成した後、オーバーロード・メソッドをクラスに追加します。

マッピング・ファイルを削除してWebサービスを再作成するには、次のようにします。

  1. アプリケーション・ナビゲータで、「Webコンテンツ」およびWEB-INFを開きます。

  2. <web_service>-java-wsdl-mapping.xmlを右クリックして「削除」を選択します。

  3. Webサービス・エディタを開きます。詳細は、第16.10項「Webサービスの編集および削除」を参照してください。

  4. 「OK」をクリックして閉じ、サービスを再生成します。

16.5.10 JAX-RPCマッピング・ファイル・エディタを使用したJavaメソッドとWSDL操作間のマッピングの設定方法

JAX-RPCでは、Java型とWSDL定義がマップされます。ただし、サポートの必要なタイプがJSR-109仕様に含まれていない場合、またはWebサービスに必要な機能を提供するために異なるマッピングを使用する必要がある場合は、JAX-RPCマッピング・ファイル・エディタを使用して既存のマッピング・ファイルを変更したり、独自のマッピング・ファイルを作成することができます。

JAX-RPCマッピング・ファイル・エディタはスキーマ駆動の専用エディタで、J2EE 1.4 Webサービス用のJSR-109準拠のマッピング・ファイルの作成に役立ちます。このマッピング・ファイルがJava-WSDLマッピングを標準化するので、通常、JSR-109のデフォルトのマッピング規則が満たされない場合にのみ完全なマッピングを提供する必要があります。

次の各機能が、JAX-RPCマッピング・ファイル・エディタの使用時に利用できます。

  • 入力時に、「<」(左角括弧)を入力した後一時休止するか、または[Ctrl]キーを押しながら[Space]キーを押すと(デフォルトのキー・マッピングを使用している場合)コード・インサイトを起動できます。コード・インサイトには、スキーマに基づいて有効な要素がリスト表示されます。

  • 「表示」→「コンポーネント・パレット」を選択してパレットを開き、ドロップダウン・リストから使用可能なページを1つ選択できます。

  • マッピング・ファイルの要素が構造ウィンドウに階層表示され、構造ウィンドウには入力および編集時に見つかったXML構文エラーも表示されます。要素またはエラーをダブルクリックして、JAX-RPCマッピング・ファイル・エディタで編集することができます。

  • エディタ内でXML要素を右クリックして「構造ウィンドウ内で検索」を選択し、「構造」ウィンドウを開いて要素の表示と選択を行うことができます。編集中に、開いたファイルを右クリックして「XMLの自動インデント」を選択すると要素を適切にインデントできます。

  • 開いた「JAX-RPCマッピング・ファイル・エディタ」ウィンドウ、またはアプリケーション・ナビゲータで選択されたWebサービスの「構造」ウィンドウで、マッピング・ファイルを右クリックして「WSDLの検証」を選択します。「WSDLの検証」コマンドを使用すると、登録済のスキーマと比較してXMLが検証されます。

16.6 WSDLからのSOAP Webサービスの作成(トップ・ダウン)

JDeveloperでは、トップ・ダウンWebサービスを開発(つまり、WSDLから開始)できます。JDeveloperにより、サービス実装とそのデプロイメント・ディスクリプタが生成されます。ファイル・システムのWSDLを参照したり、Webサービスの検索ウィザードを使用して、リソース・パレットでUDDIレジストリ内のWebサービスを検索できます。

WSDLからSOAP Webサービスを作成(トップ・ダウン)するには、次のようにします。

  1. アプリケーション・ナビゲータで、Webサービスを作成するプロジェクトを選択します。

  2. 「ファイル」→「新規」を選択して「新規ギャラリ」を開きます。

  3. 「カテゴリ」リストで「ビジネス層」を開き、「Webサービス」を選択します。「項目」リストで「WSDLからJava Webサービス」をダブルクリックして、WSDLからJava Webサービスを作成ウィザードを起動します。

    ウィザードの操作の詳細なヘルプを参照するには、ウィザード内で[F1]を押すか、「ヘルプ」をクリックします。

    SOAP Webサービスが作成され、Java実装クラスがエディタで自動的に開かれます。

16.7 RESTful Webサービスの作成

Representational State Transfer (REST)は、SOAPなどの追加メッセージング・レイヤーなしで、標準化されたインタフェース(HTTPなど)を介してデータを送信する単純なインタフェースを記述するものです。RESTには、ステートレス・サービスを作成するための一連の設計ルールが用意されており、これらはリソース(特定の情報のソース)として表示されます。それぞれのリソースは固有のURIで識別できます。クライアントがURIを使用してリソースにアクセスすると、標準化された固定のメソッド・セットと、リソースの表示が返されます。クライアントは、新しい各リソース表示を使用してステートを転送します。

HTTPプロトコルを使用してRESTfulリソースにアクセスする際は、リソース識別子がリソースのURLとなります。そのリソースに対して実行する標準操作は、HTTPメソッドの1つ(GETPUTDELETEPOSTまたはHEAD)です。

次の項では、RESTful Webサービスおよびクライアントを作成する方法について説明します。

16.7.1 プロジェクトへのJersey JAX-RS参照実装の追加方法

JDeveloperでRESTful Webサービスを作成する前に、Jersey JAX-RSの参照実装(RI)をダウンロードしてプロジェクトに追加する必要があります。Jersey JAX-RS RIは、http://jersey.java.netから入手できます。Jersey RIに関する情報を参照し、関連するライブラリJARファイルを含むZIPファイルをダウンロードするには、「ダウンロード」をクリックします。ダウンロードしたら、Jersey RIをプロジェクトに追加する必要があります。


注意:

Jersey RI 1.1.5.1 (jersey-archive-1.1.5.1)バージョン以降は、JDeveloperのこのリリースと互換性があります。


Jersey JAX-RS RIをプロジェクトに追加するには、次のようにします。

  1. アプリケーション・ナビゲータでプロジェクトを選択し、「プロジェクト・プロパティ」ダイアログを開きます。

    ダイアログを表示するには、「プロジェクト」フォルダをダブルクリックするか、「編集」→「プロパティ」を選択します。

  2. 「ライブラリとクラスパス」ノードを選択します。

  3. 「ライブラリとクラスパス」ページで「ライブラリの追加」をクリックします。

  4. 「ライブラリの追加」ダイアログで、「新規」をクリックします。

  5. 「ライブラリの作成」ダイアログで、新規ライブラリの名前(JAX-RSなど)を入力し、その場所を選択します。

  6. 「デフォルトでデプロイ済」を有効にします。


    注意:

    このチェック・ボックスを選択しない場合、RESTful Webサービスおよびクライアントのデプロイ時にエラーが表示されます。


  7. 「クラスパス」を選択し、「エントリの追加」をクリックします。

  8. 「パス・エントリの選択」ダイアログで、Jerseyアーカイブのlibディレクトリにナビゲートします。たとえば、c:\mylibraries\jersey-archive-1.1.5.1\libなどです。

  9. libディレクトリ内のすべてのJARファイルを選択し、「選択」をクリックします。


    注意:

    RESTful Webサービスのみを開発する(つまり、RESTfulクライアントは開発しない)場合、jersey-client-1.1.5.1.jarを含める必要はありません。同様に、RESTful Webサービス・クライアントのみを開発する場合、jersey-server-1.1.5.1.jarを含める必要はありません。


  10. ソース・ファイルをダウンロードした場合、ソース・ファイルを指し示すよう「ソースパス」を設定できます(前のステップでクラスパスを定義した方法と同じ)。

  11. 「ライブラリの作成」ダイアログで、「OK」をクリックします。

  12. 「ライブラリの追加」ダイアログで、「OK」をクリックします。

  13. ライブラリとクラスパス・ページで作業が完了した後、「OK」をクリックします。

Jersey JAX-RS RIをプロジェクトに追加したら、JAX-RS Webサービスおよびクライアントを作成できます。

16.7.2 JAX-RS Webサービスおよびクライアントの作成方法

Jersey JAX-RS RIをプロジェクトに追加したら、JDeveloperを使用してJAX-RS Webサービスおよびクライアントの作成を開始できます。コード・インサイトやインポート・アシスタンスなどの標準Javaソース・エディタのすべての機能がJAX-RSコールと連携して機能するようになります。

JAX-RSおよびサンプルの詳細は、Jersey RIドキュメント(https://wikis.oracle.com/display/Jersey/Main)を参照すると役に立ちます。

RESTful Webサービスを作成したら、HTTPアナライザを使用してこれらをテストできます。詳細は、第16.13.4項「HTTPアナライザを使用したWebサービスの調査方法」を参照してください。


注意:

RESTful Webサービスおよびクライアントのデプロイ時にエラーが発生した場合は、Jersey JAX-RS RIをプロジェクトに追加する際に「デフォルトでデプロイ済」チェック・ボックスを選択していることを確認してください。


簡単なHello Worldの例

例16-1は、非常に簡単なRESTful Webサービスの例を示しています。

例16-1 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 service
@Path("/helloworld")
public class helloWorld {
 
   // Specifies that the method processes HTTP GET requests 
   @GET
   @Path("sayHello")
   @Produces("text/plain")
   public String sayHello() {
      return "Hello World!";
   }
}

例16-2は、前に定義したRESTful Webサービスをコールする簡単なRESTfulクライアントを示しています。この例では、明確にJersey JAX-RS RIによって提供されるクラスを使用しています。これらのクラスはJAX-RS標準の一部ではありません。

例16-2 RESTfulクライアント

package samples.helloworld.client;

import com.sun.jersey.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-Project1-context-root/
            jersey/helloWorld");
      String response = resource.get(String.class);
   }
}

web.xmlファイルについて

JDeveloperでは、サーブレット・クラスはweb.xmlファイルに自動的には追加されません。かわりに、JAX-RSメソッドをコードからコールするときに追加するかどうか確認するよう求められます。たとえば、図16-1を参照してください。

図16-1 更新を確認するプロンプト

更新を確認するプロンプト

注意:

web.xmlファイルはなぜ自動的に更新されないのでしょうか。将来、Java EE 6.0コンテナをデプロイするときに、web.xmlの更新が必要になります。したがって、これはオプションのアクティビティとして設定されています。


web.xmlを更新するには、次のようにします。

web.xmlを更新するには、次のように、「web.xmlをJersey JAX-RS Webサービス用に構成します」を選択します。

<?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">
   <servlet>
      <servlet-name>jersey</servlet-name>
      <servlet-class>
          com.sun.jersey.spi.container.servlet.ServletContainer
      </servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>jersey</servlet-name>
      <url-pattern>/jersey/*</url-pattern>
   </servlet-mapping>
</web-app> 

16.8 WSDLの管理

JDeveloperには、次の各項に示すように、WebサービスのWSDLを管理する方法が多数用意されています。

16.8.1 WSDLドキュメントの作成方法

WSDLドキュメントを作成することにより、たとえば、トップ・ダウンWebサービスを作成できます。

WSDLを作成するには、次のようにします。

  1. アプリケーション・ナビゲータで、Webサービスの作成元のJavaクラスまたはEJBが含まれるプロジェクトを選択します。

  2. 「ファイル」→「新規」を選択して「新規ギャラリ」を開きます。

  3. 「カテゴリ」リストで「ビジネス層」を開き、「Webサービス」を選択します。「項目」リストで、「WSDLドキュメント」をダブルクリックして「WSDLドキュメントの作成」ダイアログを開きます。

    ウィザードの操作の詳細なヘルプを参照するには、ダイアログ内で[F1]を押すか、「ヘルプ」をクリックします。

16.8.2 Webサービス・プロジェクトへのWSDLの追加方法

Webサービス用のWSDLファイルを生成し、次に示す手順を使用してこれをプロジェクトに追加できます。WSDLファイルは自動的に生成され、プロジェクト内のWebアプリケーション用のWEB-INF/wsdlディレクトリおよびEJBアプリケーション用のMETA-INF/wsdlディレクトリに追加されます。また、ローカルWSDLの場所を参照するためにwsdlLocation属性を使用して@WebService注釈が更新されます。次に例を示します。

@WebService(wsdlLocation="WEB-INF/wsdl/CreditRatingService.wsdl")

注意:

WSDLファイルがWEB-INF/wsdlまたはMETA-INF/wsdlディレクトリにすでに存在する場合は、既存のWSDLファイルを上書きするかどうかを尋ねられます。


WSDLをWebサービス・プロジェクトに追加するには、次のようにします。

アプリケーション・ナビゲータで、WSDLを追加するWebサービスを右クリックし、ポップアップ・メニューから「WSDLを生成し、プロジェクトを追加します」を選択します。WSDLが自動的に生成され、WEB-INF/wsdlディレクトリでプロジェクトに追加されます。

16.8.3 WebサービスのWSDLの表示方法

WebサービスのWSDLを表示できます。WSDLファイルは、Webサービスに定義されている注釈に基づいて一時ディレクトリに生成され、表示されます。

Webサービス・プロジェクトにWSDLを表示するには、次のようにします。

アプリケーション・ナビゲータで、WSDLを表示するWebサービスを右クリックし、ポップアップ・メニューから「Webサービス注釈のWSDLの表示」を選択します。

WSDLファイルが一時ディレクトリに生成され、表示されます。

16.8.4 ローカル・ディレクトリへのWSDLの保存方法

WebサービスのリモートWSDLを表示する場合、WSDLをローカル・ディレクトリに保存できます。


注意:

WSDLをWebサービス・プロジェクト内で使用する場合、プロジェクト・ディレクトリ(たとえば、Webアプリケーションの場合はWEB-INF/wsdl、EJBアプリケーションの場合はMETA-INF/wsdl)によってアクセスされる場所にこれをコピーし、WSDLの場所を参照するように@WebService注釈を更新します。


ローカル・ディレクトリにWSDLを保存するには、次のようにします。

  1. WebサービスのWSDLファイルを表示します。

  2. 「ツール」→「WSDLをローカルでコピー」を選択します。

  3. 「WSDLの移動先を選択」ダイアログで、WSDLを保存する場所にナビゲートするか、「ディレクトリ名」テキスト・ボックスに場所を入力し、「選択」をクリックします。

    WSDLが指定した場所に保存されます。

16.9 ポリシーとWebサービスの使用

この項では、JDeveloperで作成されたWebサービスとともにポリシーを使用する方法について説明します。次のタイプのポリシーを使用できます。

2つのタイプのポリシーを同じWebサービスに混在させることはできないため、計画段階でどちらを使用するかを決定する必要があります。1つのタイプのポリシーをWebサービスに追加したら、現在アタッチされているポリシーを削除せずに他のタイプに切り替えることはできません。たとえば、Oracle WSMポリシーを構成した後、Oracle WebLogic Webサービス・ポリシーを使用する必要がある場合、Oracle WebLogic Webサービス・ポリシーをアタッチする前にOracle WSMポリシーを削除する必要があります。

次の項では、Webサービスとともにポリシーを使用する方法について説明します。

始める前に:

ポリシーを使用するために実行する必要のあるすべてのタスクについて、詳細な検討はこのガイドの範囲外ですが、一般的に実行が必要なステップは、次のとおりです。

  1. 使用するポリシーを決定します。詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』の使用するセキュリティ・ポリシーの決定に関する項を参照してください。

  2. クラスまたはサービスにポリシーをアタッチします。詳細は、第16.9.3項「Webサービスへのポリシーのアタッチ方法」を参照してください。

  3. 正しいキーストアおよびポリシーによる処理が必要な他の情報を使用してサーバーを構成し、サーバーにWebサービスをデプロイします。詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のポリシーの構成に関する項を参照してください。

  4. Webサービスをテストし、ポリシーが予想どおりに動作することを確認します。詳細は、第16.11.1項「ブラウザでのWebサービスのテスト方法」を参照してください。

16.9.1 Oracle WSMポリシーについての注意事項

Oracle WSMポリシーは、ポート・レベルでJAX-WS Webサービスにアタッチできます。現在、JDeveloperではOracle WSMセキュリティ・ポリシーのみをサポートしています。

JDeveloperは、次の方法でアクセスする「プリファレンス」ダイアログの「WSポリシー」ページにあるデフォルトの場所で設定されたポリシー・ストアを使用するよう事前構成されています。

  • 「ツール」メニュー→「プリファレンス」→「WSポリシー・ストア」

    または

  • 「アプリケーション」メニュー→「アプリケーションのプロパティ」→「WSポリシー・ストア」

自社のOracle WSMカスタム・ポリシーを使用するために別のポリシー・ストアの場所を指定できます。詳細は、第16.9.8項「異なるOracle WSMポリシー・ストアの使用方法」を参照してください。

Oracle WSMポリシーの詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』を参照してください。

ポリシーの注釈

Javaクラスでweblogic.wsee.jws.jaxws.owsm.SecurityPolicy注釈を使用して単一のポリシーをアタッチできます。次はその例です。

@SecurityPolicy(uri = "oracle/wss11_message_protection_service_policy")

複数の@SecurityPolicy要素が含まれる@SecurityPoliciesを使用して、複数のポリシーをコンポジットとしてアタッチできます。次はその例です。

@SecurityPolicies( { 
   @SecurityPolicy(uri = "oracle/wss_http_token_service_policy"), 
   @SecurityPolicy(uri = "oracle/wss_oam_token_service_policy")
} )

注意:

有効なポリシーのリストを表示するには、[Ctrl]キーと[Alt]キーを押しながら[Enter]キーを押し、コード・アシスト機能を呼び出します。


16.9.2 Oracle WebLogic Webサービス・ポリシーについての注意事項

Oracle WebLogic Webサービス・ポリシーは、ポート・レベルまたは操作レベルでJAX-WSおよびJAX-RPC Webサービスにアタッチできます。Oracle WebLogic Webサービス・ポリシーを使用すると、ポリシーの使用方向を指定できます。つまり、インバウンド(リクエスト)メッセージまたはアウトバウンド(レスポンス)メッセージ、あるいはその両方に適用できます。

自社のOracle WebLogicのカスタムWebサービス・ポリシーを使用するようJDeveloperを構成できます。詳細は、第16.9.7項「カスタムWebサービス・ポリシーの使用方法」を参照してください。

詳細は、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』を参照してください。

ポリシーの注釈

Javaクラスでweblogic.jws.Policy注釈を使用して単一のポリシーをアタッチできます。次はその例です。

@Policy(uri = "policy:Wssp1.2-2007-Https-UsernameToken-Plain.xml")

複数の@Policy要素が含まれる@Policiesを使用して複数のポリシーをコンポジットとしてアタッチできます。次はその例です。

@Policies( { 
   @Policy(uri = "policy:Wssp1.2-2007-Https-BasicAuth.xml"), 
   @Policy(uri = "policy:Wssp1.2-2007-Https-UsernameToken-Plain.xml")
} )

注意:

有効なポリシーのリストを表示するには、[Ctrl]キーと[Alt]キーを押しながら[Enter]キーを押し、コード・アシスト機能を呼び出します。


16.9.3 Webサービスへのポリシーのアタッチ方法

JDeveloperでは、Oracle Web Service Manager (Oracle WSM)ポリシーまたはOracle WebLogic Webサービス・ポリシーをWebサービスにアタッチできます。

Webサービスにポリシーをアタッチした後、ポリシーを構成する必要があります。詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のポリシーの構成に関する項を参照してください。

Webサービスにポリシーをアタッチする方法は、次のとおりです。

  • 新規Webサービスの作成時にWebサービス・ウィザードでアタッチするポリシーを選択するか、すでに存在するWebサービスの更新時にWebサービス・エディタでアタッチするポリシーを選択します。

  • Javaクラスで直接ポリシー注釈を追加します。この場合、コード・インサイト機能が役に立ちます。詳細は、第16.2.7項「Webサービスのコード・インサイトの使用方法」を参照してください。

  • プロパティ・インスペクタを使用します。

Webサービス・ウィザードまたはWebサービス・エディタでポリシーをアタッチするには、次のようにします。

Java Webサービスの作成ウィザードまたはWebサービス・エディタで、「ポリシーの構成」ページにナビゲートします。作業中に詳細を参照するには、[F1]を押すか、ダイアログ内から「ヘルプ」をクリックします。

Oracle WSMポリシーをアタッチする場合、次の方法により、ポリシーおよびそのアサーションに関する詳細を表示できます。

  • 「説明の表示」チェック・ボックスをクリックし、各ポリシーの説明を表示します。

  • 「表示」をクリックし、ポリシー・ファイル内のポリシー・アサーションをレビューします。

  • 「選択されたポリシーの表示」チェック・ボックスをクリックし、現在選択されているポリシーのみを表示します。

Javaクラスでポリシー注釈をアタッチするには、次のようにします。

  1. ソース・エディタでWebサービス・クラスを開きます。

  2. コード・インサイトを使用すると役に立ちます。

    注釈(@Policiesなど)の入力を開始します。中断するか[Ctrl]キーと[Shift]キーを押しながら[Space]キーを押すと、ポップアップが表示され、文を正しく完成するためのエントリを選択できます。

ポリシー注釈の使用の詳細は、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』の@Policyおよび@Policies注釈を使用したJWSファイルの更新に関する項とSecurityPolicyおよびSecurityPolicies注釈に関する項を参照してください。

プロパティ・インスペクタでポリシーに注釈をアタッチするには、次のようにします。

  1. ソース・エディタでWebサービス・クラスが開かれた状態で「表示」→「プロパティ・インスペクタ」を選択し、プロパティ・インスペクタを開きます。

    詳細を参照するには、プロパティ・インスペクタ内で[F1]を押すか、「ヘルプ」をクリックします。

  2. クラスのpublic classまたは@WebService行にカーソルがある状態で、Oracle WSMポリシーまたはOracle WebLogic Webサービス・ポリシーの使用を選択できるWebサービス拡張機能ノードにナビゲートします。

  3. 「OWSMポリシーで保護」または「WLSポリシーで保護」を選択します。

    プロパティ・インスペクタがリフレッシュされ、選択したポリシー・タイプ(Oracle WSMまたはWLS)に対して単一のポリシーまたは複数のポリシーを選択するオプションが表示されます。

  4. 「プロパティの編集: 複数ポリシー」ダイアログで複数のポリシーをアタッチする場合は「...」をクリックします。または、「単一ポリシー」リストから単一のポリシーを選択します。

    「プロパティの編集: 複数ポリシー」ダイアログを使用して複数のOracle WSMポリシー・ファイルをアタッチする場合、「表示」をクリックしてポリシー・ファイル内のポリシー・アサーションをレビューします。

    同じWebサービスで両方のタイプのポリシーを使用することはできません。間違ったタイプを選択した場合は、JAX-WSクラスからポリシー文が含まれる行を削除し、再度選択できるようにしてください。

16.9.4 Webサービス・クライアントへのOracle WSMポリシーのアタッチ方法

JDeveloperでは、Oracle Web Service Manager (Oracle WSM)をWebサービス・クライアントにアタッチできます。

Webサービス・クライアントにOracle WSMポリシーをアタッチした後、ポリシーを構成する必要があります。詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のポリシーの構成に関する項を参照してください。


注意:

WebLogic Webサービス・ポリシーを使用するWebサービスを起動するためのクライアント・アプリケーションの更新の詳細は、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ保護付きWebサービスを起動するためのクライアント・アプリケーションの更新に関する項を参照してください。


Webサービス・クライアントにOracle WSMポリシーをアタッチする方法は、次のとおりです。

  • 新規Webサービス・クライアントの作成時にWebサービス・クライアントおよびプロキシの作成ウィザードでアタッチするOracle WSMポリシーを選択するか、すでに存在するWebサービス・クライアントの更新時にWebサービス・クライアントおよびプロキシの作成エディタでアタッチするOracle WSMポリシーを選択します。Webサービス・クライアントおよびプロキシの作成ウィザードまたはエディタで、「ポリシー」ページにナビゲートします。

  • Oracle WSMポリシーをアタッチする場合、次の方法により、ポリシーおよびそのアサーションに関する詳細を表示できます。

    • 「説明の表示」チェック・ボックスをクリックし、各ポリシーの説明を表示します。

    • 「表示」をクリックし、ポリシー・ファイル内のポリシー・アサーションをレビューします。

    • 「選択されたポリシーの表示」チェック・ボックスをクリックし、現在選択されているポリシーのみを表示します。

    • 「選択用に互換性のあるクライアント・ポリシーのみ表示。」チェック・ボックスをクリックし、関連するWebサービスと互換性のあるポリシーを表示します。

      作業中に詳細を参照するには、[F1]を押すか、ダイアログ内から「ヘルプ」をクリックします。

  • 手動でweblogic.wsee.jws.jaxws.owsm.SecurityPolicyFeatureクラスを使用して単一のポリシーをアタッチするか、weblogic.wsee.jws.jaxws.owsm.SecurityPoliciesFeatureを使用して複数のポリシーをアタッチします。

    詳細は、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』を参照してください。

16.9.5 WebLogic Webサービス・ポリシーを使用して保護されたWebサービスの呼出し方法

WebLogic Webサービス・ポリシーを通知するWSDLからWebサービス・クライアントを作成または編集する場合、Webサービスを呼び出すための資格証明を構成できます。

WebLogic Webサービス・ポリシーを使用して保護されたWebサービスを呼び出すWebサービス・クライアントの資格証明を構成するには、次のようにします。

  1. 次のタスクのいずれかを実行します。

  2. ウィザードの「資格証明の選択」ページにナビゲートします。

  3. ドロップダウン・リストから既存の資格証明セットを選択するか、「新規」をクリックして新規の資格証明セットを定義します。

    ウィザードの操作のヘルプを参照するには、ウィザード内で[F1]を押すか「ヘルプ」をクリックします。

  4. ウィザードを完了します。

クライアント・クラスが更新され、クライアント資格証明を設定するためのメソッドが組み込まれます。追加された後、資格証明値は必要に応じて変更できます。

次の例は、生成されてクライアント・クラスに組み込まれるコードを示しています。

@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 Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ保護付きWebサービスを起動するためのクライアント・アプリケーションの更新に関する項を参照してください。

16.9.6 Webサービスのポリシーの編集および削除方法

次のいずれかの方法を使用して、ポリシーを編集したりWebサービスからポリシーを完全に削除できます。

  • Webサービス・エディタ

  • ソース・エディタ

  • プロパティ・インスペクタ

Webサービス・エディタを使用してポリシーを変更または削除するには、次のようにします。

  1. アプリケーション・ナビゲータでWebサービスを右クリックして、「Webサービス・プロパティ」を選択します。

    作業中に詳細を参照するには、[F1]を押すか、ダイアログ内から「ヘルプ」をクリックします。

  2. 「ポリシーの構成」ページにナビゲートします。ここで、選択したポリシー・タイプのポリシーを変更したり、別のタイプのポリシーを使用するよう変更(たとえば、Oracle WSMポリシーからOracle WebLogic Webサービス・ポリシーに変更)したり、「ポリシーなし」を選択できます。Webサービスは、エディタのこのページを終了するときに変更されます。

Javaクラスで注釈を使用してポリシーを変更または削除するには、次のようにします。

プロパティ・インスペクタを使用してポリシーを変更または削除するには、次のようにします。

  1. ソース・エディタでJAX-WS Webサービス・クラスが開かれた状態で「表示」→「プロパティ・インスペクタ」を選択し、プロパティ・インスペクタを開きます。

    詳細を参照するには、プロパティ・インスペクタ内で[F1]を押すか、「ヘルプ」をクリックします。

  2. クラスのpublic classまたは@WebService行にカーソルがある状態で、Webサービス拡張機能ノードにナビゲートします。

    • 複数のポリシーを変更するには、「...」をクリックし、「プロパティの編集: 複数ポリシー」ダイアログを開きます。

    • 単一のポリシーを変更するには、「単一ポリシー」リストから名前を削除し、別の名前を選択します。

    • ポリシーのタイプを他のタイプに変更するには、すべてのポリシーを削除して最初から再度実行できるようにします。

16.9.7 カスタムWebサービス・ポリシーの使用方法

JDeveloper内でカスタム・ポリシーを使用できます。次の項で説明するように、このプロセスは、Oracle Web Service Manager (Oracle WSM)カスタム・ポリシーとOracle WebLogic Webサービス・ポリシーのどちらを使用するかによって異なります。

16.9.7.1 Oracle WSMカスタム・ポリシーの使用

Oracle Web Service Manager (Oracle WSM)カスタム・ポリシーを使用するには、次のいずれかのステップを実行します。

  • カスタム・ポリシーを次のデフォルトのポリシー格納場所に追加します。

    JDEV_USER_HOME\system11.1.1.2.x.x.x\DefaultDomain\oracle\store\gmds。設定されていない場合、

    JDEV_USER_HOMEは、C:\Documents and Settings\user-dir\Application Data\JDeveloperにデフォルト設定されます。

    このディレクトリ内で、次のディレクトリ構造のいずれかを使用してポリシーを格納する必要があります。

    • 事前定義済Oracle WSMポリシー: owsm/policies/oracle/policy_file

    • カスタム・ユーザー・ポリシー: owsm/policies/policy_file


    注意:

    JDeveloperで使用するためにポリシー・ファイルをOracle WSMリポジトリからエクスポートする場合、このディレクトリ構造は維持されません。エクスポートされたポリシーをJDeveloper環境に追加する場合は、必ず前述の要求されるディレクトリ構造を使用する必要があります。そうしないと、ポリシーはJDeveloper環境で使用できなくなります。Oracle WSMリポジトリからのポリシーのエクスポートの詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のポリシーのインポートおよびエクスポートの様々なメカニズムの理解に関する項を参照してください。


  • 異なるポリシー・ストアを指定します。詳細は、第16.9.7.2項「Oracle WebLogicカスタムWebサービス・ポリシーの使用」を参照してください。

    リモート・アプリケーション・サーバーでのポリシー・ストア使用を選択する場合、Fusion Middleware ControlまたはWLSTを使用してOracle WSMカスタム・ポリシーをリモート・アプリケーション・サーバー上のMDSリポジトリにインポートできます。

    リモート・アプリケーション・サーバー上のOracle WSM MDSへのポリシーのインポートの詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のポリシーのインポートおよびエクスポートの様々なメカニズムの理解に関する項を参照してください。

カスタム・ポリシーの作成の詳細は、Oracle Web Services Manager拡張ガイドのカスタム・アサーションの作成に関する項を参照してください。

16.9.7.2 Oracle WebLogicカスタムWebサービス・ポリシーの使用

Oracle WebLogicカスタムWebサービス・ポリシーを使用するには、次のいずれかのステップを実行します。

  • カスタム・ポリシーJARをクラスパスに配置し、WebLogic Serverのプロパティweblogic.wsee.policy.LoadFromClassPathEnabledtrueに設定します。

  • カスタム・ポリシーJARをWEB-INF/policies (Webアプリケーション)またはMETA-INF/policies (EJB)に配置します。

  • カスタム・ポリシーXMLファイルをWEB-INF (Webアプリケーション)またはMETA-INF (EJB)に配置します。

ポリシーにアクセスするには、次のようにします。

  • @Policy注釈を使用する場合、policy接頭辞を追加することを確認します(policy:mypolicy.xmlなど)。

  • Java Webサービス・エディタの「ポリシーの構成」ページで「カスタム・ポリシーの追加」ボタンをクリックし、「カスタム・ポリシー・ファイルの選択」ダイアログ・ボックスを使用してカスタム・ポリシー・ファイルを選択します。

カスタム・ポリシーの作成の詳細は、Oracle Web Services Manager拡張ガイドのカスタム・アサーションの作成に関する項を参照してください。

16.9.8 異なるOracle WSMポリシー・ストアの使用方法

Oracle Web Service Manager (Oracle WSM)ポリシー・ストアは、JDeveloperの一部としてインストールされます。異なるポリシー・ストアを使用すると、たとえば、共有ポリシー・ストアを使用できます。ローカル・ファイル・ストアやリモート・アプリケーション・サーバーで使用可能なポリシー・ストアも使用できます。

異なるポリシー・ストアの場所を指定するには、次のようにします。

  1. 「ツール」→「プリファレンス」を選択して「プリファレンス」ダイアログを開き、「WSポリシー・ストア」ページにナビゲートします。

    詳細は、[F1]を押すか、「プリファレンス」ダイアログ内で「ヘルプ」をクリックしてください。

  2. ローカル・ファイル・ストア内にあるポリシーを指定するには、「ファイル・ストア」をクリックし、「オーバーライド場所」テキスト・ボックスにポリシー・ストアの場所を入力するか、「参照」をクリックしてその場所を参照します。

  3. リモート・アプリケーション・サーバーでポリシー・ストアを構成するには、「アプリケーション・サーバー接続」をクリックし、ドロップダウン・リストからリモート・アプリケーション・サーバー接続を選択します。

    新規のリモート・アプリケーション・サーバー接続を追加するには、「新規」をクリックします。


注意:

選択するリモート・アプリケーション・サーバーは、Oracle WSMポリシー・マネージャを使用して構成する必要があります。Oracle WSMポリシー・マネージャが正しく構成されていることを確認するには、URLとしてhttp://<host:<port/wsm-pm/validatorを使用します。求められたら、サーバーのユーザー名およびパスワードを入力します。Oracle WSMポリシー・マネージャが使用可能な場合、事前定義済ポリシーのリストが説明とともに表示されます。Oracle WSM Policy Managerのトラブルシューティングの詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』の問題の診断に関する項を参照してください。


16.10 Webサービスの編集および削除

JDeveloperで作成したWebサービスを編集または削除して、公開するメソッドやファイルの場所などを変更できます。

Webサービスを編集するには、次のようにします。

  1. アプリケーション・ナビゲータで、Webサービス・コンテナを右クリックして「プロパティ」を選択します。リエントラントなWebサービスのウィザードが表示されます。

  2. Webサービスを変更します。「OK」をクリックします。Webサービス・ファイルが再生成されます。

    ウィザードの操作の詳細なヘルプを参照するには、ウィザード内で[F1]を押すか、「ヘルプ」をクリックします。

Webサービス・ファイルを編集した後、Webサービスを再デプロイする必要があります。詳細は、第16.12項「Webサービスのデプロイ」を参照してください。

Webサービスを編集すると、以前に生成されたWSDLファイルは上書きされるため、それまでに行った変更はすべて失われます。Webサービスがすでにデプロイされているときにこれを編集する場合、これを再デプロイする必要があります。

PL/SQL Webサービスの編集は、データベース接続が存在している間に行わないと、エラー・メッセージが表示されます。データベース接続が削除されている場合は新規に作成し、削除前と同じ名前を付与します。

Webサービスを削除するには、次のようにします。

JDeveloperからWebサービスを削除すると、Webサービス・コンテナとそれに含まれるファイル(WSDLファイル、および場合によってはインタフェース)が削除されます。Webサービスのエントリはweb.xmlから削除されますが、ファイル自体は削除されません。WebServices.deployファイルは、他のWebサービスでも使用される場合があるため、変更されません。

16.11 Webサービスのテストおよびデバッグ

JDeveloperには、Webサービスをテストする方法がいくつか用意されています。デバッガを使用すると、Webサービスをデバッグできます。デバッグ可能なWebサービスは、統合WebLogic Serverでローカルで作成したもの、およびOracle WebLogic Serverでリモートで作成したものです。また、統合WebLogic ServerにデプロイされたWebサービスをブラウザ内で実行して、期待した結果が戻されることを確認することもできます。

この項で説明するトピック以外にも、HTTPアナライザを使用して、他のパケット情報の調査と同じように、HTTPを介してWebサービスの内容を調査できます。詳細は、第16.13.4項「HTTPアナライザを使用したWebサービスの調査方法」を参照してください。

次の各項では、Webサービスのテストおよびデバッグ方法について説明します。

16.11.1 ブラウザでのWebサービスのテスト方法

Webサービスを作成してデプロイすると、ブラウザ内でそのサービスを実行して予期した応答が得られるかどうかを確認できます。

Webサービスをテストするために使用するプロセスは、WebLogic WebサービスとOracle Infrastructure Webサービス(ADFビジネス・コンポーネントなど)のどちらをテストするかによって異なります。

  • ブラウザでのWebLogic Java EE Webサービスのテスト

  • ブラウザでのOracle Infrastructure Webサービスのテスト

ブラウザでWebLogic Java EE Webサービスをテストするには、次のようにします。

  1. ブラウザでhttp://IP_address:port/wls_utcを開きます。

  2. WSDLのURLを入力し、「テスト」をクリックします。

    例: http://IP_address:port/Project1-context-root/MyWebService1?WSDL

    ブラウザに、サービスに対して使用できる操作をリストした簡単なページが表示されます。

  3. 各パラメータの値を入力し、「operation-name」ボタンをクリックし、リクエスト詳細をレビューします。

ブラウザでのOracle Infrastructure Webサービスのテスト

Oracle Infrastructure Webサービス(ADFビジネス・コンポーネントなど)の場合、ブラウザで次にデプロイされたWebサービスをテストできます。

  • 統合WebLogic Server

  • Oracle WebLogic Server

統合WebLogic Serverにデプロイされたサービスをテストするには、次のようにします。

  1. Oracle Infrastructure Webサービスを統合WebLogic Serverにデプロイする場合、ログ・ウィンドウの内容を調査します。次の内容を含んだ行を検索します。

    次のコンテキスト・ルートを使用してWebアプリケーションをテストします: http://IP_address:port/Project1-context-root/MyWebService1

  2. URLをコピーしてブラウザに貼り付けます。ブラウザに、サービスに対して使用できる操作をリストした簡単なページが表示されます。

  3. パラメータを入力して[Enter]キーを押します。Webサービスからの結果が表示されます。

Oracle WebLogic Serverにデプロイされたサービスをテストするには、次のようにします。

  1. Oracle Infrastructure WebサービスをOracle WebLogic Serverにデプロイする場合、ログ・ウィンドウの内容を調査します。次の行を検索します。

    アプリケーションには次の場所でアクセスできます: http://IP_address:port/Project1-context-root

    このURLは、Webサービスのコンテキスト・ルートの内容のみを示しています。

  2. URLをコピーしてブラウザに貼り付け、Webサービスの名前を末尾に追加してサービスの完全な場所を示します。

    http://IP_address:port/Project1-context-root/MyWebService1

    ブラウザに、サービスに対して使用できる操作をリストした簡単なページが表示されます。

  3. パラメータを入力して[Enter]キーを押します。Webサービスに対して入力したパラメータを含むSOAPメッセージが表示されます。

  4. 「起動」をクリックします。Webサービスからの結果が表示されます。

16.11.2 Webサービスのデバッグ方法

デバッグ・ツールを使用すると、Webサービス・ウィザードで作成したWebサービスをデバッグできます。Webサービスのデバッグは、Javaプログラムのデバッグと似ています。そのため、サービスに対してデバッグ・モードでクライアントを実行することにより、ローカルまたはリモートでWebサービスをデバッグできます。Webサービスに対するプロキシであるクライアントにブレークポイントを設定し、サービスの機能を調べることができます。

PL/SQL Webサービスのデバッグは可能ですが、実際にデバッグするのは、JDeveloperによって生成されるJavaクラスです。このJavaクラスをデバッグすることで、PL/SQLをデプロイメント用にWebサービスとしてラップします。したがって、想定したとおりにPL/SQL Webサービスを実行するには、PL/SQLからWebサービスを作成する前に、PL/SQLをデバッグします。詳細は、第29.3項「PL/SQLプログラムおよびJavaストアド・プロシージャのデバッグ」を参照してください。

HTTPアナライザを使用すると、HTTPリクエスト/レスポンス・パケットを検証および監視できます。これは、JDeveloperのコードとコードの通信対象であるHTTPリソースの間のプロキシとして機能し、送受信されるHTTPトラフィックの観点からアプリケーションをデバッグする上で役に立ちます。詳細は、第16.13.4項「HTTPアナライザを使用したWebサービスの調査方法」を参照してください。

JDeveloperでは、統合WebLogic Serverでローカルに実行されるWebサービスや、リモートでデプロイされるWebサービスをデバッグできます。

Webサービスのローカル・デバッグ

Webサービスが統合WebLogic Serverで実行されたら、Webサービス・プロキシに対してプロキシ・クライアントを作成できます。このクライアントには、Webサービスで公開されている各メソッドに対して実行するメソッドが含まれます。また、独自のコードを追加したり、ブレークポイントを設定してWebサービスの実行状況を調べることができます。

JDeveloperで作成したWebサービスは、ローカルですぐにデバッグできます。これを行うには、次の2つの方法があります。

  • ブレークポイントをWebサービス・クラスに設定し、これに対してプロキシ・クライアントを実行します。これにより、サービス・クラス自体をデバッグできます。

  • ブレークポイントをクライアントに設定します。

Webサービスをローカル・デバッグする前に、プロキシ設定をオフにする必要があります。デバッグが完了したら、必ずプロキシ設定をオンに戻してください。

Webサービスをローカルでデバッグするには、次のようにします。

  1. 最初に、プロキシ設定をオフにします。「ツール」→「プリファレンス」を選択し、「Webブラウザとプロキシ」を選択します。

  2. 「HTTPプロキシ・サーバーを使用」の選択を解除します。

  3. デバッグ・モードでWebサービスを実行します。ナビゲータで、Webサービス・コンテナを右クリックし、「デバッグ」を選択します。

    統合WebLogic Serverがデバッグ・モードで起動し、このサーバーにWebサービスがデプロイされます。結果はログ・ウィンドウに表示されます。

  4. 「Webサービス・クライアントの作成」で説明されているように、Webサービス・クライアントを作成します。

    プロキシ・コンテナが生成されてナビゲータに表示され、web_serviceSoapHttpPortClient.javaというJavaクラスがソース・エディタに表示されます。

  5. ソース・エディタで、// Add your own code hereに移動してなんらかのコードを入力します。

  6. Webサービスに対するクライアントをデバッグする場合、1つ以上のブレークポイントを追加し、右クリックして「デバッグ」を選択します。

    また、Webサービス・クラスにブレークポイントを設定した場合は、ポップアップ・メニューから「デバッグ」または「実行」を選択します。

    すべてのJavaクラスに関して、デバッガが動作します。詳細は、第19章「Javaプログラムの実行およびデバッグ」を参照してください。

Webサービスのリモート・デバッグ

JDeveloperを使用すると、リモートでデプロイされたWebサービスをデバッグできます。

Webサービスは、ローカル・マシン上のOracle WebLogic Serverで実行される場合、またはリモート・マシン上のサービスで実行される場合があります。いずれの場合も、サーバーに接続し、サーバーをデバッグ・モードで実行する必要があります。

Webサービスをリモートでデバッグする場合、サーバーをデバッグ・モードで起動し、サーバーにWebサービスをデプロイする必要があります。これにより、サービスに対するクライアントを作成し、クライアントにブレークポイントを設定し、クライアントをデバッグ・モードで起動できるようになります。

Webサービスをリモートでデバッグするには、次のようにします。

  1. リモート・サーバーをデバッグ・モードで実行します。

  2. Webサービスをデプロイします。詳細は、第16.12項「Webサービスのデプロイ」を参照してください。

  3. Webサービスに対するクライアントを作成します。

  4. ソース・エディタで、// Add your own code hereに移動してなんらかのコードを入力します。

  5. 1つ以上のブレークポイントを追加し、右クリックして「デバッグ」を選択します。

    すべてのJavaクラスに関して、デバッガが動作します。詳細は、第19章「Javaプログラムの実行およびデバッグ」を参照してください。

16.12 Webサービスのデプロイ

JDeveloperには、Webサービスを作成してOracle WebLogic Serverにデプロイするときに役立つツールが用意されています。Oracle WebLogic Serverでは、WebサービスはJava EEコンテナ内で動作します。次の操作を実行できます。

また、別のWebLogic Serverドメインを統合WebLogic Serverとして定義し、ここでWebサービスを実行することもできます。詳細は、第9.2項「統合アプリケーション・サーバーでのJava EEアプリケーションの実行」を参照してください。

16.12.1 統合WebLogic ServerへのWebサービスのデプロイ方法

JDeveloperで生成されたWebサービスを統合WebLogic Serverにデプロイできます。

Webサービスを統合WebLogic Serverにデプロイするには、次のようにします。

  1. アプリケーション・ナビゲータで、Webサービスが含まれるプロジェクトを右クリックし、「デプロイ」→「Webサービス」を選択します。

    アプリケーションまたはWebサービスの実行またはデバッグによって統合WebLogic Serverを初めて起動する場合、ダイアログが表示され、ここでデフォルト・ドメインの管理者IDのパスワードを入力します。「OK」をクリックすると、デフォルトのドメインが作成されます。この手順は1回のみ実行する必要があります。

  2. Webサービスのデプロイ・ダイアログの「デプロイメント・アクション」ページで、「アプリケーション・サーバーへのデプロイ」を選択し、「次へ」をクリックします。

  3. 「サーバーの選択」ページで、「IntegratedWebLogicServer」を選択し、「次へ」をクリックして「サマリー」ページを表示するか、「終了」をクリックしてWebサービスをデプロイします。

16.12.2 Oracle WebLogic ServerへのWebサービスのデプロイ方法

JDeveloperで生成されたWebサービスをOracle WebLogic Serverにデプロイできます。

Webサービスの作成ウィザードの1つを使用してJava EE Webサービス用のファイルを生成した場合、WebServices.deployというデプロイメント・プロファイルを含め、必要なファイルはすべてウィザードにより自動的に作成されます。WebServices.deployファイルはプロジェクト・レベルで作成されます。デプロイメント・プロファイルにWARファイルとEARファイルが含まれます。


注意:

PL/SQL Webサービスをデプロイする場合、アプリケーション・レベルでのデプロイメント・プロファイルであるEARを作成し、EARファイルをデプロイする必要があります。データベース接続情報はEARに含まれるが、パスワード・インダイレクションが使用されるため、Oracle WebLogic ServerでJDBCデータソースも設定する必要があります。


Webサービスをデプロイするには、次のようにします。

  • ナビゲータで、Webサービスが含まれるプロジェクトを右クリックし、「配布先」→「接続」を選択します。使用可能な接続のリストから、Webサービスの作成時に指定したアプリケーション・サーバー接続を選択します。

PL/SQL Webサービスをデプロイするには、次のようにします。

  1. アプリケーション・レベルのEARデプロイメント・プロファイルを作成し、このプロファイルにWebサービスを追加します。

  2. Oracle WebLogic Serverに対するアプリケーション・サーバー接続にEARをデプロイします。

  3. Oracle WebLogic Serverに対するEARのデプロイに関する情報に従って、Oracle WebLogic Serverでデータベース接続の詳細を設定します。

詳細は、第9.4.1項「Java JARへのデプロイ」を参照してください。

Webサービス・デプロイメント・プロファイルの内容を調査するには、次のようにします。

  1. Webサービス・デプロイメント・プロファイルの内容を調査するには、次のようにします。

  2. 「ファイル・グループ」→「WEB-INF/classes」→「フィルタ」ノードを順に選択し、Webサービスの.javaファイルおよび.wsdlファイルのリストを表示します。

16.12.3 Webサービスのアンデプロイ方法

Webサービスを統合WebLogic Serverにデプロイした場合、統合サーバーが起動されるたびにサーバー自体が新規のアプリケーションおよびプロジェクトにリセットされるため、Webサービスをアンデプロイする必要はありません。

アプリケーション・サーバー接続を使用してサーバーにデプロイしたWebサービスの場合は、リソース・パレットからアンデプロイできます。

Webサービスをアンデプロイするには、次のようにします。

  1. アプリケーション・サーバー・ナビゲータで、使用していたアプリケーション・サーバー接続を選択して「Webサービス」を開きます。

  2. application-name_project-name_ws」を右クリックして「アンデプロイ」を選択します。

16.13 Webサービスの監視と分析

WS-I Basic Profile 1.1に準拠しているかどうかを確認したり、SOAPパケットの内容を調査するなどの方法を使用して、多面的にWebサービスを分析できます。

Oracleなどの主要企業によって設立されたWeb Services-Interoperability Organization (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 Basic Profileに照らして監視したり、サービスの監視の結果得られたログ・ファイルを分析するには、WS-I準拠のアナライザをダウンロードしておく必要があります。

ユーザーはWebサービスがWS-I規格に準拠しているかどうかを分析できます。分析できるWebサービスは、アプリケーション・ナビゲータに表示されているユーザー作成のWebサービスか、UDDIレジストリを使用して検索し、リソース・パレットに表示されたWebサービスです。デプロイ済のWebサービスについても、クライアントおよびプロキシ・クラスを作成してアクセスしてHTTPアナライザでログ・ファイルを作成すれば、WS-I規格に準拠しているかどうかを分析できます。

Webサービスを分析するWS-I準拠のアナライザを使用するには、マシンにダウンロードした上で、JDeveloperに登録する必要があります。

WS-Iアナライザをダウンロードして登録するには、次のようにします。

  1. http://www.ws-i.orgからWS-Iアナライザをダウンロードしてインストールします。

  2. JDeveloperで、「ツール」→「プリファレンス」を選択し、「WS-Iテスト・ツール」を選択します。

  3. WS-I準拠のアナライザをインストールする場所の詳細を入力します。

    ダイアログ使用の詳細なヘルプを参照するには、ダイアログ内で[F1]を押すか、「ヘルプ」をクリックします。

次の各項では、Webサービスを監視および分析する方法について説明します。

16.13.1 ナビゲータでのWebサービスの分析方法

アプリケーション・ナビゲータに示されたWebサービスや、UDDIレジストリを使用して検索しリソース・パレットに示されたWebサービスのレポートを生成して、そのWebサービスがWS-I Basic Profile 1.1規格に準拠しているかどうかを確認できます。そのためには、あらかじめ使用マシンにWS-I準拠のアナライザをダウンロードし、JDeveloperでの登録を実行しておく必要があります。

Webサービスとクライアントとの間でやり取りされるメッセージの内容を確認するWS-I Basic Profileの機能は、Webサービスに対してクライアントが実行されないかぎり使用できません。WS-Iアナライザをナビゲータから起動した場合は、WSDLドキュメントのサービス記述のみが分析できます。

Webサービスを分析するには、次のようにします。

  1. ナビゲータでWebサービスを選択し、ポップアップ・メニューから「WS-I WSDLの分析」を選択します。

  2. WS-I Webサービス分析ウィザードが表示されます。

    ウィザードの使用時に詳細なヘルプを参照するには、ウィザード内で[F1]を押すか、「ヘルプ」をクリックします。

  3. ウィザードの実行を開始すると、JDeveloperに分析レポートwsi-report.htmlが表示されます。このレポートが表示されるまでにある程度の時間がかかる場合がありますが、その長さは、分析対象がローカルWebサービスであるか、Web上のどこか他の場所にデプロイされたWebサービスであるかによって異なります。

16.13.2 Webサービス・ログの作成および分析方法

HTTPアナライザを使用すると、Webサービス・クライアントの実行中のログを生成できます。また、ダウンロードおよびJDeveloperでの登録が済んでいるWS-I準拠のアナライザを使用して、WebサービスがWS-I規格に準拠しているかどうかを確認することもできます。

アナライザはWebサービスのクライアントに対して実行するため、サービスの検出、説明およびメッセージがレポート対象となります。


注意:

ファイアウォール内で作業する場合は、Webサービスの実行に使用しているマシンのIPアドレスが、プロキシ・サーバー例外に含まれないようにする必要があります。


Webサービスを作成および分析するには、次のようにします。

  1. 分析するWebサービスに対するクライアントを作成します。

    • 外部Webサービスに対して。

      または

    • 作成したWebサービスが、Oracle WebLogic Serverにデプロイ済である場合は、クライアント・スタブまたはクライアント・プロキシを作成します。

      または

    • JDeveloperで作成済のWebサービスについては、Webサービスのポップアップ・メニューから「実行」を選択して、埋込みサーバーで実行可能な状態になっていることを確認します。ナビゲータで、Webサービス・コンテナのポップアップ・メニューから「Webサービス・プロキシの生成」を選択します。WSDLのWebサービス・エンドポイントと、生成プロキシの_endPoint変数は、完全に同じである必要があります。

  2. Httpアナライザを起動します。「表示」→「Httpアナライザ」を選択し、モニターで「開始」ボタンをクリックします。

    「開始」ボタン・アイコン
  3. クライアントを実行します。次のいずれかの操作を行います。

    • ソース・エディタで、クライアントのポップアップ・メニューから「実行」を選択します。

      または

    • ナビゲータで、クライアントのポップアップ・メニューから「実行」を選択します。

  4. Webサービスから予期した応答が得られた後、「停止」ボタンをクリックしてHTTPアナライザを停止します。

    「停止」ボタン・アイコン
  5. 「WS-I分析」ボタンをクリックしてWS-I分析ウィザードを起動し、ウィザードの指示に従います。メッセージ・ログに進行状況が記録され、HTTPアナライザに結果が表示されます。

    「アナライザ」ボタン・アイコン

16.13.2.1 Webサービスの実行および分析についての注意事項

Webサービスの分析を実行すると、問題の発生する原因が多数見つかります。その中にはJDeveloperドキュメントで説明されていないものもありますが、次の2つの問題が発生する可能性があります。

wsi-report.htmlのメッセージ・セクションからすべての入力項目が消去される場合

外部WebサービスのWSDLのエンドポイントに含まれているマシン名が大文字のみまたは大文字小文字混合で記述されているのに対し、JDeveloperで生成されたクライアントの_endPoint変数のマシン名が小文字で記述されている場合に、このような現象が発生することがあります。これと類似する事例を、第16.13.3項「統合サーバーで実行中のWebサービスの分析方法」で説明しています。

対処方法としては、JDeveloperにWSDLをインポートしてナビゲータに表示し、WSDLのマシン名を小文字に編集します。これにより、クライアント(および関連するプロキシ・クラス)を生成してHTTPアナライザの実行中にそのクライアントを実行できます。

WSDLをナビゲータにインポートするには、次のようにします。

  1. デフォルト値を使用して新規WSDLドキュメントを作成します。

  2. ブラウザでWSDLドキュメントを開きます。ドキュメントのソースを表示して、WSDLのXMLソースをコピーします。

  3. ここで作成したWSDLドキュメントの内容を、使用するWebサービスのWSDLドキュメントのソースで置き換えます。

wsi-report.htmlの検出セクションからすべての入力項目が消去される場合

wsi-report.htmlの検出セクションでは、UDDIレジストリから検索するWebサービスで使用されるREGDATA結果についてレポートします。UDDIレジストリを使用しても検索されなかったWebサービスのレポートを作成した場合、検出セクションのInputsがすべて消去されます。

16.13.3 統合サーバーで実行中のWebサービスの分析方法

WS-I準拠のアナライザは、一連の標準アサーションに対するログ・ファイル内のメッセージと相互関係があります。特に、WSDLドキュメント内のservice要素のsoap:addressの下位要素は、wsi-log.xml messageEntryのsenderHostAndPortまたはreceiverHostAndPortと厳密に一致する必要があります。一致しない場合、そのメッセージのWS-I互換性は分析されません。

16.13.3.1 エンドポイント・アドレスの変更

Webサービスを統合サーバーで実行し(Webサービスのポップアップ・メニューから「実行」を選択)、Webサービスに対して生成済クライアントを実行中にHTTPアナライザを実行してログを作成する場合は、WSDLのWebサービスのエンドポイントや生成済クライアントの_endPoint変数を変更してから、実行中のクライアントのログ・ファイルを作成する必要があります。

Webサービスのエンドポイントがプロキシの_endPoint変数に一致していることを確認するには、次のようにします。

  1. 次のいずれかの方法に従って、WebサービスのWSDL文書を編集します。

    • ナビゲータでWebサービス・コンテナをダブルクリックし、「Webサービスの編集」ダイアログの「エンドポイント」ページに移動し、「Webサービス・エンドポイント」を編集します。

    • ナビゲータでWebサービス・コンテナを選択し、「構造」ウィンドウでWSDL文書をダブルクリックします。soap:address下位要素にナビゲートし、エンドポイントを編集します。

  2. Webサービスのエンドポイントを次のいずれかに変更します。

    • IP_address:integrated_port_no (デフォルトの統合ポート番号は8988です)

    • hostname (小文字)

  3. JAX-RPC Webサービスの場合、EmbeddedStub.javaファイルをダブルクリックして開き、_endPoint変数に移動します。Webサービス・エンドポイントがプロキシ内の_endPoint変数と同じであることを確認した後、Webサービス・ログを作成および分析できます。詳細は、第16.13.2項「Webサービス・ログの作成および分析方法」を参照してください。

16.13.3.2 WSDLの変更なしでのエンドポイント・アドレスの変更(JAX-WSのみ)

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);
   }
}

16.13.4 HTTPアナライザを使用したWebサービスの調査方法

HTTPアナライザの次の機能を使用して、Webサービスに接続するクライアントのネットワーク・トラフィックを調べることができます。詳細は、第8.3項「HTTPアナライザを使用したHTTPの監視」を参照してください。これにより、次が可能です。

  • WebサービスのTCPのリクエスト・パケットとレスポンス・パケットの詳細な内容を調べることができます。

  • リクエスト・パケットの編集と再送信、およびレスポンス・パケットの内容の確認ができます。

結果を使用して、ローカルまたはリモートにデプロイされているWebサービスをデバッグできます。


注意:

HTTPアナライザを使用する場合、プロキシ設定を変更する必要が生じることがあります。詳細は、第16.2.1項「プロキシ設定およびJDeveloperの使用方法」を参照してください。


Webサービスのクライアントによって送受信されるパケットを調べるには、次のようにします。

  1. Webサービスを作成します。

  2. ナビゲータでWebサービス・コンテナを右クリックし、「web_serviceの実行」を選択して、Webサービスを実行します。

    または

    Oracle WebLogic ServerでWebサービスをデプロイおよび実行します。詳細は、第16.12項「Webサービスのデプロイ」を参照してください。

  3. 「表示」→「Httpアナライザ」を選択してHTTPアナライザを起動します。アナライザは、JDeveloper内の専用ウィンドウで開きます。

  4. 「Httpアナライザの起動」「開始」アイコンをクリックしてHTTPアナライザを実行します。

  5. Webサービスのクライアント・プロキシを実行します。リクエスト・パケットとレスポンス・パケットのペアが、Httpアナライザに表示されます。

  6. リクエスト・パケットとレスポンス・パケットのペアの内容を調べるには、「履歴」タブでペアを選択して「データ」タブをクリックします。

  7. 「次へ」メッセージ・ボタンまたは「前へ」メッセージ・ボタンをクリックすると、前後のペアに簡単に切替えできます。

    「次へ」ボタン
    「前へ」ボタン