Oracle® Fusion Middleware Oracle WebLogic Server JAX-RPC Webサービス・スタート・ガイド 11g リリース1(10.3.6) B61647-04 |
|
![]() 前 |
![]() 次 |
この章では、Java API for XML-based RPC (JAX-RPC)を使用した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 Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「Webサービスのアノテーション・サポート」を参照してください。このプログラミング・モデルの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス入門』の「WebLogic Webサービスの構造」を参照してください。
以下の項では、Webサービスを繰返し開発する主要な手順を、Javaから開始する場合、または既存のWSDLファイルから開始する場合について説明します。
反復的な開発とは、希望どおりに動作するまで、Webサービスを繰返しコーディング、コンパイル、パッケージ化、デプロイ、およびテストできるように、開発環境を設定することです。WebLogic Webサービス・プログラミング・モデルでは、Antタスクを使用して、反復的な開発のほとんどの手順を実行します。一般に、すべての手順に対応するターゲットを含んだ1つのbuild.xml
ファイルを作成して、そのターゲットを繰返し実行します。JWSファイルを新しいJavaコードで更新したら、その更新が期待どおりに動作することをテストします。
Webサービスを開発するために、この項で説明したコマンド・ライン・ツールの他に、Oracle JDeveloperなどのIDEも使用できます。詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービスの紹介』の「Oracle IDEを使用してWebサービスをビルドする」を参照してください。
WebLogic Serverドメインを作成したら、構成ウィザードでWebサービス固有の拡張テンプレートを使用してドメインを更新し、特定のWebLogic Webサービス機能で必要になるリソースを自動的に構成できます。この拡張テンプレートの使用は必須ではありませんが、これを使用することでJMSおよびJDBCリソースの構成を大幅に簡略化できます。
Webサービス拡張テンプレートを使用すると、以下の機能で必要になるリソースを自動的に構成できます。
Webサービスの信頼性のあるメッセージング
バッファリング
JMSトランスポート
注意: Webサービスのリソースを含まないドメインは、Webサービス以外のシナリオおよび非同期のリクエスト/レスポンスが含まれないWebサービス・シナリオにおいて、適切に起動および実行されます。ただし、サーバー・ログに、非同期リソースが構成されていないこと、およびWebサービスの非同期レスポンス・サービスが完全にデプロイされていないことを示すINFOメッセージが表示されます。 |
次の各手順は、Webサービスの高度な機能を使用するようにドメインを自動的に構成するためのドメインの作成方法および拡張方法を示しています。構成ウィザードを使用してWebLogic Serverドメインを作成および更新する手順の詳細は、『Oracle 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章「使用例とサンプル」を参照してください。
以下に示すのは推奨の手順に過ぎません。独自の開発環境を設定してある場合は、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サービスを呼び出すクライアント・アプリケーションの記述については、第6章「Webサービスの呼出し」を参照してください。
この項では、既存のWSDLファイルに基づいてWebLogic Webサービスを開発する一般的な手順について説明します。このプロセスの具体的な例については、第3章「WebLogic 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章「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タスクを実行するには、以下の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ファイルの最上位ディレクトリを指定します。詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「jwsc」を参照してください。
以下の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
この項では、jwsc
Antタスクの非常に簡単な使用例を紹介します。ただし、このタスクには、非常に有用なツールにするための追加の属性と子要素を含めます。以下のような使用方法が考えられます。
複数のJWSファイルを一度に処理します。生成されたWebサービスをそれぞれ別のWebアプリケーションWARファイルにパッケージ化するか、すべてのWebサービスをグループ化して1つのWARファイルにパッケージ化するかを選択できます。
クライアント・アプリケーションがWebサービスを呼び出すときに使用できるトランスポート形式(HTTP/HTTPS/JMS)を指定します。状況によっては、既存の@WLXXXTransport
アノテーションをすべてオーバーライドすることも可能です。
JWSファイル内で呼び出す他のWebサービスのJAX-RPCクライアント・スタブを自動的に生成します。
新しいエンタープライズ・アプリケーションまたはWebアプリケーションを生成するのではなく、既存のアプリケーションを更新します。
jwsc
Antタスクの詳細および例については、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「jwsc」を参照してください。
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 Fusion Middleware Oracle WebLogic Server 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.Deployer
Javaユーティリティの使用まで、WebLogicアプリケーションのデプロイには多様な方法があります。開発環境とは異なり、本番環境にアプリケーションをデプロイする際には、他にも様々な問題を考慮する必要があります。デプロイメントの詳細な説明については、『Oracle Fusion Middleware 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
- エンタープライズ・アプリケーションのデプロイメント名、または、管理コンソールでデプロイメントのリストに表示される名前。
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
属性を指定する必要はなく、名前によってアンデプロイします。
管理コンソールを使用してWebサービスをデプロイするには、最初に、ブラウザで次のURLを使用してWebサービスを呼び出します。
http://host
:port
/console
説明:
host
WebLogic Serverが動作しているコンピュータの名前。
port
- WebLogic Serverがリスニングしているポート番号(デフォルト値は7001
)。
次にデプロイメント・アシスタントを使用して、エンタープライズ・アプリケーションをデプロイします。管理コンソールの詳細は、Oracle Fusion Middleware 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
要素があり、オーバーライドの順位が決まっています。包括的な説明については、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「WebLogic Webサービスのコンテキスト・パスの定義」を参照してください。
serviceUri
- Webサービスを実装するJWSファイルの@WLHttpTransport
JWSアノテーションのserviceUri
属性の値、またはjwsc
Antタスクの<WLHttpTransport>
子要素の値です; 前者より後者が優先されます。JWSファイルまたはjwsc
AntタスクにおいてserviceUri
属性を1つも指定しない場合、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は、「WebサービスのWSDLの参照」
で説明されているように@WLXXXTransport
アノテーションまたはjwsc
要素のcontextPath
およびserviceURI
属性を調べてこのアドレスのcomplex/ComplexService部分を決定します。ただし、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 Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプの「クラスタのHTTP設定の構成」を参照してください。
上記のクラスタ値は設定されていないが、Webサービスがデプロイされている個々のサーバーでFrontend Host
、Frontend HTTP Port
、およびFrontend HTTPS Port
の値が設定されている場合は、サーバー・アドレスにこれらの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプの「HTTPプロトコルの構成」を参照してください。
これらの値がクラスタにも個々のサーバーにも設定されていない場合は、動的なWSDL内のWSDLリクエストのサーバー・アドレスが使用されます。
Webサービスがクラスタにデプロイされており、Cluster Address
が設定されている場合は、動的なWSDLのサーバー・アドレスにこの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプの「クラスタの構成」を参照してください。
クラスタ値が設定されていないか、Webサービスがスタンドアロン・サーバーにデプロイされており、WebサービスがデプロイされているサーバーのListen Address
が設定されている場合は、サーバー・アドレスにこの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプの「リスニング・アドレスの構成」を参照してください。
コールバック・サービスがクラスタにデプロイされており、クラスタのFrontend Host
、Frontend HTTP Port
、およびFrontend HTTPS Port
が設定されている場合は、動的なWSDLのサーバー・アドレスにこれらの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプの「クラスタのHTTP設定の構成」を参照してください。
コールバック・サービスがクラスタまたはスタンドアロン・サーバーにデプロイされており、上記のクラスタ値は設定されていないが、コールバック・サービスがデプロイされている個々のサーバーでFrontend Host
、Frontend HTTP Port
、およびFrontend HTTPS Port
の値が設定されている場合は、サーバー・アドレスにこれらの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプの「HTTPプロトコルの構成」を参照してください。
コールバック・サービスがクラスタにデプロイされており、上記のどの値も設定されていないがCluster Address
が設定されている場合は、サーバー・アドレスにこの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプの「クラスタの構成」を参照してください。
上記のどの値も設定されていないが、コールバック・サービスがデプロイされているサーバーのListen Address
が設定されている場合は、サーバー・アドレスにこの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプの「リスニング・アドレスの構成」を参照してください。
必須ではありませんが、Webサービスがデプロイされているクラスタまたは個々のサーバーのいずれかのFrontend Host
、FrontEnd HTTP Port
、およびFrontend HTTPS Port
がプロキシ・サーバーを指すように明示的に設定することをお薦めします。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプの「クラスタのHTTP設定の構成」または「HTTPプロトコルの構成」を参照してください。
WebLogic Webサービスのデプロイメントが完了したら、WebLogic管理コンソールに含まれているWebサービス・テスト・クライアントを使用して、コードを記述することなくサービスをテストできます。複合型を持つWebサービスや、WebLogic Serverの高度な機能(会話など)を使用するWebサービスも含めて、Webサービスを素早く簡単にテストできます。テスト・クライアントはリクエストの完全なログを自動的に保持しているので、ユーザーは以前の呼出しに戻って結果を表示することができます。
デプロイしたWebサービスを管理コンソールを使用してテストするには、次の手順に従います。
次のURLを使用して、ブラウザで管理コンソールを呼び出します。
http://host:port/console
説明:
host
WebLogic Serverが動作しているコンピュータの名前。
port
- WebLogic Serverがリスニングしているポート番号(デフォルト値は7001
)。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプの「Webサービスのテスト」で説明されている手順に従います。
この項では、Webサービスの開発をWebLogic分割開発ディレクトリ環境に統合する方法について説明します。このWebLogic機能について理解していること、標準のJava Platform, Enterprise Edition (Java EE)バージョン5アプリケーションおよびモジュール(EJBやWebアプリケーションなど)の開発用にこのタイプの環境を設定済みであること、Webサービスの開発が含まれるようにbuild.xml
ファイルを更新しようとしていることを前提としています。
WebLogic分割開発ディレクトリ環境の詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverアプリケーションの開発』の「分割開発ディレクトリ環境の作成」およびWebLogic Serverと一緒にインストールされるsplitdir/helloWorldEar
サンプルを参照してください。サンプルは、WL_HOME
/samples/server/examples/src/examples
ディレクトリにあります。WL_HOME
は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の参照」で説明されている標準的な方法で呼び出します。