失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 分布式.RPC-WebService三要素 三个规范 Soap协议(理解原理 才是事半功倍)

分布式.RPC-WebService三要素 三个规范 Soap协议(理解原理 才是事半功倍)

时间:2019-10-15 03:51:25

相关推荐

分布式.RPC-WebService三要素 三个规范  Soap协议(理解原理 才是事半功倍)

系列博文:

分布式.RPC调用-RMI & Hessian框架_闲猫的博客-CSDN博客

分布式.RPC-WebService三要素,三个规范, Soap协议_闲猫的博客-CSDN博客

分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_闲猫的博客-CSDN博客

分布式.RPC调用-RMI & Hessian框架_闲猫的博客-CSDN博客

分布式.RPC-WebService CXF框架_闲猫的博客-CSDN博客

分布式.RPC-WebService Restful风格实现_闲猫的博客-CSDN博客

目录

WebService三要素

WebService三规范

SOAP协议

SOAP协议简介

TCP/IP Monitor

HttpClient操作SOAP

SOAP 1.2

WebService三要素

JAX-WS 规范 对service高度封装 ,最普遍,基于soap协议

JAXM & SAAJ 让你实现更多的底层实现 ,使用起来比较繁琐 基于soap协议 ,实现每个细节。

JAX-RS 规范 rest风格的webservice

WebService三规范

SOAP协议 :简单对象访问协议 基于http

WSDL:webservice使用说明书 网络服务描述语言 W3C

UDDI

SOAP协议

SOAP协议简介

SOAP(Simple Object Access Protocol)简单对象访问协议。 是基于HTTP协议,使用XML作为数据传输的格式,SOAP规定了XML的格式。XML格式的数据屏蔽了不同语言和平台对对象要求的不同,这个也是WebService(基于SOAP协议)有跨语言、跨平台特点的基础。

特点:

跨语言、跨平台

穿透防火墙:该协议基于HTTP,防火墙对80端口是开的,所以SOAP也就搭了顺风车,直接穿透

W3C( 万维网联盟 )制定的标准

TCP/IP Monitor

功能:

该工具是Tcp/Ip监视器,可以抓某一次请求和响应数据,是Eclipse中插件。

原理:

客户端请求 Tcp/Ip Monitor设定的端口,然后Tcp/Ip Monitor再请求服务器,返回的时候,服务器将数据返回给Tcp/Ip Monitor,Tcp/Ip Monitor再将数据返回给客户端。

图示如下:

操作:

打开监听工具

制定转发规则

点击“Add..”,出现如下界面:

启动监听

点击start按钮启动

·

运行过程

补充:以下是获取的请求和响应的报文:

[ww1]请求数据

[ww2]响应数据

HttpClient操作SOAP

环境搭建

创建一个java工程,然后导入所需要的jar包,包括:

commons-codec-1.6.jar

commons-logging-1.1.3.jar

httpclient-4.3.5.jar

httpcore-4.3.2.jar

步骤:

创建客户端对象构造请求对象(HttpGet/HttpPost,构建:创建对象、添加参数)使用够HTTP客户端对象执行请求对象,并返回响应对象使用工具类获取响应对象的数据

HttpClient发送get请求

逻辑:

创建一个Get请求对象,然后使用HTTP客户端类来执行该Get请求,返回一个HttpResponse对象,从response对象中获取结果实体,然后使用EntityUtils工具类进行解析。

Get请求只有一个地址,所以Get请求对象构造就需要一个URL地址即可。

代码:

try{

// HTTPClient 发送get请求,值设定一个url地址即可

HttpClient client [ww1]= HttpClients.createDefault();

HttpGet get [ww2]=newHttpGet("http://localhost:12345/member?wsdl");

HttpResponse response = client.execute(get)[ww3];

HttpEntity entity = response.getEntity();

System.out.println(EntityUtils.toString(entity, "utf-8"));

[ww4]}catch(Exception e) {

e.printStackTrace();

}

[ww1]构建客户端

[ww2]构建请求对象

[ww3]使用客户端对象执行请求

[ww4]获取并解析响应数据

HttpClient发送post请求

逻辑:

跟get请求不同的是构造的请求参数对象发生变化了,POST请求是将参数放在请求体中,所以在构造post请求对象是比较麻烦的,手动拼接一个soap协议的请求报文然后发送给服务器。

代码:

try{

HttpClient client [ww1]= HttpClients.createDefault();

HttpPostpostRequest[ww2]=newHttpPost(

"http://localhost:12345/member?wsdl");

//设置头信息,方式参数中中文乱码

postRequest.setHeader[ww3]("Content-type", "text/xml;charset=utf-8");

String soap = "<?xml version=\"1.0\" ?>"

+ "<S:Envelope xmlns:S=\"/soap/envelope/\">"

+ "<S:Body>"

+ "<ns2:getMember xmlns:ns2=\"/\">"

+ "<arg0>"+ "</arg0>" + "</ns2:getMember>" + "</S:Body>"

+ "</S:Envelope>";

//设置post请求的请求体

postRequest.setEntity(newStringEntity(soap))[ww4];

HttpResponse response = client.execute(postRequest)[ww5];

HttpEntity entity = response.getEntity();

System.out.println(EntityUtils.toString(entity, "utf-8"));

[ww6]

}catch(Exception e) {

e.printStackTrace();

}

[ww1]1.构建HTTP客户端对象

[ww2]2.1创建post请求对象

[ww3]设置头信息,方式参数中中文乱码

[ww4]设置post请求的请求体

[ww5]3. 使用够HTTP客户端对象执行请求对象,并返回响应对象

[ww6]获取并解析响应数据

发送的字符串:(上述工程中拼接的字符串)

<?xml version="1.0"?>

<S:Envelope xmlns:S="/soap/envelope/">

<S:Body>

<ns2:getMember xmlns:ns2="/">

<arg0>

</arg0>

</ns2:getMember>

</S:Body>

</S:Envelope>

响应报文:

<?xml version="1.0"?>

<S:Envelope xmlns:S="/soap/envelope/">

<S:Body>

<ns2:getMemberResponse xmlns:ns2="/">

<return>

<name>赵芸</name>

<uuid>11</uuid>

</return>

</ns2:getMemberResponse>

</S:Body>

</S:Envelope>

SOAP 1.2

开发SOAP1.2

逻辑:

需要导入soup1.2版本的扩展包,服务类开发是需要新增注解:

@BindingType(SOAPBinding.SOAP12HTTP_BINDING)

发布服务也同SOAP1.1。区别就是一个注解和几个jar包。

1. 创建java工程 ,引入扩展包

2.开发服务类:

import javax.jws.WebService;

import javax.xml.ws.BindingType;

import javax.xml.ws.soap.SOAPBinding;

@WebService

@BindingType(SOAPBinding.SOAP12HTTP_BINDING)[ww1]

public class Weather {

public String info(String city){

}

}

[ww1]新增的注解,表示使用的是soap1.2报文格式

3. 发布web服务 ,同1.1

SOAP1.1和SOAP1.2对比:

END

如果觉得《分布式.RPC-WebService三要素 三个规范 Soap协议(理解原理 才是事半功倍)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。