客户端调用webservice,soapaction值怎么设置

客户端调用webservice,soapaction值怎么设置,第1张

对于webservice 有2种风格:1:restful , 2:soap 对于第一种 是最直观的 webservice服务, 可以直接在浏览器上通过地址访问。 对于第二种 使用的是soap协议,在请求头上 需要添加soap头, 这二种 风格 都可以使用 httpconnection 进行调用, 只是 对于第二种会稍微麻烦一点。 另外 java 也有专门对于 webservice访问的包装, 如:cxf ,axis2 可以对他们进行调查!

1. 单独建立线程池,线程池中的所有工作线程从线程池任务队列中读取任务,启动SOAP报文下发工作。

2. 建立连接池,线程池中线程从连接池获取一个连接将SOAP报文下发到网元上。

3. 其他线程:SOAP报文读取线程,将生成的SOAP报文文件映射到内存文件,每次读取1w条数据到SOAP报文下发队列,SOAP下发队列数据结构进行

封装,添加信号量,每次数据push_back一条信号量递增

SOAP报文下发线程,独立的线程从SOAP报文下发队列中取数据,等待下发队列的信号,如果有信号则从队列中取数据,构建下发任务

将下发任务压入线程池工作任务队列,同时信号量递减1

SOAP报文保存线程,SOAP报文下发后会收到网元的响应报文,解析模块分析响应报文,获取SOAP发送报文的执行结果,并将执行失败

的SOAP报文进行保存,对执行成功的报文写入日志。

4. 连接池:连接池工厂,连接池,连接器实体

连接池工厂建立连接池名称和连接池实例的映射,管理所有连接池。

连接池管理所有会话连接(IOSession),建立空闲会话队列和使用会话队列,如果空闲队列为空,同时又有新的连接请求,则建立一条新的连接。

连接数不能超过最大连接数,如果已经达到最大连接数,则进入等待状态,当空闲队列空状态取消

AttachHttpHeader() // 附加Http报头

DetachHttpHeader() // 获取Http响应报头

PraseHttpHeader()// 解析Http响应报头

队列采用状态模式,空闲状态

队列包含一个事件,类型转换 *** 作符到事件句柄,当空闲队列为空时,事件变为无信号状态,当变为非空时变为有信号状态。每次出现这种状况都要写日志信息。

加锁时要用自动锁,将锁包装在一个局部变量中,防止死锁的发生。

CMultiLock包装多个同步对象

CSingleLock包装单个同步对象

CSingleLock singleLock(&m_CritSection)// 包装一个临界区

singleLock.Lock()// 尝试给共享资源加锁

if (singleLock.IsLocked()) // 判断共享资源是否被锁住

{

// 开始使用共享资源

// 使用结束,释放共享资源使用权

singleLock.Unlock()

}

说明:本文章记录的是基于springboot搭建的cxf服务端和soap客户端调用

说明:目前我使用到了四个注解,分别是

@WebService:表明该接口是一个webservice服务接口,注解里的属性值可以设置生成的wsdl文档的命名空间等信息,此处没有遇到相关错误,因此没有进行设置,不过建议还是设置上。

@WebMethod:表明该方法是服务要发布的方法,对应属性也可以设置上

@WebResult:设置方法返回值,此处最开始没有设置导致获取不到返回值,因此务必设置上

@WebParam:设置参数信息,指定参数名字和参数所属命名空间,必须设置,不然可能导致参数不能传递进来

说明:实现类上需要贴上注解,方法不需要

说在前头:这里我只是实验了拦截器的定义,没有什么具体的业务 *** 作,想学习的同学请自行研究

此时启动boot项目就可以访问到wsdl文档

第一个就是请求参数无法传递进去,解决办法是设置@WebParam注解的targetNamespace属性值

这个主要就是报非法属性异常

第二个就是无法获取到返回值,解决办法就是需要添加@WebResult注解并设置对应的属性值

这个主要就是在客户端获取返回值哪里报空指针异常


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11569953.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存