Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1966805
  • 博文数量: 606
  • 博客积分: 9991
  • 博客等级: 中将
  • 技术积分: 5725
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-17 19:07
文章分类

全部博文(606)

文章存档

2011年(10)

2010年(67)

2009年(155)

2008年(386)

分类: Java

2010-07-20 10:59:42

使用 Eclipse TCP/IP Monitor 监视 SOAP 传输。该监视器是一个简单的服务器,它监视服务器与客户端之间的所有请求和响应,如图 14 所示。

图 14. 服务器与客户端之间的 SOAP 传输

要查看该活动,需要选择 Window > Show View > Other > Debug > TCP/IP Monitor,从而打开 TCP/IP Monitor 视图,如图 15 所示。

图 15. 显示 TCP/IP Monitor

该视图将出现在 Eclipse IDE 底部的面板中,如图 16 所示。

图 16. 查看 TCP/IP Monitor

要配置 TCP/IP Monitor,可选择 Windows > Preferences,并展开 Run/Debug,然后单击 TCP/IP Monitor,如图 17 所示。

图 17. 添加 TCP/IP Monitor

从该窗口中(图 17),可以通过 Start 和 Stop 按钮管理表中列出的多个 TCP/IP 监视服务器。可以添加、编辑、移除、启动或停止可用的服务器。Status 列表明监视器是已启动还是已停止。

勾选窗口中的复选框,以便每当有活动时自动显示 TCP/IP Monitor 视图,然后单击 Add… 按钮定义一组新的配置选项,如图 17 所示。输入以下详细信息,如图 18 所示:

图 18. 配置 TCP/IP Monitor

选项描述

Local monitoring port 是本地计算机上一个唯一的端口号,例如 8081。

Host name 是用于运行服务器的计算机的计算机名或 IP 地址,例如 localhost。

Port 是远程服务器的端口号,例如 8080。

Type 是从浏览器发送的请求类型,有 HTTP 和 TCP/IP 两种选项。

Communication Timeout 是与服务器的 TCP/IP 连接可持续的时间长度,单位为毫秒。

单击 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,
“”);
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





Fiona


清单 7. 响应头部

HTTP/1.1 200 OK
Content-type: text/xml; charset=utf-8
Transfer-encoding: chunked

fc




Hello Fiona



0

可以看到,请求头部信封中加粗的部分是在客户端应用程序的命令窗口中输入的内容,此处为 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 的子元素。

相关链接:

利用TCPIP Monitor分析HTTP协议的请求应答机制:http://blog.sina.com.cn/s/blog_45876a7c0100evo2.html

阅读(3738) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~