Java发起SOAP请求代码参考

在这里插入图片描述

目录

Java发起SOAP请求代码参考

  • 代码
    • 1.组装参数
    • 2.加密参数
    • 3.发起连接
    • 4.解析返回数据
  • 参考


文章所属专区 超链接


代码

1.组装参数

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
	   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
	   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
	   http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <context:annotation-config/>

    <context:component-scan base-package="lu.tool">
        <!--将Controller的注解排除掉 -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <aop:aspectj-autoproxy/>
</beans>

2.加密参数

  //对密钥进行MD5
    String md5 = Md5Util.getMD5(private_key);
    //sm4对数据加密
    String xmlStrSM4=new SM4().encode(xmlStr.toString(),md5 );
    //对接方传递公钥给我方,我方会根据对接方的公钥查询出密钥对数据解密
    xmlStrSM4=xmlStrSM4.replaceAll("[\\n\\r]", "");
    JSONObject jsonObject = getUrlBySoap( token, appKey, xmlStrSM4);

3.发起连接

    /**
     * 根据soap请求获取url
     * @param token
     * @param xmlStr
     * @return
     * @throws ServiceException
     */
    public String getUrlBySoap(String token,String xmlStr) throws ServiceException {
        String endpoint=evaluation_url;
        Service service = new Service();
        Call call = (Call) service.createCall();
        SOAPHeaderElement head = new SOAPHeaderElement("http://linewell.com/ws/", "Authorization", "Basic " + token);
        call.addHeader(head);
        call.setTargetEndpointAddress(endpoint);
        call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
        String result = getSaveEvaluationUrl(call,xmlStr);
        return result;
    }
   public String getSaveEvaluationUrl(Call c ,String xmlStr) {
        c.addParameter("appKey",   org.apache.axis.encoding.XMLType.XSD_STRING,  javax.xml.rpc.ParameterMode.IN);// 接口的参数 
        c.addParameter("xmlStr",   org.apache.axis.encoding.XMLType.XSD_STRING,  javax.xml.rpc.ParameterMode.IN);// 接口的参数 
        c.setOperationName("getSaveEvaluationUrl");// WSDL里面描述的接口名称   newSubmit     submit
        String appKey= public_key;//公钥
        String result = "";
        try{
            result=(String)c.invoke(new Object[] {appKey,xmlStr});
        }catch(Exception e){
            String errStr=getStackTraceInfo(e);
            //请记录日志
            //log.error("你们能标识这条记录的表示:"+id+"错误信息:"+errStr);
            System.out.println("你们能标识这条记录的表示:错误信息:"+errStr);
            if(errStr.contains("access_token_invalid")){
                System.out.println("请重新获取token并重新请求接口");
                //token失效,请重新获取token并且重新请求接口,
                //同一个标识请求都报这个三次以内重新请求获取,超过3次不用再请求,找运维人员反馈就行
            }
        }
        return result;
    }

4.解析返回数据

 public JSONObject getResultUrl(String soapUrl) throws DocumentException {
    JSONObject result = new JSONObject();
    //报文转成doc对象
    Document doc = DocumentHelper.parseText(soapUrl);
    //获取根元素,准备递归解析这个XML树
    Element root = doc.getRootElement();
    //获取叶子节点的方法
    String leafNode = "";
    leafNode = getCode(root);
    if(leafNode != null){
        String resultUrl = leafNode;
        result.put("url",resultUrl);
    }
    return result;
}
 /**
 * 找到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) {
                String a2 =  e.getQName().getName();
                if(a2.equals("url")){
                    result = e.getTextTrim();
                    return result;
                }
            }
        }
    }else{
        return root.getTextTrim();
    }
    return result;
}

参考

Java生成Soap请求响应实体,Java 生成wsdl请求响应实体
SOAP请求方式
SOAP请求详解

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AUTOSAR CanTSyn模块配置与代码实现(二)

AUTOSAR CanTSyn模块配置与代码实现 1、FUP message处理 CanTSyn_process_FUP_message 先比较和SYNC报文的Sequence是否相等&#xff0c;如果不相等则不接受该报文。 然后调用CanTSyn_unpack_store_fup处理fup报文。 获取接收到FUP时的本地时间&#xff0c;并与接收到的SYNC…

虚拟机无法进入系统问题

概述 客户在华为云平台上创建了两台虚拟机并部署aarch64 V10 OS&#xff0c;2021-10-28其中一台虚拟机业务出现异常&#xff0c;运维重启虚拟机后系统进不去&#xff0c;左上角光标闪烁&#xff0c;接着重启另一台虚拟机同样起不来&#xff0c;现象一致。 分析 通过分析现场…

天眼销使用指南

刚做销售的你&#xff0c;打电话是不是总是被客户拒决&#xff1f;要不打过去就是空号错号、找不着人&#xff1f;更甚者连客户电话都不知道&#xff1f; 如何快~速找到目标客户准确的联系方式呢&#xff1f;赶紧把这份使用指南请收好&#xff0c;客户不用愁。 1、进入【天眼…

0. Java简介与安装配置

0. Java简介与安装配置 文章目录 0. Java简介与安装配置1.1 Java简介1.2 Java特性1.2 Linux环境安装1.3 Windows环境安装1.3.1 下载JDK安装包1.3.2 安装JDK3. 配置JAVA环境4. 检验安装是否成功 1.3 开发工具参考文献 1.1 Java简介 Java是一门面向对象]编程语言&#xff0c;不仅…

部分常用算法笔记

一、简单易考 1、冒泡排序 https://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896 for i:0;i<length;i { for j:0;j<length-i-1;j { if array[j] > array[j1] { array[j1],array[j] array[j],array[j1] } } } 2、求数组最大最小值。 1&#xff09;O(…

Hudi 表类型和查询类型

数据湖hudi的表类型定义了数据在DFS上如何组织布局&#xff0c;同时实现一些timeline等操作&#xff08;表类型定定义数据是如何写入的&#xff09;&#xff1b;查询类型则是定义如何读取DFS上的数据。 Table typequery typeCopy-On-Write 快照查询&#xff1b; 增量查询&…

若依系列框架RuoYi(104集),RuoYi-Vue(121集)、RuoYi-Cloud(134集)最新完整视频.txt

若依系列框架RuoYi(104集),RuoYi-Vue&#xff08;121集&#xff09;、RuoYi-Cloud&#xff08;134集&#xff09;最新完整视频.txt

C/C++ BM1反转链表

文章目录 前言题目1.解决方案一1.1 思路阐述1.2 源码 2. 解决方案二2.1 思路阐述2.2 源码 总结 前言 这题是牛客网的BM1&#xff0c;主要涉及到链表的操作以及栈数据结构的使用。 题目 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的…

Arduino开发实例-液体流量测量

液体流量测量 文章目录 液体流量测量1、流量传感器介绍2、硬件准备及接线3、代码实现在本文中,将介绍如何流量传感器进行测量液体流量。 流量传感器用于测量液体流速。 市场上有不同类型的流量传感器,在本文中,我们将使用霍尔效应流量传感器。 这些类型的流量传感器是非侵入…

不是私域难做,是我们做私域的方法该换了!

最近&#xff0c;有一些声音在不断变多&#xff1a;私域越来越难做了&#xff01;许多过去做私域的成功经验&#xff0c;今天好像都不奏效了。 在业绩层面上&#xff0c;很多企业一开始还能通过大量拉新、信息轰炸这种“博概率”的方式获得销量&#xff0c;但时间一长&#xf…

Tomcat远程调试

windows环境 写一个 startup-debug.bat&#xff0c;指定tomcat的根目录&#xff0c;端口自己定义 rem *******设置Tomcat目录*******-- set CATALINE_HOMED:\asd\A8-2\tomcat d: rem 8787为可用端口,为远程调试监听端口-- cd %CATALINE_HOME%/bin set JPDA_ADDRESS8787 set J…

DriveWorks Solo捕获参数(三)

捕获参数 - 木门和矩形窗 木质门 下一个组件是木门本身。除了尺寸之外&#xff0c;门还具有需要控制的功能。 让我们首先捕获尺寸。 通过单击“捕获资源管理器”中的标题来激活“捕获的模型”部分。 双击任务窗格树中的模型木门以在 SOLIDWORKS 中将其打开。捕获以下尺寸。…

【Python目标识别】Yolo v5-7.0版本中文标签显示方法(附字体链接)

Yolo的程序之前已经定制化输出过了&#xff0c;但是最近业主突然想要中文的标签&#xff0c;所以赶紧去修改了一下源代码&#xff0c;从网上发现很多资料都改这改那&#xff0c;搞四五个文件结果还没成功。所以自己研究了一下&#xff0c;现在已经完美解决了。今天就和大家分享…

转移mysql中的数据

目录 1 mysqldump 2 将数据库中的数据转换为一个sql文件 3 执行sql文件 1 mysqldump 转移数据需要用到mysqldump。默认情况下mysqldump会自动被安装上&#xff0c;如果没有用不了&#xff0c;建议重新安装一下 参考 mysqldump 命令安装:_mob649e8162c013的技术博客_51…

0155 - Java 数组

1 数组介绍 数组可以存放多个同一类型的数据。数组也是一种数据类型&#xff0c;是引用类型。 即&#xff1a;数(数据)组(一组)就是一组数据 2 数组的使用 2.1 使用方式一 2.2 使用方式二 3 数组使用注意事项和细节 数组是多个相同类型数据的组合&#xff0c;实现对这些数据…

为你自己学laravel - 15 - model的更新和删除

为你自己学laravel。 model的部分。 这一次讲解的是model当中怎么从数据库当中更新数据和删除数据。 先从数据库当中抓出来资料。 当然我们是使用php artisan tinker进入到终端机。 我们的做法是想要将available这个栏位修改成为true。 第一种更新方法 上面我们就是修改了对…

智能优化算法应用:基于学生心理学算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于学生心理学算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于学生心理学算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.学生心理学算法4.实验参数设定5.算法…

RocketMQ系统性学习-RocketMQ原理分析之Broker接收消息的处理流程

Broker接收消息的处理流程&#xff1f; 既然要分析 Broker 接收消息&#xff0c;那么如何找到 Broker 接收消息并进行处理的程序入口呢&#xff1f; 那么消息既然是从生产者开始发送&#xff0c;消息是有单条消息和批量消息之分的&#xff0c;那么消息肯定是有一个标识&#…

go语言函数二、init函数定义与作用

go语言init函数定义与作用 在go语言中&#xff0c;每一个源文件都可以包含一个init函数&#xff0c;这个函数会在main函数执行前&#xff0c;被go运行框架调用&#xff0c;注意是在main函数执行前。 package main import ("fmt" )func init() {fmt.Println("i…

石器时代H5小游戏架设教程

本文讲解石器时代 H5 之恐龙宝贝架设教程&#xff0c;想研究 H5 游戏如何实现&#xff0c;那请跟着此次教程学习在拥有小游戏源码的情况下该如何搭建起来 开始架设 1. 架设条件 石器时代架设需要准备&#xff1a; 一台linux 服务器&#xff0c;建议 CentOs 7.6 版本&#xf…