FeaturesPluginsDocs & SupportCommunityPartners

Java EE 5 の Web サービス (JAX-WS)

JAX-WS (Java API for XML Web Services) 2.0、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 サービスを利用します。

予想される所要時間: 25 分

このチュートリアルに必要なソフトウェア

開始する前に、コンピュータに次のソフトウェアをインストールしておく必要があります。

チュートリアルの課題

チュートリアル環境のインストールと設定

Sun Java System Application Serve 9.0 のインスタンスを登録していない場合は、Java EE 5 アプリケーションの開発を始める前に登録を行う必要があります。

  1. メインウィンドウで「ツール」>「サーバーマネージャー」を選択します。
  2. 「サーバーを追加」をクリックします。 「Sun Java System Application Server」を選択し、インスタンスに名前を付けます。 「次へ」をクリックします。
  3. サーバー情報、アプリケーションサーバーのローカルインスタンスの場所、および配備先のドメインを指定します。
  4. 「完了」をクリックします。

注: Tomcat Web サーバーへ配備することも可能ですが、Tomcat Web サーバーには Web コンテナしかないので、次の節で EJB モジュール ではなく Web アプリケーションを作成してください。 JSR-109 Web サービスと異なり、JAX-WS Web サービス は Tomcat Web コンテナに正しく配備できます。

Web サービスの作成

この課題の目標は、使用する配備コンテナにふさわしいプロジェクトを作成することです。 プロジェクトを作成したら、そこに Web サービスを作成します。

コンテナの選択

Web サービスは、Web コンテナまたは EJB コンテナのどちらかに配備できます。 どちらにするかは、実装の選択に依存します。 たとえば、Web コンテナだけを持つ Tomcat Web サーバーへの配備を予定している場合は、EJB モジュールではなく、Web アプリケーションの作成を選択するようにします。

  1. 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。 「Web」カテゴリから「Web アプリケーション」を選択、または「エンタープライズ」カテゴリから「EJB モジュール」を選択します。
  2. プロジェクトに「CalculatorWSApplication」という名前をつけます。
  3. 使用する配備サーバーに応じて、次の手順を実行します。
    • Sun Java System Application Server の場合は、「J2EE バージョン」を「Java EE 5」に設定します。
    • Tomcat Web サーバーの場合は、「ソースレベルを 1.4 に設定」チェックボックスの選択を解除します。
  4. 「完了」をクリックします。

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

  1. CalculatorWSApplication ノードを右クリックし、「新規」>「Web サービス」を選択します。
  2. Web サービスに「CalculatorWS」という名前を付け、「パッケージ」に「org.me.calculator」と入力し、「完了」をクリックします。

    新しい Web サービスが「プロジェクト」ウィンドウに表示されます。 たとえば、Web アプリケーションの場合、「プロジェクト」ウィンドウは次のように表示されます。

    このサーバーに必要な配備記述子があれば、IDE によって自動的に作成されます。 Sun Java System Application Server の場合は、配備記述子は必要ありません。 Tomcat Web サーバーに配備される Web サーバーの場合は、sun-jaxws.xml と、web.xmlWSServlet 項目とが追加されます。

まとめ

この課題では、NetBeans プロジェクトを作成し、Web サービスを設定しました。

Web サービスのコーディング

この課題の目標は、IDE によって生成されたファイルおよびコードを使用して意味のある処理を行うことです。 クライアントから受信した 2 つの数を加える処理を追加します。

Web サービスへのビジネスロジックの追加

  1. 「Web サービス」ノードを展開し、CalculatorWS ノードをダブルクリックします。 ソースエディタに Web サービスが表示されます。 このコードにはすでにオペレーションが存在します。 これはコメントアウトされています。 ここでは、新しいオペレーションをはじめから作成します。 オペレーションを作成するもう 1 つの方法は、このコードをコメントアウトしている行を削除することです。
  2. クラス本体のコメントアウトされているコードの上または下を右クリックし、「Web サービス」>「オペレーションを追加」を選択します。
  3. 「オペレーションを追加」ダイアログの上部にある「名前」に「add」と入力し、「戻り値の型」ドロップダウンリストから「int」を選択します。
  4. 「オペレーションを追加」ダイアログの下部で「追加」をクリックし、i という名前の int 型パラメータを作成します。 「了解」をクリックします。
  5. もう一度「追加」をクリックし、j という名前の int 型パラメータを作成します。
  6. 「オペレーションを追加」ダイアログの一番下にある「了解」をクリックします。 add メソッドのスケルトンがソースエディタに追加されます。

        @WebMethod
        public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
            // TODO  implement operation
            return 0;
            }

  7. この add メソッドを次のように変更します (太字部分が変更箇所)。

        @WebMethod
        public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
            int k = i + j;
            return k;
            }

まとめ

この課題では、Web サービスにコードを追加しました。

Web サービスの配備とテスト

Web コンテナに Web サービスを配備すると、IDE によって、このサービスが期待どおりに機能するかを確認するテストができます。 この目的のために、Sun Java System Application Server によって提供される Tester アプリケーションが IDE に統合されています。 Tomcat Web サーバーにも同様のツールがあります。 ただし、Sun Java System Application Server の Tester ページでは値の入力とテストが可能ですが、Tomcat Web サーバーではできません。 後者の場合、Web サービスが配備されているかどうかの確認だけはできますが、値のテストはできません。 EJB モジュールが正常に配備されているかどうかをテストする機能は、今のところ利用できません。

Web コンテナへの配備をテストする

  1. 「プロジェクト」ノードを右クリックし、「プロパティー」を選択して「実行」をクリックします。 使用する配備サーバーに応じて、次の手順を実行します。
    • Sun Java System Application Server の場合は、「相対 URL」フィールドに「/CalculatorWSService?Tester」と入力します。
    • Tomcat Web サーバーの場合は、「相対 URL」フィールドに「/CalculatorWS?Tester」と入力します。

    注: 配備された EJB モジュールの結果はブラウザに表示されないため、EJB モジュールで作業している場合は前述の手順は使えません。

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

    Sun Java System Application Server に Web アプリケーションを配備した場合は、IDE によって、アプリケーションサーバーの起動、アプリケーションの構築、およびブラウザでテスト用ページの表示が行われます。 Tomcat Web サーバーの場合と、EJB モジュールを配備した場合は、次のように異なります。

    • Tomcat Web サーバーに配備した場合は、代わりに次のように表示されます。この画面は、Web サービスが正常に配備されたことを示しています。

    • EJB モジュールが正常に配備された場合は、「出力」ウィンドウに次のメッセージが表示されます。

          Deployment of application CalculatorWSApplication  completed successfully
          Enable of CalculatorWSApplication in target server   completed successfully
          >Enable of application in all targets  completed successfully
          All operations completed successfully
          run-deploy:
          run:
              BUILD SUCCESSFUL

  3. Sun Java System Application Server に配備した場合は、次に示すように、テスト用ページに 2 つの数を入力します。

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

まとめ

この課題では、Web サービスの配備とテストを行いました。

Web サービスの消費

Web サービスの配備が終わったので、この Web サービスの add メソッドを利用するクライアントを作成する必要があります。 ここでは、Java SE アプリケーションの Java クラス、Web アプリケーションのサーブレット、および Web アプリケーションの JSP ページという 3 つのクライアントを作成します。

クライアント 1: Java SE アプリケーションの Java クラス

  1. 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。 「一般」カテゴリから「Java アプリケーション」を選択します。 プロジェクトに「CalculatorWS_Client_Application」と名前をつけます。

    注: 本稿の執筆時点では Issue 10 の問題が未解決のため、Web サービスクライアントを作成するプロジェクトフォルダのパスには、空白を含めないでください。 たとえば、パスを「C:\Documents and Settings\...」にしないでください。

    「完了」をクリックします。

  2. CalculatorWS_Client_Application ノードを右クリックし、「新規」>「Web サービスクライアント」を選択します。
  3. 「プロジェクト」で「参照」をクリックします。 消費する Web サービスまで移動します。 その Web サービスを選択し、「了解」をクリックします。
  4. 「パッケージ」に「org.me.calculator.client」と入力し、「完了」をクリックします。

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

  5. Main.java をダブルクリックして、ソースエディタで開きます。 TODO コメントを削除して、その行を右クリックします。 「Web サービスクライアントのリソース」>「Web サービスオペレーションを呼び出す」を選択します。
  6. 「オペレーションを追加」まで移動し、「了解」をクリックします。
  7. 赤い下線の付いた行を次のように変更します。

        System.out.println("Sum: " + port.add(3,4));
  8. プロジェクトノードを右クリックし、「プロジェクトを実行」を選択します。

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

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

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

  1. 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。 「Web」カテゴリから「Web アプリケーション」を選択します。 プロジェクトに「CalculatorWSServletClient」という名前をつけます。

    注: 本稿の執筆時点では Issue 10 の問題が未解決のため、Web サービスクライアントを作成するプロジェクトフォルダのパスには、空白を含めないでください。 たとえば、パスを「C:\Documents and Settings\...」にしないでください。

    「完了」をクリックします。

  2. CalculatorWSServletClient ノードを右クリックし、「新規」>「Web サービスクライアント」を選択します。
  3. 「プロジェクト」で「参照」をクリックします。 消費する Web サービスまで移動します。 その Web サービスを選択し、「了解」をクリックします。
  4. 「パッケージ」に「org.me.calculator.client」と入力し、「完了」をクリックします。

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

  5. プロジェクトノードを右クリックし、「新規」>「サーブレット」を選択します。 サーブレットに「ClientServlet」という名前をつけ、org.me.calculator.client というパッケージに格納します。 「完了」をクリックします。 このサーブレットをアプリケーションへのエントリポイントにするには、プロジェクトノードを右クリックし、「プロパティー」を選択して「実行」をクリックし、「相対 URL」に「/ClientServlet」と入力します。 「了解」をクリックします。
  6. ソースエディタで、processRequest メソッドの本体をコメントアウトしている行を削除します。 次に、そのコードをコメントアウトするセクションの開始行を示します。

        /* TODO output your page here

    続いて、次に示す、コードをコメントアウトするセクションの最後の行を削除します。

        */

    次の行の後ろに空白行を何行か追加します。

        out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");

    追加した空白行の 1 つを右クリックします。 「Web サービスクライアントのリソース」>「Web サービスオペレーションを呼び出す」を選択します。 「呼び出すオペレーションを選択」ダイアログが表示されます。

  7. add オペレーションまで移動し、「了解」をクリックします。

    これで、processRequest メソッドは次のようになります (太字は追加されたコード)。

        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 { // Web サービスオペレーションを呼び出す
                org.me.calculator.client.CalculatorWSService service = new org.me.calculator.client.CalculatorWSService();
                org.me.calculator.client.CalculatorWS port = service.getCalculatorWSPort();
                // TODO ここで WS オペレーションの引数を初期化
                int arg0 = 0;
                int arg1 = 0;
                // TODO ここで結果を処理
                int result = port.add(arg0, arg1);
                System.out.println("Result = " + result);
            } catch (Exception ex) {
                // TODO ここでカスタム例外を処理
            }
    
            out.println("</body>");
            out.println("</html>");
            out.close();
        }

    arg0 および arg1 の値を、たとえば 3 および 4 など、ほかの数字に変更します。

    System.out.println 文を out.println に変更します。

    例外がスローされたときに出力する行を追加します。

    この try/catch ブロックは、次のようになります (強調部分は新規または変更の箇所)。

        try { // Web サービスオペレーションを呼び出す
            org.me.calculator.client.CalculatorWSService service = new org.me.calculator.client.CalculatorWSService();
            org.me.calculator.client.CalculatorWSApplication port = service.getCalculatorWSApplicationPort();
            // TODO ここで WS オペレーションの引数を初期化
            int arg0 = 3;
            int arg1 = 4;
            // TODO ここで結果を処理
            int result = port.add(arg0, arg1);
            out.println("<p>Result: " + result);
        } catch (Exception ex) {
            out.println("<p>Exception: " + ex);
        }

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

    まだ実行されていなければサーバーが起動し、アプリケーションが構築および配備され、ブラウザが開いて計算結果が表示されます。

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

  1. 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。 「Web」カテゴリから「Web アプリケーション」を選択します。 プロジェクトに「CalculatorWSJSPClient」という名前を付けます。

    注: 本稿の執筆時点では Issue 10 の問題が未解決のため、Web サービスクライアントを作成するプロジェクトフォルダのパスには、空白を含めないでください。 たとえば、パスを「C:\Documents and Settings\...」にしないでください。

    「完了」をクリックします。

  2. CalculatorWSJSPClient ノードを右クリックし、「新規」>「Web サービスクライアント」を選択します。
  3. 「プロジェクト」で「参照」をクリックします。 消費する Web サービスまで移動します。 その Web サービスを選択し、「了解」をクリックします。
  4. 「パッケージ」に「org.me.calculator.client」と入力し、「完了」をクリックします。

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

  5. 「Web ページ」フォルダで index.jsp をダブルクリックして、ソースエディタで開きます。
  6. 「Web サービス参照」ノードで Web サービスを表すノードを展開します。 クライアントから呼び出す add オペレーションが公開されています。
  7. この add オペレーションをクライアントの index.jsp ページまでドラッグし、その H1 タグの下にドロップします。 サービスのオペレーションを呼び出すコードが index.jsp ページに生成されます。

    arg0 および arg1 の値を、たとえば 3 および 4 など、ほかの数字に変更します。

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

    まだ実行されていなければサーバーが起動し、アプリケーションが構築および配備され、ブラウザが開いて計算結果が表示されます。



次の手順

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

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

Bookmark this page

del.icio.us furl simpy slashdot technorati digg
Companion
Projects:
MySQL Database Server   Open JDK: an Open SourceJDK   GlassFish Community: an Open Source Application Server    Mobile & Embedded Community    Open Solaris   java.net - The Source for Java Technology Collaboration   Virtual Box - full virtualizer  Open ESB - The Open Enterprise Service Bus Powered by