本文中主要内容是对于Soap协议的内容进行梳理,并且利用TCP/IP Mointor工具对于SOAP协议进行监视,以及为了更好得理解SOAP协议的主要内容,利用HTTP模拟SOAP协议的发送。
- 1、SOAP协议简介
- 2、使用TCP/IP monitor工具对于SOAP协议监视(eclipse中已经自带的工具无下载安装,直接可用)
- 3、SOAP协议体内容以及利用HTTP协议模拟SOAP协议发送
- 4、SOAP1.1以及SOAP1.2两个版本的比较
- 1、SOAP协议简介(是什么?)
(下面对于SOAP协议的简介内容来源于百度以及其他博文,特此申明)- SOAP 是一种网络通信协议
- SOAP即Simple Object Access Protocol简易对象访问协议
- SOAP 用于跨平台应用程序之间的通信
- SOAP 被设计用来通过因特网(http)进行通信
- SOAP = HTTP+XML,其实就是通过HTTP发xml数据
- SOAP 很简单并可扩展支持面向对象
- SOAP 允许您跨越防火墙
- SOAP 将被作为 W3C 标准来发展
2、使用TCP/IP monitor工具对于SOAP协议监视(eclipse中已经自带的工具无下载安装,直接可用)
我使用的是MyEclipse 2015 稳定版本2.0,Eclipse 最新版本luna也是同样可以使用
首先在使用该工具之前首先要理解的是该工具的工作原理:
1、简单来说:理解为邮差,是一个敬职敬业的转发员,将我们从server服务端发送的信息通过自身的周转发送到client客户端;
2、既然是一位转发人员同样的是需要转交手续的,也就是端口(PORT),所以server服务端的端口号必须与TCP/IP monitor的端口号,而并非是在之前我们测试WebService使用的时候,Client直接接收的端口号,之后通过TCP/IP monitor的处理转发,转发出的需要使用的是转发出的端口号与Client的接受端口号相一致,具体的内容图示如下:
下面的例子使用的是,我在之前WebService的初步探究与应用-01中的WebService的例子,大家如果有兴趣可以瞅瞅;
下面主要详细讲述一下如何使用这样的工具(监视SOAP协议内容):
2.1、首先得打开工具:
2.2、配置使用Monitor,并且开启Monitor:
首先我们需要在TCP/IP Monitor中添加一个新的Monitor监测工具,不要忘记Start否则无法使用!
2.3、开始测试(测试前不要忘记调整客户端的端口哦,例如根据上图客户端的端口需要修改为54321)
先运行服务端,再运行客户端,效果如下:
- 3、SOAP协议体内容以及利用HTTP协议模拟SOAP协议发送
- 模拟一个http的客户端(相当于一个浏览器),客户端通过程序实现,向webservice的服务端发送soap协议(xml)。http客户端意义:企业开发中,有许多时候都是使用的是http接口,需要通过写程序模拟http请求,请求数据解析数据。
以下代码主要是利用http协议进行模拟的实现:
public static void main(String[] args) throws IOException {
//开启 一个http链接
//webservice地址
URL url = new URL("http://127.0.0.1:23456/weather");
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
//设置post请求,post是大写
httpURLConnection.setRequestMethod("POST");
//Content-Type: text/xml; charset=utf-8
httpURLConnection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
//设置请求和响应
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
String requestString = requestString("郑州");
//发送soap协议
httpURLConnection.getOutputStream().write(requestString.getBytes());
//接收响应内容
InputStream inputStream = httpURLConnection.getInputStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int len=-1;
byte[] b = new byte[1024];
//将inputStream内容写到byteArrayOutputStream
while((len= inputStream.read(b, 0, 1024))!=-1){
byteArrayOutputStream.write(b, 0, len);
}
//获取响应内容
String responseString = byteArrayOutputStream.toString();
System.out.println(responseString);
//解析响应的xml数据。
//....
inputStream.close();
byteArrayOutputStream.close();
}
/**
* 模拟soap协议请求内容
* @param cityName
* @return
*/
public static String requestString(String cityName) {
String xmlString =
"<?xml version=\"1.0\" ?>" +
"<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
"<S:Body>" +
"<ns2:queryWeather xmlns:ns2=\"http://server.socket.jaxws/\">" +
"<arg0>"+cityName+"</arg0>" +
"</ns2:queryWeather>" +
"</S:Body>" +
"</S:Envelope>";
return xmlString;
}
}
- 4、SOAP1.1以及SOAP1.2两个版本的比较
- Soap1.1版本:
通过http进行post请求。
Content-Type: text/xml; charset=utf-8
Soap1.1命名空间:http://schemas.xmlsoap.org/soap/envelope/- Soap1.2版本:
Post请求
Content-Type: application/soap+xml;
soap1.2命名空间:http://www.w3.org/2003/05/soap-envelope
总结:- soap1.1的服务端需要soap11客户端调用
- soap1.2的服务端soap1.1客户端和soap1.2客户端都 可以调用。