您的位置:首页 > 综合百科 > 正文

java 调用 webservice 接口 客户端调用方式详解

发布时间:2026-11-08 15:34:21  编辑:  来源:

导读 Java 调用 WebService 接口,本质就是按照 SOAP 协议,通过 XML 格式发送请求报文到远端服务地址,拿到 XML 响应之后再解析成 Ja

Java 调用 WebService 接口,本质就是按照 SOAP 协议,通过 XML 格式发送请求报文到远端服务地址,拿到 XML 响应之后再解析成 Java 对象,传统 WebService 一般基于 WSDL 描述文件,也就是服务端会提供 wsdl 地址,里面定义了服务名称、方法、参数、返回值,Java 主流有三种调用方案,JDK 原生 JAX-WS、CXF 框架、Axis,现在老项目对接政企、银行、第三方系统最常用的是 CXF,JDK 自带 JAX-WS 不需要额外引入第三方包,适合简单调用,但是复杂报文、自定义头、证书鉴权的时候不如 CXF 灵活,很多初学者容易混淆 WebService 和普通 REST 接口,WebService 是 SOAP+XML,不是 JSON,请求报文是 XML,这点是核心区别,调用之前第一步必须拿到对方提供的 wsdl 文档或者 wsdl 访问地址,确认命名空间、方法名、参数名称。

三种调用方案对比

方案特点适用场景
JAX-WS JDK 原生JDK 自带,无需第三方依赖,使用 wsimport 生成客户端代码简单接口,不想引入额外 jar 包
Apache CXF功能强大,支持 SOAP1.1/1.2,支持自定义 Header、证书、超时、拦截器,企业项目主流复杂政企银行对接,带鉴权头
Axis1 Axis2老牌框架,现在新项目很少使用,老遗留系统才会见到历史旧项目维护

方案一 JAX-WS wsimport 生成客户端代码

执行步骤

第一步 使用 JDK 自带 wsimport 命令,根据 wsdl 地址生成 Java 客户端类

wsimport -keep http://xxx/xxx?wsdl

第二步 生成之后会得到 Service 类和 Port 接口类

第三步 代码里面实例化 Service 对象,获取 port 端口对象,直接调用对应的业务方法

优点 官方原生,无额外 jar,上手简单

缺点 对自定义 SOAPHeader、证书、特殊编码支持比较麻烦,扩展能力有限

方案二 Apache CXF 调用(企业推荐)

核心依赖 maven 引入 cxf 相关依赖

两种调用模式

1 动态客户端 DynamicClientFactory,不需要提前根据 wsdl 生成代码,运行时动态调用,适合临时测试、动态接口

2 生成 stub 客户端,和 wsimport 类似,提前生成 port 接口,代码调用更规范

重点扩展能力

自定义 SOAPHeader 很多 WebService 需要在报文头部加入账号令牌鉴权

设置连接超时、读取超时

支持 https 证书校验,忽略证书或者导入信任证书

处理中文乱码,指定编码 UTF-8

添加拦截器,打印完整请求和响应 XML 报文,排查问题必备

高频踩坑问题清单

中文乱码 报文编码不是 UTF-8,需要统一设置编码

SOAPHeader 鉴权失败 命名空间写错,或者头节点名称和服务端要求不一致

超时无响应 需要手动设置 connectTimeout receiveTimeout

https 证书报错 服务端是自签名证书,客户端信任校验失败

wsdl 访问不通 网络防火墙、内网权限,需要确认可以浏览器打开 wsdl 地址

命名空间 namespace 错误 调用报错,参数无法识别,这个是最常见错误

补充深度知识点

WebService 是 SOAP 协议,属于老一代跨系统集成方案,现在新系统大多改用 RESTful 接口,但是银行、政务、国企老系统仍然大量保留 WebService,所以 Java 后端面试和项目经常会遇到对接需求。

调用之后可以开启 CXF 日志拦截器,把原始请求 XML 和返回 XML 打印出来,定位参数格式错误,这个调试技巧非常实用。

【常见问题】

问题 1 java 调用 webservice 接口 是传 JSON 吗

回答 1 java 调用 webservice 接口,标准 SOAP WebService 使用 XML 报文,不是 JSON,这点和普通 REST 接口不一样。

问题 2 java 调用 webservice 接口 wsimport 是什么作用

回答 2 java 调用 webservice 接口,wsimport 是 JDK 自带工具,根据 wsdl 地址自动生成客户端 stub 代码,不用手写 XML 报文。

问题 3 java 调用 webservice 接口 企业项目为什么优先 CXF

回答 3 java 调用 webservice 接口,CXF 支持自定义 SOAPHeader、超时、证书、拦截日志,复杂鉴权场景比 JDK 原生 JAX-WS 更灵活,是政企对接主流选择。

问题 4 java 调用 webservice 接口 中文乱码怎么处理

回答 4 java 调用 webservice 接口中文乱码,一般是编码不统一,客户端和服务端统一设置 UTF-8 编码,同时检查报文头编码声明。

【免责申明】

本文 java 调用 webservice 接口相关内容基于 JAX-WS 与 Apache CXF 公开技术文档整理,不同服务端版本 SOAP 规范存在差异,正式对接请以对方 WSDL 文档规范为准,内容仅作为开发学习参考。

版权声明: 本站若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢您的支持与理解。转载文章是出于传递更多信息之目的。
版权所有: 阜新生活网 ·(2019-2026)