Java 客户端调用 WebService 接口的一种方式

news2024/12/27 15:33:47

文章目录

    • 1. SoapUI 测试 WebService 接口
    • 2. Java 访问 WebService 接口

1. SoapUI 测试 WebService 接口

  通过SoapUI创建一个SOAP Project;
  项目名称自定义,WSDL地址维护WebService接口地址。点击OK即可

在这里插入图片描述

  项目创建完成后,展开WebService项,可以看到具体的接口,打开接口下的Request,右侧面板Form标签下可以清晰的看到请求入参,点击Submit请求按钮可以看到Overview标签下的响应结果。
在这里插入图片描述
  XML标签下的请求报文和响应报文

<!-- 请求报文 -->
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.qyythpt.jzkj.com">
   <soapenv:Header/>
   <soapenv:Body>
      <web:sendMessage>
         <!--Optional:-->
         
      <xmlStr>123456</xmlStr></web:sendMessage>
   </soapenv:Body>
</soapenv:Envelope>

<!-- 响应报文 -->
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:sendMessageResponse xmlns:ns2="http://webservice.qyythpt.jzkj.com">
         <String><![CDATA[<resident>1695087972825</resident>
<rescode>0</rescode>
<resmsg>数据处理错误!</resmsg>]]></String>
      </ns2:sendMessageResponse>
   </soap:Body>
</soap:Envelope>

2. Java 访问 WebService 接口

  WebService 调用有多种方式,此处以 HttpURLConnection 调用为例。
  接口请求封装,仅需要传入接口需要的入参和接口地址。
  接口响应结果,解析成Map对象返回。如下所示

/**
     * WebService推送报文封装请求推送
     * WebService 接口地址为 http://{ip}:{port}/services/TraderService?wsdl
     * @param webServicePushUrl 此处 webServicePushUrl 为 http://{ip}:{port}/services/TraderService 
     * @param xmlStr 接口入参
     * @return
     */
    private Map<String, Object> webServicePush(String webServicePushUrl, String xmlStr) {
        Map<String, Object> resultMap = new HashMap<>(2);
        resultMap.put("code", "0");
        resultMap.put("msg", "推送失败!");

        InputStream is = null;
        InputStreamReader isr = null;
        BufferedReader br = null;
        OutputStream os = null;
        try {
            //第一步:创建服务地址,不是WSDL地址
            URL url = new URL(webServicePushUrl);
            //2:打开到服务地址的一个连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //3:设置连接参数
            //3.1设置发送方式:POST必须大写
            connection.setRequestMethod("POST");
            //3.2设置数据格式:Content-type
            connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
            //3.3设置输入输出,新创建的connection默认是没有读写权限的,
            connection.setDoInput(true);
            connection.setDoOutput(true);
            //4:组织SOAP协议数据,发送给服务端;报文参考SoapUI测试工具的XML请求报文
            String soapXML = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://webservice.qyythpt.jzkj.com\">" +
                    "<soapenv:Header/>" +
                    "<soapenv:Body>" +
                    "<web:sendMessage>" +
                    "<xmlStr><![CDATA[" +
                    xmlStr +
                    "]]></xmlStr></web:sendMessage>" +
                    "</soapenv:Body>" +
                    "</soapenv:Envelope>";
            logger.warn("[WebService]:推送请求{}", soapXML);
            os = connection.getOutputStream();
            os.write(soapXML.getBytes());
            //5:接收服务端的响应
            int responseCode = connection.getResponseCode();
            if(200 == responseCode){//表示服务端响应成功
                is = connection.getInputStream();
                isr = new InputStreamReader(is);
                br = new BufferedReader(isr);

                StringBuilder sb = new StringBuilder();
                String temp = null;
                while(null != (temp = br.readLine())){
                    sb.append(temp);
                }
                logger.warn("[WebService]:推送结果{}", sb);
                Map<String, Map> bodyMap = XmlUtils.xmlTOMap(sb.toString());
                Map<String, Map> sendMessageResponseMap = bodyMap.get("Body");
                Map<String, String> resultStringMap = sendMessageResponseMap.get("sendMessageResponse");
                String stringXML = resultStringMap.get("String");
                stringXML = "<root>" + stringXML + "</root>";
                Map<String, String> stringMap = XmlUtils.xmlTOMap(stringXML);
                // String -> <resident>1694505193442</resident><rescode>1</rescode><resmsg>ok</resmsg>
                // String -> <resident>1678862927956</resident><rescode>0</rescode><resmsg>数据处理错误!</resmsg>
                // 0失败,1成功
                resultMap.put("code", stringMap.get("rescode"));
                resultMap.put("msg", stringMap.get("resmsg"));
            }
        } catch (Exception e) {
            logger.error("[WebService]推送异常", e);
        } finally {
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if (null != isr) {
                try {
                    isr.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if (null != os) {
                try {
                    os.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
        return resultMap;
    }

更多请求方式可参考文档调用webservice服务方式总结
Powered By niaonao

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1075851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

孙哥分布式VIP课程

杜绝一两门课程割韭菜&#xff0c;杜绝引流之后换老师&#xff0c;全行业唯一支持全套试听的良心课程。 你目前学习提高跳槽是否有如下痛点 1、网上开源课程“琳琅满目”&#xff0c;学完后还是掌握的不够扎实&#xff0c;理解的不够透彻&#xff0c;学无所成2、学了若干知识…

浏览器插件开发爬虫记录

常用爬虫有各种各样的反爬限制&#xff0c;而如果是小数据量并且该网站反爬手段非常厉害的前提下&#xff0c;可以考虑使用浏览器插件作为爬虫手段 基本代码来源于这位博主分享的插件代码&#xff0c; 主要在他的基础上加了 请求代理、管理面板、脚本注入拦截到的请求数据和管…

Windows服务器获取本地文件夹文件

1、直接复制粘贴 通过远程连接到这个服务器&#xff0c;然后本机到服务器能直接粘贴复制文件上去 注&#xff1a;首先服务器要先开启远程桌面哦 2、Windows远程连接 有的不能复制粘贴的&#xff0c;可以用第二种方法。 ①、windowsR,输入mstsc ②、点击“选项”按钮&#x…

linux中Crontab定时参数

注&#xff1a;图片转载于 点我进入图片出处 * * * * * sh /data/var/test.sh >> test_crontab_log.log分钟 0~59 0表示没分周 小时 0~23 0表示每小时 天 1~31 *表示每天 月 1~12 *表示每月 周 0~7 */0/7表示每周

pytorch实现经典神经网络:VGG16模型之初探

文章链接 https://blog.csdn.net/weixin_44791964/article/details/102585038?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169675238616800211588158%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id16967523861680…

谷歌 Chrome 浏览器正推进“追踪保护”功能

导读近日消息&#xff0c;根据国外科技媒体 Windows Latest 报道&#xff0c;谷歌计划在 Chrome 浏览器中推进“追踪保护”&#xff08;Tracking Protection&#xff09;功能&#xff0c;整合浏览器现有隐私功能&#xff0c;保护用户被网站跟踪。 根据一项 Chromium 提案&…

Java List 中存不同的数据类型

在最近的实践中&#xff0c;有人突然问了一个问题&#xff1a; 在 Java 的 List 中可以存不同的数据类型吗&#xff1f; 这个问题突然给问到了&#xff0c;我们都知道 Java 中的 List 中存的是对象&#xff0c;通常我们定义都会这样的定义&#xff1a; List<String> t…

ycb数据集筛选

tain数据集&#xff1a; 03. 04. 05. 06. 07. 08. 09. 10. 11. 13 14 15peach桃子&#xff1a; 16 17orange橘子&#xff1a; 18plum李子&#xff1a; 21 24 26sponge&#xff1a; 29 33 35 37 40large marker 43.phillips screwdriver 48 52 55 56…

零基础教程:使用YOLOV7训练VisDrone数据集

1.源码地址&#xff1a; https://github.com/WongKinYiu/yolov7 下载之后解压 2.环境准备 1.用pycharm打开项目文件&#xff0c;选择自己的虚拟环境 2.下载项目所需要的包和权重文件 打开Terminal 输入以下命令&#xff1a; pip install -r requirements.txt 下载预训练权…

用Python开发QQ机器人详解

前言 虽然该文最终是达到以python开发mirai机器人的目的&#xff0c;但起步教程&#xff0c;尤其是环境配置上仍然有大量的相同操作&#xff0c;对其他编程语言仍有借鉴之处 假设你已经安装好了 Java、Python等运行必须的环境 mirai生态 mirai官方生态文档 要使用mirai开发Q…

第四届厦门国际银行数创金融杯建模大赛火热进行中!丰厚奖励等你来拿!

第四届厦门国际银行数创金融杯建模大赛火热进行中&#xff01;厦门国际银行联合厦门大学数据挖掘中心诚邀您一起用科技的力量&#xff0c;探索数据的奥秘。 本届大赛以实际金融业务场景中的文本识别作为主题&#xff0c;设置了高达38万元的丰厚奖金以及竞赛获奖证书&#xff0c…

pdf怎么转成jpg图片格式

pdf怎么转成jpg图片格式&#xff1f;对于大家平时在工作或者生活中的图片使用习惯&#xff0c;经常需要将各种格式的文件转换成易于浏览和使用的JPG格式图片以便保存。如今&#xff0c;因为pdf文件具有更强的稳定性和设备兼容性&#xff0c;PDF文件在平时的电脑使用过程中可以说…

AQS面试题

更多面试资料请添加wx&#xff1a;suns45 ———Java的AQS——— 1、AQS的理解 AQS是一个锁框架&#xff0c;提供了扩展地方 当多个线程抢锁时&#xff0c;获取不到锁的线程&#xff0c;AQS会自动管理 AQS是同步队列条件队列 AQS分为4个时机&#xff0c;获取锁&#xff0c…

国产化技术探究达梦8数据库搭建一主一从双机热备守护Data Watch集群搭建实战

国产化技术探究达梦8数据库搭建一主一从双机热备守护集群搭建实战 一、环境说明 服务器类型IP地址操作系统数据库实例名称主机172.18.21.144centos7DMSERVER备机172.18.21.147centos7DMSERVER2 参数主库备库实例名称DMSERVERDMSERVER 2IP172.18.21.144172.18.21.147OGUID453…

有趣的数学 积分符号∫ (integration)简述

1、简述 积分是微积分的一个主要部分。它是求和概念的延伸。事实上&#xff0c;积分符号源自一个拉长的字母S&#xff0c;最初由莱布尼茨使用&#xff08;也有人说是牛顿&#xff09;&#xff0c;代表Summa&#xff0c;在拉丁语中意为“和”&#xff0c;对切片进行求和的想法。…

计算机的体系与结构

文章目录 前言一、冯诺依曼体系二、现代计算机的结构总结 前言 今天给大家介绍计算机的体系和结构&#xff0c;分为两个板块&#xff1a;冯诺依曼体系和现代计算机的结构。 一、冯诺依曼体系 冯诺依曼体系是将程序指令和数据一起存储的计算机设计概念结构。 冯诺依曼体系可以…

基于LSTM-Adaboost的电力负荷预测的MATLAB程序

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 主要内容&#xff1a; LSTM-AdaBoost负荷预测模型先通过 AdaBoost集成算法串行训练多个基学习器并计算每个基学习 器的权重系数,接着将各个基学习器的预测结果进行线性组合,生成最终的预测结果。代码中的LST…

MySQL之MHA集群

MHA概述 什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点故障的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换…

hbba网站下载国家标准/行业标准的方法

hbba网站是不提供下载按钮并且不支持右键的&#xff0c;那么如何下载呢&#xff1f; 1、首先看一下pdf有多少页&#xff0c;一般标准介绍上有写。 2、使用edge或google浏览器打开pdf预览页面&#xff0c;打开开发者模式&#xff0c;用小箭头指向第一页&#xff0c;这样就获取到…

数据库引擎选择指南:MyISM和InnoDB哪个更适合你?

亲爱的小伙伴们&#xff0c;大家好&#xff01;我是小米&#xff0c;今天我要和大家一起来聊一聊两个数据库引擎&#xff0c;分别是MyISM和InnoDB。这两个数据库引擎在MySQL中都扮演着非常重要的角色&#xff0c;了解它们的特点和区别对于我们理解数据库的工作原理和性能优化非…