当前位置: 首页 > news >正文

医院系统接口对接实战:从 WSDL 到 HTTP 的全流程解析

在医院信息化系统对接中,经常会遇到 “两个接口地址”“WebService 与 HTTP 联网”“代理类使用” 等问题。比如为什么医院和我们各自要提供一个接口地址?WebService 的代理类到底起什么作用?HTTP 联网和 WebService 联网有什么区别?本文结合实际场景,用通俗的语言讲清这些核心问题。

一、为什么有两个接口地址?各自是干什么的?

在医院系统对接中,你会遇到两个关键地址,这两个地址本质是 “双向通信的出入口”,分工不同:

1. 医院提供的接口地址(如 C13 系统调用地址)

医院给的地址是一个 WSDL(Web Services Description Language)地址,比如:https://IP/XXX/XXX/XXX.XXXXXXXXXXXXX?WSDL=1

作用:这是医院系统对外开放的 “服务入口”,供我们的系统调用医院的功能。医院在这个地址里定义了可调用的方法(比如HIPMessageServer),以及方法需要的参数(action功能码和messageXML 数据)。

  • 比如我们要给医院回传检查状态(MES0003)或注册文档(MES0006),就需要调用这个地址的HIPMessageServer方法,传入对应的功能码和 XML 数据。

2. 我们提供的接口地址(如申请单推送地址)

我们给医院的地址也是一个 WSDL 地址,比如:

http://IP:port/XXXXXXXXX?wsdl

作用:这是我们系统对外开放的 “服务入口”,供医院向我们推送数据。这个地址里定义了我们能接收的方法(比如AddRisAppBillService),医院会按照这个 WSDL 的规范,将患者的检查申请单数据推送到我们的系统。

简单说:两个地址是 “双向车道”—— 医院的地址是 “我们给医院发数据的入口”,我们的地址是 “医院给我们发数据的入口”,缺一不可。

二、WSDL 地址是怎么来的?为什么能自动生成?

你提到 “自己的 WSDL 地址是自动生成的”,这个理解是对的。WSDL 本质是 “接口说明书”,它的生成和部署密切相关:

  1. 我们先写代码定义接收逻辑:比如我们要接收医院的申请单,会写一个服务类(如AddRisAppBillService),定义好接收数据的方法和参数(比如申请单号、患者信息等)。
  2. 部署到服务器:将代码部署到服务器(比如 Tomcat),服务器会自动根据代码中的服务类和方法,生成对应的 WSDL “说明书”。
  3. 生成地址:服务器的 IP、端口(如 8080)、项目上下文路径(如 /webService)加上服务名(如 myService),再加上?wsdl,就构成了完整的 WSDL 地址。

医院提供的 WSDL 地址也是同样的道理:他们开发好服务代码并部署后,服务器自动生成 WSDL,供我们调用。

三、WebService 对接核心:代理类到底怎么用?

WebService 对接的关键是 “代理类”,很多人觉得它抽象,其实它的作用很简单:帮你搞定复杂的网络传输和数据格式转换,让你像调用本地方法一样调用远程服务

1. 代理类是怎么来的?

医院给我们 WSDL 地址后,我们可以用工具(如 Axis2、CXF)解析这个 WSDL,自动生成一批 Java 类 —— 这些就是 “代理类”。比如解析医院的HIPMessageServer方法后,会生成包含该方法的代理类,以及对应的请求参数类(如HIPMessageServerRequest)和响应类(如HIPMessageServerResponse)。

2. 代理类的作用:简化调用流程

没有代理类时,你需要手动处理网络连接、XML 打包、数据发送等复杂操作;有了代理类,这些工作全由它代劳。比如用代理类调用医院的HIPMessageServer方法,流程是这样的:

// 1. 创建代理类实例(自动连接医院的服务地址)
HIPMessageServerProxy proxy = new HIPMessageServerProxy();// 2. 构建请求参数:功能码(action)和XML数据(message)
String action = "MES0003"; // 闭环状态回传
String message = "<XML>...</XML>"; // 按医院接口文档构建的XML// 3. 调用代理类的方法(底层自动处理网络传输、XML发送)
HIPMessageServerResponse response = proxy.HIPMessageServer(action, message);// 4. 处理响应(代理类已自动解析返回的XML)
if ("0".equals(response.getRetCode())) {System.out.println("回传成功");
} else {System.out.println("回传失败:" + response.getRetMsg());
}

核心:你只需要关注 “传什么参数” 和 “怎么处理结果”,网络交互的细节全由代理类搞定。

3. 获取信息和回传信息的逻辑:大同小异

无论是getBookInfo(获取申请单信息)还是uploadResult(回传检查结果),用 WebService 对接的逻辑是一致的,差异仅在于 “发送的 XML 内容” 和 “功能码”:

  • 获取信息(如查询申请单):你需要构建一个包含 “查询条件” 的 XML(比如患者 ID、申请单号),指定功能码(比如医院定义的 “查询功能码”),通过代理类发送给医院。医院返回包含申请单详情的 XML,你解析后存入BookInfo实体类。

  • 回传信息(如闭环状态):你需要构建一个包含 “检查结果” 的 XML(比如患者 ID、检查值、状态),指定功能码(如 MES0003),通过代理类发送给医院。医院返回 “成功 / 失败” 的响应,你根据响应处理后续逻辑。

四、HTTP 联网和 WebService 联网有什么区别?

你之前提到过 HTTP 联网的代码(传 JSON),它和 WebService(传 XML,用代理类)是两种不同的联网方式,核心区别如下:

1. 医院需要提供什么?

  • WebService:只需要提供 WSDL 地址,里面已经包含了所有信息(方法名、参数、数据格式)。
  • HTTP:需要提供更详细的规则:
    • 接口 URL(如http://医院IP:端口/接口路径);
    • 请求方法(如 POST);
    • 请求头(如Content-Type: application/json);
    • 数据格式(如 JSON 的字段规范);
    • 响应格式(如返回 JSON 中的code代表成功 / 失败)。

2. 代码实现有什么不同?

  • WebService(用代理类):重点是 “解析 WSDL 生成代理类→调用代理方法→处理响应”,无需手动处理网络细节。

  • HTTP(用 HttpURLConnection 等):需手动处理所有步骤:

    // 1. 创建连接
    URL url = new URL("医院提供的HTTP地址");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 2. 设置请求信息
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type", "application/json");// 3. 发送JSON数据
    String json = "{\"patientId\":\"123\",\"type\":\"查询\"}";
    conn.getOutputStream().write(json.getBytes());// 4. 读取响应
    BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String response = reader.readLine();// 5. 解析JSON到BookInfo
    BookInfo bookInfo = parseJsonToBookInfo(response);
    

3. 什么时候用哪种方式?

  • 医院提供 WSDL 地址时,优先用WebService(代理类简化调用);
  • 医院只提供 HTTP 接口规则(URL、JSON 格式等)时,用HTTP 联网

五、常见问题总结

  1. 为什么获取信息和回传信息都需要 XML?XML 是 WebService 约定的数据格式:获取信息时,XML 是 “查询条件”(告诉医院查什么);回传时,XML 是 “结果数据”(告诉医院检查结果)。

  2. 代理类的方法都一样吗?方法名可能相同(比如都叫HIPMessageServer),但通过不同的action功能码和 XML 内容区分不同操作(查询 / 回传)。

  3. 我们的 WSDL 地址需要自己写吗?不需要。只要你写好接收医院数据的服务代码(如AddRisAppBillService),部署到服务器后,服务器会自动生成 WSDL 地址,你只需把这个地址提供给医院即可。

六、一句话总结

医院和我们的两个 WSDL 地址是 “双向通信的出入口”;WebService 的代理类是 “简化远程调用的工具人”;HTTP 联网则是 “更手动的直接通信方式”。无论用哪种方式,核心都是 “按对方的规则传数据,解析返回的结果”—— 理解了这一点,医院系统对接就清晰多了。

http://www.dtcms.com/a/536417.html

相关文章:

  • 【C++学习】对象特性--构造函数
  • 装修公司前十强郑州做网站优化
  • 绿色网站欣赏站点查询
  • 插件:@vitejs/plugin-basic-ssl
  • Docker使用详解:在ARM64嵌入式环境部署Python应用
  • 【微知】MAC笔记本如何重启tourchbar?(sudo pkill TouchBarServer)
  • Smartproxy API 代理 IP 提取指南——JSON-first 架构与参数化最佳实践
  • 统计过程能力指数在齿轮制造中的应用学习分享
  • 河北地矿建设集团官方网站昆山市网站建设
  • __金仓数据库平替MongoDB实战:制造业生产进度管理的国产化升级之路__
  • 电商设计就是网站设计吗乐清本地生活服务平台
  • html css js网页制作成品——似锦HTML+CSS网页设计(5页)附源码
  • 某教育大厂面试题解析:MySQL索引、Redis缓存、Dubbo负载均衡等
  • wordpress怎么加菜单阿里网站怎样做seo
  • 2025年损坏Excel文件修复工具推荐:一键恢复表格内容
  • 网站一直百度上搜不到是怎么回事素马杭州网站设计介绍
  • 基于 STM32 的智能水表流量计设计与实现 —— 数据采集与远程传输
  • 深度学习核心概念拆解:张量、模型、训练、推理
  • C++初阶 -- 模拟实现list
  • 开源Outline系统基础知识要点及避坑要点
  • 淘宝客云建站官网模板网pi
  • 中国糕点网页设计网站查工程建设不良记录免费的网站
  • redis-cluster集群配置部署
  • 整体设计 全面梳理复盘 之9 “相提并论的三者” :否则段三种主义 “保持 - 反对 - 保留” 表格化构建与原始逻辑对标
  • 第5章-虚拟机栈
  • 配置(1):samba的配置
  • web开发,在线%鲜花销售%管理系统,基于asp.net,webform,c#,sql server存储过程
  • [作品集]-容易宝
  • 数字校园建设专题网站自动化项目外包网
  • python-docx样式