持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情
日常对接his工作中,his系统一般给我们提供的都是webservice接口,对接webservice是对接三方需求中常见工作。
一. webservice简介
简单来说webservice接口是符合soap协议的结构化的接口服务。具体定义不再赘述~
Web Service组成:1.SOAP--Web Service之间的基本通信协议。2.WSDL--Web Service描述语言,它定义了Web Service做什么,怎么做和查询的信息。
二. 对接webservice接口,本文介绍两种最简单的对接方式
- 利用wsimport命令生成本地类。
eg:wsimport -keep -encoding utf-8 -d D:\temp\d -s D:\temp\s -p com.ucmed.wscode -verbose xx.xx.xx.xx:port/Service.asm… 参数说明
-keep:是否生成java源文件
-d:指定.class文件的输出目录
-s:指定.java文件的输出目录
-p:定义生成类的包名,不定义的话有默认包名
-verbose:在控制台显示输出信息
-b:指定jaxws/jaxb绑定文件或额外的schemas
-extension:使用扩展来支持SOAP1.2
-encoding 指定编码\
把生成的源文件拷贝到项目相应的包下,组合好入参后,使用生成的相关类直接调用相应的方法即可实现。\
2. 不生成客户端,直接通过httpclient实现
public void SendWebService()throws ParseException, IOException {
HttpClient client = HttpClients.createDefault();
String reqSoapData = buildReqSoapData(liBiEntity);//此处就是拼接SOAP请求
HttpPost post = new HttpPost(WSDLURL);// WSDLURL 就是提供的WSDL
try {
HttpEntity re = new StringEntity(reqSoapData, "UTF-8");
post.setHeader("Content-Type", "text/xml;charset=UTF-8");
post.setHeader("Accept-Encoding", "gzip,deflate");
post.setHeader("SOAPAction","tempuri.org/IWarehouse_…");
post.setEntity(re);
response = client.execute(post);//发送请求
returnInfo = EntityUtils.toString(response.getEntity());
log.info("请求服务返回XML文本:" + returnInfo);
} catch (UnsupportedEncodingException e) {
log.error(e.getStackTrace());
} catch (ClientProtocolException e) {
log.error(e.getStackTrace());
} catch (IOException e) {
log.error(e.getStackTrace());
}
}