关于WebService发布服务,客户端用httpUrlConnection请求(带请求头)soap报文——笔记!

本文介绍了如何使用Java的httpUrlConnection进行WebService调用,特别是处理SOAP报文请求头的问题。重点讲解了命名空间、头部信息参数命名以及为何要与服务端指定的命名空间保持一致。同时,提供了服务端接口、实现类和客户端调用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于现在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作为底层通讯协议,

所以它和http一样也有header,body部分。)
我分三个部分截图:

 1.1:命名空间部分:


1.2:头部信息部分


1.3:body身体部分:


*****重点讲一个头部部分,因为这块容易出问题:

<ns:auth xmlns:ns="http://www.webser.com">

(我们自定义的命名空间以这种方式)

<q0:parameter>

(引用soap中报文最上部分的q0命名空间,也就是服务端规定的)

说一下上面这两个参数,里面那些参数是类里面的属性,我们就不多说了,这里面我只说实体类

其中auth,parameter这两个名字是我为两个实体类起的接受时指定的名字。

1.前面我说过如果我在编写WebService服务端的时候如果不写命名空间的会某人为包名,写的话系统会在soap报文中的命名空间处显示的是我们所命名的空间名   如下图:


详解:回过头来继续说,当我的参数引用这个服务器端规定的命名空间时我才会接收到,如果不是该命名空间则接受不到信息,而是为null,那么这个时候就会有人问上述头部信息中的这两个参数为什么不都引用“q0”这个我们服务端指定好的命名空间名字,为什么还用我们自定义一个命名空间,我个人理解哦一个报文如果由多个服务端读取的话,这样就便于根据命名空间去接受,这个根据命名空间名称服务端去选择接受那个参数。

我上述截图中头信息参数名字为“auth“它是我自定义的命名空间,但是我命名的名字适是和"q0"是一样的所以服务端可以接受到它,如果不一样我改成别的,跟服务端的命名空间不一样,那么服务端接收不到此信息。

下面简单提及一下body(身体部分)的有人会问“<q0:hiscall>"这块可不可以自定义命名一个呢,这块这个"hiscall“它是我们服务端的方法名称,这个方法里面接受头部的参数,body中的参数,如果和更改了命名空间,那个我们还如何访问该方法,又如何去取

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值