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サービス・クライアントの開発です。

目次

このページの内容は、NetBeans IDE 7.2、7.3、7.4および8.0に適用されます

このチュートリアルに従うには、次のソフトウェアとリソースが必要です。

ソフトウェアまたはリソース 必須バージョン
NetBeans IDE Java EEダウンロード・バンドル
Java Development Kit (JDK) JDK 7またはJDK 8
Java EE互換のWebサーバーまたはアプリケーション・サーバー GlassFish Server Open Source Edition
Oracle WebLogic Server

注意: 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アプリケーションを作成します。

  1. 「ファイル」>「新規プロジェクト」(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のベスト・プラクティスを参照してください。

  2. プロジェクトにCalculatorWSApplicationという名前を付けます。プロジェクトの場所を選択します。「次」をクリックします。
  3. サーバーとJava EEバージョンを選択し、「終了」をクリックします。

    Oracle WebLogicサーバーを使用するには、サーバーをIDEに登録します。また、WebLogicサーバーを使用する場合は、Oracle WebLogicへのWebアプリケーションのデプロイのスクリーンキャストを視聴してください。

JavaクラスからのWebサービスの作成

  1. CalculatorWSApplication」ノードを右クリックし、「新規」>「Webサービス」を選択します。
  2. WebサービスにCalculatorWSという名前を付け、「パッケージ」に「org.me.calculator」と入力します。「Webサービスを新規に作成」を選択したままにします。
  3. GlassFishまたはWebLogicでJava EEプロジェクトを作成する場合は、「ステートレス・セッションBeanとしてWebサービスを実装」を選択します。
    Beanのオプションが表示された、EE用の新規Webサービス・ウィザード
  4. 「終了」をクリックします。「プロジェクト」ウィンドウに新しいWebサービスの構造が表示され、エディタ領域にソース・コードが表示されます。

Webサービスへの操作の追加

この課題の目標は、クライアントから受け取った2つの数字を追加する操作をWebサービスに追加することです。NetBeans IDEは、操作をWebサービスに追加するダイアログを提供します。このダイアログは、Webサービス・ビジュアル・デザイナまたはWebサービス・コンテキスト・メニューのいずれかから開くことができます。

警告: ビジュアル・デザイナはMavenプロジェクトでは使用できません。

Webサービスに操作を追加するには:

  1. 次のいずれか:
    • エディタの「デザイン」ビューに変更します。
      Webサービス・エディタの「デザイン」ビュー

    または:

    • 「プロジェクト」ウィンドウからWebサービスのノードを見つけます。そのノードを右クリックします。コンテキスト・メニューが開きます。
      「操作の追加」項目が強調表示されたWebサービス・ノードのコンテキスト・メニュー
  2. ビジュアル・デザイナまたはコンテキスト・メニューのいずれかで、「操作の追加」をクリックします。「操作の追加」ダイアログが開きます。
  3. 「操作の追加」ダイアログ・ボックスの上の部分で、「名前」に「add」、「戻り値の型」ドロップダウン・リストに「int」と入力します。
  4. 「操作の追加」ダイアログ・ボックスの下の部分で、「追加」をクリックしてint型のiという名前のパラメータを作成します。
  5. 再度「追加」をクリックし、int型のjというパラメータを作成します。

    次のようになります。


    「操作の追加」ダイアログ
  6. 「操作の追加」ダイアログ・ボックスの最下部で「OK」をクリックします。エディタに戻ります。
  7. ソース・コードのhello()メソッドを除去するか、ビジュアル・デザイナでhello操作を選択して「操作を除去」をクリックすることによって、デフォルトのhello操作を除去します。

    ビジュアル・デザイナでは次のように表示されます。


    追加した操作が表示されたWebサービスのビジュアル・デザイナ
  8. 「ソース」をクリックし、前述の手順で作成したコードを表示します。これは、サービスをJava EEステートレスBeanとして作成したかどうかによって異なります。次のスクリーンショットの違いがわかりますか。(ステートレスBeanとして実装されていないJava EE 6サービスやJava EE 7サービスはJava EE 5サービスに似ています。)
    結果: EE5 結果: EE 6ステートレスBean

    注意:NetBeans IDE 7.3およおび7.4では、生成された@WebService注釈に、次のサービス名が明示的に指定されていることがわかります。
    @WebService(serviceName = "CalculatorWS")

  9. エディタで、スケルトンの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サーバーへ正常にデプロイメントされていることをテストする手順:

  1. プロジェクトを右クリックし、「デプロイ」を選択します。アプリケーション・サーバーが開始され、アプリケーションがビルドされて、サーバーにデプロイされます。これらの操作の進行状況は、「出力」ビューの「CalculatorWSApplication (run-deploy)」および「GlassFish Server 3」タブまたは「Tomcat」タブで確認できます。
  2. IDEの「プロジェクト」タブで、CalculatorWSApplicationプロジェクトの「Webサービス」ノードを展開します。「CalculatorWS」ノードを右クリックし、「Webサービスをテスト」を選択します。
    「Webサービスをテスト」コンテキスト・メニュー・オプションが表示された「プロジェクト」タブ

    GlassFishサーバーにWebアプリケーションをデプロイした場合、テスター・ページがブラウザで開きます。Tomcat Webサーバーの場合およびEJBモジュールのデプロイメントの場合、状況は異なります。

    • GlassFishサーバーにデプロイした場合、次のようにテスター・ページに2つの数字を入力します。
      サービスがGlassFishサーバーに正常にデプロイされた場合のWebサービスのテスター・ページ

      2つの数字の合計が次のように表示されます。


      Webサービスのテスト結果を表示するWebページ

サンプル

「ファイル」>「新規プロジェクト」(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サービスを使用します。

  1. 「ファイル」>「新規プロジェクト」(LinuxおよびWindowsでは[Ctrl]-[Shift]-[N]、MacOSでは[⌘]-[Shift]-[N])を選択します。「Java」カテゴリから「Javaアプリケーション」を選択します。プロジェクトにCalculatorWS_Client_Applicationという名前を付けます。「メイン・クラスの作成」を選択状態にし、その他のデフォルト設定はそのまま受け入れます。「終了」をクリックします。
  2. CalculatorWS_Client_Application」ノードを右クリックし、「新規」>「Webサービス・クライアント」を選択します。新規Webサービス・クライアント・ウィザードが開きます。
  3. プロジェクトをWSDLソースとして選択します。「参照」をクリックします。CalculatorWSApplicationプロジェクトのCalculatorWS Webサービスを参照します。Webサービスを選択した後、「OK」をクリックします。
    CalculatorWSを表示する「Webサービスを参照」ダイアログ
  4. パッケージ名を選択しないでください。このフィールドは空のままにします。
    パッケージ名を示す新規Webサービス・クライアント・ウィザード
  5. その他の設定はデフォルトのままにし、「終了」をクリックします。

    「プロジェクト」ウィンドウに新しいWebサービス・クライアントが表示され、作成したaddメソッドのノードが追加されています。


    「プロジェクト」ウィンドウに表示されたJava SEアプリケーションの新規Webサービス・クライアント
  6. メイン・クラスをダブルクリックしてソース・エディタで開きます。main()メソッドの下にaddノードをドラッグします。
    メイン・クラス本文への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サービス操作をコール」を選択することもできます。

  7. 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); }
  8. 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);
    } }
  9. プロジェクトのノードを右クリックし、「実行」を選択します。

    「出力」ウィンドウで次のような合計が表示されます。

        compile:
        run:
        Result = 7
          BUILD SUCCESSFUL (total time: 1 second)

クライアント2: Webアプリケーションのサーブレット

この項では、新しいWebアプリケーションを作成し、続いてサーブレットを作成します。次にサーブレットを使用して、このチュートリアルの最初で作成したWebサービスを使用します。

  1. 「ファイル」>「新規プロジェクト」(LinuxおよびWindowsでは[Ctrl]-[Shift]-[N]、MacOSでは[⌘]-[Shift]-[N])を選択します。「Java Web」カテゴリから「Webアプリケーション」を選択します。プロジェクトにCalculatorWSServletClientという名前を付けます。「次」をクリックし、「終了」をクリックします。
  2. CalculatorWSServletClient」ノードを右クリックし、「新規」>「Webサービス・クライアント」を選択します。

    新規Webサービス・クライアント・ウィザードが開きます。

  3. WSDLソースとしてプロジェクトを選択し、「参照」をクリックして「Webサービスを参照」ダイアログ・ボックスを開きます。
  4. CalculatorWSApplicationプロジェクトでCalculatorWS Webサービスを選択します。「OK」をクリックして、「Webサービスを参照」ダイアログ・ボックスを閉じます。
    CalculatorWSを表示する「Webサービスを参照」ダイアログ
  5. 新規Webサービス・クライアント・ウィザードでパッケージ名が空白であることを確認し、他の設定はデフォルト値のままにします。「終了」をクリックします。

    先ほどこのチュートリアルで作成したadd操作も含め、「プロジェクト」ウィンドウの「Webサービス参照」ノードに新しく作成したクライアントの構造が次のように表示されます。

  6. CalculatorWSServletClient」プロジェクト・ノードを右クリックし、「新規」>「サーブレット」を選択します。サーブレットにClientServletと名前を付け、org.me.calculator.clientというパッケージに保存します。「終了」をクリックします。
  7. サーブレットをアプリケーションのエントリ・ポイントにするには、「CalculatorWSServletClient」プロジェクト・ノードを右クリックし、「プロパティ」を選択します。「実行」プロパティを開き、「相対URL」フィールドに「/ClientServlet」と入力します。「OK」をクリックします。
  8. ClientServlet.javaのエラー・アイコンがある場合、プロジェクト・ノードを右クリックし、「消去してビルド」を選択します。
  9. processRequest()メソッドで、この行の後に空白行をいくつか追加します。
        out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");
  10. ソース・エディタで、add操作をClientServletクラスの本文の任意の場所にドラッグします。add()メソッドがクラス・コードの末尾に表示されます。

    注意: 別の方法として、addノードをドラッグするかわりに、エディタ上で右クリックして「コードを挿入」>「Webサービス操作をコール」を選択することもできます。

    private int add(int i, int j) {
    org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();
    return port.add(i, j); }
  11. 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();
    }
    }
  12. 追加されたコードを、例外を出力する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();
    }
    }
  13. プロジェクトのノードを右クリックし、「実行」を選択します。

    サーバーが起動し、アプリケーションがビルドおよびデプロイされ、ブラウザが開いて次のように計算結果を表示します。
    「プロジェクト」ウィンドウに表示されたサーブレットの新規Webサービス・クライアント

クライアント3: WebアプリケーションのJSPページ

この項では、新しいWebアプリケーションを作成した後、Webアプリケーション・ウィザードで作成したデフォルトのJSPページでWebサービスを使用します。

注意: JSP Webアプリケーション・クライアントをOracle WebLogic上で実行する場合は、WebLogicでのJava Server Faces 2.0アプリケーションの実行を参照してください。

  1. 「ファイル」>「新規プロジェクト」(LinuxおよびWindowsでは[Ctrl]-[Shift]-[N]、MacOSでは[⌘]-[Shift]-[N])を選択します。「Java Web」カテゴリから「Webアプリケーション」を選択します。プロジェクトにCalculatorWSJSPClientという名前を付けます。「次」をクリックし、「終了」をクリックします。
  2. プロジェクト・ノードの下でWeb Pagesノードを展開して、index.htmlを削除します。
  3. Web Pagesノードを右クリックして、ポップアップ・メニューで「新規」>「JSP」を選択します。

    ポップアップ・メニューに「JSP」がない場合は、「新規」>「その他」を選択し、新規ファイル・ウィザードの「Web」カテゴリで「JSP」を選択します。

  4. 新規ファイル・ウィザードでJSPファイルの名前にindexと入力します。「終了」をクリックします。
  5. CalculatorWSJSPClient」ノードを右クリックし、「新規」>「Webサービス・クライアント」を選択します。
  6. プロジェクトをWSDLソースとして選択します。「参照」をクリックします。CalculatorWSApplicationプロジェクトのCalculatorWS Webサービスを参照します。Webサービスを選択した後、「OK」をクリックします。
    CalculatorWSを表示する「Webサービスを参照」ダイアログ
  7. パッケージ名を選択しないでください。このフィールドは空のままにします。
  8. その他の設定はデフォルトのままにし、「終了」をクリックします。

    次のように、「プロジェクト」ウィンドウに新しいWebサービス・クライアントが表示されます。

    「プロジェクト」ウィンドウに表示されたサーブレットの新規Webサービス・クライアント
  9. 「Webサービス参照」ノードで、Webサービスを示すノードを展開します。ここで、クライアントから呼び出すadd操作が表示されます。
  10. 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);に置き換えます。

  11. プロジェクトのノードを右クリックし、「実行」を選択します。

    サーバーが起動していない場合は起動します。アプリケーションがビルドおよびデプロイされ、ブラウザが開き、計算結果が表示されます。

    結果を表示するJSPページ


関連項目

NetBeans IDEを使用したJava EEアプリケーションの開発方法の詳細は、次のリソースを参照してください。

メーリング・リストに登録することによって、NetBeans IDE Java EE開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。

get support for the NetBeans

Support


By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2013, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo