一、简介
TCPMon可以用于webservice服务中,用来查看详细的SOAP消息,官方解释如下:
TCPMon is a utility that allows the messages to be viewed and resent. It is very much useful as a debug tool. It has originally being part of Axis1 and now stands as an independent project.
下载地址:http://ws.apache.org/tcpmon/download.cgi
二、原理
webservice中,服务器和客户端交互是直接发送和接受消息,如下图所示:
TcpMon相当于一个拦截器,客户端与服务端交互的的soap消息先被它拦截,这样TcpMon就可以获得详细的soap消息格式,如下图所示:
三、使用
(1)从下载地址中下载TcpMon的binary包,解压后的包中,进入build目录中,windows系统中双击tcpmon.bat会出现一个图形化窗口,linux中执行tcpmon.sh(不管什么操作系统,前提是要安装好jdk):
(2)客户端访问地址修改
直接交互时,是使用地址http://localhost:8888/ws?wsdl获取webservice信息,使用TcpMon后,地址端口改为TcpMon配置的监听端口7777(端口可以自行配置,只要符合端口的限制):
package org.myws.service;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class WebPubClient {
public static void main(String [] args) {
try {
URL url = new URL("http://localhost:7777/ws?wsdl");
QName name = new QName("http://service.myws.org/", "MyWebImplService");
Service service = Service.create(url, name);
IMyWeb imyweb = service.getPort(IMyWeb.class);
System.out.println(imyweb.add(10, 20));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
(3)TcpMon消息查看
点击TcpMon的Port 7777(配置之后,就会生成),查看消息:
格式化的消息如下:
(4)协议XML格式修改
默认的WSDL规范,使得SOAP协议的数据传输媒介XML不便于阅读,比如上面的消息<arg0></arg0>,元素arg0,arg1都是WSDL规范默认的参数类型,可以通过修改webservice服务器端的接口,使得消息里面的XML适合阅读:
package org.myws.service;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService
public interface IMyWeb {
@WebResult(name="addResult")
public String add(@WebParam(name="a")int a, @WebParam(name="b")int b);
}
因为相对于修改SOAP消息传输数据的规范,需要重新发布服务,这样服务器和客户端才能根据对应的格式进行解析。重新帆布之后,可以看到WSDL定义的类型已经发生了变化:
查看TcpMon的消息格式,已经发生了变化,如下图: