对接webservice常见方法

388 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情

日常对接his工作中,his系统一般给我们提供的都是webservice接口,对接webservice是对接三方需求中常见工作。

一. webservice简介
简单来说webservice接口是符合soap协议的结构化的接口服务。具体定义不再赘述~
Web Service组成:1.SOAP--Web Service之间的基本通信协议。2.WSDL--Web Service描述语言,它定义了Web Service做什么,怎么做和查询的信息。

二. 对接webservice接口,本文介绍两种最简单的对接方式

  1.  利用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 指定编码\

image.png

            把生成的源文件拷贝到项目相应的包下,组合好入参后,使用生成的相关类直接调用相应的方法即可实现。\

           

      image.png

image.png           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());

        } 

    }