由于现在WebService服务,用的最多的是http协议,最近研究了下soap协议(带请求头)报文的请求,以此总结一下写个笔记忘日后观看,有说的不对的地方请大家指出来,虚心讨教。
话不多说直接上干货。
1.首先我就用最简单的方式,jdk自带的webService发布服务。
1.1:准备工作,写一个接口,一个实现类,加一个测试类用来发布服务。截图如下:
接口截图:
实现类截图:

发布测试类截图:
简述:
@WebParam(name="USERS") Users user1 -------这个注解是指定接受报文的body信息名字为USERS的参数,如果不写系统会默认比如:arg0;
@WebParam(header = true, name = "auth") HisCallHeader user ------这个注解和上面有所不同是多了个header参数的设置,当header=true时时代表在报文的头信息中接受名字为auth的,如果不写则接受不到头信息的内容,同理不指定名字的话会系统会默认一个名字,在这里我们所有的接受参数都设置一个指定的名字,这样在实际项目中更加清晰明了。
@WebParam(header = true,name="parameter") HisCallParameter in) -----同上
@WebService(targetNamespace = "http://www.webser.com") -------这个targetNamespace参数可以不写,默认为当前类的包名,这里我们给它命名一个名字稍后我会解释下命名之后的好处,这里的命名可以随便写没什么限制,但大多数都会用http://*******,这样命名。
实际操作开始:使用eclispe中的自带的WebService工具去访问我的服务,
讲道理这个工具真的很好可以方便我们查看soap报文的格式:
(由于SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议,
1.1:命名空间部分:
1.2:头部信息部分
1.3:body身体部分:
*****重点讲一个头部部分,因为这块容易出问题:
<ns:auth xmlns:ns="http://www.webser.com">
(我们自定义的命名空间以这种方式)
<q0:parameter>
(引用soap中报文最上部分的q0命名空间,也就是服务端规定的)
说一下上面这两个参数,里面那些参数是类里面的属性,我们就不多说了,这里面我只说实体类
其中auth,parameter这两个名字是我为两个实体类起的接受时指定的名字。
1.前面我说过如果我在编写WebService服务端的时候如果不写命名空间的会某人为包名,写的话系统会在soap报文中的命名空间处显示的是我们所命名的空间名 如下图: