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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsdhttp://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.加密参数

  //对密钥进行MD5String 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     submitString 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请求详解

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 CentOS 上使用 Docker 运行 RabbitMQ

在 CentOS 上使用 Docker 运行 RabbitMQ 使用Docker来运行RabbitMQ非常方便&#xff0c;以下是一个简单的步骤&#xff0c;以YAML配置文件方式创建和运行RabbitMQ容器。 构建容器 创建Docker Compose文件 创建一个docker-compose.yml文件&#xff0c;内容如下&#xff1a; …

【SpringBoot快速入门】(2)SpringBoot的配置文件与配置方式详细讲解

之前我们已经学习的Spring、SpringMVC、Mabatis、Maven&#xff0c;详细讲解了Spring、SpringMVC、Mabatis整合SSM的方案和案例&#xff0c;上一节我们学习了SpringBoot的开发步骤、工程构建方法以及工程的快速启动&#xff0c;从这一节开始&#xff0c;我们开始学习SpringBoot…

纳米流体传热CFD模拟仿真

纳米流体传热CFD模拟仿真 一、引言 纳米流体传热是当前研究热点之一,由于其独特的传热特性和应用前景,受到了广泛关注。计算流体动力学(CFD)模拟作为一种有效的研究手段,在纳米流体传热领域发挥着重要作用。本文将介绍纳米流体传热CFD模拟的基本原理、方法、应用及未来发…

CAP、ACID、BASE傻傻分不清

CAP CAP 理论是分布式系统中的一个重要理论&#xff0c;它指出在一个分布式系统中&#xff0c;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;、分区容错性&#xff08;Partition tolerance&#xff09;这三个属性不可能同时达到最优…

HarmonyOS --- 首页(新新新手版,高手误入)

一、前言 每一个App都应该有一个首页&#xff0c;在Android中一般由MainActivity Navigation Fragment * N &#xff08;随便你怎么组合&#xff0c;用别的也一样&#xff09;&#xff0c;鸿蒙呢&#xff1f;瞅瞅吧。阿弥陀佛&#xff0c;苦逼Android学完Java学Dart、学完Da…

✺ch5——纹理贴图

目录 加载纹理图像文件纹理坐标在着色器中使用纹理&#xff1a;采样器变量和纹理单元纹理贴图&#xff1a;示例程序多级渐远纹理贴图各向异性过滤环绕和平铺透视变形材质——更多OpenGL细节补充说明 纹理贴图是在栅格化的模型表面上覆盖图像的技术。 它是为渲染场景添加真实感的…

Jmeter实现性能测试--高频率(高吞吐量)

高频率场景通常涉及系统需要在极短时间内处理大量请求或事件。这些场景可能要求系统在短时间内执行多次操作&#xff0c;例如高频率的数据更新、传感器数据采集、金融交易、实时监控等。以下是一些高频率场景的示例&#xff1a; 金融交易&#xff1a; 高频交易系统需要在极短时…

路由表route

目录 Windows维护路由表&#xff0c;利用route命令&#xff0c;VPN完美异地组网什么是多网络环境这里我做个情景演示重置ipv4网络再次确认一下网络背景网关是什么多网络规划思路最后拓展内容实测一下网关切换选项网关的网关命令整理 Windows维护路由表&#xff0c;利用route命令…

MongoDB与大数据处理:构建高性能分布式数据库

MongoDB是一种非关系型数据库&#xff0c;具有高度灵活性和可扩展性。在处理大量数据时&#xff0c;索引的优化是提升查询性能的关键。下面将介绍一些MongoDB索引优化的指南&#xff0c;帮助用户更好地利用索引来提高查询性能。 一、选择适当的索引类型 1、单字段索引&#xf…

吴恩达深度学习intuition

这里是看吴恩达课程的一些记录和联想&#xff08;因为以前听过&#xff0c;因此不会很细致&#xff0c;只做个人记录&#xff09; 课程链接 首先提到training set, validation set (dev set)&#xff0c;test set的分割问题。老师提到&#xff0c;最常用的划分方法传统方法是…

第四节TypeScript 声明变量

1、typescript变量声明 变量是一种使用方便的占位符&#xff0c;用于引用计算机内存地址。 我们可以把变量看做存储数据的容器。 typescript变量的命名规则&#xff1a; 变量名称可以包含数字和字母。除了下划线_和美元$符号外&#xff0c;不能包含其它特殊字符&#xff0c…

(备战2024)三天吃透Java面试八股文,面试通过率高达90%

什么样的求职者能够获得面试官的青睐&#xff1f;求职者需要准备哪些内容来面对形形色色的面试官&#xff1f;这两份资料是我在几十场面试中被面试官问到的问题&#xff0c;比其他复制粘贴的面试题强一百倍&#xff0c;堪称全网最强&#xff08;我不太喜欢“全网最强”这样的字…