Web 服务是分布式应用程序组件,它们符合一定的标准,因而可供外部使用。分布式环境的激增对企业提出了新的要求,企业必须能够通过开放式网络将某个应用程序的全部或部分功能向其他应用程序公开。使用 Web 服务,可以解决独立开发并在各种不同软件和硬件平台上运行的应用程序的集成问题。
NetBeans IDE 4.1 与基于 JSR-109 的 Web 服务支持捆绑在一起,JSR-109 是一种开发范例,它适用于基于 JAX-RPC (JSR-101) 的 J2EE 开发。NetBeans IDE 4.1 中的 Web 服务功能是端到端 J2EE 功能集的一部分。在 NetBeans IDE 4.1 中使用 Web 服务要比在 NetBeans IDE 4.0 中使用容易得多。例如,NetBeans IDE 4.1 提供了创建 Web 服务和 Web 服务客户机的向导。
在本教程中,将创建一个包含以下内容之一的 J2EE 应用程序:
Web 应用程序(使用 Servlet 公开的服务)
EJB 模块(使用会话 Bean 公开的服务)
请注意,您必须选择要生成这两个方案中的哪一个。可以使用本教程创建 Web 应用程序或 EJB 模块。
本教程介绍了以下主题:
设置环境
开发 Web 服务
公开 Web 服务
使用 Web 服务
包装应用程序
设置环境
在开始编写代码之前,您必须确保安装了所需的所有软件并且正确设置了服务器。
安装软件
在开始安装之前,需要在计算机中安装以下软件:
· NetBeans IDE 4.1(下载)
· Sun Java System (SJS) Application Server Platform Edition 8 2005Q1(下载)
· Java Standard Development Kit (JDKTM) 1.4.2 版(下载)或 5.0 版(下载)
注册 Sun Java System Application Server
在编译 Web 服务之前,必须先注册 SJS Application Server 的本地实例。如果安装了 NetBeans IDE 4.1/SJS Application Server 包,则会自动注册本地应用服务器。
1. 从主窗口中选择“工具”>“服务器管理器”。
2. 单击“添加服务器”。选择 "Sun Java Systems Application Server 8.1",并为此实例指定一个名称。然后单击“下一步”。
3. 指定服务器信息、应用服务器本地实例的位置以及要部署的域。
开发 Web 服务
对 Web 服务进行编码非常容易。IDE 会处理所有实现细节,因此您可以集中精力对 Web 服务的业务逻辑进行编码。
创建项目
1. 决定是将 Web 服务作为 Web 应用程序实现,还是作为会话 Bean 实现。
2. 选择“文件”>“新建项目”(Ctrl-Shift-N),然后执行以下操作之一:
o 在“类别”下选择 "Web"。在“项目”下选择“Web 应用程序”。单击“下一步”。
o 在“类别”下选择“企业”。在“项目”下选择“Enterprise JavaBeans 模块”。单击“下一步”。
3. 将项目命名为 HiWS,将“项目文件夹”更改为计算机中的任意文件夹,并确保在“服务器”下拉列表中选择了 "Sun Java System Application Server"。单击“完成”。
创建 Web 服务
1. 右键单击项目节点,然后选择“新建”>“Web 服务”。将 Web 服务命名为 HiWS,在“包”字段中键入 org.me.hi,然后单击“完成”。将在源编辑器中打开一个名为 HiWSImpl.java 的实现类(在 Web 应用程序中),或者打开一个名为 HiWSBean.java 的会话 Bean(在 EJB 模块中)。
2. 在“项目”窗口中,展开“Web 服务”节点,右键单击 HiWS Web 服务节点,然后选择“添加操作”。在“名称”字段中键入 sayHi,然后在“类型”组合框中选择“字符串”。单击“添加”,定义一个名为 s 的 java.lang.String 型参数。单击“确定”创建操作框架。
3. 展开“源包”节点和 org.me.hi 节点。双击 HiWSSEI.java 节点,可以注意到已经在接口类中声明了操作。
4. 在源编辑器中,将操作框架填写到实现类或会话 Bean 中。要执行此操作,请在 sayHi 操作的主体中将 "return null;" 替换为以下代码:
5. return "Hi " + s + "!";
6. 现在代码应如下所示:
package org.me.hi;
public class HiWSImpl implements HiWSSEI {
public String sayHi(java.lang.String s) {
return "Hi " + s + "!";
}
}
生成和配置 SOAP 消息处理程序
1. 右键单击项目节点并选择“新建”>“文件/文件夹”。在“类别”下选择“Web 服务”。在“文件类型”下选择“消息处理程序”。单击“下一步”。
2. 将消息处理程序命名为 HiWSLogger,在“包”下拉列表中选择 org.me.hi,然后单击“完成”。将创建一个名为 HiWSLogger.java 的实现类,并在源编辑器中将其打开。
3. 在 handleRequest 方法中,请注意按如下方式定义要记录的消息:
4. StringBuffer message = new StringBuffer();
5. while (childElems.hasNext()) {
6. child = (SOAPElement) childElems.next();
7. message.append(new Date().toString() + "--");
8. formLogMessage(child, message);
9. }
10.
11. System.out.println("message: " + message.toString());
12.
13. 在“项目”窗口中,展开“Web 服务”节点,右键单击该 Web 服务的节点,然后选择“配置处理程序”。在“配置 SOAP 消息处理程序”对话框中,单击“添加”,然后浏览到 HiWSLogger 类。单击“确定”。
将在对话框中列出消息处理程序类。
单击“确定”完成 SOAP 消息处理程序的配置。
公开 Web 服务
在公开 Web 服务时,可以使其供客户机使用。可以使用 IDE 作为客户机,以便在部署后对其进行测试。
部署 Web 服务
根据 Web 服务的实现方式,请执行以下操作之一:
· 对于作为 Web 应用程序实现的 Web 服务,请执行以下操作:
1. 在“项目”窗口中右键单击 HiWS 项目节点,然后选择“属性”。在“项目属性”对话框中,选择“运行”窗格。在“上下文路径”文本框和“相对 URL”文本框中均键入 /HiWS。单击“确定”。
2. 在“项目”窗口中右键单击 HiWS 项目,然后选择“运行项目”。
这将启动符合 J2EE 的服务器并部署 Web 服务。在 IDE 的缺省浏览器中应该会显示一条类似于以下内容的消息:
Invalid wsdl request http://localhost:8080/HiWS/HiWS for web service HiWS
· 对于作为会话 Bean 实现的 Web 服务,请在“项目”窗口中右键单击 HiWS 项目,然后选择“部署项目”。这将启动符合 J2EE 的服务器并部署 Web 服务。
请注意,必须将 Web 服务保持部署状态,以便在下一部分中创建 Web 服务客户机。
注册和测试 Web 服务
1. 在“项目”窗口中,展开“Web 服务”节点,右键单击 HiWS Web 服务节点,然后选择“添加到注册表”。
您可能会收到一条类似于以下内容的错误消息:
Unable to add web service to registry. Make sure it has been deployed,
the server is running, and the correct WSDL URL was entered.
如果收到此错误消息,请确保已经部署了 Web 服务,然后再次选择“添加到注册表”。
将出现一个对话框,其中推荐了可用于注册 Web 服务的 URL。
2. 记下该 URL,因为稍后在创建 Web 服务客户机时需要使用它。单击“确定”。
3. 在“运行环境”窗口中,展开“Web 服务”节点,然后继续展开节点,直至找到 sayHi 节点。右键单击 sayHi 节点,然后选择“测试操作”。在“测试 Web 服务操作”对话框的“值”文本框中键入 "John",然后单击“提交”。将在对话框底部显示结果 "Hi John!"。
4. 展开“服务器”节点,右键单击 Sun Java System Application Server 8.1 节点,然后选择“查看服务器日志”。将会显示 server.log 文件,其中包括一条类似于以下内容的消息:
5. message: Wed Jan 12 16:56:48 CEST 2005--sayHi String_1:John |#]
这是由上一部分中创建的 SOAP 消息处理程序生成的日志消息。
在对操作进行测试之后,如果您对该 Web 服务感到满意,则可以将其功能集成到 Web 服务客户机中。
使用 Web 服务
使用 Web 服务是指客户机在使用 Web 服务时所执行的操作。使用 IDE 可以很容易地设置客户机,以使其使用 Web 服务。可以使用向导来导入描述 Web 服务接口的 WSDL 文件。然后,可以将其集成到客户机中,以使该 Web 服务完成一些有用的工作。
创建 Web 应用程序项目
· 选择“文件”>“新建项目”(Ctrl-Shift-N)。在“类别”下选择 "Web"。在“项目”下选择“Web 应用程序”。将项目命名为 HiWSClient,将“项目文件夹”更改为计算机中的任意文件夹,并确保在“服务器”下拉列表中选择了 "Sun Java System Application Server"。单击“完成”。
搜索有关 Web 服务的信息
1. 右键单击项目节点,然后选择“新建”>“Web 服务客户机”。复制正在运行的 Web 服务的 URL,并将其粘贴到 WSDL URL 文本框中,然后单击“检索 WSDL”。如果“本地文件名”文本框中填写了 WSDL 文件名,则说明已经正确检索到了 WSDL 文件。在“包”字段中键入 org.me.hi,然后单击“完成”。
2. 展开“Web 服务引用”节点,然后继续展开节点,直至找到 sayHi 节点。右键单击 sayHi 节点,然后选择“测试操作”。在“测试 Web 服务操作”对话框的“值”文本框中键入 "John",然后单击“提交”。将在对话框底部显示结果 "Hi John!"。在对操作进行测试之后,如果您对公开的 Web 服务感到满意,则可以创建一个客户机来使用它。
3. 右键单击 HiWSClient 项目节点,然后选择“新建”> "Servlet"。将 Web 服务命名为 HiServlet,在“包”字段中键入 org.me.hi,单击“下一步”,然后单击“完成”。将在源编辑器中打开 Servlet HiServlet.java。
创建 Web 服务客户机
1. 在源编辑器中,在 HiServlet 类的 processRequest 操作中单击鼠标右键。选择“Web 服务客户机资源”>“调用 Web 服务操作”,选择 sayHi 操作,然后单击“确定”。剪切并粘贴框架操作,将其放在 out.close(); 行的上方。
2. 现在可以填写框架操作,使其如下所示:
3.try {
4.out.println(getHiWSSEIPort().sayHi("Ludwig"));
5.} catch(java.rmi.RemoteException ex) {
6.out.println("
Caught an exception
" + ex);
7.}
8.(可选)如果您希望用户能够与 Web 服务进行交互,请将上述代码删除,并在 processRequest 方法的 标记之间添加以下代码:
out.println("<p>Enter your name:
");
out.println("<form method=\"get\">");
out.println("<input type=\"text\" name=\"name\" size=\"25\">");
out.println("<br>");
out.println("<p>");
out.println("<input type=\"submit\" value=\"Submit\">");
out.println("</form>");
String name = request.getParameter("name");
if ( name != null ) {
try {
out.println(getHiWSSEIPort().sayHi(name));
} catch(java.rmi.RemoteException ex) {
out.println("<p>Caught an exception <p>" + ex);
}
}
包装应用程序
(可选)可以在 EAR 文件中包装应用程序并对其进行部署。或者,也可以单独部署 Web 服务和 Web 服务客户机。
创建 J2EE 应用程序项目
1. 选择“文件”>“新建项目”(Ctrl-Shift-N)。在“类别”下选择“企业”。在“项目”下选择“空的企业应用程序”。将项目命名为 HiApp,然后将“项目文件夹”更改为计算机中的任意文件夹。单击“完成”。
2. 展开 HiApp 项目节点,然后右键单击“J2EE 模块”节点。选择“添加 J2EE 模块”。选择 "HiWSClient" 并单击“确定”。然后重复此步骤并选择 "HiWS"。
部署 J2EE 应用程序
1. 在“项目”窗口中右键单击 HiApp 项目节点,然后选择“属性”。在“项目属性”对话框中,选择“执行”。确保在“客户机模块 URI”文本框中填写了 HiWSClient.war。在“相对 URL”文本框中键入 /HiServlet。单击“确定”。
2. 在“项目”窗口中右键单击 HiApp 项目,然后选择“运行项目”。
您可能会收到一条类似于以下内容的错误消息:
Deploying application in domain failed; Cannot deploy. Application already exists.
Please select the redeploy option. ; requested operation cannot be completed
如果收到此错误消息,请在“运行环境”窗口的“服务器注册”节点中展开 Sun Java System Application Server 8 节点。然后展开“应用程序”节点,再展开“企业应用程序”节点和“Web 应用程序”节点。如果列出了 HiApp、HiWS 或 HWSClient,则需要将其卸下。右键单击这些节点,然后选择“卸下”。在“项目”窗口中,再次运行 HiApp 项目。
将启动符合 J2EE 的服务器,对应用程序进行部署,并在 IDE 的缺省 Web 浏览器中显示部署结果。
3. 如果在应用程序中添加了用户接口(如前一部分所述),请输入一个名称,然后单击“提交”。客户机将使用 Web 服务中的 "Hi" 和 "!" 字符串,在其中插入您所输入的名称,并在浏览器中显示问候语。如果未添加用户接口,浏览器将显示消息 "Hi Ludwig!"。