JAX-WS Web 服务入门指南

来源:互联网 发布:dbc2000怎么看数据 编辑:程序博客网 时间:2024/05/16 10:55

http://netbeans.org/kb/docs/websvc/jax-ws_zh_CN.html

创建 Web 服务

本练习旨在创建一个适用于确定要使用的部署容器的项目。具有项目后,您将在其中创建一个 Web 服务。

选择容器

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

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

通过 Java 类创建 Web 服务

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

    “项目”窗口将显示新 Web 服务的结构,并且编辑器区域将出现可视设计器。对于 Web 应用程序,您现在会看到以下内容:


    显示 Web 服务的“项目”窗口

设计 Web 服务

本练习旨在向 Web 服务中添加一项操作,该操作用于添加从客户端接收到的两个数字。

向 Web 服务中添加操作

  1. 在可视设计器中单击“添加操作”。将显示一个对话框,您可以在其中定义新操作。
  2. 在“添加操作”对话框的上半部分中,在“名称”中键入 add,并在“返回类型”下拉列表中键入 int。在“添加操作”对话框的下半部分中,单击“添加”以创建 int 类型的参数 i。然后,再次单击“添加”以创建 int 类型的参数 j

    现在,您将看到以下内容:


    “添加操作”对话框
  3. 在“添加操作”对话框的底部,单击“确定”。

    现在,可视设计器将显示以下内容:


    Web 服务可视设计器,其中显示了已添加的操作
  4. 单击“源”,此时您会注意到前面的步骤生成了如下所示的源代码:
    结果
  5. 在编辑器中,将框架 add 操作扩展为以下代码(所做的更改以粗体显示):
        @WebMethod
    public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
    int k = i + j;
    return k;
    }

正如您在上面的代码中所看到的一样,Web 服务仅接收两个数字,然后返回二者之和。在下一部分中,您将使用 IDE 测试 Web 服务。

部署和测试 Web 服务

将Web 服务部署到 Web 容器时,您可以使用 IDE 测试 Web 服务,以便查看其功能是否符合预期效果。IDE 中集成了GlassFish 所提供的测试器应用程序,使用它可以实现此目的。Tomcat Web Server 也有一种类似的工具。在GlassFish 的测试器页上,您可以输入值并对其进行测试,但是 Tomcat Web Server却不具备此功能。对于后一种情况,您只能看到已部署 Web 服务,而无法测试值。当前还没有用于测试 EJB 模块是否成功部署的工具。

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

  1. 右键单击项目,然后选择“取消部署后再次部署”。IDE 将启动应用服务器,生成应用程序,然后将应用程序部署到服务器。您可以在“输出”视图中的"CalculatorWSApplication (run-deploy)" 以及 "GlassFish " 或 "Tomcat"标签中看到这些操作的进度。
  2. 在 IDE 的“项目”标签中,展开 CalculatorWSApplication 项目的“Web 服务”节点。右键单击 "CalculatorWS" 节点,然后选择“测试 Web 服务”。
    显示“测试 Web 服务”上下文菜单选项的“项目”标签

    IDE 将在浏览器中打开测试器页(如果您已将 Web 应用程序部署到 GlassFish 中)。对于 Tomcat Web Server 和 EJB 模块的部署,情况有所不同:

    • 如果已部署到 GlassFish,请在测试器页中键入两个数字,如下所示:
      将 Web 服务成功部署到 GlassFish 时显示的 Web 服务测试器页

      将显示这两个数字之和:


      显示 Web 服务测试结果的 Web 页
    • 如果已部署到 Tomcat Web Server,您将看到以下内容,用于指示您已成功部署 Web 服务:
      将 Web 服务成功部署到 Tomcat 服务器时显示的 Web 页
    • 右键单击项目节点,选择“属性”,然后单击“运行”。根据您要使用的部署服务器,执行以下操作:
      • 对于 GlassFish,请在“相对 URL”字段中键入 /CalculatorWSService?Tester
      • 对于 Tomcat Web Server,请在“相对 URL”字段中键入 /CalculatorWS?Tester

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

使用 Web 服务

现在,您已经部署了 Web 服务,接下来需要创建一个客户端,以便使用 Web 服务的 add 方法。在这里,您将创建三个客户端:Java SE 应用程序中的 Java 类、Web 应用程序中的 Servlet 和 Web 应用程序中的 JSP 页。

注意:开发 JAX-WS Web 服务客户端是集中讨论客户端的更高级教程。

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

在本部分中,您将创建一个标准的 Java 应用程序。用于创建应用程序的向导也可以创建 Java 类。之后,您将使用 IDE 的工具来创建一个客户端,并使用在本教程开始时创建的 Web 服务。

如果您将 JDK 6 与 NetBeans IDE 6.5 结合使用,则必须具备 JDK 6 Update 7 或更高版本。

  1. 选择“文件”>“新建项目”(Ctrl-Shift-N)。选择 Java 类别中的“Java 应用程序”选项。将该项目命名为 CalculatorWS_Client_Application。将“创建主类”保留为选中状态,并接受所有其他缺省设置。单击“完成”。
  2. 右键单击 "CalculatorWS_Client_Application" 节点,然后选择“新建”>“Web 服务客户端”。
  3. 在“项目”中,单击“浏览”。浏览至要使用的 Web 服务。选定 Web 服务后,单击“确定”。
  4. 将其他设置保留为缺省值,然后单击“完成”。

    “项目”窗口将显示新的 Web 服务客户端,其中包括已创建的 add 方法的节点:


    “项目”窗口显示的 Java SE 应用程序中的新 Web 服务客户端
  5. 双击 "Main.java" 以在源代码编辑器中将其打开。删除 TODO 注释,然后将以上所述的 add 节点拖至空行中。现在,您将看到以下内容:
    public static void main(String[] args) {

    try { // Call Web Service Operation
    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);
    System.out.println("Result = "+result);
    } catch (Exception ex) {
    // TODO handle custom exceptions here
    }

    }

    注意:或者,您也可以在编辑器中单击鼠标右键,然后选择“Web 服务客户端资源”>“调用 Web 服务操作”,而无需拖动 add 节点。

  6. 初始化两个 int 参数。只需将上面的两个 int 参数的值从 0 更改为其他整数(如 3 和 4)即可。
  7. 右键单击项目节点,然后选择“运行”。

    “输出”窗口将立即显示二者之和:

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

客户端 2:Web 应用程序中的 Servlet

在本部分中,您将创建一个新的 Web 应用程序,随后创建一个 Servlet。然后,借助该 Servlet 使用在本教程开始时创建的 Web 服务。

如果您使用的是 JDK 6,则必须具备 JDK 6 Update 7 或更高版本。

  1. 选择“文件”>“新建项目”(Ctrl-Shift-N)。从 "Java Web" 类别中选择“Web 应用程序”。将该项目命名为 CalculatorWSServletClient。单击“完成”。
  2. 右键单击 "CalculatorWSServletClient" 节点,然后选择“新建”>“Web 服务客户端”。

    将显示“新建 Web 服务客户端”向导。

  3. 在“项目”中,单击“浏览”。浏览至要使用的 Web 服务。选定 Web 服务后,单击“确定”。
  4. 将其他设置保留为缺省值,然后单击“完成”。
  5. “项目”窗口中的“Web 服务参考”节点将显示新建客户端的结构,其中包括在本教程前面部分创建的 add 操作:


    “项目”窗口显示的 Servlet 中的新 Web 服务客户端
  6. 右键单击 "CalculatorWSServletClient" 项目节点,然后选择“新建”> "Servlet"。将该 Servlet 命名为 ClientServlet,并将其置于名为 org.me.calculator.client 的包中。单击“完成”。
  7. 右键单击 "CalculatorWSServletClient" 项目节点,然后选择“属性”。打开“运行”属性,然后取消选中“在保存时部署”。
  8. 要使 Servlet 成为应用程序的入口点,请右键单击项目节点,选择“属性”,单击“运行”,然后在“相对 URL”中键入 /ClientServlet。单击“确定”。
  9. 如果 ClientServlet.java 存在错误图标,请右键单击项目节点,然后选择“清理并生成”。
  10. 在源代码编辑器中,删除注释掉 processRequest 方法主体的行。该行如下所示:
        /* TODO output your page here

    接下来,删除被注释掉的代码部分结尾的行:

        */

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

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

    现在,将表示 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.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();
    }

    ij 的值更改为正整数,如 3 和 4。

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

    将启动服务器(如果它尚未运行);同时,系统将生成并部署应用程序,并且打开浏览器以显示计算结果,如下所示:
    “项目”窗口显示的 Servlet 中的新 Web 服务客户端

客户端 3:Web 应用程序中的 JSP 页

在本部分中,您将创建一个新的 Web 应用程序,然后在“Web 应用程序”向导创建的缺省 JSP 页中使用 Web 服务。

如果您使用的是 JDK 6,则必须具备 JDK 6 Update 7 或更高版本。

  1. 选择“文件”>“新建项目”(Ctrl-Shift-N)。从 "Web" 类别中选择“Web 应用程序”。将该项目命名为 CalculatorWSJSPClient。单击“完成”。
  2. 右键单击 "CalculatorWSJSPClient" 节点,然后选择“新建”>“Web 服务客户端”。
  3. 在“项目”中,单击“浏览”。浏览至要使用的 Web 服务。选定 Web 服务后,单击“确定”。
  4. 将其他设置保留为缺省值,然后单击“完成”。

    “项目”窗口将显示新的 Web 服务客户端,如下所示:


    “项目”窗口显示的 Servlet 中的新 Web 服务客户端
  5. 在“Web 服务参考”节点中,展开表示 Web 服务的节点。此时将显示您要从客户端调用的 add 操作。
  6. 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
    }
    %>

    ij 的值从 0 更改为其他整数,如 3 和 4。

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

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


    显示结果的 JSP 页