JAX-WSWeb服务入门

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 服务的开发任务。它解决了 JAX-RPC 1.1 中存在的一些问题,提供了对 SOAP 1.1、SOAP 1.2 和 XML 等多个协议的支持,并提供了一个工具专门支持 HTTP 等其他协议。JAX-WS 使用 JAXB 2.0 进行数据绑定,并支持通过定制控制生成的服务端点接口。通过其对注释的支持,JAX-WS 简化了 Web 服务开发并减少了运行时 JAR 文件的大小.

本文档将简要介绍如何使用 IDE 开发 JAX-WS Web 服务并在三个不同的客户机中使用它——Java SE 应用程序中的 Java 类以及 Web 应用程序中的 servlet 或 JSP 页面。本文档所创建的三个客户机都是单独的应用程序,他们都使用相同的 Web 服务。有关客户机的高级教程,请参阅 JAX-WS Web 服务客户机入门。

本教程所需要的软件

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

NetBeans IDE 6.0 Web & Java EE( 下载)。

Java Standard Development Kit(JDK)版本 5.0 或版本 6.0( 下载)。

Glassfish V2 或 Tomcat Web Server,两者都可在 NetBeans IDE 6.0 安装程序中选择安装。

创建 Web 服务

本练习的目标是创建一个适合所选部署容器的项目。然后,我们将在项目中创建一个 Web 服务。

选择容器

可以将 Web 服务部署在 Web 容器或 EJB 容器中。这由实现的选择决定。比如说,如果计划部署到 Tomcat Web Server 中且其中只有一个 Web 容器,则应该选择创建一个 Web 应用程序,而不是 EJB 模块。

选择 File > New Project(Ctrl-Shift-N)选项。选择 Web 类别中的 Web Application 选项,或者选择 Enterprise 类别中的 EJB Module。

将项目命名为 CalculatorWSApplication。

根据所使用的部署服务器,执行以下操作:

对于 GlassFish,将 Java EE Version 设置为 Java EE 5.

对于 Tomcat Web Server,取消选中 Set Source Level to 1.4 复选框。

单击 Finish 按钮。

通过学习 Java 类创建 Web 服务

右键单击 CalculatorWSApplication 节点,然后选择 New > Web Service 选项。

将 Web 服务命名为 CalculatorWS,并在 Package 字段中键入 org.me.calculator,然后单击 Finish 按钮。

Projects 窗口将显示新 Web 服务的结构,并且可视化设计器将显示在编辑器区域。比如说对于 Web 应用程序,IDE 应如下所示:

设计 Web 服务

本练习的目标是使用 IDE 所生成的文件和代码执行一些有意义的任务。我们将添加一个操作。该操作将添加两个从客户机接收的数字。

在 Web 服务中添加业务逻辑

单击可视化设计器中的 Add Operation 按钮。

此时将出现一个对话框,我们可以在其中定义新操作。

在 Add Operation 对话框的上部,在 Name 字段中键入 add 并在 Return Type 下拉列表中键入 int。在 Add Operation 对话框的下部,单击 Add 按钮并创建一个 int 类型的参数,将其命名为 i。然后,再次单击 Add 按钮并创建一个 int 类型的参数,将其命名为 j。

IDE 应如下所示:

单击 Add Operation 对话框底部的 OK 按钮。

此时,可视化设计器中将显示以下内容:

单击 Source 按钮可以查看前面步骤中生成的源代码,如下所示:

在编辑器中,将框架 add 操作扩展为以下内容(修改以粗体显示):@WebMethod   public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {int k = i + j;     returnk;   }

从以上代码可以看出,Web 服务将接收两个数字并返回他们的和:在下一节中,我们将使用 IDE 测试刚才创建的 Web 服务。

部署和测试 Web 服务

将 Web 服务部署到 Web 容器时,我们可以使用 IDE 测试 Web 并查看其功能是否符合预期。IDE 中集成了 GlassFish 所提供的 Tester 应用程序,可以实现此目的。对于 Tomcat Web Server,它也提供了一个类似的工具。但是,GlassFish 的 Tester 页面允许用户输入值并进行测试,而 Tomcat Web Server 却不支持此功能。在后者中,我们只能看到所部署的 Web 服务,而不能输入值进行测试。目前,用于测试 EJB 模块是否已成功部署的工具还不可用。

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

右键单击项目并选择 Run 选项。

IDE 将启动应用服务器,编译应用程序并在浏览器中打开。

展开 Web Services 节点,右键单击代表该 Web 服务的节点,然后选择 Test Web Service 选项。

IDE 将在浏览器中打开测试程序页面,前提是在 GlassFish 中部署了一个 Web 应用程序。对于 Tomcat Web Server 和 EJB 模块的部署,情况则有所不同。

如果部署到 GlassFish,在测试程序页面中键入两个数字,如下所示:

此时,将显示这两个数字的和:

对于部署到 Tomcat Web Server 情况,您将看到以下页面,其中显示 Web 服务已成功部署:

右键单击项目节点,选择 Properties 选项,然后单击 Run 按钮。根据所使用的部署服务器,执行以下操作:

对于 GlassFish,在 Relative URL 字段中键入 /CalculatorWSService?Tester。

对于 Tomcat Web Server,在 Relative URL 字段中键入 /CalculatorWS?Tester。

注意: 由于已部署 EJB 模块的结果并未显示在浏览中,我们无法采用上述步骤处理 EJB 模块。

使用 Web 服务

部署好 Web 服务后,我们需要创建一个客户机来使用 Web 服务的 add 方法。在本文中,我们将创建三个客户机:分别为 Java SE 应用程序中的一个 Java 类,一个 servlet 和 Web 应用程序中的一个 JSP 页面。

注意: 有关客户机的高级教程,请参阅 JAX-WS Web 服务客户机入门。

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

在本节中,我们将创建一个标准的 Java 应用程序。我们将使用创建应用程序的向导再创建一个 Java 类。然后,我们将在一些 IDE 工具中使用本教程开始部分中所创建的 Web 服务。

选择 File > New Project(Ctrl-Shift-N)选项。选择 General 类别中的 Java Application 选项。将项目命名为 CalculatorWS_Client_Application。单击 Finish 按钮。

右键单击 CalculatorWS_Client_Application 节点,然后选择 New > Web Service Client 选项。

在 Project 窗口中,单击 Browse 按钮。浏览到要使用的 Web 服务:选择 Web 服务之后,单击 OK 按钮。

输入 org.me.calculator.client 作为包名,然后单击 Finish 按钮。

Projects 窗口将显示新建的 Web 服务客户机,其中有一个节点为所创建的 add 方法。

双击 Main.java 节点在 Source Editor 中打开它。删除 TODO 注释,然后将上面的 add 节点拖动到空行中。应该能看到以下内容:

public static void main(String[] args) {   try { // Call Web Service Operation     org.me.calculator.client.CalculatorWSService service = neworg.me.calculator.client.CalculatorWSService();     org.me.calculator.client.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   }}

注意: 除了拖动 add 节点之外还有另外一种方法:在编辑器中单击鼠标右键,然后选择 Web Service Client Resources > Call Web Service Operation 选项。

使用有意义的数字初始化这两个 int 类型的变量,比如说 3 和 4。只需将上面的两个 int 变量的值从 0 修改为其他数字。

右键单击项目节点并选择 Run 选项。

此时,Output 窗口将显示两个数字之和:

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

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

在本节中,我们将创建一个新的 Web 应用程序,然后再创建一个 servlet。然后,我们将通过 servlet 来使用本教程开始部分中所创建的 Web 服务。

选择 File > New Project(Ctrl-Shift-N)选项。选择 Web 类别中的 Web Application 选项。将项目命名为 CalculatorWSServletClient。单击 Finish 按钮。

右键单击 CalculatorWSServletClient 节点,然后选择 New > Web Service Client 选项。

此时将出现 New Web Service Client 向导。

在 Project 窗口中,单击 Browse 按钮。浏览到要使用的 Web 服务:选择 Web 服务之后,单击 OK 按钮。

在 Package 字段中,输入 org.me.calculator.client。

IDE 应如下所示:

单击 Finish 按钮。

Projects 窗口中的 Web Service References 节点将显示新建客户机的结构,其中包括本教程前面所创建的 add 方法。

右键单击 CalculatorWSServletClient 项目节点,然后选择 New > Servlet 选项。将 servlet 命名为 ClientServlet,并在 Package 下拉菜单中键入 org.me.calculator.client。单击 Finish 按钮。

要使用 servlet 成为应用程序的入口点,右键单击项目节点并选择 Properties 选项,然后单击 Run 按钮并在 Relative URL 中输入 /ClientServlet。单击 OK 按钮。

在 Source Editor 中,删除 processRequest 方法主体中的注释行。该行如下所示:/* TODO output your page here

接下来,删除代码注释的结束部分:

*/

在该行后面添加一些空行:

out.println("Servlet ClientServlet at " + request.getContextPath () + "");

现在,将代表 add 操作的节点拖动到所创建的空行中。

现在, processRequest 方法将如下所示(添加代码以粗体显示):

protected void processRequest(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {     response.setContentType("text/html;charset=UTF-8");     PrintWriter ut = response.getWriter();     out.println("");     out.println("");     out.println("Servlet ClientServlet");     out.println("");     out.println("");     out.println("Servlet ClientServlet at " + request.getContextPath () +"");try { // Call Web Service Operation       org.me.calculator.client.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("");     out.println("");     out.close();   }

将 i 变量和 j 变量的值修改为比较有意义的数字,比如说 3 和 4。

右键单击项目节点并选择 Run 选项。

IDE 将启动服务器(如果尚未运行);编译并部署应用程序,然后将在浏览器中打开,其中会显示计算结果,如下图所示:

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

在本节中,我们将创建一个新的 Web 应用程序,然后在 Web Application 向导所创建的默认 JSP 页面中使用该 Web 服务。

选择 File > New Project(Ctrl-Shift-N)选项。选择 Web 类别中的 Web Application 选项。将项目命名为 CalculatorWSJSPClient。单击 Finish 按钮。

右键单击 CalculatorWSJSPClient 节点,然后选择 New > Web Service Client 选项。

在 Project 窗口中,单击 Browse 按钮。浏览到要使用的 Web 服务:选择 Web 服务之后,单击 OK 按钮。

在 Package 字段中,输入 org.me.calculator.client。

IDE 应如下所示:

单击 Finish 按钮。

Projects 窗口将显示新的 Web 服务客户机,如下所示:

在 Web Service References 节点中,展开表示该 Web 服务的节点。我们希望通过客户机调用的 add 操作现在已经公开。

将 add 操作拖动到客户机的 index.jsp 页面中,并将其放置在 H1 标记下面。现在, index.jsp 页面中已经生成了调用服务操作的代码,如下所示:

将 i 变量和 j 变量的值从 0 修改为比较有意义的数字,比如说 3 和 4。

右键单击项目节点并选择 Run 选项。

IDE 将启动服务器(如果尚未运行);编译并部署应用程序,然后将在浏览器中打开,其中会显示计算结果:

我们一路上兴致勃勃地参观,当夕阳西下时,才恋恋不舍地离开。

JAX-WSWeb服务入门

相关文章:

你感兴趣的文章:

标签云: