Oracle® Fusion Middleware Oracle WebLogic Server 12.1.3 JAX-RPC Webサービスの開発 12c (12.1.3) E57562-03 |
|
前 |
次 |
この章では、Java API for XML-based RPC (JAX-RPC)を使用したWebLogic Server 12.1.3のWebLogic Webサービスの反復的な開発プロセスについて説明します。
この章の内容は次のとおりです。
WebLogic Webサービスのプログラミング・モデルはJWSファイル(JWSアノテーションを使用してWebサービスの形式や動作を指定したJavaファイル)と、JWSファイルを実行するAntタスクを中心に展開されます。JWSアノテーションは、JDKのバージョン5.0で導入されたメタデータ機能(http://www.jcp.org/en/jsr/detail?id=175
にあるJSR-175により指定されています)に基づいており、Web Services Metadata for the Java Platform仕様(JSR-181) (http://www.jcp.org/en/jsr/detail?id=181
に記載されています)で定義されている標準のアノテーションのほかに、追加のアノテーションを含みます。サポートされるJWSアノテーションの完全なリストは、『Oracle WebLogic Server WebLogic Webサービス・リファレンス』のWebサービスのアノテーション・サポートに関する項を参照してください。このプログラミング・モデルの詳細は、『Oracle WebLogic Server WebLogic Webサービスの理解』を参照してください。
以下の項では、Webサービスを繰返し開発する主要な手順を、Javaから開始する場合、または既存のWSDLファイルから開始する場合について説明します。
反復的な開発とは、希望どおりに動作するまで、Webサービスを繰返しコーディング、コンパイル、パッケージ化、デプロイ、およびテストできるように、開発環境を設定することです。WebLogic Webサービス・プログラミング・モデルでは、Antタスクを使用して、反復的な開発のほとんどの手順を実行します。一般に、すべての手順に対応するターゲットを含んだ1つのbuild.xml
ファイルを作成して、そのターゲットを繰返し実行します。JWSファイルを新しいJavaコードで更新したら、その更新が期待どおりに動作することをテストします。
Webサービスを開発するために、この項で説明したコマンド・ライン・ツールの他に、Oracle JDeveloperなどのIDEも使用できます。詳細は、『Oracle WebLogic Server WebLogic Webサービスの理解』のOracle IDEを使用したWebサービスの構築に関する項を参照してください。
WebLogic Serverドメインを作成したら、構成ウィザードでWebサービス固有の拡張テンプレートを使用してドメインを更新し、特定のWebLogic Webサービス機能で必要になるリソースを自動的に構成できます。この拡張テンプレートの使用は必須ではありませんが、これを使用することでJMSおよびJDBCリソースの構成を大幅に簡略化できます。
Webサービス拡張テンプレートを使用すると、以下の機能で必要になるリソースを自動的に構成できます。
Webサービスの信頼性のあるメッセージング
バッファリング
JMSトランスポート
注意: Webサービスのリソースを含まないドメインは、Webサービス以外のシナリオおよび非同期のリクエスト/レスポンスが含まれないWebサービス・シナリオにおいて、適切に起動および実行されます。ただし、サーバー・ログに、非同期リソースが構成されていないこと、およびWebサービスの非同期レスポンス・サービスが完全にデプロイされていないことを示すINFOメッセージが表示されます。 |
次の各手順は、Webサービスの高度な機能を使用するようにドメインを自動的に構成するためのドメインの作成方法および拡張方法を示しています。構成ウィザードを使用してWebLogic Serverドメインを作成および更新する詳細な手順については、構成ウィザードを使用したWebLogicドメインの作成を参照してください。
高度なWebサービス機能用に自動的に構成されるドメインを作成するには:
構成ウィザードを起動します。
「ようこそ」ウィンドウで、「新しいWebLogicドメインの作成」を選択します。
「次へ」をクリックします。
「以下の製品をサポートするために、自動的に構成されたドメインを生成する」を選択し、「WebLogic Advanced Web Services for JAX-RPC Extension」を選択します。
「次へ」をクリックします。
ドメインの名前と場所を入力し、「次へ」をクリックします。
管理者ユーザーの名前とパスワードを構成し、「次へ」をクリックします。
サーバーの起動モードとJDKを構成し、「次へ」をクリックします。
JMSサービス、ファイル・ストア、その他の機能をさらに構成する場合は、「オプションの構成を選択」画面で項目を選択します。通常はこれは行いません。
それ以外の場合は、すべての項目が選択解除された状態で、「次へ」をクリックします。
「構成のサマリー」画面が表示されたら、ドメインの詳細を検証して「作成」をクリックします。
終了するには「完了」をクリックします。
既存のドメインを拡張してこれらのWebサービス機能用に自動的に構成するには:
構成ウィザードを起動します。
「ようこそ」ウィンドウで、「既存のWebLogicドメインの拡張」を選択します。
「次へ」をクリックします。
拡張テンプレートを適用するドメインを選択します。
「次へ」をクリックします。
「以下の追加製品をサポートするために、自動的にドメインを拡張する」を選択し、「WebLogic Advanced Web Services for JAX-RPC Extension」を選択します。
「次へ」をクリックします。
JMSサービスやファイル・ストアをさらに構成する場合は、「オプションの構成を選択」画面で項目を選択します。通常はこれは行いません。
それ以外の場合は、すべての項目が選択解除された状態で、「次へ」をクリックします。
拡張するドメインが正しいことを確認して「拡張」をクリックします。
終了するには「完了」をクリックします。
この節では、Javaから開始してWebLogic Webサービスを開発する一般的な手順について説明します。つまり、JWSファイルを最初からコーディングして、サービスについて記述するWSDLファイルを後で生成するという手順です。このプロセスの具体的な例については、第2章「JAX-RPC Webサービス開発者向けサンプル」を参照してください。
以下に示すのは推奨の手順に過ぎません。独自の開発環境を設定してある場合は、WebLogic Webサービスを開発するために既存の環境を更新する際のガイドとして、この手順を利用できます。
注意: この手順では、WebLogic Webサービスの分割開発ディレクトリ環境は使用しません。この開発環境を使用していて、Webサービスの開発をそこに統合する場合の詳細は、「WebサービスのWebLogic分割開発ディレクトリ環境への統合」を参照してください。 |
表3-1 Javaから開始するWebサービスの開発手順
# |
手順 | 説明 |
---|---|---|
1 |
環境を設定します。 |
コマンド・ウィンドウを開いて、ドメイン・ディレクトリの |
2 |
プロジェクト・ディレクトリを作成します。 |
JWSファイル、ユーザー定義のデータ型のJavaソース、Ant |
3 |
Webサービスを実装するJWSファイルを作成します。 |
「JWSファイルのプログラミング: 一般的な手順」を参照してください。 |
4 |
ユーザー定義のデータ型を作成する(オプション) |
Webサービスでユーザー定義のデータ型を使用する場合は、その型を記述したJavaBeanを作成します。「ユーザー定義のJavaデータ型のプログラミング」を参照してください。 |
5 |
基本のAntビルド・ファイル |
「基本的なAnt build.xmlファイルの作成」を参照してください。 |
6 |
JWSファイルに対して |
ソース・コード、データ・バインディング・アーティファクト、デプロイメント記述子などが |
7 |
WebサービスをWebLogic Serverにデプロイします。 |
「WebLogic Webサービスのデプロイとアンデプロイ」を参照してください。 |
8 |
WebサービスのWSDLを参照します。 |
WebサービスのWSDLを参照して、Webサービスが適切にデプロイされたことを確認します。「WebサービスのWSDLの参照」を参照してください。 |
9 |
Webサービスをテストします。 |
「Webサービスのテスト」を参照してください。 |
10 |
Webサービスを編集する(オプション) |
Webサービスに変更を加えるには、JWSファイルを更新し、「WebLogic Webサービスのデプロイとアンデプロイ」の説明のとおりにWebサービスをアンデプロイしてから、 |
Webサービスを呼び出すクライアント・アプリケーションの作成方法については、第4章「JWSファイルのプログラミング」を参照してください。
この項では、既存のWSDLファイルに基づいてWebLogic Webサービスを開発する一般的な手順について説明します。このプロセスの具体的な例については、第3章「JAX-RPC Webサービスの開発」を参照してください。
以下に示すのは推奨の手順に過ぎません。独自の開発環境を設定してある場合は、WebLogic Webサービスを開発するために既存の環境を更新する際のガイドとして、この手順を利用できます。
この手順では既存のWSDLファイルがすでにあることを前提としています。
注意: この手順では、WebLogic Webサービスの分割開発ディレクトリ環境は使用しません。この開発環境を使用していて、Webサービスの開発をそこに統合する場合の詳細は、「WebサービスのWebLogic分割開発ディレクトリ環境への統合」を参照してください。 |
表3-2 Javaから開始するWebサービスの開発手順
# |
手順 | 説明 |
---|---|---|
1 |
環境を設定します。 |
コマンド・ウィンドウを開いて、ドメイン・ディレクトリの |
2 |
プロジェクト・ディレクトリを作成します。 |
生成されるアーティファクトやAnt |
3 |
基本のAntビルド・ファイル |
「基本的なAnt build.xmlファイルの作成」を参照してください。 |
4 |
WSDLファイルを、 |
たとえば、WSDLファイルをプロジェクト・ディレクトリの |
5 |
WSDLファイルに対して |
JWSサービス・エンドポイント・インタフェース(SEI)、途中まで作成済みのJWSクラス・ファイル、XMLスキーマ・データ型を表すJavaBeanなどが、 |
6 |
|
|
7 |
JWSファイルに対して |
|
8 |
WebサービスをWebLogic Serverにデプロイします。 |
「WebLogic Webサービスのデプロイとアンデプロイ」を参照してください。 |
9 |
WebサービスのWSDLを参照します。 |
WebサービスのWSDLを参照して、Webサービスが適切にデプロイされたことを確認します。「WebサービスのWSDLの参照」を参照してください。 デプロイ済みWebサービスのWSDLを呼び出すときに使用するURLは、基本的に、元のWSDL内の |
10 |
Webサービスをテストします。 |
「Webサービスのテスト」を参照してください。 |
11 |
Webサービスを編集する(オプション) |
Webサービスに変更を加えるには、JWSファイルを更新し、「WebLogic Webサービスのデプロイとアンデプロイ」の説明のとおりにWebサービスをアンデプロイしてから、 |
Webサービスを呼び出すクライアント・アプリケーションの作成方法については、第6章「JAX-RPC Webサービス・クライアントの開発」を参照してください。
Antでは、XMLで記述されたビルド・ファイル(デフォルト名はbuild.xml
)を使用します。このファイルには、<project>
ルート要素と、Webサービス開発プロセスのさまざまな段階を指定した1つまたは複数のターゲットが含まれています。各ターゲットには、1つまたは複数のタスク、または実行可能なコードが含まれています。この節では、基本的なAntビルド・ファイルの作成方法について説明し、その後の節では、Webサービス開発プロセスのさまざまな段階(jwsc
Antタスクを実行してJWSファイルを処理する、WebサービスをWebLogic Serverにデプロイする、など)の実行方法を指定したターゲットをビルド・ファイルに追加する方法について説明します。
以下のスケルトンのbuild.xml
ファイルでは、以降の項で追加される他のすべてのターゲットを呼び出す、デフォルトのall
ターゲットを指定しています。
<project default="all"> <target name="all" depends="clean,build-service,deploy" /> <target name="clean"> <delete dir="output" /> </target> <target name="build-service"> <!--add jwsc and related tasks here --> </target> <target name="deploy"> <!--add wldeploy task here --> </dftarget> </project>
jwsc
Antタスクは、JWSアノテーションを含むJWSファイルを入力として取り、WebLogic Webサービスの作成に必要なアーティファクトをすべて生成します。JWSファイルは、最初から自分でコーディングしたものでも、wsdlc
Antタスクによって生成されたものでもかまいません。jwsc
によって生成されるアーティファクトには、次のものがあります。
JSR-109 Webサービスのクラス・ファイル。
必要な全デプロイメント記述子。以下を含みます。
標準のWebサービス・デプロイメント記述子(webservices.xml
)およびWebLogic固有のWebサービス・デプロイメント記述子(weblogic-webservices.xml
)。
JAX-RPCマッピング・ファイル。
Javaクラス実装のWebサービスweb.xml
およびweblogic.xml
。
EJB実装のWebサービスejb-jar.xml
およびweblogic-ejb-jar.xml
。
Earデプロイメント記述子ファイルapplication.xml
およびweblogic-application.xml
。
Webサービス操作のパラメータまたは戻り値として使用されるJavaユーザー定義データ型のXMLスキーマ表現。
Webサービスの内容を外部に公開する形で記述したWSDLファイル。
これらのアーティファクトは、wsdlc
Antタスクによってすでに生成され、JARファイル内にパッケージ化されているため、wsdlc
Antタスクによって生成されたJWSファイルに対してjwsc
Antタスクを実行しても、jwsc
タスクによってはアーティファクトは生成されません。この場合、jwsc
Antタスクの属性を使用して、このwsdlc
生成JARファイルを指定します。
必要なアーティファクトをすべて生成した後、jwsc
Antタスクは、Javaファイル(JWSファイルも含む)をコンパイルし、コンパイルされたクラスと生成されたアーティファクトを、デプロイ可能なJARアーカイブ・ファイルにパッケージ化して、最後に、そのJARファイルを格納する、展開されたエンタープライズ・アプリケーション・ディレクトリを作成します。
jwsc
Antタスクを使用して次の高度なタスクを実行できます。
複数のJWSファイルを一度に処理します。生成されたWebサービスをそれぞれ別のWebアプリケーションWARファイルにパッケージ化するか、すべてのWebサービスをグループ化して1つのWARファイルにパッケージ化するかを選択できます。
第3章「Webサービスの呼出しに使用されるトランスポートの指定」
で説明されているように、クライアント・アプリケーションがWebサービスを呼び出すときに使用できるトランスポート(HTTP/HTTPS/JMS)を指定します。既存の@WLXXXTransportアノテーションをすべてオーバーライドすることも可能です。
JWSファイル内で呼び出す他のWebサービスのJAX-RPCクライアント・スタブを自動的に生成します。
新しいエンタープライズ・アプリケーションまたはWebアプリケーションを生成するのではなく、既存のアプリケーションを更新します。
jwsc
Antタスクを実行するには、以下のtaskdef
およびbuild-service
ターゲットをbuild.xml
ファイルに追加します。
<taskdef name="jwsc" classname="weblogic.wsee.tools.anttasks.JwscTask" /> <target name="build-service"> <jwsc srcdir="src_directory" destdir="ear_directory" > <jws file="JWS_file" compiledWsdl="WSDLC_Generated_JAR" type="WebService_type"/> </jwsc> </target>
各項目の説明は次のとおりです。
ear_directory
- 生成されたすべてのアーティファクトを格納するエンタープライズ・アプリケーション・ディレクトリ。
src_directory
- JWSファイルのパッケージ名に対応するサブディレクトリを含む最上位ディレクトリ。
JWS_file
- src_directory
属性の値に対して相対的なJWSファイルのパス名。
WSDLC_Generated_JAR - JWS SEIと、既存のWSDLファイルに対応するデータ・バインディング・アーティファクトが含まれる、wsdlc
Antタスクによって生成されたJARファイル。
WebService_type
- Webサービスの種類。この値は、JAXWSまたはJAXRPCに設定できます。
必須のtaskdef
要素では、jwsc
Antタスクの完全修飾クラス名を指定します。
jwsc
Antタスクのsrcdir
およびdestdir
属性のみが必須です。つまり、デフォルトでは、JWSファイルが参照するJavaファイル(JavaBean入力パラメータやユーザー定義の例外など)はJWSファイルと同じパッケージ内にあると想定されています。これに当てはまらない場合は、sourcepath
属性を使用して、これらの他のJavaファイルの最上位ディレクトリを指定します。
jwsc Antタスクの詳細および例については、『Oracle WebLogic Server WebLogic Webサービス・リファレンス』のjwscに関する項
を参照してください。
jwsc
の<jws>
子要素には、Webサービスの呼出しに使用するトランスポート(HTTP/SまたはJMS)を指定するための、次に示すオプションの子要素があります。
WLHttpTransport
: 生成されたWSDLのポート名に加え、HTTP/SトランスポートでWebサービスを呼び出すために使用するコンテキスト・パスおよびURLのサービスURIセクションを指定します。
WLJMSTransport
: JMSトランスポートでWebサービスを呼び出すために使用するコンテキスト・パスおよびURLのサービスURIセクションと、生成されたWSDLのポート名を指定します。また、JMSトランスポート用に構成済のJMSキュー名および接続ファクトリ名も指定します。
次のガイドラインで、jwsc
Antタスクのトランスポート要素の使用方法について説明します。
jwsc
に対して指定したトランスポートは、JWSファイル内のすべての対応するトランスポート・アノテーションを常にオーバーライドします。また、トランスポート要素の対応する属性を明示的に指定していない場合でも、トランスポート・アノテーションのすべての属性は無視されます。この場合、トランスポート要素属性のデフォルト値が使用されます。
特定のJWSファイルに対して両方のトランスポート要素を指定できます。ただし、指定できるのは、特定のトランスポート要素の1つのインスタンスのみです。たとえば、特定のJWSファイルに2つの異なる<WLHttpTransport>
要素を指定することはできませんが、<WLHttpTransport>
要素と<WLJmsTransport>
要素をそれぞれ1つずつ指定することはできます。
serviceURI
属性の値は、<WLJMSTransport>
と<WLHttpTransport>
の両方を指定する際、同じにすることができます。
特定のJWSファイルに関連付けられるすべてのトランスポートでは、同じcontextPath
属性値を指定する必要があります。
特定のJWSファイルに複数のトランスポート要素を指定する場合、各要素のportName
属性の値は、すべての要素において一意である必要があります。つまり、複数のトランスポート子要素を<jws>
に追加する場合、この属性を明示的に指定する必要があることを意味します。これは、要素のデフォルト値は常に同じになるため、jwsc
Antタスクの実行時にエラーが発生するためです。
jwsc
Antタスクに対するトランスポート要素のいずれかまたはJWSファイルのトランスポート・アノテーションとしてトランスポートを指定しなかった場合、WebサービスのデフォルトURLは、WLHttpTransport
要素のデフォルト値と一致します。
JAX-RPC Webサービスの場合、JWSファイルをプログラミングする際、クライアントがWebサービスを呼び出すのに使用するトランスポートを指定するために、特に@weblogic.jws.WLHttpTransport
または@weblogic.jws.WLJMSTransport
という形式のアノテーションを使用できます。JWSファイルでは、特定のトランスポート・アノテーションの1つのインスタンスのみを指定できます。たとえば、2つの異なる@WLHttpTransport
アノテーションを指定することはできませんが、@WLHttpTransport
アノテーションと@WLJmsTransport
アノテーションをそれぞれ1つずつ指定することはできます。ただし、JWSファイルを記述している時点では、どのトランスポートがニーズに適しているかを判断できない可能性があります。そのため、トランスポートはビルド時に指定するのが一般的に最適な方法です。
WebLogic Webサービスのコンテキスト・パス(コンテキスト・ルートとも呼ばれます)は、様々な場所で指定できます。この項では、サービスのコンテキスト・パスが複数の場所で設定されている場合でも、構成に基づいてサービスの正しいコンテキスト・パスを判別する方法について説明します。
この説明では、Webサービスのコンテキスト・パスとは、WebサービスURLのhost:port
部分の後にくる文字列を指します。たとえば、WebLogic WebサービスのデプロイされたWSDLが次のとおりであるとします。
http://hostname:7001/financial/GetQuote?WSDL
financial
が、このWebサービスのコンテキスト・パスです。
次に、コンテキスト・パスを指定できるすべての場所の優先順位を、重要度の高い順番で示します。
<module>
要素および<jws>
要素のcontextPath
属性(jwsc
Antタスクの直接の子として使用される場合)
<jws>
の<WL
XXX
Transport>
子要素のcontextPath
属性。
@WL
XXX
Transport
JWSアノテーションのcontextPath
属性(「Webサービスのコンテキスト・パスとサービスURIの指定(@WLHttpTransportアノテーション)」を参照)
コンテキスト・パスのデフォルト値(JWSファイルの名前。ただし、拡張子は付きません)
たとえば、JAX-RPC JWSファイルで@WLHttpTransport
アノテーションを指定し、そのcontextPath
属性をfinancial
に設定したものと仮定します。この時、build.xml
ファイルのjwsc
Antタスクにおいてその他のcontextPath
属性を指定していない場合、Webサービスのコンテキスト・パスはfinancial
になります。
ここで、そのbuild.xml
ファイルを更新し、<WLHttpTransport>
子要素を、JWSファイルを指定する<jws>
要素に追加し、そのcontextPath
属性をfinance
に設定したものと仮定します。今度は、Webサービスのコンテキスト・パスはfinance
になります。ただし、次に<module>
要素の下で<jws>
要素とその子<WLHttpTransport>
要素をグループ化し、そのcontextPath
属性をmoney
に設定すると、Webサービスのコンテキスト・パスはmoney
になります。
JWSファイルまたはjwsc AntタスクにおいてcontextPath
属性を1つも指定しない
場合、Webサービスのコンテキスト・パスはデフォルト値(*.java
拡張子の付かないJWSファイルの名前)になります。
複数の<jws>
要素を1つの<module>
要素の下でグループ化し、前述の他のオプションを使用してコンテキスト・パスを設定しない場合、<module>のcontextPath
属性で、モジュール内のすべてのWebサービスで使用される共通のコンテキスト・パスを指定する必要があります
。そうしないと、モジュール内のすべてのWebサービスのデフォルト・コンテキスト・パスが異なってしまいます(実装するJWSファイルの名前が異なることに起因します)が、1つのWARファイル内で異なるコンテキスト・パスを使用することはできません。
以下のbuild.xml
の抜粋では、JWSファイルに対してjwsc
Antタスクを実行する基本的な例を示します。
<taskdef name="jwsc" classname="weblogic.wsee.tools.anttasks.JwscTask" /> <target name="build-service"> <jwsc srcdir="src" destdir="output/helloWorldEar"> <jws file="examples/webservices/hello_world/HelloWorldImpl.java" type="JAXRPC"/> </jwsc> </target>
この例では、
カレント・ディレクトリに対して相対的なoutput/helloWorldEar
に、エンタープライズ・アプリケーションが展開形式で生成されます。
JWSファイルはHelloWorldImpl.java
という名前で、カレント・ディレクトリに対して相対的なsrc/examples/webservices/hello_world
ディレクトリにあります。つまり、JWSファイルはパッケージexamples.webservices.helloWorld
内にあります。
JAX-RPC Webサービスが生成されます。
以下の例は前の例と似ていますが、compiledWsdl
属性を使用して、wsdlc
が生成したアーティファクト(「WSDLから開始する」ユース・ケース)を含むJARファイルを指定している点が異なります。
<taskdef name="jwsc" classname="weblogic.wsee.tools.anttasks.JwscTask" /> <target name="build-service"> <jwsc srcdir="src" destdir="output/wsdlcEar"> <jws file="examples/webservices/wsdlc/TemperaturePortTypeImpl.java" compiledWsdl="output/compiledWsdl/TemperatureService_wsdl.jar" type="JAXRPC"/> </jwsc> </target>
この例では、TemperaturePortTypeImpl.java
ファイルが、独自のビジネス・ロジックを含めて更新した、途中まで作成されていたJWSファイルです。compiledWsdl
属性が指定されてJARファイルを指し示しているので、jwsc
Antタスクでは、JARに含まれているアーティファクトを再生成することはありません。
このタスクを実際に実行するには、コマンド・ラインで次のように入力します。
prompt> ant build-service
wsdlc
AntタスクはWSDLファイルを入力として取り、WebLogic Webサービスの実装を構成するアーティファクトを生成します。次のようなアーティファクトがあります。
WSDLファイルで記述されたWebサービスを実装するJWSサービス・エンドポイント・インタフェース(SEI)。
生成されるJWS SEIの不完全な(途中まで作成済みの)実装が含まれるJWS実装ファイル。このファイルは開発者がカスタマイズする必要があります。
Webサービスのパラメータと戻り値をXML表現とJava表現の間で変換するために、WebLogic Serverによって使用されるデータ・バインディング・アーティファクト。
(オプション)生成されるJWS SEIのJavadoc。
wsdlc
AntタスクはJWS SEIとデータ・バインディング・アーティファクトを一緒にJARファイルにパッケージ化します。このJARファイルを後でjwsc
Antタスクに指定します。このJARファイルを更新する必要はありません。更新するファイルはJWS実装クラスのみです。
wsdlc
Antタスクを実行するには、以下のtaskdef
およびgenerate-from-wsdl
ターゲットをbuild.xml
ファイルに追加します。
<taskdef name="wsdlc" classname="weblogic.wsee.tools.anttasks.WsdlcTask"/> <target name="generate-from-wsdl"> <wsdlc srcWsdl="WSDL_file" destJwsDir="JWS_interface_directory" destImplDir="JWS_implementation_directory" packageName="Package_name" type="WebService_type"/> </target>
各項目の説明は次のとおりです。
WSDL_file
- 部分的な実装を生成する元となるWSDLファイルの名前(絶対パスまたは相対パスを含めます)。
JWS_interface_directory
- JWS SEIおよびデータ・バインディング・アーティファクトを含むJARファイルの生成先となるディレクトリ。
生成されるJARファイルの名前はWSDLFile_wsdl.jar
(WSDLFile
はWSDLファイルのルート名)。たとえば、file属性に対して指定したWSDLファイルの名前がMyService.wsdl
の場合、生成されるJARファイルはMyService_wsdl.jar
となります。
JWS_implementation_directory
- 途中まで作成済みのJWS実装ファイルの生成先となる最上位ディレクトリ。ファイルはパッケージ名に対応するサブディレクトリ階層に生成されます。
生成されるJWSファイルの名前はPortTypeImpl.java
です。PortType
は、Webサービスを生成するWSDLファイル内の<portType>
要素のname
属性です。たとえば、ポート・タイプ名がMyServicePortType
の場合、JWS実装ファイルはMyServicePortTypeImpl.java
という名前になります。
Package_name
- 生成されるJWS SEIおよび実装ファイルの生成先となるパッケージ。この属性を指定しない場合、wsdlc
Antタスクは、WSDLのtargetNamespace
に基づいてパッケージ名を生成します。
WebService_type
- Webサービスの種類。この値は、JAXWSまたはJAXRPCに設定できます。
必須のtaskdef
要素では、wsdlc
Antタスクの完全修飾クラス名を指定します。
wsdlc
Antタスクでは、srcWsdl
およびdestJwsDir
属性のみが必須です。ただし、通常は、プログラミングを容易にするために、途中まで作成済みのJWSファイルを生成します。WSDLファイルのtargetNamespace
が、読取り可能なパッケージ名への変換に適していない場合に備えて、パッケージ名を明示的に指定することをお薦めします。
以下のbuild.xml
の抜粋では、WSDLファイルに対してwsdlc
Antタスクを実行する例を示します。
<taskdef name="wsdlc" classname="weblogic.wsee.tools.anttasks.WsdlcTask"/> <target name="generate-from-wsdl"> <wsdlc srcWsdl="wsdl_files/TemperatureService.wsdl" destJwsDir="output/compiledWsdl" destImplDir="impl_output" packageName="examples.webservices.wsdlc" type="JAXRPC" /> </target>
この例では、
既存のWSDLファイルはTemperatureService.wsdl
という名前で、build.xml
ファイルを格納するディレクトリのwsdl_files
サブディレクトリにあります。
JWS SEIとデータ・バインディング・アーティファクトを含むJARファイルはoutput/compiledWsdl
ディレクトリに生成され、JARファイルの名前はTemperatureService_wsdl.jar
です。
生成されるJWSファイルのパッケージ名はexamples.webservices.wsdld
です。
途中まで作成済みのJWSファイルは、カレント・ディレクトリに対して相対的なimpl_output/examples/webservices/wsdlc
ディレクトリに生成されます。
WSDLファイル内のポート・タイプ名がTemperaturePortType
の場合、JWS実装ファイルの名前はTemperaturePortTypeImpl.java
になります。
JAX-RPC Webサービスが生成されます。
このタスクを実際に実行するには、コマンド・ラインで次のように入力します。
prompt> ant generate-from-wsdl
詳細は、『Oracle WebLogic Server WebLogic Webサービス・リファレンス』のwsdlcに関する項を参照してください。
wsdlc
Antタスクは、destImplDir
属性で指定されたディレクトリに、途中まで作成済みのJWS実装ファイルを生成します。ファイルの名前はPortTypeImpl.java
です(PortType
は元のWSDLにあるportTypeの名前)。このクラス・ファイルには、独自のビジネス・ロジックを除いて、Webサービスへコンパイルするために必要なすべてのものが含まれています。
JWSクラスは、WSDLファイルに対応するJWS Webサービス・エンドポイント・インタフェースを実装しています。このJWS SEIもwsdlc
によって生成され、他のアーティファクト(WSDL内のXMLスキーマ・データ型のJava表現など)が含まれているJARファイル内に置かれています。JWSクラスのパブリック・メソッドはWSDLファイル内の操作に対応しています。
wsdlc
Antタスクは、JWS実装クラスに@WebService
および@WLHttpTransport
アノテーションを自動的に含めます。属性の値はWSDL内の関連する値に対応しています。たとえば、@WebService
のserviceName
属性は、WSDLファイル内の<service>
要素のname
属性と同じです。@WLHttpTransport
のcontextPath
およびserviceUri
属性は共に、WSDL内の<address>
要素のlocation
属性で指定されたエンドポイント・アドレスを構成します。
JWSファイルを更新するときは、該当のWebサービス操作が希望どおりに動作するように、メソッドにJavaコードを追加します。通常、生成されるJWSファイルには、コードを追加すべき場所に次のようなコメントがあります。
//replace with your impl here
また、他のJWSアノテーションをファイルに追加することもできますが、以下のような制限があります。
JWS実装ファイルに含めることができる標準(JSR-181)のjavax.jws
パッケージのアノテーションは、@WebService
、@HandlerChain
、@SOAPMessageHandler
、および@SOAPMessageHandlers
のみです。javax.jws
パッケージの他のJWSアノテーションを指定し、JWSファイルをWebサービスにコンパイルしようとすると、jwsc
Antタスクはエラーを返します。
@WebServiceアノテーションでは、serviceName
、endpointInterface
、およびtargetNamespace
属性のみを指定できます。まれに、WSDLファイルに複数の
<service>
要素が指定されていることがあります。その場合は、serviceName
属性を使用して、wsdlc
Antタスクで使用していたものとは別の<service>
WSDL要素を指定します。wsdlc
Antタスクで生成されたJWS SEIを指定するには、endpointInterface
属性を使用します。WSDLサービスのネームスペースを指定するには、targetNamespace
属性を使用します。JWS SEIネームスペースと異なるネームスペースを指定できます。
必要に応じて、WebLogic固有のJWSアノテーションを指定することができます。
JWSファイルを更新したら、wsdlc
の出力ディレクトリにそのまま置いておかないで、正式なソースの場所に移動することをお薦めします。
以下の例は、「サンプルWSDLファイル」
のWSDLからwsdlcが生成したJWS実装ファイルです。太字のテキストは、Webサービスの1つの操作(getTemp
)を実装するJavaコードを追加する場所を示しています。
package examples.webservices.wsdlc; import javax.jws.WebService; import weblogic.jws.*; /** * TemperaturePortTypeImpl class implements web service endpoint interface * TemperaturePortType */ @WebService( serviceName="TemperatureService", endpointInterface="examples.webservices.wsdlc.TemperaturePortType") @WLHttpTransport( contextPath="temp", serviceUri="TemperatureService", portName="TemperaturePort") public class TemperaturePortTypeImpl implements TemperaturePortType { public TemperaturePortTypeImpl() { } public float getTemp(java.lang.String zipcode) { //replace with your impl here return 0; } }
Webサービスはエンタープライズ・アプリケーションとしてパッケージ化されるので、Webサービスのデプロイとは、該当するEARファイルまたは展開されたディレクトリをデプロイすることになります。
WebLogic Server管理コンソールの使用からweblogic.Deployer
Javaユーティリティの使用まで、WebLogicアプリケーションのデプロイには多様な方法があります。開発環境とは異なり、本番環境にアプリケーションをデプロイする際には、他にも様々な問題を考慮する必要があります。デプロイメントの詳細は、『Oracle WebLogic Serverへのアプリケーションのデプロイ』を参照してください。
このガイドでは、開発の性質上、Webサービスの2つのデプロイ方法についてのみ説明します。
反復的な開発プロセスの一環としてWebサービスをデプロイする最も簡単な方法は、wldeploy
WebLogic Antタスクを実行するターゲットを、jwsc
Antタスクが含まれる同じbuild.xml
ファイルに追加することです。Javaコードを追加してサービスを再生成するたびに、サービスの再デプロイとテストを繰返し行えるように、Webサービスをデプロイするターゲットとアンデプロイするターゲットの両方を追加することができます。
wldeploy
Antタスクを使用するには、以下のターゲットをbuild.xml
ファイルに追加します。
<target name="deploy"> <wldeploy action="deploy" name="DeploymentName" source="Source" user="AdminUser" password="AdminPassword" adminurl="AdminServerURL" targets="ServerName"/> </target>
各項目の説明は次のとおりです。
DeploymentName
- エンタープライズ・アプリケーションのデプロイメント名、または、WebLogic Server管理コンソールでデプロイメントのリストに表示される名前。
Source
- デプロイするエンタープライズ・アプリケーションのEARファイルまたは展開されたディレクトリの名前。デフォルトでは、jwsc
Antタスクが展開されたエンタープライズ・アプリケーション・ディレクトリを生成します。
AdminUser
- 管理ユーザー名。
AdminPassword
- 管理パスワード。
AdminServerURL
- 管理サーバーのUrl。通常はt3://localhost:7001
です。
ServerName
- WebサービスをデプロイするWebLogic Serverインスタンスの名前。
たとえば、以下のwldeploy
タスクでは、エンタープライズ・アプリケーションの展開されたディレクトリ(カレント・ディレクトリに対して相対的なoutput/ComplexServiceEar
にある)がmyServer
WebLogic Serverインスタンスにデプロイされることを指定します。デプロイメント名はComplexServiceEar
です。
<target name="deploy"> <wldeploy action="deploy" name="ComplexServiceEar" source="output/ComplexServiceEar" user="weblogic" password="weblogic" verbose="true" adminurl="t3://localhost:7001" targets="myserver"/> </target>
Webサービスを実際にデプロイするには、コマンド・ラインでdeploy
ターゲットを実行します。
prompt> ant deploy
ソース・コードに変更を加えてからWebサービスを再デプロイできるように、Webサービスを簡単にアンデプロイするターゲットを追加することもできます。
<target name="undeploy"> <wldeploy action="undeploy" name="ComplexServiceEar" user="weblogic" password="weblogic" verbose="true" adminurl="t3://localhost:7001" targets="myserver"/> </target>
Webサービスをアンデプロイするときは、source
属性を指定する必要はなく、名前によってアンデプロイします。
WebLogic Server管理コンソールを使用してWebサービスをデプロイするには、最初に、ブラウザで次のURLを使用してWebサービスを呼び出します。
http://host
:port
/console
各項目の説明は次のとおりです。
host
WebLogic Serverが動作しているコンピュータの名前。
port
- WebLogic Serverがリスニングしているポート番号(デフォルト値は7001
です)。
次にデプロイメント・アシスタントを使用して、エンタープライズ・アプリケーションをデプロイします。WebLogic Server管理コンソールの詳細は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプを参照してください。
WebサービスのWSDLをブラウザで表示して、Webサービスが適切にデプロイされていることを確認できます。
次のURLは、WebサービスのWSDLをブラウザで表示する方法を示しています。
http://host
:port
/contextPath
/serviceUri
?WSDL
各項目の説明は次のとおりです。
host
- WebLogic Serverが動作しているコンピュータの名前(localhost
など)。
port
- WebLogic Serverがリスニングしているポート番号(デフォルト値は7001
です)。
contextPath
- Webサービスのコンテキスト・ルート。コンテキスト・ルートを設定する場所としては、@WLHttpTransport
アノテーションのcontextPath
属性、jwsc
の<WLHttpTransport>
、<module>
、または<jws>
要素があり、オーバーライドの順位が決まっています。第3章「WebLogic Webサービスのコンテキスト・パスの定義」を参照してください。
serviceUri
- Webサービスを実装するJWSファイルの@WLHttpTransport
JWSアノテーションのserviceUri
属性の値、またはjwsc
Antタスクの<WLHttpTransport>
子要素の値です; 前者より後者が優先されます。JWSファイルまたはjwsc AntタスクにおいてserviceUri
属性を何も
指定しない場合、WebサービスのserviceUri
はデフォルト値(*.java
拡張子の付かないJWSファイルの名前)になります。
たとえば、Webサービスを実装するJWSファイルで以下の@WLHttpTransport
アノテーションを指定したとします。
... @WLHttpTransport(contextPath="complex", serviceUri="ComplexService", portName="ComplexServicePort") /** * This JWS file forms the basis of a WebLogic Web Service. * */ public class ComplexServiceImpl { ...
ここでは、jwsc Antタスクの<WLHttpTransport>
要素と同等の属性を設定し、contextPath
またはserviceURI
の値をオーバーライドしない
こととします。そして、Webサービスがariel
というホストのデフォルトのポート番号(7001
)で実行されているとすると、そのWebサービスのWSDLを表示するURLは次のようになります。
http://ariel:7001/complex/ComplexService?WSDL
デプロイ済のWebサービスのWSDL(動的なWSDLともいいます)には、特定のWebサービス・ポートにアドレス(URI)を割り当てる<address>
要素が含まれています。たとえば、次に示すWSDLの抜粋には、ComplexService
というデプロイ済みのWebLogic Webサービスの一部が記述されています。
<definitions name="ComplexServiceDefinitions" targetNamespace="http://example.org"> ... <service name="ComplexService"> <port binding="s0:ComplexServiceSoapBinding" name="ComplexServicePort"> <s1:address location="http://myhost:7101/complex/ComplexService"/> </port> </service> </definitions>
この例では、ComplexService
WebサービスにComplexServicePort
というポートが含まれており、そのアドレスはhttp://myhost:7101/complex/ComplexService
となっています。
WebLogic Serverは、このアドレスのcomplex/ComplexService
の部分を、@WLXXXTransport
アノテーションまたはjwsc
要素のcontextPath
およびserviceURI
属性を調べることによって決定します(「WebサービスのWSDLの参照」に説明があります)。しかし、WebLogic Serverがアドレスのプロトコルおよびホスト部分(この例ではhttp://myhost:7101
)を決定するために使用する方法は、次で説明するとおり、より複雑です。この項では、わかりやすいように、アドレスのプロトコルとホストの部分をまとめてサーバー・アドレスと呼ぶことにします。
WebLogic Serverがデプロイ済みのWebサービスの動的なWSDL内にパブリッシュするサーバー・アドレスは、そのWebサービスをHTTP/SやJMSで呼び出せるかどうか、プロキシ・サーバーを構成しているかどうか、Webサービスがクラスタにデプロイされているかどうか、Webサービスが実際にはコールバック・サービスであるかどうかによって異なります。
以下では、これらの構成の違いに応じたサーバー・アドレスの決定方法について説明します。また、ニーズに合わせて構成を変更するための手順説明へのリンクも示します。
なお、ここでは、クラスタとスタンドアロン・サーバーを、WebLogic Server管理コンソールを使用して構成することを前提としています。
Webサービスがクラスタにデプロイされており、クラスタのFrontend Host
、Frontend HTTP Port
、およびFrontend HTTPS Port
が設定されている場合は、動的なWSDLのサーバー・アドレスにこれらの値が使用されます。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのクラスタのHTTP設定の構成に関する項を参照してください。
上記のクラスタ値は設定されていないが、Webサービスがデプロイされている個々のサーバー
でFrontend Host
、Frontend HTTP Port
、およびFrontend HTTPS Portの値が設定されている場合は、サーバー・アドレスにこれらの値が使用されます。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのHTTPプロトコルの構成に関する項を参照してください。
これらの値がクラスタにも個々のサーバーにも設定されていない場合は、動的なWSDL内のWSDLリクエストのサーバー・アドレスが使用されます。
Webサービスがクラスタにデプロイされており、Cluster Address
が設定されている場合は、動的なWSDLのサーバー・アドレスにこの値が使用されます。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのクラスタの構成に関する項を参照してください。
クラスタ値が設定されていないか、Webサービスがスタンドアロン・サーバーにデプロイされており、WebサービスがデプロイされているサーバーのListen Address
が設定されている場合は、サーバー・アドレスにこの値が使用されます。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのリスニング・アドレスの構成に関する項を参照してください。
コールバック・サービスがクラスタにデプロイされており、クラスタのFrontend Host
、Frontend HTTP Port
、およびFrontend HTTPS Port
が設定されている場合は、動的なWSDLのサーバー・アドレスにこれらの値が使用されます。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのクラスタのHTTP設定の構成に関する項を参照してください。
コールバック・サービスがクラスタまたはスタンドアロン・サーバーにデプロイされており、上記のクラスタ値は設定されていないが、コールバック・サービスがデプロイされている個々のサーバー
でFrontend Host
、Frontend HTTP Port
、およびFrontend HTTPS Portの値が設定されている場合は、サーバー・アドレスにこれらの値が使用されます。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのHTTPプロトコルの構成に関する項を参照してください。
コールバック・サービスがクラスタにデプロイされており、上記のどの値も設定されていないがCluster Address
が設定されている場合は、サーバー・アドレスにこの値が使用されます。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのクラスタの構成に関する項を参照してください。
上記のどの値も設定されていないが、コールバック・サービスがデプロイされているサーバーのListen Address
が設定されている場合は、サーバー・アドレスにこの値が使用されます。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのリスニング・アドレスの構成に関する項を参照してください。
必須ではありませんが、Webサービスがデプロイされているクラスタまたは個々のサーバーのいずれかのFrontend Host
、FrontEnd HTTP Port
、およびFrontend HTTPS Port
がプロキシ・サーバーを指すように明示的に設定することをお薦めします。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのクラスタのHTTP設定の構成またはHTTPプロトコルの構成に関する項を参照してください。
WebLogic Webサービスのデプロイメントが完了したら、WebLogic Server管理コンソールに含まれているWebサービス・テスト・クライアントを使用して、コードを記述することなくサービスをテストできます。複合型を持つWebサービスや、WebLogic Serverの高度な機能(会話など)を使用するWebサービスも含めて、Webサービスを素早く簡単にテストできます。テスト・クライアントはリクエストの完全なログを自動的に保持しているので、ユーザーは以前の呼出しに戻って結果を表示することができます。
デプロイしたWebサービスをWebLogic Server管理コンソールを使用してテストするには、次の手順に従います。
次のURLを使用して、ブラウザでWebLogic Server管理コンソールを呼び出します。
http://host:port/console
各項目の説明は次のとおりです。
host
WebLogic Serverが動作しているコンピュータの名前。
port
- WebLogic Serverがリスニングしているポート番号(デフォルト値は7001
です)。
Oracle WebLogic Server管理コンソール・オンライン・ヘルプのWebサービスのテストに関する項で説明されている手順に従います。
この項では、Webサービスの開発をWebLogic分割開発ディレクトリ環境に統合する方法について説明します。このWebLogic機能について理解していること、標準のJava Platform, Enterprise Edition (Java EE)バージョン5アプリケーションおよびモジュール(EJBやWebアプリケーションなど)の開発用にこのタイプの環境を設定済みであること、Webサービスの開発が含まれるようにbuild.xml
ファイルを更新しようとしていることを前提としています。
WebLogic分割開発ディレクトリ環境の詳細は、『Oracle WebLogic Serverアプリケーションの開発』の分割開発ディレクトリ環境の作成に関する項およびWebLogic Serverと一緒にオプションでインストールされるsplitdir/helloWorldEar
サンプルを参照してください。サンプルは、EXAMPLES_HOME
/wl_server/examples/src/examples
ディレクトリにあります。EXAMPLES_HOME
はWebLogic Serverのサンプル・コードが構成されているディレクトリを示します。デフォルト・パスは、ORACLE_HOME
\user_projects\applications
です。WebLogic Serverのサンプル・コードの詳細は、『Oracle WebLogic Serverの理解』のサンプル・アプリケーションとサンプル・コードに関する項を参照してください。
メイン・プロジェクト・ディレクトリ内に、Webサービスを実装するJWSファイルを格納するためのディレクトリを作成します。
たとえば、メイン・プロジェクト・ディレクトリが/src/helloWorldEar
である場合、/src/helloWorldEar/helloWebService
というディレクトリを作成します。
prompt> mkdir /src/helloWorldEar/helloWebService
helloWebService
ディレクトリの下に、JWSファイルのパッケージ名に対応するディレクトリ階層を作成します。
たとえば、JWSファイルがexamples.splitdir.hello
パッケージにパッケージ化されている場合は、examples/splitdir/hello
というディレクトリ階層を作成します。
prompt> cd /src/helloWorldEar/helloWebService prompt> mkdir examples/splitdir/hello
メイン・プロジェクト・ディレクトリに作成したWebサービスのサブディレクトリ(この例では/src/helloWorldEar/helloWebService/examples/splitdir/hello
)にJWSファイルを置きます。
エンタープライズ・アプリケーションをビルドするbuild.xml
ファイル内に、「jwsc WebLogic WebサービスAntタスクの実行」
の説明に従ってjwsc WebLogic WebサービスAntタスクの呼出しを追加して、Webサービスをビルドする新しいターゲットを作成します。
jwsc
のsrcdir
属性は、JWSファイルを格納する最上位ディレクトリ(この例ではhelloWebService
)を指すようにします。jwsc
のdestdir
属性は、wlcompile
に指定するのと同じ宛先ディレクトリを指すようにします。次の例を参照してください。
<target name="build.helloWebService"> <jwsc srcdir="helloWebService" destdir="destination_dir" keepGenerated="yes" > <jws file="examples/splitdir/hello/HelloWorldImpl.java" type="JAXRPC" /> </jwsc> </target>
この例のdestination_dir
は、他の分割開発ディレクトリ環境のAntタスク(wlappc
やwlcompile
など)も使用する宛先ディレクトリを表します。
Webサービス関連のターゲットを呼び出すように、build.xml
ファイルのメインのbuildターゲットを更新します。
<!-- Builds the entire helloWorldEar application --> <target name="build" description="Compiles helloWorldEar application and runs appc" depends="build-helloWebService,compile,appc" />
注意: エンタープライズ・アプリケーションを実際にビルドするときは、wlappc Antタスクを実行する前に、jwsc Antタスクを実行するようにしてください。wlappc を正常に実行するには、jwsc によって生成されるアーティファクトの一部が必要になるためです。この例の場合は、appc ターゲットよりも前にbuild-helloWebService ターゲットを指定する必要があります。 |
wlcompile
およびwlappc
Antタスクを使用してエンタープライズ・アプリケーション全体をコンパイルおよび検証する場合は、両方のAntタスクでWebサービスのソース・ディレクトリを除外するようにしてください。これは、jwsc
AntタスクでWebサービスのコンパイルとパッケージ化をすでに扱っているからです。例:
<target name="compile"> <wlcompile srcdir="${src.dir}" destdir="${dest.dir}" excludes="appStartup,helloWebService"> ... </wlcomplile> ... </target> <target name="appc"> <wlappc source="${dest.dir}" deprecation="yes" debug="false" excludes="helloWebService"/> </target>
META-INF
プロジェクト・ソース・ディレクトリにあるapplication.xml
ファイルを更新して、<web>
モジュールを追加し、jwsc
Antタスクによって生成されるWARファイルの名前を指定します。
たとえば、helloWorld Webサービスのapplication.xml
ファイルに以下のように追加します。
<application> ... <module> <web> <web-uri>examples/splitdir/hello/HelloWorldImpl.war</web-uri> <context-root>/hello</context-root> </web> </module> ... </application>
注意: jwsc Antタスクでは通常、Webサービスを実装するJWSファイルからWebアプリケーションWARファイルが生成されます。ただし、JWSファイルにjavax.ejb.SessionBean が明示的に実装されている場合は例外です。その場合は、application.xml ファイルに<ejb> モジュール要素を追加する必要があります。 |
これで、分割開発ディレクトリ環境は、Webサービスの開発を含むように更新されました。エンタープライズ・アプリケーション全体を再ビルドしてデプロイするときに、WebサービスもEARの一部としてデプロイされます。Webサービスは、「WebサービスのWSDLの参照」で説明されている標準的な方法で呼び出します。