Java API for XML Web Services (JAX-WS) 2.0/2.1、JSR 224 は、Java EE 5 プラットフォームの重要な部分です。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 サービスを開発し、Java SE アプリケーションの Java クラス、Web アプリケーションのサーブレット、または Web アプリケーションの JSP ページという 3 つの異なるクライアントで使用する場合の基本を説明します。このドキュメントで作成する 3 つのクライアントは別々のアプリケーションですが、同じ Web サービスを使用します。クライアントに焦点を当てた、さらに詳細なチュートリアルは、「JAX-WS Web サービスクライアントの開発」です。
この課題の目標は、使用予定の配備コンテナに適したプロジェクトを作成することです。プロジェクトが完成したら、その中に Web サービスを作成します。
コンテナの選択
Web サービスは Web コンテナまたは EJB コンテナに配備できます。これは実装方法の選択によって決まります。たとえば Tomcat Web サーバーに配備する予定の場合、Tomcat Web サーバーには Web コンテナしかないため、EJB モジュールではなく Web アプリケーションの作成を選択してください。
「オペレーションを追加」ダイアログの上の部分で、「名前」に「add」、「戻り値の型」ドロップダウンリストに「int」と入力します。「オペレーションを追加」ダイアログの下の部分で、「追加」をクリックして int 型の i という名前のパラメータを作成します。ふたたび「追加」をクリックし、int 型の j というパラメータを作成します。
@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 サービスを Web コンテナに配備すると、Web サービスが期待どおりに機能するかどうかを IDE でテストできます。GlassFish が提供する Tester アプリケーションは、この目的で IDE に組み込まれています。Tomcat Web サーバーにも同様のツールがあります。ただし、GlassFish の Tester ページでは値を入力してテストできますが、Tomcat Web サーバーではできません。後者の場合、Web サービスが配備されていることは確認できますが、値のテストはできません。EJB モジュールが正常に配備されて現在使用可能かどうかをテストする機能はありません。
Web コンテナへ正常に配備されていることをテストするには、次の手順に従います。
プロジェクトを右クリックし、「実行」を選択します。
IDE がアプリケーションサーバーを起動してアプリケーションを構築し、ブラウザが開きます。
Web サービスノードを展開し、作成した Web サービスのノードを右クリックして「Web サービスをテスト」を選択します。
GlassFish に Web アプリケーションを配備した場合、テスターページがブラウザで開きます。Tomcat Web サーバーの場合および EJB モジュールを配備している場合、状況は異なります。
GlassFish に配備した場合、次のようにテスターページに 2 つの数字を入力します。
2 つの数字の合計が次のように表示されます。
Tomcat Web サーバーに配備した場合、次の画面が表示されます。これは Web ページが正常に配備できたことを示しています。
作成した Web サービスの配備が完了したので、次は Web サービスの add メソッドを使用するクライアントを作成する必要があります。ここでは、Java SE アプリケーションの Java クラス、Web アプリケーションのサーブレット、および Web アプリケーションの JSP ページという 3 つのクライアントを作成します。
public static void main(String[] args) {
try { // Call Web Service Operation
org.me.calculator.CalculatorWSService service = new org.me.calculator.client.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);
System.out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
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 { // Call Web Service Operation
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
}
out.println("</body>");
out.println("</html>");
out.close();
}
<%
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
}
%>