网路冷眼@BlogJava

熙熙攘攘一闲人 以冷静的眼光观察技术
posts - 88, comments - 193, trackbacks - 0, articles - 28
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Java EE 5 中的 Web 服务 (JAX-WS)(转载)

Posted on 2007-05-07 23:24 网路冷眼@BlogJava 阅读(639) 评论(0)  编辑  收藏 所属分类: Java
 原文地址:http://testwww.netbeans.org/kb/55/websvc-jax-ws_zh_CN.html

 

Java EE 5 中的 Web 服务 (JAX-WS)

Java API for XML Web Services (JAX-WS) 2.0,JSR 224 是 Java EE 5 平台的重要组成部分。作为 Java API for XML-based RPC 1.1 (JAX-RPC) 的后续发行版本,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 应用程序中的 Servlet 或 JSP 页)中使用该服务的基础知识。在本文档中创建的三个客户端是独立的应用程序,它们都使用同一个 Web 服务。

预计持续时间:25 分钟

本教程所需的软件

在开始之前,您需要在计算机中安装以下软件:

  • NetBeans IDE 5.5下载
  • Java Standard Development Kit (JDK) 版本 5.0 或版本 6.0(下载
  • Sun Java System Application Server 9.0(如果未与安装的 NetBeans IDE 捆绑在一起,请下载并单独安装它)。

教程练习

安装并配置教程环境

如果尚未注册 Sun Java System Application Server 9.0 的实例,则必须先进行注册,然后才可以着手开发 Java EE 5 应用程序:

  1. 从主窗口中,选择“工具”>“服务器管理器”。
  2. 单击“添加服务器”。选择 "Sun Java System Application Server",并为此实例指定一个名称,然后,单击“下一步”。
  3. 指定服务器信息、应用服务器本地实例的位置以及要将 Web 服务部署到的域。
  4. 单击“完成”。

注意:也可以部署到 Tomcat Web Server,但由于它仅具有一个 Web 容器,因此应在下一部分创建 Web 应用程序,而不是 EJB 模块。与 JSR-109 Web 服务不同的是,JAX-WS Web 服务可以成功地部署到 Tomcat Web 容器中。

创建 Web 服务

本练习的目的是创建一个适用于您决定使用的部署容器的项目。在建立项目后,您将在其中创建 Web 服务。

选择容器

您可以在 Web 容器或 EJB 容器中部署 Web 服务。这要取决于具体的选择。例如,如果您计划部署到仅具有 Web 容器的 Tomcat Web Server 上,则应该选择创建 Web 应用程序,而不是 EJB 模块。

  1. 选择“文件”>“新建项目”(Ctrl-Shift-N)。从 "Web" 类别中,选择“Web 应用程序”,或者从“企业”类别中,选择“EJB 模块”。
  2. 将项目命名为 CalculatorWSApplication
  3. 根据要使用的部署服务器,请执行以下操作:
    • 对于 Sun Java System Application Server,将 J2EE 版本设置为 "Java EE 5"。
    • 对于 Tomcat Web Server,请取消选中“将源代码级别设置为 1.4”复选框。
  4. 单击“完成”。

通过 Java 类创建 Web 服务

  1. 右键单击 CalculatorWSApplication 节点,然后选择“新建”>“Web 服务”。
  2. 将 Web 服务命名为 CalculatorWS,在“包”中键入 org.me.calculator,然后单击“完成”。

    将在“项目”窗口中显示新建的 Web 服务。例如,对于 Web 应用程序,现在“项目”窗口将如下所示:

    IDE 将自动创建服务器所需的部署描述符(如果有)。对于 Sun Java System Application Server,则不需要部署描述符。对于部署到 Tomcat Web Server 的 Web 服务,将添加 sun-jaxws.xml 以及 web.xml 中的 WSServlet 项。

小结

在本练习中,您创建了一个 NetBeans 项目并建立了 Web 服务。

对 Web 服务进行编码

本练习的目的是对 IDE 生成的文件和代码执行一些有意义的操作。您将添加一个操作,该操作将从客户端接收到的两个数字相加起来。

将业务逻辑添加到 Web 服务

  1. 展开“Web 服务”节点,然后双击 "CalculatorWS" 节点。将在源代码编辑器中打开 Web 服务。请注意,代码中已存在了一个操作。它被注释掉了。现在,我们将从头开始创建一个新的操作。创建此操作的另一种方法是删除代码注释掉的行。
  2. 在类主体(位于注释掉的代码之上或之下)中单击鼠标右键,然后选择“Web 服务”>“添加操作”。
  3. 在“添加操作”对话框的上半部分,在“名称”中键入 add,并从“返回类型”下拉列表中选择 int
  4. 在“添加操作”对话框的下半部分,单击“添加”,然后创建一个类型为 int、名为 i 的参数。单击“确定”。
  5. 重新单击“添加”,然后创建一个类型为 int、名为 j 的参数。
  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 允许您测试 Web 服务以查看它是否能够按预期的那样工作。鉴于此目的,我们在 IDE 中集成了 Sun Java System Application Server 提供的 Tester 应用程序。对于 Tomcat Web Server,也存在类似的工具。但是,Sun Java System Application Server 的 Tester 页允许您输入值并对其进行测试,而 Tomcat Web Server 则不允许这样做。在后一种情况下,您只能看到已部署了 Web 服务,但是不能对值进行测试。目前还没有用于测试 EJB 模块是否已成功部署的工具。

测试是否已成功部署到 Web 容器:

  1. 右键单击项目节点,选择“属性”,然后单击“运行”。根据要使用的部署服务器,请执行以下操作:
    • 对于 Sun Java System Application Server,在“相对 URL”字段中键入 /CalculatorWSService?Tester
    • 对于 Tomcat Web Server,在“相对 URL”字段中键入 /CalculatorWS?Tester

    注意:由于部署的 EJB 模块的结果不会显示在浏览器中,因此,如果您使用的是 EJB 模块,则不能执行上述步骤。

  2. 右键单击项目节点,然后选择“运行项目”。

    IDE 将启动应用服务器、生成应用程序,并在浏览器中打开 tester 页(如果已将 Web 应用程序部署到 Sun Java System Application Server)。对于使用 Tomcat Web Server 和部署 EJB 模块来说,情况则有所不同:

    • 如果部署到 Tomcat Web Server,将看到以下内容(表明已成功部署了 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,在 tester 页上键入两个数字,如下所示:

  4. 将显示这两个数字的和:

小结

在本练习中,您已部署了 Web 服务并对其进行了测试。

    使用 Web 服务

    部署 Web 服务后,我们需要创建一个客户端来使用 Web 服务的 add 方法。在本练习中,我们将创建三个客户端,即 Java SE 应用程序中的 Java 类、Web 应用程序中的 Servlet 和 JSP 页。

    客户端 1:Java SE 应用程序中的 Java 类

    1. 选择“文件”>“新建项目”(Ctrl-Shift-N)。从“常规”类别中,选择“Java 应用程序”。将项目命名为 CalculatorWS_Client_Application

      注意:在编写本文档时,问题 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 应用程序中的 Servlet

    1. 选择“文件”>“新建项目”(Ctrl-Shift-N)。从 "Web" 类别中,选择“Web 应用程序”。将项目命名为 CalculatorWSServletClient

      注意:在编写本文档时,问题 10 还仍未得到解决,您必须在其路径包含空格的项目文件夹中创建 Web 服务客户端。例如,路径不能为 "C:\Documents and Settings\..."。

      单击“完成”。

    2. 右键单击 "CalculatorWSServletClient" 节点,然后选择“新建”>“Web 服务客户端”。
    3. 在“项目”中,单击“浏览”。找到要使用的 Web 服务。选择 Web 服务后,单击“确定”。
    4. 在“包”中键入 org.me.calculator.client,然后单击“完成”。

      将在“项目”窗口中显示新建的 Web 服务客户端:

    5. 右键单击项目节点,然后选择“新建”> "Servlet"。将 Servlet 命名为 ClientServlet,并将它放置在名为 org.me.calculator.client 的包中。单击“完成”。要使 Servlet 成为应用程序的入口点,请右键单击该项目节点,选择“属性”,单击“运行”,然后在“相对 URL”中键入 /ClientServlet。单击“确定”。
    6. 在源代码编辑器中,删除注释掉 processRequest 方法主体的行。该行是注释掉代码部分的起始行:

       

          /* TODO output your page here

      然后,删除注释掉代码部分的结束行:

       

          */

      在以下行之后添加一些空行:

       

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

      现在,在您添加的一个空行中单击鼠标右键,选择“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 { // Call Web Service Operation
              org.me.calculator.client.CalculatorWSService service = new org.me.calculator.client.CalculatorWSService();
              org.me.calculator.client.CalculatorWS port = service.getCalculatorWSPort();
              // TODO initialize WS operation arguments here
              int arg0 = 0;
              int arg1 = 0;
              // TODO process result here
              int result = port.add(arg0, arg1);
              System.out.println("Result = "+result);
              } catch (Exception ex) {
              // TODO handle custom exceptions here
              }
              out.println("</body>");
              out.println("</html>");
              out.close();
              }

       

      arg0arg1 的值更改为其他数值,如 3 和 4。

      System.out.println 语句更改为 out.println

      添加输出异常的行(如果抛出异常)。

      现在 try/catch 块应该如下所示(会突出显示新行和更改行):

       

          try { // Call Web Service Operation
              org.me.calculator.client.CalculatorWSService service = new org.me.calculator.client.CalculatorWSService();
              org.me.calculator.client.CalculatorWSApplication port = service.getCalculatorWSApplicationPort();
              // TODO initialize WS operation arguments here
              int arg0 = 3;
              int arg1 = 4;
              // TODO process result here
              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

      注意:在编写本文档时,问题 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 页中生成用于调用服务操作的代码。

      arg0arg1 的值更改为其他数值,如 3 和 4。

    8. 右键单击项目节点,然后选择“运行项目”。

      将启动服务器(如果它尚未运行),生成并部署应用程序,并且打开浏览器以显示计算结果:



    后续步骤

    有关使用 NetBeans IDE 5.5 开发 Java EE 应用程序的更多信息,请参见以下资源:

    要发送意见和建议、获得支持以及随时了解 NetBeans IDE Java EE 开发功能的最新开发情况,请加入 nbj2ee@netbeans.org 邮件列表


    只有注册用户登录后才能发表评论。


    网站导航: