Java发起Soap请求

news2024/12/23 13:46:56

在这里插入图片描述

目录

  • 1.前言
  • 2.请求报文格式
    • 2.1不带表头的请求格式
    • 2.2带表头的请求格式
  • 3 请求代码实例
    • 3.1解析Soap返回的XML,提取需要的元素
  • 参考


文章所属专区 超链接


1.前言

SOAP请求(Simple Object Access Protocol,简单对象访问协议)是HTTP POST的一个专用版本,遵循一种特殊的XML消息格式,Content-type设置为:text/xml ,任何数据都可以XML化。

SOAP:简单对象访问协议。SOAP是一种轻量的,简单的,基于XML的协议,它被设计成在web上交换结构化的和固化的信息。SOAP可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。

2.请求报文格式

在使用SOAP请求时,我们需要明确请求的Method,即要请求的Web服务所提供的方法名,不同的Web服务API会提供不同的方法名,具体使用时需要根据API文档进行查

2.1不带表头的请求格式

 <?xml version="1.0" encoding="UTF-8"?>
 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.com">
   <SOAP-ENV:Body>
      <ns1:getWeather>
         <ns1:city>Beijing</ns1:city>
      </ns1:getWeather>
   </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>

2.2带表头的请求格式

 <?xml version="1.0" encoding="UTF-8"?>
 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.com">
   <SOAP-ENV:Header>
      <ns1:Auth>
         <ns1:Username>testUser</ns1:Username>
         <ns1:Password>testPassword</ns1:Password>
      </ns1:Auth>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      <ns1:getUserData>
         <ns1:userId>12345</ns1:userId>
      </ns1:getUserData>
   </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>

3 请求代码实例

   public String getUrlBySoap(String token,String appKey,String xmlStrSM4) {
        StringBuilder result = new StringBuilder();
        String resultUrl = "";
        OutputStream out = null;
        BufferedReader in = null;
        //需要传的参数
        //String[] pointNames = {"chang","tiao","rap","basketball"};
        //拼接请求报文的方法
        String soap =  buildXML(token,appKey,xmlStrSM4).toString();
        try {
            URL url = new URL(evaluation_url);
            URLConnection connection = url.openConnection();
            HttpURLConnection httpConn = (HttpURLConnection) connection;
            byte[] soapBytes = soap.getBytes("ISO-8859-1");
            httpConn.setRequestProperty( "Content-Length",String.valueOf( soapBytes.length ) );
            httpConn.setRequestProperty("Content-Type","text/xml; charset=utf-8");
            httpConn.setRequestProperty("soapaction","http://tempuri.org/WcfDataProxy/GetPoints");//重点中的重点,不加就500。注意:soapaction对应的值不固定,具体值看你的请求。
            httpConn.setRequestMethod( "POST" );
            httpConn.setDoOutput(true);
            httpConn.setDoInput(true);
            
            out = httpConn.getOutputStream();
            out.write( soapBytes );
            int responseCode = httpConn.getResponseCode();
            if(responseCode == 200){
                in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "utf-8"));

                //把响应回来的报文拼接为字符串
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    result.append(inputLine);
                }
                out.close();
                in.close();

                //报文转成doc对象
                Document doc = DocumentHelper.parseText(result.toString());
                //获取根元素,准备递归解析这个XML树
                Element root = doc.getRootElement();
                Map<String, String> map = new HashMap<String, String>();
                //存放叶子节点数据
                List<Map<String, String>> lists = new ArrayList<Map<String, String>>();
                //获取叶子节点的方法
                String leafNode = "";
                leafNode = getCode(root);
                  
 
                if(leafNode != null && leafNode != ""){
                    resultUrl = getUrlByDom4j(leafNode);
                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }  catch (ParseException e) {
            e.printStackTrace();
        } catch (org.dom4j.DocumentException e) {
            e.printStackTrace();
        } finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return resultUrl;
    }

3.1解析Soap返回的XML,提取需要的元素

    /**
     * 找到soap的xml报文的叶子节点的数据
     * @param root
     */
    public String getCode(Element root) throws DocumentException {
        String result = "";
        if (root.elements() != null) {

            //如果当前跟节点有子节点,找到子节点
            List<Element> list = root.elements();
            //遍历每个节点
            for (Element e : list) {
                if (e.elements().size() > 0) {
                    //当前节点不为空的话,递归遍历子节点;
                    result=getCode(e);
                    if(result != null && result != ""){
                        return result;
                    }
                }
                if (e.elements().size() == 0) {
                    result = e.getTextTrim();
                    return result;
                }
            }
        }else{
            return root.getTextTrim();
        } 
        return result;
    }

参考

使用 Postman 发送 SOAP 请求的步骤与方法

给个三连吧 谢谢谢谢谢谢了
在这里插入图片描述

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

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

相关文章

CEC2013(MATLAB):猎豹优化算法(The Cheetah Optimizer,CO)求解CEC2013

一、猎豹优化算法CO 猎豹优化算法&#xff08;The Cheetah Optimizer&#xff0c;CO&#xff09;由MohammadAminAkbari等人于2022年提出&#xff0c;该算法性能高效&#xff0c;思路新颖。 参考文献&#xff1a; Akbari, M.A., Zare, M., Azizipanah-abarghooee, R. et al. Th…

word误删除的文件怎么恢复?恢复办法分享

在日常工作和学习中&#xff0c;我们常常会使用到Word来撰写文章、毕业论文、方案等。然而&#xff0c;我们可能会遇到Word误删文件的情况&#xff0c;令我们陷入恐慌&#xff0c;特别是这个文件很重要时。幸运的是&#xff0c;有办法找回。下面一起来看下word误删除的文件怎么…

RFID固定资产管理的应用

在如今的商界竞争中&#xff0c;要确保企业的固定资产管理得当至关重要。庆幸的是&#xff0c;现代科技为这一挑战带来了一项高效的解决方案&#xff0c;那就是RFID技术。 **RFID技术就是借助无线射频通信&#xff0c;通过RFID标签和读写器之间的互动&#xff0c;来识别和跟踪资…

【力扣520】检测大写字母

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述二、题目分析 一、题目描述 题目链接&#xff1a;检测大写字母 我们定义&#xff0c;在以下情况时&#xff…

ARM Cortex-A9:裸机开发,点亮LED3

1.看原理图 外设板原理图 核心板原理图 2.在芯片手册中找到控制硬件的有效的特殊功能寄存器 选择0x1输出 GPX1DAT[0]->GPX1_0 0->1/0 3.编程 start.s Makefile复制到桌面 使用超级终端&#xff0c;连接串口 随便写一个 选择串口 配置串口 板子上电马上按enter…

MATLAB | 对随机信号进行统计分析,绘制频次直方图、频率分布图,与理论概率密度进行比较

一、问题描述 对于一个随机信号&#xff0c;我们可以通过统计手段&#xff0c;得到其的频次分布图&#xff08;直方图&#xff09;&#xff0c;并由此计算出它的频率分布图。当观察次数区域无穷大时&#xff0c;频率分布图近似于概率密度函数。 下面我们以稳定分布的随机变量为…

MySQL多表查询面试题一

其中分析题意&#xff0c;学生表student是与成绩表score关联&#xff0c;课程表course与教师表teacher关联&#xff0c;由此可以先确定关联关系&#xff0c;学生表为s&#xff0c;课程表为c&#xff0c;教师表为t&#xff0c;成绩表为o。s.s_ido.s_id&#xff0c;c.t_idt.t_id …

SpringBoot核心功能与基础配置

SpringBoot简介 原先的Spring程序缺点&#xff0c;包括依赖设置繁琐&#xff0c;每项jar的引用都需要自己撰写。并且配置繁琐&#xff0c;配置文件中也需要自己写加载bean等。由此针对原始的Spring程序&#xff0c;Pivotal团队提供的全新框架——SpringBoot&#xff0c;其设计…

PyQt 定义控件SwitchButton 指南

PyQt 定义控件SwitchButton 指南 PyQt 定义控件SwitchButton 指南实例程序效果如下所示&#xff1a; PyQt 定义控件SwitchButton 指南 SwitchButton 是一个自定义开关按钮控件&#xff0c;通常用于在用户界面中启用或禁用某些功能或选项。它是一种用户友好的控件&#xff0c;允…

云汉芯城一站式电子制造平台启想智联顺利通过IATF16949:2016质量管理体系认证

近日&#xff0c;云汉芯城旗下一站式电子制造服务平台上海启想智能科技有限公司&#xff08;以下简称“启想智联”&#xff09;顺利通过IATF16949:2016质量管理体系认证&#xff0c;并获得由URS颁发的认证证书。通过此项认证&#xff0c;标志着启想智联在全球汽车行业的技术规范…

AdminLTE 2 图标大全

AdminLTE 2 图标大全 链接地址&#xff1a;&#xff1a;&#xff1a;&#xff1a;&#xff1a;AdminLTE 2 | Icons

再也不用花钱了,教你一套键鼠控制多台电脑

Synergy是一款用于多台电脑之间共享键盘和鼠标的软件。它允许用户使用一套键盘和鼠标同时控制多台电脑&#xff0c;极大地提高了工作效率。Synergy支持跨平台使用&#xff0c;包括Windows、Mac和Linux等操作系统。用户只需在每台电脑上安装Synergy客户端&#xff0c;并按照软件…

十四.镜头知识之镜头色差

十四.镜头知识之镜头色差 文章目录 十四.镜头知识之镜头色差**14.1 色差** /Chromatic Aberration/**14.2 纵向色差****14.3 横向色差**14.4 ISP色彩还原同一场景两张由不同镜头拍出来的照片比较:上方的照片来自更高质量的镜头,下方的照片则出现了明显的色差,特别是在房顶右…

什么是云原生?零基础学云原生难吗?

伴随着云计算的浪潮&#xff0c;云原生概念也应运而生&#xff0c;而且火得一塌糊涂&#xff0c;但真正谈起“云原生”&#xff0c;大多数非 IT 从业者的认知往往仅限于将服务应用放入云端&#xff0c;在云上处理业务。实际上&#xff0c;云原生远不止于此。 现在越来越多的企…

LIMS第三方实验室信息化管理系统

实验室信息化管理系统LIMS&#xff0c;由计算机硬件和应用软件组成&#xff0c;能够实现实验室数据和信息的收集、分析、陈述和处理。实验室信息化管理系统LIMS是以查验检测作业为中心&#xff0c;包含一个以样品分析为主线的从样品登录、登记处理、查验检测、数据计算分析到成…

文字连续光影特效实现思路

文字连续光影特效实现思路 实现了一个文字阴影的效果&#xff0c;文字会不断变换颜色并产生阴影效果。具体实现如下&#xff1a; 使用 keyframes 定义一个名为 shadow 的动画&#xff0c;动画从当前颜色到 #ff0266&#xff0c;同时设置文字阴影的偏移量和模糊半径。使用 * 选…

CSS魔法!如何将任意CSS类型转换为数值?

在 CSS 中有各式各样的类型值&#xff0c;例如 1rem、10vw、100cqw等等&#xff0c;这些相对值给与了 CSS 强大的适应能力。但有时候&#xff0c;我们还需要知道这些相对值所对应的真实值&#xff0c;也就是px值&#xff0c;比如在移动端&#xff0c;我们经常会设置这样的根字号…

实验四:回溯算法的设计与分析

某不知名学校大二算法课实验报告 题目来自力扣 第一题&#xff1a;幂集 力扣题目链接&#xff1a;幂集 题目描述&#xff1a; 幂集。编写一种方法&#xff0c;返回某集合的所有子集。集合中不包含重复的元素。 说明&#xff1a;解集不能包含重复的子集。 示例: 输入&#xf…

2023年中国TFT-LCD面板产业链、需求量及市场规模分析[图]

按显示技术尺寸来分&#xff0c;主要分为大尺寸和小尺寸&#xff08;10寸以下&#xff09;&#xff0c;TFT-LCD行业下游主要是各类型消费电子&#xff0c;包括PC显示器&#xff0c;液晶电视&#xff0c;智能手机等。 TFT&#xff0d;LCD面板产业链 资料来源&#xff1a;共研产…

使用simpleperf跟踪自定义的perf events

目录 前言 tracepoint简介 添加tracepoint&#xff1a; 使用simpleperf 跟踪自定义的tracepoint 前言 simpleperf可以跟踪指定的perf events&#xff0c;通过adb shell & simpleperf list可以查看当前设备支持的所有perf event。但是如果这些perf event不能满足我们的…