package com.example.demo;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.XML;
import com.google.common.collect.Lists;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.message.SOAPHeaderElement;
import org.apache.axis.types.Schema;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.text.StringEscapeUtils;
/**
* @author 900004
* @date 2023/10/24 17:28
*/
public class WebCall {
public static JSONObject webService(String url, String namespace, String methodName, Map<String, Object> params) throws Exception {
String decodedValue = StringEscapeUtils.unescapeHtml4(call(url, namespace, methodName, params));
return convertXmlIntoJSONObject(decodedValue);
}
public static JSONObject convertXmlIntoJSONObject(String response) {
JSONObject jsonObject = XML.toJSONObject(response);
Map<String, String> keyMap = new HashMap<>();
processKeys(jsonObject, keyMap);
return analyseJson(jsonObject, keyMap);
}
public static String call(String url, String namespace, String methodName, Map<String, Object> params) throws Exception {
// log.info("调用 WebService 发送参数==>" + MapperUtils.mapToJson(params));
String soapActionURI = namespace + methodName;
Service service = new Service();
SOAPHeaderElement header = new SOAPHeaderElement(namespace, methodName);
header.setNamespaceURI(namespace);
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(new QName(namespace, methodName));
// 添加参数
List<String> parameterList = Lists.newArrayList();
if (params != null) {
Set<String> paramsKey = params.keySet();
for (String key : paramsKey) {
call.addParameter(new QName(namespace, key), XMLType.XSD_STRING, ParameterMode.IN);
String pValue = MapUtils.getString(params, key);
header.addChildElement(key).setValue(pValue);
parameterList.add(pValue);
}
}
call.setUseSOAPAction(true);
call.setSOAPActionURI(soapActionURI);
call.addHeader(header);
// 设置返回类型
call.setReturnType(XMLType.XSD_SCHEMA);
// call.setReturnType(XMLType.SOAP_DOCUMENT);
// 接口返回结果
Schema schemaResult = (Schema) call.invoke(parameterList.toArray());
StringBuilder result = new StringBuilder();
for (int i = 0; i < schemaResult.get_any().length; i++) {
result.append(schemaResult.get_any()[i]);
}
return result.toString();
}
/**
* 对返回xml解析json对象key值修改,(xmlns: 删除,key值包含‘:’号,截取‘:’号后面的字符)
* @date 2023/11/16 13:54
*/
public static void processKeys(JSONObject jsonObject, Map<String, String> keyMap) {
for (String key : jsonObject.keySet()) {
Object value = jsonObject.get(key);
if (key.contains("xmlns:")) {
keyMap.put(key, "del");
} else {
int i = key.indexOf(":");
if (i != -1) {
String processedKey = key.substring(i + 1);
keyMap.put(key, processedKey);
}
}
if (value instanceof JSONObject) {
// 如果值是嵌套的JSON对象,则递归处理
processKeys((JSONObject) value, keyMap);
}
if (value instanceof JSONArray) {
JSONArray arr = (JSONArray) value;
for (Object o : arr) {
processKeys((JSONObject) o, keyMap);
}
}
}
}
public static JSONObject analyseJson(JSONObject jsonObject, Map<String, String> keyMap) {
SortedMap<String, Object> map = new TreeMap<>();
//1. 获取所有的Key,得到key对应的value
for (String key : jsonObject.keySet()) {
//在此判断==》如果没有要替换的值,resKey就为原值,否则为要替换的值
String resKey = keyMap.get(key) == null ? key : keyMap.get(key);
Object value = jsonObject.get(key);
//实现删除功能
if ("del".equals(resKey)) {
map.remove(resKey);
//实现替换key的功能
} else {
//1.1 如果value为JSONArray类型,则解析
if (value instanceof JSONArray) {
JSONArray jsonArray = new JSONArray(new LinkedList<>());
JSONArray array = jsonObject.getJSONArray(key);
for (int i = 0; i < array.size(); i++) {
Object object = array.get(i);
//如果value里面是List: ["aaa","bbb","ccc"]; 或者是value里面是JSONObject[{},{},{}]
if (object instanceof String) {
map.put(resKey, array);
} else {
JSONObject sortJson = analyseJson((JSONObject) object, keyMap);
jsonArray.add(sortJson);
map.put(resKey, jsonArray);
}
}
//2.2 如果value为JSONObject类型,则解析
} else if (value instanceof JSONObject) {
JSONObject sortJson = analyseJson((JSONObject) value, keyMap);
map.put(resKey, sortJson);
//2.3 如果value为JSON类型,则装入map
} else {
map.put(resKey, value);
}
}
}
return new JSONObject(map);
}
}
相关推荐
Java调用Http接口返回的xml格式数据,解析成Json格式
先用SAXReader和Document得到xml格式的数据 @RequestMapping(value = "web_service_url", method = RequestMethod.GET) public String GetAllNotAcceptedCaseList(){ String webServiceUrl=GlobalUtils.getConfig("web_service_url"); //读取配置文件中配置的接口路径,也可直接写死 try {
java解析通过Soap方式调用WebService接口返回的数据,并映射到对应的实体最终入库
java解析通过Soap方式调用WebService接口返回的数据,并映射到对应的实体最终入库
Springboot 项目 调用webservice接口
近期接到个需求,项目中需要集成零几年建设的OA系统。OA系统使用的接口全部都是webservice接口,在此分享一下使用Hutool及Cxf依赖包调用webservice接口过程中遇到的问题及调用方式。
java 调用webservice 接口,并解析返回参数
【代码】java 调用webservice 接口,并解析返回参数。
Java解析调用webservice服务的返回XML串详解
主要介绍了Java解析调用webservice服务的返回XML串详解的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Java访问WebService返回XML数据的方法
主要介绍了Java访问WebService返回XML数据的方法,涉及java操作WebService的相关技巧,需要的朋友可以参考下
调用WebService接口,并解析返回的XML文件
1、调用WebSevice、解析XML文件所需的包 使用axis方式调用,需要axis、commons-discovery、jaxrpc、wsdl等jar dom方式解析,主要是dom4j这个jar //wesevice所需包 import java.net.URL; import javax.xml.namespace.QName; import javax.xml.rpc.Parame...
MoveIt避障规划实战:从点云到OctoMap的环境感知全流程
本文详细解析了MoveIt避障规划中从点云到OctoMap的环境感知全流程,重点介绍了深度相机选型、点云数据处理、OctoMap生成及避障规划参数调优等关键技术。通过实战案例展示了如何利用MoveIt和OctoMap实现机械臂在复杂环境中的高效避障,为工业自动化和服务机器人开发提供实用解决方案。
htppClient调用webservice,并解析返回的xml字符串
package com.amc.sggk; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client....
新手也能懂的Simulink汽车二自由度建模:从公式推导到模型搭建全流程
本文为新手提供了在Simulink中搭建汽车二自由度模型的完整实战指南。文章从模型核心概念讲起,详细讲解了如何将车辆动力学方程转化为状态空间模型,并逐步指导在Simulink中实现从参数设置、模块搭建到仿真验证的全过程。通过阶跃转向测试和参数影响分析,帮助读者直观理解车辆转向特性,并提供了实用的模型扩展思路与常见问题排查技巧。
从0到1做AI漫剧:即梦+豆包+剪映+红果全流程实战
AI视频生成正在重塑内容创作的生产方式,它让原本高门槛的影视制作,变成了一条由文本、画面、剪辑与分发环节协同的流水线。理解其底层原理,在于将大模型的语义理解、图像生成与视频合成能力,与工程化的流程管理相结合,从而实现从创意到成片的自动化输出。这种技术的价值,不仅体现在降低制作成本,更在于让个人创作者能够独立完成高质量短剧,并快速迭代内容。在短剧、短视频、广告营销等场景中,利用即梦生成画面、豆包编写剧本、剪映完成剪辑、红果进行分发的组合,已成为一种被广泛验证的实践路径。本文聚焦AI漫剧制作,从环境准备、分镜设
java代码调用webService接口
用java代码调用webservice接口
工业相机与ABB机器人Socket通信实战:手把手教你用RobotStudio 6.08搭建视觉引导工作站
本文详细介绍了工业相机与ABB机器人通过Socket通信实现视觉引导工作站的实战教程。使用RobotStudio 6.08平台,涵盖工作站搭建、坐标系标定、RAPID代码开发及TCP/IP通信配置,特别解析了欧拉角与四元数转换等关键技术难点,助力智能制造产线升级。
webservice接口调用,并将返回结果转为json格式数据
webservice接口调用
双硬盘下Ubuntu 16.04与Win10双系统的安装
之前写过一个双系统安装过程,今天再次整理的原因是想重点强调双硬盘的区别。标红的一定要注意看,那就是我自己一步一步踏出来的坑啊... 基础步骤就不再重复,重点讲区别,需要看详细步骤的童鞋(或者你只有一个硬盘)请看我上一篇博客https://blog.youkuaiyun.com/weixin_40308540/article/details/80157444 区别:双硬盘和单硬盘的区别是什么呢?...
相机光学(三十八)——VCM(Voice Coil Motor)音圈马达
VCM(Voice Coil Motor)音圈马达全称Voice Coil Montor,电子学里面的音圈电机,是马达的一种。因为原理和扬声器类似,所以叫音圈电机,具有高频响、高精度的特点。其主要原理是在一个永久磁场内,通过改变马达内线圈的直流电流大小,来控制弹簧片的拉伸位置,从而带动上下运动。手机摄像头广泛的使用VCM实现自动对焦功能,通过VCM可以调节镜头的位置,呈现清晰的图像。弹片式结构滚珠式结构摩擦式结构Open loop开马达Close loop闭环马达。
鉴于CXF框架的web service学习,传递xml,json并解析,容易上手
所依赖的jar包:apache-cxf-2.7.10,可以再官网下载,还有json.rar的对应包,联系是一个java 项目 一:下载对应Jar,可以在官网下载,或是到我资源下载,里面jar都齐全了,将apache-cxf-2.7.10下面的Lib中的jar加入项目中 二:.编写web services的服务端:需要一个接口,叫做Hello,代码如下:在类名称前加入@WebService注释
人工智能训练师三级·模型生命周期真题40题|训练→评估→调优全链路通关
本文为人工智能训练师三级考试真题解析系列第2篇,聚焦模型生命周期全链路(训练→评估→调优)。内容包含40道精选真题,覆盖数据划分、模型训练、评估指标、超参数调优4个核心阶段。重点考察:1)数据集的合理划分方法(留出法、交叉验证);2)模型训练的基本原理;3)关键评估指标(准确率、召回率、F1等)的应用场景;4)超参数调优技术(网格搜索、随机搜索等)。通过真题解析帮助考生系统掌握模型生命周期的闭环迭代方法论,提升从数据准备到模型优化的全流程实践能力。适合备考人工智能训练师三级认证的考生学习参考。
PHP调用Java的webservice那些坑
什么是webservice? Web Services 是应用程序组件 Web Services 使用开放协议进行通信 Web Services 是独立的(self-contained)并可自我描述 Web Services 可通过使用UDDI来发现 Web Services 可被其他应用程序使用 XML 是 Web Services 的基础 php调用webservice两种方式 p...
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
Java中webService的几种调用方法
第一种,HttpClient模拟webService: 首先,导入jar包commons-httpclient-3.1.jar,准备模拟请求的基本数据sb 其次,封装请求request对象 再次,发送请求并接受返回结果 最后,得到的结果是XML形式的字符窜,可以用DoM,或sax技术进行报文解析。 1 第二种,Jax_wbservice标准调用方式:服务器端地址改变,方便改
Data-Structures-and-Algorithm-Analysis-in-Java.pdf
作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...
Java解析调用webservice服务的返回XML串
本文由Markdown语法编辑器编辑完成。1. 需求分析;已知当在调用某一webservice的服务时,如果调用成功,会接受到该服务的返回XML串。后端在获取了该XML原始串时,需要进行解析,将其解析为JSON格式,以便于发送到前台,供前台页面显示和交互。2. 解决方案:该XML的原始形式为:<?xml version="1.0" encoding="UTF-8" ?> <SOAP-ENV:Enve
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
java调用webService接口,入参和出差均为xml报文,出差转为json输出前台
1、拼接入参报文,调用方法,处理出参报文,格式化为list,通过@ResponseBody格式化为json输出前台。出参报文不同,处理方法不同,本文以我自己的出参报文为例进行处理 @RequestMapping(value="/toData.do",method=RequestMethod.POST) @ResponseBody public Map<String, Object&g...
webservice调试解析、soupui使用、xml代码开发、xpath获取数据
做项目的时候,经常遇到接口是webservice提供的,这个时候就需要会进行调试; 调试可以方式。 一、webservice的几种解析调用方式 方式 优势 缺点 上手难度 链接 SoupUi 只要获取到wsdl的xml文件的就可以一键解析出所有的方法;非常简单;软件支持windows、mac、linux 只需要安装一个软件而已 最简单,只需要安装soapui soupui.org download Postman 软件简单常见 需要手工解析wsdl中的方法,请求参数、方式、手工粘贴到p
Java使用hutool调用webservice
无意中公司让我对接一个webservice的服务,由于没有接触过webservice这种服务,捉摸了好久,从cxf琢磨到了hutool封的一个插件,感觉挺好用的,就直接上例子了。打开Soapui并准备好你的wsdl进行项目创建点击New SOAP Project 创建一个SOAP的项目Project Name代表这个项目的名称,可以随意输入,在这里我输入weather。Initial WSDL 输入一个 wsdl的接口 ,在这里我输入的是气象的wsdl接口。
java webservice 参数 xml,webservice 的调用 客户端 参数 List<Object> 的实例,转换成xml格式...
首先:需要用到的jar包axis-ant.jar,axis.jar,wsdl4j-1.5.1.jar1、然后server-config.wsdd 文件的配置:xmlns="http://xml.apache.org/axis/wsdd/"xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">2、web.xml配置---org...
4251



被折叠的 条评论
为什么被折叠?



