我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java使用Hutool调用WebService接口详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java使用Hutool调用WebService接口详解

提示:本文显示baidu.com,皆为脱敏用,并非真正地址。

目录

前言

一、WebService是什么?

二、使用步骤

1.验证链接。

2.Soap调用测试

3.获取需要用到的数据

4.Hutool工具类调用

三、示例

1.单个入参

2.多个入参

3.动态地址

4.多命名空间

总结


前言

大家WebService接口还在使用生成的类去实现调用的吗?

其实Hutool的WebService工具很厉害,但是文档写的不太清楚,或者示例不够多,我主要做医疗业务,对接方基本都是WebService接口,刚开始使用hutool的时候确实花费了挺长时间研究,最终失败告终,奈何业务多,有丰富的机会去尝试,现在基本啥格式的都可以克服了。


一、WebService是什么?

​ Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。

二、使用步骤

1.验证链接。

拿到三方提供的链接后,需要进行验证下 

例如:第三方提供链接:http://localhost:8080/XXX/services/xxxxxxImpl

 需要改成:第三方提供链接:http://localhost:8080/XXX/services/xxxxxxImpl?wsdl

然后用浏览器打开能像下图展示即可:

2.Soap调用测试

使用SoapUI进行接口调用一次(没有SoapUI的自己去安装下)

如下图进行创建

 打开,选择要调用的接口,点开request后,后边会出现一个框,里面有调用入参和请求地址

3.获取需要用到的数据

  1. 接口请求地址:http://localhost:8080/xxxxx/services/xxxxServiceImpl
  2. 请求头:SOAPAction:""
  3. 请求方法/接口:ser:ReceiveDataAll
  4. 前缀命名空间:http://service.mocire.baidu.com/
  5. 入参:
1]]>

4.Hutool工具类调用

针对上面的数据,我这边写好工具类,先上干货,然后一一为大家讲解:

package com.ceshi;import cn.hutool.core.lang.UUID;import cn.hutool.core.util.XmlUtil;import cn.hutool.http.webservice.SoapClient;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.Map;public class a {    private static Logger log = LoggerFactory.getLogger(a.class);    public static void main(String[] args) {        StringBuilder params = new StringBuilder("");        params.append("0]]>");        request("ReceiveDataAll",params.toString());    }        private static Map request(String method, String params){        String result = "";        String requestId = UUID.randomUUID().toString();        try{            String url = "http://localhost:8080/xxxxxx/services/xxxxServiceImpl";            SoapClient client = SoapClient.create(url)                    .header("SOAPAction","")                    // 设置要请求的方法,此接口方法前缀为web,传入对应的命名空间                    .setMethod("ser:"+method, "http://service.mocire.baidu.com/")                    .setParam("message",params,false);//此处写true,会自动填写命名空间            log.info("[请求ID:{}]CSDN测试方法字符串接口:{},入参:{}",requestId,url,client.getMsgStr(true));            // 发送请求,参数true表示返回一个格式化后的XML内容            // 返回内容为XML字符串,可以配合XmlUtil解析这个响应            result = client.send(false);            log.info("[请求ID:{}]CSDN测试方法字符串出参:{}",requestId,result);            if(result.contains(""));            }else{                result = result.substring(result.indexOf("Result>")+7,result.indexOf("} resultMap = XmlUtil.xmlToMap(result);            return resultMap;        }catch (Exception ex){            log.error("[请求ID:{}]CSDN测试方法字符串出现异常,入参:{},出参:{},{}",requestId,params,result,ex);            throw ex;        }    }}
  • 接口地址:好理解,就放在create()方法入参里,如果接口地址动态变动,可以请求方法加入参:接口,然后这块随之变动
  • 请求头:header(),左边填写SOAPAction,右边由于我这边是空的,我就默认留空,实际按照你们的soapui上显示的填写
  • 请求方法:setMethod(),左边填写带前缀的请求方法,右边填写对应的前缀命名空间
  • 入参:setParam(),填写字段名,入参(我这边就一个入参,里面包含的是一个xml字符串),是否自动填写前缀,我这边这个字段是不带前缀的,所以填写false,大家按照自己的来.

如果是多个入参,可以选用setParams,写入一个map,键值对,然后统一配置是否添加前缀

  • 获取生成后的入参:client.getMsgStr(true),此处参数是否是格式化后的参数,大家可以自己测试。

我这边只是拿这个接口做了一个测试,下面会给大家整理下我这边遇到的各种不通类型的请求信息和工具类

三、示例

1.单个入参

请求数据:

接口地址:http://localhost:8080/xxxxxx/services/xxxxServiceImpl请求头:SOAPAction: ""                              1]]>         

请求方法:

public static void main(String[] args) {        StringBuilder params = new StringBuilder("");        params.append("0]]>");        request("ReceiveDataAll",params.toString());    }        private static Map request(String method, String params){        String result = "";        String requestId = UUID.randomUUID().toString();        try{            String url = "http://localhost:8080/xxxxxx/services/xxxxServiceImpl";            SoapClient client = SoapClient.create(url)                    .header("SOAPAction","")                    // 设置要请求的方法,此接口方法前缀为web,传入对应的命名空间                    .setMethod("ser:"+method, "http://service.mocire.baidu.com/")                    .setParam("message",params,false);//此处写true,会自动填写命名空间            log.info("[请求ID:{}]CSDN测试方法字符串接口:{},入参:{}",requestId,url,client.getMsgStr(true));            // 发送请求,参数true表示返回一个格式化后的XML内容            // 返回内容为XML字符串,可以配合XmlUtil解析这个响应            result = client.send(false);            log.info("[请求ID:{}]CSDN测试方法字符串出参:{}",requestId,result);            if(result.contains(""));            }else{                result = result.substring(result.indexOf("Result>")+7,result.indexOf("} resultMap = XmlUtil.xmlToMap(result);            return resultMap;        }catch (Exception ex){            log.error("[请求ID:{}]CSDN测试方法字符串出现异常,入参:{},出参:{},{}",requestId,params,result,ex);            throw ex;        }    }

2.多个入参

请求数据:

接口地址:http://localhost:8080/xxxxxx/services/xxxxServiceImpl请求头:SOAPAction: "http://tempuri.org/GetThirdAppData"                     1000001         1         11000001]]>         

请求示例:

public static Map write(String param){        String result = "";        String requestId = UUID.randomUUID().toString();        try{            String hospitalNo = "1";            String patientId = "1000001";            //拼接strXML            Map paramMap = new HashMap<>();            paramMap.put("HOSPITAL_NO", hospitalNo);//医院编码            paramMap.put("PATIENT_ID",patientId);//患者ID            String paramStr = "";            //拼接外层入参            Map params = new HashMap<>();            params.put("strPatientId",patientId);            params.put("strHospitalNo",hospitalNo);            params.put("strXML",paramStr);            //新建客户端            String url = "";            SoapClient client = SoapClient.create("http://localhost:8080/xxxxxx/services/xxxxServiceImpl")                    .header("SOAPAction","http://tempuri.org/GetThirdAppData")                    // 设置要请求的方法,此接口方法前缀为web,传入对应的命名空间                    .setMethod("tem:GetThirdAppData", "http://tempuri.org/")                    .setParams(params,true);            log.info("[请求ID:{}]CSDN测试方法字符串接口:{},入参:{}",requestId,url,client.getMsgStr(true));            // 发送请求,参数true表示返回一个格式化后的XML内容            // 返回内容为XML字符串,可以配合XmlUtil解析这个响应            result = client.send(false);            log.info("[请求ID:{}]CSDN测试方法字符串出参:{}",requestId,result);            if(result.contains(""));            }else{                result = result.substring(result.indexOf("Result>")+7,result.indexOf("} resultMap = XmlUtil.xmlToMap(result);            return resultMap;        }catch (Exception ex){            log.error("[请求ID:{}]CSDN测试方法字符串出现异常出参:{},{}",requestId,result,ex);            throw ex;        }    }

3.动态地址

请求数据:

接口地址:http://localhost:8080/xxxxxx/services/xxxxServiceImpl.cls?CfgItem=A101查询患者信息接口请求头:SOAPAction: "http://baidu.com/BS.XmlService.Send"                     0]]>         

请求示例:

public static void main(String[] args) {        StringBuilder params = new StringBuilder("");        params.append("0]]>");        request("A101查询患者信息接口",params.toString());    }        private static Map request(String method, String params){        String result = "";        String requestId = UUID.randomUUID().toString();        try{            String url = "http://localhost:8080/xxxxxx/services/xxxxServiceImpl.cls?CfgItem="+method;            SoapClient client = SoapClient.create(url)                    .header("SOAPAction","http://baidu.com/BS.XmlService.Send")                    // 设置要请求的方法,此接口方法前缀为web,传入对应的命名空间                    .setMethod("bjg:Send", "http://baidu.com")                    .setParam("pInput",params,true);            log.info("[请求ID:{}]CSDN请求方法字符串接口:{},入参:{}",requestId,url,client.getMsgStr(true));            // 发送请求,参数true表示返回一个格式化后的XML内容            // 返回内容为XML字符串,可以配合XmlUtil解析这个响应            result = client.send(false);            log.info("[请求ID:{}]CSDN请求方法字符串出参:{}",requestId,result);            if(result.contains(""));            }else{                result = result.substring(result.indexOf("Result>")+7,result.indexOf("} resultMap = XmlUtil.xmlToMap(result);            return resultMap;        }catch (Exception ex){            log.error("[请求ID:{}]CSDN请求方法字符串出现异常,接口:{},入参:{},出参:{},{}",requestId,method,params,result,ex);            throw ex;        }    }

4.多命名空间

请求数据:

接口地址:http://localhost:8080/xxxxxx/services/xxxxServiceImpl.cls请求头:SOAPAction: "http://tempuri.org/ITJTCService/SubmitReservationExam"                      111111111111            

请求示例:

private static Map request(String params) throws SOAPException {        String result = "";        String requestId = UUID.randomUUID().toString();        try{            //新建客户端            String url = "http://localhost:8080/xxxxxx/services/xxxxServiceImpl";            SoapClient client = SoapClient.create(url)                    .header("SOAPAction","http://tempuri.org/ITJTCService/SubmitReservationExam")                    // 设置要请求的方法,此接口方法前缀为web,传入对应的命名空间                    .setMethod("tem:SubmitReservationExam","http://tempuri.org/");            //修改一级和二级前缀为tem            SOAPBodyElement soapBodyElement = client.getMethodEle();            soapBodyElement.getParentElement().getParentElement().addNamespaceDeclaration("tem","http://tempuri.org/").addNamespaceDeclaration("ly","http://schemas.datacontract.org/2004/07/LY.WebService.Service.Models");            SOAPElement soapElement = soapBodyElement.addChildElement(new QName("http://tempuri.org/","info","tem"));            soapElement.addChildElement("CardNo","ly").setValue("111111111111111111");            log.info("[请求ID:{}]CSDN测试方法字符串接口:{},入参:{}",requestId,url,client.getMsgStr(true));            // 发送请求,参数true表示返回一个格式化后的XML内容            // 返回内容为XML字符串,可以配合XmlUtil解析这个响应            result = client.send(false);            log.info("[请求ID:{}]CSDN测试方法字符串出参:{}",requestId,result);            if(result.contains(""));            }else{                result = result.substring(result.indexOf("Result>")+7,result.indexOf("} resultMap = XmlUtil.xmlToMap(result);            return resultMap;        }catch (Exception ex){            log.error("[请求ID:{}]CSDN请求方法字符串出现异常,入参:{},出参:{},{}",requestId,params,result);            throw ex;        }    }

此入参类型方法特别难调用,之前反馈过hutool,hutool暂不打算深入优化,我这边提供的解决方案hutool推荐使用。


总结

其实大部分入参类型都包含在这里面了,如果还有新的,无法使用的可以将wsdl页面右键查看源文件把html代码发给我,我这边研究下,有啥问题也欢迎在下面提问,我这边看见就会回答的。

来源地址:https://blog.csdn.net/zpwvip/article/details/127487596

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java使用Hutool调用WebService接口详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java webservice接口如何调用

要调用Java Web服务接口,可以按照以下步骤进行操作:首先,确保你已经有一个Java Web服务接口的URL地址。使用Java的SOAP客户端库来调用Web服务接口。常用的SOAP客户端库有Apache CXF、Axis等。创建一个
2023-10-23

java如何调用webservice接口

在Java中调用Web服务接口,可以使用Java的SOAP客户端库、REST客户端库或者HTTP客户端库。1. 使用Java的SOAP客户端库调用Web服务接口:- 首先,要生成Web服务客户端代码。可以使用Java的wsimport命令或
2023-09-13

Python调用webservice接口

from suds.client import Clienturl = "http://218.90.174.179:50038/JmYfjzService/clientRegisterService?WSDL"test = Client(
2023-01-31

webservice接口如何调用

调用webservice接口需要以下步骤:1. 确定webservice的地址:通过查看webservice的文档或联系webservice提供方获取webservice的地址。2. 创建SOAP消息:使用SOAP协议发送请求和接收响应。S
2023-08-22

Eclipse发布WebService和调用WebService接口

要发布WebService,您需要遵循以下步骤:1. 创建一个Java项目,并将其导入到Eclipse中。2. 在项目中创建一个类,并使用@WebService注释将其标记为WebService。3. 在类中定义您想要公开的方法,并使用@W
2023-09-08

如何调用webservice接口

如何调用webservice接口,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。调用方法:首先选中“项目”选项卡,点击鼠标右键,在弹出的右键菜单中选择“new”-“other
2023-06-20

webservice接口怎么调用

调用WebService接口有多种方法,下面以Java语言为例进行说明:使用JAX-WS(Java API for XML Web Services):JAX-WS是Java官方提供的用于开发和调用Web服务的API。首先需要根据WebSe
webservice接口怎么调用
2024-02-29

SpringBoot如何使用axis调用webservice接口

本篇内容介绍了“SpringBoot如何使用axis调用webservice接口”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!WebServ
2023-07-02

java调用webService接口的代码实现

本文主要介绍了java调用webService接口的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-01

pb怎么调用webservice接口

调用WebService接口可以通过以下步骤进行:导入pbwebservice.pbl库文件:在PowerBuilder中,可以将WebService相关的功能代码封装在一个库文件(.pbl)中,然后在需要的应用程序中导入该库文件。通过导入
pb怎么调用webservice接口
2023-10-28

c#怎么调用webservice接口

要调用Web服务接口,首先需要添加对Web服务的引用。在Visual Studio中,右键单击项目,选择“添加”>“引用”。在“引用管理器”对话框中,选择“浏览”选项卡。浏览到Web服务的URL,并选择对应的WSDL文件。单击“添加引
c#怎么调用webservice接口
2023-10-30

spring boot应用调用webservice接口

文章目录 概述一、Web Services是什么?二、使用步骤1.引入依赖2.创建配置类,根据接口路径生成Client 交给Spring 管理3.测试Web Services接口调用4.排错 总结 概述 在早期的系统中,通
2023-08-19

java调用webservice接口的方法有哪些

Java调用WebService接口的方法主要有以下几种:1. 使用JAX-WS(Java API for XML Web Services):JAX-WS是Java EE的一部分,它提供了一种简单的方式来创建和调用Web服务。可以使用ws
2023-08-15

如何使用axis调用WebService及Java WebService调用工具类

Axis是一个基于Java的Web服务框架,可以用来调用Web服务接口,下面这篇文章主要给大家介绍了关于如何使用axis调用WebService及Java WebService调用工具类的相关资料,需要的朋友可以参考下
2023-05-17

webservice接口调用方式有哪些

WebService接口调用方式有以下几种:1. SOAP调用方式:使用Simple Object Access Protocol (SOAP)作为通信协议,通过发送XML格式的消息请求和接收响应来进行调用。2. RESTful调用方式:使
2023-09-21

Java调用CXF WebService接口的两种方式实例

方式一:使用CXF提供的工具生成客户端代码。1. 在项目中添加CXF的依赖。2. 使用CXF提供的命令行工具生成客户端代码,命令如下:```wsdl2java -d -p ```其中,``为生成的代码存放的目录,``为生成的代码所在的包
2023-09-16

android调用webservice接口获取信息

我的有一篇博客上讲了如何基于CXF搭建webservice,service层的接口会被部署到tomcat上,这一篇我就讲一下如何在安卓中调用这些接口传递参数。1.在lib中放入ksoap2的jar包并导入2.在xml 配置文件中加入:
2023-05-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录