JAX-WS Webサービスについて
Java API for XML Web Services (JAX-WS)、JSR 224 は、Java EEプラットフォームの重要な部分です。JAX-RPC (Java API for XML-based RPC 1.1)の追加リリースであるJAX-WSは、Javaテクノロジを使用したWebサービスの開発タスクを簡素化します。SOAP 1.1、SOAP 1.2、XMLなど複数のプロトコルのサポート、およびHTTP以外のプロトコルもサポートできる機能を備えることにより、JAX-RPC 1.1の問題の一部に対処しています。JAX-WSはデータ・バインディングにJAXB 2.0を使用し、生成したサービス・エンドポイント・インタフェースを制御するためのカスタマイズをサポートしています。注釈がサポートされているため、JAX-WSではWebサービス開発が簡素化され、実行時のJARファイルのサイズが小さくなっています。
このドキュメントでは、IDEを使用したJAX-WS Webサービス開発の基本を示します。Webサービスを作成した後、ネットワーク経由でWebサービスを使用する(Webサービスを「消費する」とも呼ばれる)、3つの異なるWebサービス・クライアントを記述します。3つのクライアントとは、Java SEアプリケーションのJavaクラス、サーブレット、およびWebアプリケーションのJSPページです。クライアントに焦点を当てた、さらに詳細なチュートリアルは、JAX-WS Webサービス・クライアントの開発 です。
目次
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
注意: GlassFishサーバーは、NetBeans IDEのJava EEディストリビューションとともにインストールできます。または、GlassFishサーバーのダウンロード・ページ かApache Tomcatのダウンロード・ページ からダウンロードすることもできます。
重要: Java EEプロジェクトには、GlassFish ServerまたはOracle WebLogic Server 12cが必要です。
バンドルされているTomcat Webサーバーは、Java EEに完全に準拠したWebサーバーではありません。ただし、一部のJava EE機能をサポートするようにTomcat 7.x Webサーバーを構成できます。TomcatにJava EEのサポートを追加する方法の詳細は、Apache TomEE project を参照してください。
Webサービスの作成
この課題の目標は、使用予定のデプロイメント・コンテナに適したプロジェクトを作成することです。プロジェクトが完成した後、その中にWebサービスを作成します。
コンテナの選択
WebサービスはWebコンテナまたはEJBコンテナにデプロイできます。これは、選択する実装によって変わります。Java EEアプリケーションを作成している場合、EJBを直接Webアプリケーションに配置できるため、どのような場合でもWebコンテナを使用します。たとえばTomcat Webサーバーにデプロイする予定の場合、Tomcat WebサーバーにはWebコンテナしかないため、EJBモジュールではなくWebアプリケーションを作成します。
「ファイル」>「新規プロジェクト」(LinuxおよびWindowsでは[Ctrl]-[Shift]-[N]、MacOSでは[⌘]-[Shift]-[N])を選択します。「Java Web」カテゴリから「Webアプリケーション」を選択するか、「Java EE」カテゴリから「EJBモジュール」を選択します。
JAX-WS WebサービスをMavenプロジェクト内で作成できます。「ファイル」>「新規プロジェクト」(LinuxおよびWindowsの場合は[Ctrl]-[Shift]-[N]、MacOSの場合は[⌘]-[Shift]-[N])を選択し、「Maven」カテゴリから「Maven Webアプリケーション」または「Maven EJBモジュール」を選択します。NetBeansでMavenをまだ使用したことがない場合は、Mavenのベスト・プラクティス を参照してください。
プロジェクトにCalculatorWSApplication という名前を付けます。プロジェクトの場所を選択します。「次」をクリックします。
サーバーとJava EEバージョンを選択し、「終了」をクリックします。
Oracle WebLogicサーバーを使用するには、サーバーをIDEに登録します 。また、WebLogicサーバーを使用する場合は、Oracle WebLogicへのWebアプリケーションのデプロイ のスクリーンキャストを視聴してください。
JavaクラスからのWebサービスの作成
「CalculatorWSApplication 」ノードを右クリックし、「新規」>「Webサービス」を選択します。
WebサービスにCalculatorWS という名前を付け、「パッケージ」に「org.me.calculator 」と入力します。「Webサービスを新規に作成」を選択したままにします。
GlassFishまたはWebLogicでJava EEプロジェクトを作成する場合は、「ステートレス・セッションBeanとしてWebサービスを実装」を選択します。
「終了」をクリックします。「プロジェクト」ウィンドウに新しいWebサービスの構造が表示され、エディタ領域にソース・コードが表示されます。
Webサービスへの操作の追加
この課題の目標は、クライアントから受け取った2つの数字を追加する操作をWebサービスに追加することです。NetBeans IDEは、操作をWebサービスに追加するダイアログを提供します。このダイアログは、Webサービス・ビジュアル・デザイナまたはWebサービス・コンテキスト・メニューのいずれかから開くことができます。
警告: ビジュアル・デザイナはMavenプロジェクトでは使用できません。
Webサービスに操作を追加するには:
次のいずれか:
エディタの「デザイン」ビューに変更します。
または:
「プロジェクト」ウィンドウからWebサービスのノードを見つけます。そのノードを右クリックします。コンテキスト・メニューが開きます。
ビジュアル・デザイナまたはコンテキスト・メニューのいずれかで、「操作の追加」をクリックします。「操作の追加」ダイアログが開きます。
「操作の追加」ダイアログ・ボックスの上の部分で、「名前」に「add 」、「戻り値の型」ドロップダウン・リストに「int 」と入力します。
「操作の追加」ダイアログ・ボックスの下の部分で、「追加」をクリックしてint 型のi という名前のパラメータを作成します。
再度「追加」をクリックし、int 型のj というパラメータを作成します。
次のようになります。
「操作の追加」ダイアログ・ボックスの最下部で「OK」をクリックします。エディタに戻ります。
ソース・コードのhello() メソッドを除去するか、ビジュアル・デザイナでhello 操作を選択して「操作を除去」をクリックすることによって、デフォルトのhello 操作を除去します。
ビジュアル・デザイナでは次のように表示されます。
「ソース」をクリックし、前述の手順で作成したコードを表示します。これは、サービスをJava EEステートレスBeanとして作成したかどうかによって異なります。次のスクリーンショットの違いがわかりますか。(ステートレスBeanとして実装されていないJava EE 6サービスやJava EE 7サービスはJava EE 5サービスに似ています。)
注意: NetBeans IDE 7.3およおび7.4では、生成された@WebService 注釈に、次のサービス名が明示的に指定されていることがわかります。 @WebService(serviceName = "CalculatorWS") 。
エディタで、スケルトンのadd 操作を次のように拡張します(変更部分は太字で表示)。
@WebMethod
public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
int k = i + j;
return k ;
}
前出のコードからわかるように、このWebサービスは単に2つの数字を受け取り、合計を返します。次の項では、IDEを使用してWebサービスをテストします。
Webサービスのデプロイおよびテスト
Webサービスをサーバーにデプロイした後、サーバーにテスト・クライアントがある場合はIDEを使用してサーバーのテスト・クライアントを開くことができます。GlassFishサーバーとWebLogicサーバーにはテスト・クライアントがあります。
Tomcat Webサーバーを使用している場合は、テスト・クライアントがありません。プロジェクトを実行するだけで、Tomcat Webサービス・ページが開くかどうかを確認できます。この場合は、プロジェクトを実行する前に、Webサービスをアプリケーションのエントリ・ポイントにする必要があります。Webサービスをアプリケーションのエントリ・ポイントにするには、「CalculatorWSApplication」プロジェクト・ノードを右クリックし、「プロパティ」を選択します。「実行」プロパティを開き、「相対URL」フィールドに「/CalculatorWS 」と入力します。「OK」をクリックします。プロジェクトを実行するには、プロジェクト・ノードを再度右クリックし、「実行」を選択します。
GlassFishまたはWebLogicサーバーへ正常にデプロイメントされていることをテストする手順:
プロジェクトを右クリックし、「デプロイ」を選択します。アプリケーション・サーバーが開始され、アプリケーションがビルドされて、サーバーにデプロイされます。これらの操作の進行状況は、「出力」ビューの「CalculatorWSApplication (run-deploy)」および「GlassFish Server 3」タブまたは「Tomcat」タブで確認できます。
IDEの「プロジェクト」タブで、CalculatorWSApplicationプロジェクトの「Webサービス」ノードを展開します。「CalculatorWS」ノードを右クリックし、「Webサービスをテスト」を選択します。
GlassFishサーバーにWebアプリケーションをデプロイした場合、テスター・ページがブラウザで開きます。Tomcat Webサーバーの場合およびEJBモジュールのデプロイメントの場合、状況は異なります。
GlassFishサーバーにデプロイした場合、次のようにテスター・ページに2つの数字を入力します。
2つの数字の合計が次のように表示されます。
「ファイル」>「新規プロジェクト」(LinuxおよびWindowsの場合は[Ctrl]-[Shift]-[N]、MacOSの場合は[⌘]-[Shift]-[N])を選択し、「サンプル」>「Webサービス」>「カリキュレータ(EE 6)」を選択することによって、Java EEステートレスBeanバージョンの完全なカリキュレータ・サービスを開くことができます。
Maven CalculatorサービスとMaven Calculatorクライアントは、「サンプル」>「Maven」から使用できます。
Webサービスの使用
作成したWebサービスのデプロイが完了したので、次はWebサービスのadd メソッドを使用するクライアントを作成する必要があります。ここでは、Java SEアプリケーションのJavaクラス、サーブレット、およびWebアプリケーションのJSPページという3つのクライアントを作成します。
注意: クライアントに焦点を当てた、さらに詳細なチュートリアルは、JAX-WS Webサービス・クライアントの開発 です。
クライアント1: Java SEアプリケーションのJavaクラス
この項では、標準のJavaアプリケーションを作成します。アプリケーションの作成に使用するウィザードでJavaクラスも作成できます。続いてIDEのツールで、クライアントを作成し、このチュートリアルの最初に作成したWebサービスを使用します。
「ファイル」>「新規プロジェクト」(LinuxおよびWindowsでは[Ctrl]-[Shift]-[N]、MacOSでは[⌘]-[Shift]-[N])を選択します。「Java」カテゴリから「Javaアプリケーション」を選択します。プロジェクトにCalculatorWS_Client_Application という名前を付けます。「メイン・クラスの作成」を選択状態にし、その他のデフォルト設定はそのまま受け入れます。「終了」をクリックします。
「CalculatorWS_Client_Application 」ノードを右クリックし、「新規」>「Webサービス・クライアント」を選択します。新規Webサービス・クライアント・ウィザードが開きます。
プロジェクトをWSDLソースとして選択します。「参照」をクリックします。CalculatorWSApplicationプロジェクトのCalculatorWS Webサービスを参照します。Webサービスを選択した後、「OK」をクリックします。
パッケージ名を選択しないでください。このフィールドは空のままにします。
その他の設定はデフォルトのままにし、「終了」をクリックします。
「プロジェクト」ウィンドウに新しいWebサービス・クライアントが表示され、作成したadd メソッドのノードが追加されています。
メイン・クラスをダブルクリックしてソース・エディタで開きます。main() メソッドの下にadd ノードをドラッグします。
次のようになります。
public static void main(String[] args) {
// TODO code application logic here
}
private static int add(int i, int j) {
org.me.calculator.CalculatorWS_Service service = new org.me.calculator.CalculatorWS_Service();
org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();
return port.add(i, j);
}
注意: 別の方法として、add ノードをドラッグするかわりに、エディタ上で右クリックして「コードを挿入」>「Webサービス操作をコール」を選択することもできます。
main() メソッド本文で、TODOコメントを、i およびj の値を初期化し、add() をコールし、結果を出力するコードに置き換えます。
public static void main(String[] args) { int i = 3; int j = 4; int result = add(i, j); System.out.println("Result = " + result);
}
main() メソッドのコードを、例外を出力するtry/catchブロックで囲みます。
public static void main(String[] args) { try { int i = 3; int j = 4; int result = add(i, j); System.out.println("Result = " + result); } catch (Exception ex) { System.out.println("Exception: " + ex); }
}
プロジェクトのノードを右クリックし、「実行」を選択します。
「出力」ウィンドウで次のような合計が表示されます。
compile:
run:
Result = 7
BUILD SUCCESSFUL (total time: 1 second)
クライアント2: Webアプリケーションのサーブレット
この項では、新しいWebアプリケーションを作成し、続いてサーブレットを作成します。次にサーブレットを使用して、このチュートリアルの最初で作成したWebサービスを使用します。
「ファイル」>「新規プロジェクト」(LinuxおよびWindowsでは[Ctrl]-[Shift]-[N]、MacOSでは[⌘]-[Shift]-[N])を選択します。「Java Web」カテゴリから「Webアプリケーション」を選択します。プロジェクトにCalculatorWSServletClient という名前を付けます。「次」をクリックし、「終了」をクリックします。
「CalculatorWSServletClient 」ノードを右クリックし、「新規」>「Webサービス・クライアント」を選択します。
新規Webサービス・クライアント・ウィザードが開きます。
WSDLソースとしてプロジェクトを選択し、「参照」をクリックして「Webサービスを参照」ダイアログ・ボックスを開きます。
CalculatorWSApplicationプロジェクトでCalculatorWS Webサービスを選択します。「OK」をクリックして、「Webサービスを参照」ダイアログ・ボックスを閉じます。
新規Webサービス・クライアント・ウィザードでパッケージ名が空白であることを確認し、他の設定はデフォルト値のままにします。「終了」をクリックします。
先ほどこのチュートリアルで作成したadd 操作も含め、「プロジェクト」ウィンドウの「Webサービス参照」ノードに新しく作成したクライアントの構造が次のように表示されます。
「CalculatorWSServletClient 」プロジェクト・ノードを右クリックし、「新規」>「サーブレット」を選択します。サーブレットにClientServlet と名前を付け、org.me.calculator.client というパッケージに保存します。「終了」をクリックします。
サーブレットをアプリケーションのエントリ・ポイントにするには、「CalculatorWSServletClient」プロジェクト・ノードを右クリックし、「プロパティ」を選択します。「実行」プロパティを開き、「相対URL」フィールドに「/ClientServlet 」と入力します。「OK」をクリックします。
ClientServlet.java のエラー・アイコンがある場合、プロジェクト・ノードを右クリックし、「消去してビルド」を選択します。
processRequest() メソッドで、この行の後に空白行をいくつか追加します。
out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");
ソース・エディタで、add 操作をClientServlet クラスの本文の任意の場所にドラッグします。add() メソッドがクラス・コードの末尾に表示されます。
注意: 別の方法として、add ノードをドラッグするかわりに、エディタ上で右クリックして「コードを挿入」>「Webサービス操作をコール」を選択することもできます。
private int add(int i, int j) { org.me.calculator.CalculatorWS port = service.getCalculatorWSPort(); return port.add(i, j);
}
i およびj の値を初期化し、add() をコールし、結果を出力するコードを追加します。追加されたコードは太字 で示されています。
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ClientServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");
int i = 3; int j = 4; int result = add(i, j); out.println("Result = " + result);
out.println("</body>");
out.println("</html>");
} finally { out.close(); } }
追加されたコードを、例外を出力するtry/catchブロックで囲みます。
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ClientServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");
try {
int i = 3; int j = 4; int result = add(i, j); out.println("Result = " + result);
} catch (Exception ex) {
out.println("Exception: " + ex);
}
out.println("</body>");
out.println("</html>");
} finally { out.close(); } }
プロジェクトのノードを右クリックし、「実行」を選択します。
サーバーが起動し、アプリケーションがビルドおよびデプロイされ、ブラウザが開いて次のように計算結果を表示します。
クライアント3: WebアプリケーションのJSPページ
この項では、新しいWebアプリケーションを作成した後、Webアプリケーション・ウィザードで作成したデフォルトのJSPページでWebサービスを使用します。
注意: JSP Webアプリケーション・クライアントをOracle WebLogic上で実行する場合は、WebLogicでのJava Server Faces 2.0アプリケーションの実行 を参照してください。
「ファイル」>「新規プロジェクト」(LinuxおよびWindowsでは[Ctrl]-[Shift]-[N]、MacOSでは[⌘]-[Shift]-[N])を選択します。「Java Web」カテゴリから「Webアプリケーション」を選択します。プロジェクトにCalculatorWSJSPClient という名前を付けます。「次」をクリックし、「終了」をクリックします。
プロジェクト・ノードの下でWeb Pagesノードを展開して、index.html を削除します。
Web Pages ノードを右クリックして、ポップアップ・メニューで「新規」>「JSP」を選択します。
ポップアップ・メニューに「JSP」がない場合は、「新規」>「その他」を選択し、新規ファイル・ウィザードの「Web」カテゴリで「JSP」を選択します。
新規ファイル・ウィザードでJSPファイルの名前にindex と入力します。「終了」をクリックします。
「CalculatorWSJSPClient 」ノードを右クリックし、「新規」>「Webサービス・クライアント」を選択します。
プロジェクトをWSDLソースとして選択します。「参照」をクリックします。CalculatorWSApplicationプロジェクトのCalculatorWS Webサービスを参照します。Webサービスを選択した後、「OK」をクリックします。
パッケージ名を選択しないでください。このフィールドは空のままにします。
その他の設定はデフォルトのままにし、「終了」をクリックします。
次のように、「プロジェクト」ウィンドウに新しいWebサービス・クライアントが表示されます。
「Webサービス参照」ノードで、Webサービスを示すノードを展開します。ここで、クライアントから呼び出すadd 操作が表示されます。
add 操作をクライアントのindex.jsp ページにドラッグし、H1タグの下にドロップします。次のように、サービスの操作を呼び出すコードがindex.jsp ページに生成されます。
<%
try {
org.me.calculator.CalculatorWSService service = new org.me.calculator.CalculatorWSService();
org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();
// TODO initialize WS operation arguments here
int i = 0;
int j = 0;
// TODO process result here
int result = port.add(i, j);
out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}
%>
i およびj の値を0から3や4などの整数に変更します。catchブロック内のコメントアウトされたTODO行をout.println("exception" +ex); に置き換えます。
プロジェクトのノードを右クリックし、「実行」を選択します。
サーバーが起動していない場合は起動します。アプリケーションがビルドおよびデプロイされ、ブラウザが開き、計算結果が表示されます。
関連項目
NetBeans IDEを使用したJava EEアプリケーションの開発方法の詳細は、次のリソースを参照してください。
nbj2ee
@
netbeans.org
メーリング・リスト に登録することによって、NetBeans IDE Java EE開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。