简介: 使用 Eclipse 集成开发环境(Integrated Development Environment,IDE)和 Java™ Platform, Standard Edition (Java SE) 6 创建可以从控制台运行的 Web Services 应用程序。本教程是该系列的第 1 部分,将首先让您熟悉 Eclipse IDE。配置环境;创建项目、包和类;然后从命令行运行应用程序。
开始之前 关于本系列 此系列教程演示如何使用 Java SE 6 创建可轻松地从命令行而不是从 Web 应用程序服务器容器中运行的 Web Services 服务端和客户端应用程序。使用简单的 Hello World 示例,您将利用 Eclipse IDE、Java SE 6 和 Apache Ant 轻松创建完全可以正常工作的 Web Services 服务端和客户端应用程序。您还将使用 TCP/IP Monitor 检查服务器与客户端之间的通信流量,并使用 Eclipse Web Services Explorer 工具测试 Web Services 。 关于本教程 本教程是该系列的第 1 部分,将向您介绍如何使用 Eclipse IDE、Java SE 6 和 Ant 发布 Web Services 应用程序。本教程为第 2 部分奠定了基础,第 2 部分将描述 Web Services 客户端应用程序的创建。 回页首 目标 完成本教程后,您应该知道: 什么是 Web Services ,以及它使用的与从 Eclipse 中用于查看已发布的 Web Services 描述语言(Web Services Description Language,WSDL)文件的浏览器相关的标准是什么。 如何创建 Web Services 的服务器端,包括如何安装和配置 Eclipse IDE 和 Java Development Kit (JDK),以便它们协同工作以生成使用 Java SE 6 来编译的代码。
如何在 Eclipse IDE 中使用基于 Ant Java 的构建工具来运行特殊 Java 命令以生成代码的某些部分。
先决条件
本教程包括为具备一些 Java 语言和 Ant 构建的实际应用知识的初级和中级 Java 程序员编写的简单步骤。初学者到更高级的 Java 开发人员将获得一些知识:学会如何构建、部署和运行 Web Services 服务端和分布式客户端,以提供防火墙友好的远程通信和应用程序处理。 系统要求
要按照示例进行操作,您需要下载: Eclipse IDE for Java Developers Java SE 6 您不必下载 Ant,因为其功能与 Eclipse 打包在一起。本教程使用 Ganymede Package for the Eclipse IDE for Java EE Developers。 设置开发环境 安装 Java SE 6
1. 下载并安装最新的 Java SE 6 JDK。Java SE 6 具有许多新功能,包括 Web Services API。
2. 双击可执行文件并按照安装说明进行操作。建议您执行典型安装并保留所有缺省设置,例如位置。
3. 当系统询问时,请选择您是否希望将该 Java 运行时环境安装为系统 JVM,以及是否希望将任何浏览器与该 Java 插件相关联。 4. 单击 Finish 开始安装。
5. 关闭任何打开的浏览器窗口。 6. 完成安装后,您应该看到一条确认安装成功的感谢消息。单击 OK 关闭该消息。 注意:将 Java Runtime Environment (JRE) 安装为系统 Java 虚拟机(Java Virtual Machine,JVM)意味着它将取代在 Microsoft® Windows® 目录中找到的任何 JVM,或在未从该目录找到 JVM 的情况下复制新的副本。将任何浏览器与 Java 插件关联意味着将这个新的 Java 版本用于 Applet。 安装 Eclipse
Eclipse 是一个开放源代码、可扩展的开发平台,可以在几乎所有的操作系统上进行安装。(了解有关 Eclipse 的更多信息。) 安装 Eclipse 是相当简单的,因为不存在安装过程:
下载 Eclipse IDE for Java EE Developers。
将文件提取到计算机上的所需位置。然后您应该看到一个名为 eclipse 的文件夹。为方便起见,最好在桌面上创建 eclipse.exe 文件的快捷方式。
配置 Eclipse
第一次运行 Eclipse 时,将会显示欢迎页面,如图 1 所示。如果不想阅读概述和其他产品信息,只需关闭该页面,以后可以通过选择 Help > Welcome 返回到该页面。
图 1. 欢迎屏幕
配置 Eclipse 以使用您先前安装的 Java SE 6 JDK;您需要将项目与此版本的 Java 相关联:
1. 选择 Window > Preferences > Java > Installed JREs,然后单击 Add 按钮。
2. 输入名称,例如 Java SE 6,以便于识别其版本。 3. 单击 Browse 按钮,并定位到安装 JRE 60 的目录。 4. 单击 OK(请参见图 2)。
图 2. 添加新的 JRE
新的 JRE 现在应该出现在已安装的 JRE 列表中,如图 3 所示。 5. 选中 Java SE 6 复选框,然后单击 OK。
图 3. 选择新的 JRE
6. 若要设置对所安装的 Java 版本的遵从性,请选择 Window > Preferences > Java > Compiler。
7. 从 Compiler compliance level 下拉列表中选择 1.6,如图 4 所示。
图 4. 设置遵从性
回页首 创建项目 下一步,您将创建一个项目来构造 Web Services 服务端。项目包含源代码和其他相关文件,并允许您使用项目作为源文件的容器,或在项目中设置文件夹以对文件进行组织。 1. 选择 File > New > Project。
2. 展开 Java 文件夹并单击 Java Project(请参见图 5)。
图 5. 在 Eclipse 中创建项目
3. 单击 Next。
4. 在看到提示时输入项目名称,例如 wsServerExample,如图 6 所示。
图 6. 在 Eclipse 中输入项目详细信息
5. 如果先前已缺省选择了 Use default JRE 单选按钮,则选择此单选按钮;否则请选择 Use a project specific JRE 单选按钮,并确保该 JRE 为 Java SE 6。
6. 单击 Finish 将项目与您先前安装的 Java JDK 相关联。 7. 如果提示您切换 Java 透视图,请单击 Yes。 创建服务器
首先需要创建一个 Java 包来容纳您的 Java 类:
1. 选择 File > New > Package。
2. 当 New Java Package 窗口打开时,输入包名称,例如 com.myfirst.wsServer,如图 7 所示。
图 7. 创建包
下一步,您需要为服务器代码创建一个类:
3. 右键单击您刚才创建的包名称,然后选择 New > Class。按如图 8 所示对其进行配置。
图 8. 创建类
4. 将该类创建为没有 main 方法存根的 public 类。
现在您已经为该包提供了一个类,下面可以开始编写服务器的代码了,如清单 1 所示。
清单 1. 服务器代码
package com.myfirst.wsServer;
import Javax.jws.WebService;
@WebService
public class SayHello {
private static final String SALUTATION = \"Hello\";
public String getGreeting( String name ) {
return SALUTATION + \" \" + name; } }
请注意清单 1 中粗体显示的代码。这称为 Annotation 或元数据,由 Java SE 5 中引入的 Web Services 元数据规范 (Web Services Metadata Specification) 所使用。开发人员在对类和方法应用 Annotation 之前定义类和方法,以向运行时引擎指明如何将类及其方法作为 Web Services 和 Web Services 操作来启用。Java SE 6 附带了这样一个引擎。
@WebService Annotation 将 SayHello 类标记为实现某个 Web Services ,从而产生可部署的 Web Services 。这个特定的 Annotation 是一个 WSDL 映射 Annotation,并将 Java 源代码与表示 Web Services 的 WSDL 元素相关联。(有关 Java SE 6 中的其他 Annotation 的更多信息,请参阅参考资料。) 使用 Ant 生成服务器代码
编写服务器应用程序以后,您需要生成支持 Web Services 的代码。首先,创建一个名为 build.xml 的新 Ant 文件:
1. 右键单击该项目,并选择 New > File。
2. 在得到提示时输入名称 build.xml,然后单击 Finish(请参见图 9)。 3. 确保通过右键单击此文件并选择 Open With > Ant Editor,从而使用 Ant Editor 打开此文件。从现在开始,每当您双击此文件,都会使用 Ant Editor 将其打开。
图 9. 创建 Ant 文件
4. 输入如清单 2 所示的 Ant 项目。
清单 2. Ant 脚本
5. 若要运行该 Ant build.xml 文件,请右键单击 Run As 并选择 Ant Build,这将会执行该 Ant 文件。
6. 确保此操作在 Eclipse 控制台窗口中产生 BUILD SUCCESSFUL 消息,如图 10 所示。
图 10. Ant 构建成功
7. 返回到 Eclipse 项目,通过右键单击 wsServerExample 并选择 Refresh 来刷新该项目。您现在应该在名为 com.myfirst.wsServer.jaxws 的包下面看到生成用于运行所创建的 Web Services 的代码(请参见图 11)。
图 11. 生成的代码
发布 Web Services
在为 Web Services 的服务器生成代码以后,您需要发布该 Web Services 以便能够开始使用它:
1. 在您创建的 com.myfirst.wsServer 包下面创建一个新类,并将其命名为类似于 RunService 的名称。 2. 右键单击该包并选择 New > Class,但这次选择用于创建 main 方法存根的选项。
3. 编写发布 Web Services 的代码,如清单 3 所示。
清单 3. 发布代码 package com.myfirst.wsServer;
import Javax.xml.ws.Endpoint;
public class RunService {
/**
* @param args */
public static void main(String[] args) {
System.out.println(\"SayHello Web Service started.\");
Endpoint.publish(\"http://localhost:8080/wsServerExample\new SayHello()); } }
Java SE 6 为发布 Web Services 提供了新的支持。Endpoint API 简单地发布 Web Services 端点,后者在运行时在某个 URL 处生成 WSDL。 4. 通过右键单击此类并选择 Run As > Java Application,从而运行此类。Eclipse IDE 控制台窗口应该显示出来。如果未显示,请选择 Window > Show View > Console。您应该看到 Web 服务器已启动的指示,如图 12 所示。
图 12. 正在运行服务的控制台
查看 WSDL
现在服务器已经启动并运行,您应该对其进行测试以确保它按预期工作: 1. 通过选择 Window > Show View > Other > General > Internal Web Browser 打开 Eclipse 中的内部 Web 浏览器。
2. 输入 URL,例如 http://localhost:8080/wsServerExample?wsdl,这应该会显示该 Web Services 的 WSDL 文本,如图 13 所示。
图 13. 显示内部 Web 浏览器的控制台
3. 完成后,记住通过单击 Eclipse 控制台视图中的红色方框停止该 Web Services 。 然而,为了继续本教程后面的操作,应该保持服务处于运行状态。 测试服务器
下一步,您将使用 Eclipse Web Services Explorer 工具,并通过本机 WSDL 和 SOAP 调用 Web Services 的操作,以测试您刚才创建的 Web Services 的 getGreeting 方法。
1. 您可能需要切换到 Java EE 透视图。单击 Window > Open Perspective > Other。
2. 当窗口显示出来时,选择 Java EE。
3. 选择 Run > Launch the Web Services Explorer。通过双击其选项卡最大化视图。您应该看到如图 14 所示的屏幕。
图 14. Web Services Explorer
4. 单击红色圆圈所指示的图标。这将显示 WSDL 页面,如图 15 所示。
图 15. WSDL 页面
5. 在 Navigator 窗格中,单击 WSDL Main。Actions 窗格已更新,如图 16 所示。
6. 输入 WSDL URL,在此例中为
http://localhost:8081/wsServerExample?wsdl,然后单击 Go 按钮。
图 16. 输入 WSDL URL
7. WSDL 应该成功地打开,并且您应该看到类似如图 17 所示的屏幕。
图 17. 成功打开的 WSDL
8. 下一步,您将通过单击 Operations 下面的 getGreeting 调用一个操作(如图 17 所示)。这将产生与图 18 所示类似的屏幕。
图 18. 调用操作
9. 在 Body 部分的 getGreeting 下面,单击 Add 链接(如图 18 所示)向值表中添加一个新行。
10.输入名称(这里为 Fiona),然后单击 Go 按钮。
11.在 Status 部分,getGreetingResponse 显示了结果。您应该在 Status 部分看到类似于 return (string): Hello Fiona 的结果(请参见图 19)。可能需要滚动或拖动视图才能看到结果。
图 19. 操作结果
12.总结
13.创建、生成和发布 Web Services 是非常简单的,只需使用 Eclipse 即可,当然还要使用 Java SE 6。请继续阅读本系列教程的第 2 部分,您将在其中构建客户端以便与这个 Web Services 服务端一起使用。
附录:Web Services 术语和首字母缩写词简要概述 Web Services
根据 W3C 的定义,Web Services 是“旨在支持通过网络进行的可互操作计算机到计算机交互的软件系统”。换句话说,Web Services 是用于应用程序到应用程序通信的编程接口。通常,它们用作支持计算机之间通过网络(例如 Internet)进行通信的 Web 应用程序。
客户端和服务器使用遵循 SOAP 标准的 XML 消息进行通信。也就是说,Web Services 使用 XML 对数据进行编码和解码,并使用 SOAP 来通过开放协议传输数据。Web Services 平台的其中两个基本要素为 SOAP 和 WSDL。 XML
可扩展标记语言(Extensible Markup Language,XML)允许用户定义他们自己的元素。它是一种通用规范,可以促进结构化数据在不同信息系统之间的共享(通常通过网络)。XML 旨在携带信息而不是显示信息。换句话说,XML 除了对信息进行组织、存储和传输以外,并不实际做其他任何工作;它只是纯文本。 SOAP
SOAP 过去代表简单对象访问协议 (Simple Object Access Protocol),但是在 1.2 版中已经丢弃了这个概念,因为此概念太具有误导性了。它是一种轻量级的通信协议,允许应用程序使用 XML 通过网络交换信息,或者更简单地说就是用于访问 Web Services 的协议。SOAP 允许应用程序彼此通信,而不管它们运行在什么操作系统上,以及是使用什么编程语言编写的。 WSDL
WSDL 是应用程序可读的 Web Services 描述语言。它用于描述 Web Services 的功能,以及客户端应用程序应该如何调用 Web Services 。也就是说,它在 XML 文档中描述 Web Services 的所有方法及其签名、命名空间,以及统一资源标识符(Uniform Resource Identifier,URI)的处理。URI 指定网络上的某个资源。
使用 Eclipse 和 Java SE 6 创建 Web Services 应用程序,第 2 部分: Web 服务客户端应用程序
简介: 使用 Eclipse Integrated Development Environment(IDE)和 Java Platform, Standard Edition(Java SE)6 创建可从控制台运行的 Web 服务应用程序。在这本系列的第二篇教程中,继续探索 Eclipse IDE 及其内置特性 TCP/IP Monitor。查看服务器与客户端应用程序之间的网络传输,然后从命令行运行应用程序。 开始之前 关于本系列
此系列教程演示如何使用 Java SE 6 创建可轻松地从命令行而不是从 Web 应用程序服务器容器中运行的 Web 服务服务端和客户端应用程序。在简单的 Hello World 示例中,您将利用 Eclipse IDE、Java SE 6 和 Apache Ant 轻松创建完全可以正常工作的 Web 服务服务端和客户端应用程序。您还将使用
TCP/IP Monitor 检查服务器与客户端之间的通信流量,并使用 Eclipse Web Services Explorer 工具测试 Web 服务。 回页首 关于本教程 本教程是本系列的第 2 部分,描述如何创建 Web 服务客户端应用程序,用于与第 1 部分中开发和部署的 Web 服务进行通信。本教程逐步讲解如何使用 Eclipse IDE、Java SE 6 和 Ant 开发和部署 Web 服务客户端应用程序。 回页首 目标 完成本教程后,您应该知道: 如何通过使用 Eclipse IDE 生成代码,使用 Java SE 6 编译代码,创建 Web 服务的客户端。
如何使用 Eclipse IDE 中基于 Java 的构建工具 Ant 运行专门的 Java 命令,从本系列第 1 部分发布的 WSDL 生成一些代码。
如何使用 Eclipse IDE 中的 TCP/IP Monitor 观察、捕捉和验证服务器与客户机之间的 Web 服务 SOAP 传输。
如何在 Eclipse IDE 外直接从命令行运行服务器和客户端应用程序。
回页首 先决条件 本教程包括为具备一些 Java 语言和 Ant 构建的实际应用知识的初级和中级 Java 程序员编写的简单步骤。初学者到更高级的 Java 开发人员将获得一些知识:学会如何构建、部署和运行 Web 服务服务端和分布式客户端,以提供防火墙友好的远程通信和应用程序处理。 回页首 系统需求 要按照示例进行操作,需要下载:
Eclipse IDE for Java EE Developers Java SE 6 您不必下载 Ant,因为其功能与 Eclipse 打包在一起。本教程使用 Ganymede Package for the Eclipse IDE for Java EE 创建新项目
您也许还记得,在第 1 部分中,一个 Eclipse 项目包含应用程序的源代码和其他相关文件。可以使用项目作为源代码容器,或者在项目中创建文件夹,以便组织文件。为了创建 Web 服务客户端,需要创建一个新的项目: 1. 选择 File > New > Project。
2. 展开 Java 文件夹并单击 Java Project(见图 1)。
图 1. 在 Eclipse 中创建项目
3. 单击 Next。
4. 根据提示输入项目名,例如 wsClientExample,如图 2 所示。
图 2. 在 Eclipse 中输入项目详细信息
5. 如果 Use default JRE 单选按钮之前已默认选中,则选择该单选按钮;否则选择 Use a project specific JRE 单选按钮,确保它是 Java SE 6。 6. 单击 Finish 将项目与第 1 部分中安装的 Java JDK 相关联。 7. 如果提示切换 Java 透视图,单击 Yes。
Eclipse 环境在 Package Explorer 中现在应该有两个项目,如图 3 所
示。一个项目是在本教程第 1 部分中创建的,另一个项目是刚才创建的。
图 3. Eclipse 中的 Project Explorer
8. 右键单击 wsClientExample 项目下的 src 文件夹,然后选择菜单项 New > Package,为客户端应用程序包输入一个名称,例如 com.myfirst.wsClient,如图 4 所示。
图 4. 在 Eclipse 中创建包
生成 Web 服务客户端代码
为了创建客户端代码,需要运行 wsimport 任务。和在本系列第 1 部分中一样,您将从一个名为 build.xml 的 Ant 脚本中运行该任务:
1. 右键单击项目,选择 New > File。
2. 输入名称 build.xml,然后单击 Finish(见图 5)。
3. 右键单击该文件,选择 Open With > Ant Editor,在 Ant Editor 中打开该文件。从现在起,每当双击该文件,都会在 Ant Editor 中打开它。
图 5. 创建 build.xml 文件
4. 输入清单 1 中显示的 Ant 项目。
清单 1. Ant 脚本
5.
6. 在运行 Ant build.xml 文件之前,必须首先回到第 1 部分 中创建的项目,并启动 RunService 服务。为此,展开该项目,右键单击 RunService 文件,选择 Run As > Java Application。
7. 确认 Eclipse IDE 控制台窗口显示消息说该服务已启动,如图 6 所示。
图 6. 服务运行时的控制台
8. 为了运行 Ant build.xml 文件,返回到本项目(wsClientExample),单击右键并选择 Run As > Ant Build,执行该 Ant 文件。 9. 确认 Eclipse Console 窗口中显示一条 BUILD SUCCESSFUL 消息,如图 7 所示。
图 7. Ant Build Success
10.返回到 Eclipse 项目,右键单击 wsClientExample 并选择 Refresh,或者选中项目并按 F5,刷新项目。现在在 com.myfirst.wsClient 包下应该可以看到生成的运行客户端的代码(见图 8)。
图 8. 生成的代码
在此过程中,wsimport 任务从运行 RunService 时发布的 WSDL 生成 JAX-WS 可移植工件。这就是服务必须首先运行的原因。
wsgen 读取服务端点类,并生成部署和调用 Web 服务所需的所有工件。 wsimport 读取 WSDL,并生成开发、部署和调用 web 服务所需的所有工件。
您将在下一节创建的客户端应用程序中使用这些生成的类。 创建客户端应用程序
现在,您已经生成了 Web 服务客户端的代码,接下来需要在 com.myfirst.wsClient 包下创建使用它的应用程序:
1. 右键单击那个包,选择选项 New > Class,然后配置它,如图 9 所示。
图 9. 创建一个类
2. 将类创建为 public,类中有一个 main 方法。
提供了含有一个类的包之后,便可以开始编写客户端代码,如清单 2 所示。
清单 2. 客户端应用程序 package com.myfirst.wsClient;
import javax.xml.ws.BindingProvider;
public class SayHelloClient {
public static void main(String args[]) {
SayHelloService shs = new SayHelloService();
SayHello sh = (SayHello) shs.getSayHelloPort();
((BindingProvider)sh)。getRequestContext()。put(BindingProvider.
ENDPOINT_ADDRESS_PROPERTY, \"http://localhost:8080/wsServerExample\");
System.out.println( ((BindingProvider)sh)。toString() );
System.out.println(sh.getGreeting(\"Fiona\"));
} }
运行客户端应用程序 使用 Eclipse
编写客户端应用程序之后,试着在 Eclipse 中运行它:
1. 右键单击 SayHelloClient.java,并选择 Run As > Java Application。这时应该会显示 Eclipse IDE 控制台窗口。如果没有显示控制台窗口,从菜单栏选择 Window > Show View > Console。此时应该可以看到执行 Web 客户端的结果,如图 10 所示。
图 10. 运行客户端应用程序
当运行 SayHelloClient 应用程序时,它创建一个新服务 SayHelloService,它是由通过清单 1 中的 Ant 脚本运行的 wsimport 任务生成的类之一。然后,它获得端口 SayHello,这是调用目标服务端点上的操作的一个代理。然后,该客户端获得请求上下文,将端点地址 http://localhost:8080/wsServerExample
添加到上下文,这个上下文是用于处理请求消息的一个 map。这里有两条 print 语句,第一条以易于阅读的格式显示 SayHello,第二条显示返回的问候语 Hello Fiona(见图 10)。 完成时,可以通过在 Eclipse console 视图中终止 Web 服务来停止它。 回页首 使用脚本 为了脱离 Eclipse 运行,可以修改 wsClientExample 的 build.xml,使它在单独的 shell 窗口中启动服务器和客户端应用程序: 1. 双击 build.xml 文件,在 Ant 编辑器中编辑它。 2. 修改该文件,如清单 3 所示。
清单 3. 修改后的 build.xml 文件
Read the WSDL and generate the required artifacts\"> Runs the Web service server from a terminal\"> Running the following command from the terminal to run the server: ${java.home}/bin/java -cp \"${basedir}/../wsServerExample/bin\" com.myfirst.wsServer.RunService Pauses briefly while the server starts\"> Runs a Web service client from a terminal\"> Running the following command from the terminal to run the client: ${java.home}/bin/java -cp \"${basedir}/bin\" com.myfirst.wsClient.SayHelloClient
注意:若要在 linux 上运行,必须首先设置 JAVA_HOME;在命令行输入:set JAVA_HOME= 新的 build.xml 有两个新的目标:runServer 和 runClient。您可能已经注意到,第一行中还更新了 default 目标值,使之不运行 wsimport 任务,而是运行 runClient 目标。而且,注意 runClient 对 pause 有依赖,这意味着虽然默认值为 runClient,但首先会运行 pause。pause 任务依赖于 runServer。这样便允许在客户端运行之前进行暂停,以便适当地启动服务器。所以 runServer 将首先运行。还有一点要注意的是 os 值。这个值表明将执行哪个操作系统(OS)命令,它由 Java Virtual Machine(JVM)决定。OS 是在 os.name 系统属性中设置的。修改后的 build.xml 脚本只包括 Windows 和 Linux,但是必要时可以增加适合您环境的其他操作系统,并更改 Ant 注意加粗的 为了测试脚本的执行,可以对客户端应用程序作一些修改,以便可以运行它,直到退出。修改如下: 3. 双击 SayHelloClient.java,编辑该文件,如以下清单所示: 清单 4. 修改后的 SayHelloClient.java 文件 package com.myfirst.wsClient; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import javax.xml.ws.BindingProvider; import com.myfirst.wsClient.SayHello; import com.myfirst.wsClient.SayHelloService; public class SayHelloClient { public static void main(String[] args) { SayHelloService shs = new SayHelloService(); SayHello sh = (SayHello) shs.getSayHelloPort(); ((BindingProvider) sh )。getRequestContext()。put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, \"http://localhost:8080/wsServerExample\"); System.out.println(((BindingProvider) sh)。toString()); String userName = null; boolean exit = false; while (!exit) { System.out.print(\"\\nPlease enter your name (type 'quit' to exit): \"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); try { userName = br.readLine(); } catch (IOException e) { System.out.println(\"Error reading name.\"); System.exit(1); } if (!(exit = userName.trim()。equalsIgnoreCase(\"quit\") || userName.trim()。equalsIgnoreCase(\"exit\"))) { System.out.println(sh.getGreeting(userName)); } } System.out.println(\"\\nThank you for running the client.\"); } } 当客户端应用程序运行时,它将继续提示输入,直到输入 quit 或 exit。为了运行 Ant 脚本: 4. 右键单击 build.xml,选择 Run As > Ant Build。 5. 确认 Eclipse Console 窗口出现一条 BUILD SUCCESSFUL 消息,如图 11 所示。 图 11. Ant 构建成功的消息以及返回的消息 执行 Ant 脚本后,应该会打开两个命令窗口,一个是服务器应用程序的窗口(见图 12),一个是客户端应用程序的窗口(见图 13)。客户端窗口不断提示输入姓名,直到退出应用程序。每当输入一个姓名,修改后的 SayHelloClient 应用程序通过一个 while 循环进行迭代,在该循环中,它将输入的姓名发送到服务器,服务器则返回问候语,返回的问候语在窗口中显示为 Hello 图 12. 服务器的命令窗口 图 13. 客户端的命令窗口 在两个命令窗口中分别输入 “quit”,退出服务器和客户端 Java 应用程序,然后关闭每个命令窗口应用程序。 用 SOAP Monitor 监视通信 在 Eclipse 中配置 TCP/IP Monitor 至此,您已经创建了一个服务器和一个客户端,现在可以使用 Eclipse TCP/IP Monitor 监视 SOAP 传输。该监视器是一个简单的服务器,它监视服务器与客户端之间的所有请求和响应,如图 14 所示。 图 14. 服务器与客户端之间的 SOAP 传输 1. 要查看该活动,需要选择 Window > Show View > Other > Debug > TCP/IP Monitor,从而打开 TCP/IP Monitor 视图,如图 15 所示。 图 15. 显示 TCP/IP Monitor 该视图将出现在 Eclipse IDE 底部的面板中,如图 16 所示。 图 16. 查看 TCP/IP Monitor 2. 要配置 TCP/IP Monitor,可选择 Windows > Preferences,并展开 Run/Debug,然后单击 TCP/IP Monitor,如图 17 所示。 图 17. 添加 TCP/IP Monitor 从该窗口中(图 17),可以通过 Start 和 Stop 按钮管理表中列出的多个 TCP/IP 监视服务器。可以添加、编辑、移除、启动或停止可用的服务器。Status 列表明监视器是已启动还是已停止。 3. 勾选窗口中的复选框,以便每当有活动时自动显示 TCP/IP Monitor 视图,然后单击 Add... 按钮定义一组新的配置选项,如图 17 所示。输入以下详细信息,如图 18 所示: 图 18. 配置 TCP/IP Monitor 选项描述 o Local monitoring port 是本地计算机上一个唯一的端口号,例如 8081。 o Host name 是用于运行服务器的计算机的计算机名或 IP 地址,例 如 localhost。 o Port 是远程服务器的端口号,例如 8080。 o Type 是从浏览器发送的请求类型,有 HTTP 和 TCP/IP 两种选项。 o Communication Timeout 是与服务器的 TCP/IP 连接可持续的时 间长度,单位为毫秒。 4. 单击 OK 保存更改。 回页首 更新客户端代码 接下来,需要对客户端代码作一些更改,以便通过 TCP/IP monitor 重定向 Web 服务。这里需要更改 Web 服务的端点,因为 TCP/IP monitor 侦听端口 8081。更新后的代码如清单 5 所示: 清单 5. 客户端应用程序 package com.myfirst.wsClient; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import javax.xml.ws.BindingProvider; import com.myfirst.wsClient.SayHello; import com.myfirst.wsClient.SayHelloService; public class SayHelloClient { public static void main(String[] args) { SayHelloService shs = new SayHelloService(); SayHello sh = (SayHello) shs.getSayHelloPort(); ((BindingProvider) sh )。getRequestContext()。put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, \"http://localhost:8081/wsServerExample\"); System.out.println(((BindingProvider) sh)。toString()); String userName = null; boolean exit = false; while (!exit) { System.out.print(\"\\nPlease enter your name (type 'quit' to exit): \"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); try { userName = br.readLine(); } catch (IOException e) { System.out.println(\"Error reading name.\"); System.exit(1); } if (!(exit = userName.trim()。equalsIgnoreCase(\"quit\") || userName.trim()。equalsIgnoreCase(\"exit\"))) { System.out.println(sh.getGreeting(userName)); } } System.out.println(\"\\nThank you for running the client.\"); } } 回页首 运行 Web 服务 再次运行 Ant 脚本:右键单击之前创建的用于运行服务器和客户端的 build.xml,并选择 Run As > Ant Build。 此时再次出现两个命令窗口,一个是服务器窗口,一个是客户端窗口。和之前一样,输入姓名。 查看 TCP/IP Monitor 视图,该视图看上去应该和下面的图 19 类似: 图 19. TCP/IP Monitor 的结果 在该视图中可以看到通过 TCP/IP Monitor 路由的请求和响应对。为了观察得更仔细,清单 6 和 7 显示了完整的头部: 清单 6. 请求头部 POST /wsServerExample HTTP/1.1 SOAPAction: \"\" Accept: text/xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Content-Type: text/xml; charset=utf-8 User-Agent: Java/1.6.0 Host: localhost:8081 Connection: keep-alive Content-Length: 226 清单 7. 响应头部 HTTP/1.1 200 OK Content-type: text/xml; charset=utf-8 Transfer-encoding: chunked fc 可以看到,请求头部信封中加粗的部分是在客户端应用程序的命令窗口中输入的内容,此处为 Fiona。现在看看响应头部信封,可以看到返回的响应,此处为 Hello Fiona。 可选活动 可以通过单击图 19 中用红色圈住的图标,确认 Web 服务 SOAP 传输是否遵从 WS-I。这将提示您保存一个日志文件,之后要验证该文件是否遵从 WS-I。可以在 XML 编辑器中打开该日志,查看它的内容。 附录:Web 服务术语和缩略语概述 WS-I - Web 服务互操作性组织(Web services interoperability) WS-I 是一个开发的行业组织,专门促进 Web 服务跨平台、操作系统和编程语言的互操作性。 Envelope(信封) Envelope 是 SOAP 消息的一部分。它定义一个框架,以描述消息中的内容以及如何处理消息。SOAP 消息就是一个 Envelope,由 0 个或多个头部和一个主体组成。Envelope 是 XML 文档的顶层元素,是控制信息、消息地址和消息本身的容器。 Headers(头部) 头部包含所有的控制信息。它是 Envelope 的子元素。 Body(主体) 主体包含消息的身份信息及其参数。它是 Envelope 的子元素。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务