java如何使用webService方式调用对接第三方平台

实际使用记录,做个记录:

1、需要对方提供wsdl文件,该文件中有接口的Ip地址,方法名、参数等详细信息,

wsdl文档中targetNamespace为命名空间

<xsd:element name="searchBGDMIInfo">标签中name是方法名:文档以searchBGDMIInfo为例

详细可参考wsdl官方文档

wsdl文档例子:

2、测试与第三方平台网络是否可以正常连接,根据对方提供的wsdl文档,拼写curl命令,例:

-- 10.20.21.XXX第三方平台的IP地址,USERNAME标签账户,PASSWORD标签内容为密码,需要根据wsdl文档来,自定义命令
curl --request POST \--url 'http://10.20.21.XXX/newdiss/services/DMDataService?wsdl=' \--header 'Content-Type: text/xml' \--header 'content-type: application/xml' \--data '<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><searchBGDMIInfo> <in0> &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;&lt;NACAOREQUEST&gt;&lt;USERNAME&gt;test&lt;/USERNAME&gt;&lt;PASSWORD&gt;123456&lt;/PASSWORD&gt;&lt;/NACAOREQUEST&gt;</in0>                 </searchBGDMIInfo></soap:Body>
</soap:Envelope>'

需要引入jar包

  <dependency><groupId>commons-discovery</groupId><artifactId>commons-discovery</artifactId><version>0.5</version></dependency><dependency><groupId>wsdl4j</groupId><artifactId>wsdl4j</artifactId><version>1.6.3</version></dependency><dependency><groupId>org.apache.axis</groupId><artifactId>axis</artifactId><version>1.4</version></dependency><dependency><groupId>javax.xml.rpc</groupId><artifactId>javax.xml.rpc-api</artifactId><version>1.1.1</version></dependency>

以下是java代码案例:

//  searchBGDMIInfoUrl为平台Ip地址:http://10.20.xx.xxx:9000/newdiss/services/DMtestService
//zdMethod为方法名称:searchBGDMIInfo
//    xmlStr_search为请求报文,xml格式,需要平台提供public  String searchBGDMIInfo(){//获取文件列表String fileName="";String paramName="searchBGDMIInfo";SearchBGDMIInfoXmlRsp infoXmlRsp=new SearchBGDMIInfoXmlRsp();try {String xmlStr_search="<NACAOREQUEST>"+"<USERNAME>"+userName+"</USERNAME>"+"<PASSWORD>"+passWord+"</PASSWORD>"+"</NACAOREQUEST>";String wsdlurl = searchBGDMIInfoUrl;String method = zdMethod;String targetNamespace = zdTargetNamespace;Object[] keys = new Object[]{paramName};Object[] values = new Object[]{xmlStr_search};log.debug("searchBGDMIInfo 访问url => {} method => {} targetNamespace=> {} paramName参数名:{} ",wsdlurl,method,targetNamespace,paramName);String rspsXml = WebServiceUtils.sendSoap12(wsdlurl,  method, targetNamespace,keys, values);log.debug("searchBGDMIInfo 返回响应rspsXml -=> {}", rspsXml);infoXmlRsp=xmlToBean(SearchBGDMIInfoXmlRsp.class,rspsXml);if(infoXmlRsp!=null&&infoXmlRsp.getEnvelope()!=null){fileName=infoXmlRsp.getEnvelope().getFileName();}log.debug("解析xml后 searchBGDMIInfo infoXmlRsp -=> {}", JSON.toJSONString(infoXmlRsp));} catch (Exception e) {log.error("searchBGDMIInfo exception", e);}return  fileName;-------------------------------------/*** 调用WebService接口,AXIS方式直接引用远程的.wsdl文件* 调用接口时,传入方法名,字段与字段值顺序需要严格按照接口定义* 使用SOAP1.2发送消息** @param wsdlurl         接口地址* @param method          方法名* @param keys            字段(方法参数)* @param values          字段值(参数对应值)* @param targetNamespace 命名空间* @return 接口返回值*/public static String sendSoap12(String wsdlurl, String method, String targetNamespace, Object[] keys, Object[] values) throws Exception {Service service = new Service();Call call = (Call) service.createCall();call.setEncodingStyle("UTF-8");call.setTargetEndpointAddress(wsdlurl);call.setOperationName(new QName(targetNamespace, method)); // 方法名称call.setReturnType(XMLType.XSD_STRING);// 设置返回类型// call.setReturnClass(String[].class);params(targetNamespace, call, keys, values);call.setUseSOAPAction(true);// 设置超时时间call.setTimeout(SOCKET_TIMEOUT);  // 设置超时时间为5//call.setSOAPActionURI(targetNamespace + "/" + method);call.setSOAPActionURI("");return (String) call.invoke(values);}/*** 调用WebService接口之前,方法参数及参数赋值* 当前接口中参数类型仅限于字符串、整数、布尔,参数为空的情况为字符串类型** @param targetNamespace 命名空间* @param call            接口访问请求* @param keys            字段(方法参数)* @param values          字段值(参数对应值)*/private static void params(String targetNamespace, Call call, Object[] keys, Object[] values) {if (keys == null || values == null) {return;}if (keys.length == 0 || values.length == 0) {return;}if (keys.length != values.length) {throw new IllegalArgumentException("接口方法参数与参数值不匹配!");}for (int i = 0; i < values.length; i++) {String key = (String) keys[i]; //方法参数Object value = values[i]; //参数值if (value == null) {call.addParameter(new QName(targetNamespace, key), XMLType.XSD_STRING, ParameterMode.IN);} else if (value instanceof String) {call.addParameter(new QName(targetNamespace, key), XMLType.XSD_STRING, ParameterMode.IN);} else if (value instanceof Integer) {call.addParameter(new QName(targetNamespace, key), XMLType.XSD_INTEGER, ParameterMode.IN);} else if (value instanceof Boolean) {call.addParameter(new QName(targetNamespace, key), XMLType.XSD_BOOLEAN, ParameterMode.IN);}}}

这样就可以测试了,也可以使用main方法来进行测试。

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

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

相关文章

数据结构-树和森林之间的转化

从树的二叉链表的定义可知&#xff0c;任何一棵和树对应的二叉树&#xff0c;其根节点的右子树必为空。这里我们举三个树&#xff0c;将这个由三个树组成的森林组成二叉树是这个样子的。 下面我们说明一下详细过程&#xff0c;首先将每个树转化为二叉的状态&#xff0c;如图所示…

NAT网络地址转换实验(华为)

思科设备参考&#xff1a;NAT网络地址转换实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 NAT&#xff08;Network Address Translation&#xff09;&#xff0c;即网络地址转换技术&#xff0c;是一种在现代计算机网络中广泛应用的技术&#xff0c;主要用于有效管…

汇编语言(详解)

汇编语言安装指南 第一步&#xff1a;在github上下载汇编语言的安装包 网址&#xff1a;GitHub - HaiPenglai/bilibili_assembly: B站-汇编语言-pdf、代码、环境等资料B站-汇编语言-pdf、代码、环境等资料. Contribute to HaiPenglai/bilibili_assembly development by creat…

李廉洋:4.27黄金原油下周一行情分析及走势策略。

金价将出现六周来的首次单周下跌&#xff0c;因投资者在金价上涨数月后获利了结。自2月中旬的低点以来&#xff0c;金价已经上涨了约17%&#xff0c;尽管对美联储放松政策的预期正在减弱&#xff0c;但金价仍屡创新高。周五公布的最新通胀数据强化了高利率将暂时维持的观点。“…

MATLAB的几种边缘检测算子(Sobel、Prewitt、Laplacian)

MATLAB的几种边缘检测算子(Sobel、Prewitt、Laplacian) clc;close all;clear all;warning off;%清除变量 rand(seed, 100); randn(seed, 100); format long g;% 读取图像 image imread(lena.png); % 转换为灰度图像 gray_image rgb2gray(image); % 转换为double类型以进行计算…

Git泄露和hg泄露原理理解和题目实操

一.Git泄露 1.简介 Git是一个开源的分布式版本控制系统&#xff0c;它可以实现有效控制应用版本&#xff0c;但是在一旦在代码发布的时候&#xff0c;存在不规范的操作及配置&#xff0c;就很可能将源代码泄露出去。那么&#xff0c;一旦攻击者发现这个问题之后&#xff0c;就…

论文速览 | IEEE Symposium on Security and Privacy (SP), 2023 | FMCW雷达反射阵列欺骗攻击

注1:本文系"计算成像最新论文速览"系列之一,致力于简洁清晰地介绍、解读非视距成像领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; CVPR, ICCV, ECCV, SIGGRAPH, TPAMI; Light‑Science & Applications, Optica 等)。 本次介绍的论文是:<I…

MariaDB 修改用户密码的 SQL

有时候我们希望能够修改数据库中访问用户的密码。 但是我们只能 SQL 登录服务器后才能进行修改。 修改的 SQL 为&#xff1a; ALTER USER root% IDENTIFIED WITH mysql_native_password BY 123;针对实际上数据的配置情况&#xff0c;上面的 SQL 是需要进行一些调整的。 MySQ…

鸿蒙云函数调试坑点

如果你要本地调试请使用 const {payload, action} event.body/** 本地调试不需要序列化远程需要序列化 */ // const {payload, action} JSON.parse(event.body) const {payload, action} event.body 注意: 只要修改云函数&#xff0c;必须上传云函数 如果使用 const {pay…

25计算机考研院校数据分析 | 南京大学

南京大学&#xff08;Nanjing University&#xff09;&#xff0c;简称“南大”&#xff0c;是中华人民共和国教育部直属、中央直管副部级建制的全国重点大学&#xff0c;国家首批“双一流”、“211工程”、“985工程”重点建设高校&#xff0c;入选首批“珠峰计划”、“111计划…

WordPress AI Engine 插件 文件上传致RCE漏洞复现(CVE-2023-51409)

0x01 产品简介 AI Engine插件是WordPress中的AI一体化解决方案,包括创建聊天机器人、生成内容和图像、推荐标题和帖子摘录、支持多种人工智能引擎等功能,可以节省用户时间。 0x02 漏洞概述 WordPress AI Engine 插件upload接口存在文件上传漏洞,未经身份验证的远程攻击者…

(四)Servlet教程——Maven的安装与配置

1.在C盘根目录下新建一个Java文件夹,该文件夹用来放置以下步骤下载的Maven&#xff1b; 2. 下载Maven的来源有清华大学开源软件镜像站和Apache Maven的官网&#xff0c;由于清华大学开源软件镜像站上只能下载3.8.8版本以上的Maven&#xff0c;我们选择在Apache Maven的官网上下…

codeforce#933 题解

E. Rudolf and k Bridges 题意不讲了&#xff0c;不如去题干看图。 传统dp&#xff0c;每个点有两个选择&#xff0c;那么建桥要么不建。需要注意的是在状态转移的时候&#xff0c;桥是有长度的&#xff0c;如果不建需要前d格中建桥花费最少的位置作为状态转移的初态。 #incl…

深度学习论文: MobileNetV4 - Universal Models for the Mobile Ecosystem及其PyTorch实现

深度学习论文: MobileNetV4 - Universal Models for the Mobile Ecosystem及其PyTorch实现 MobileNetV4 - Universal Models for the Mobile Ecosystem PDF: https://arxiv.org/pdf/2404.10518.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: ht…

swagger xss漏洞复现

swagger xss漏洞复现 文章目录 swagger xss漏洞复现漏洞介绍影响版本实现原理漏洞复现修复建议: 漏洞介绍 Swagger UI 有一个有趣的功能&#xff0c;允许您提供 API 规范的 URL - 一个 yaml 或 json 文件&#xff0c;将被获取并显示给用户 根本原因非常简单 - 一个过时的库Dom…

高级控件5-RecyclerView

与ViewPager类似的一个滑动的高级控件是RecyclerView&#xff0c;使用更加灵活。 第1步&#xff1a;添加依赖 打开mvn官网&#xff0c;检索recyclerview&#xff0c;选择使用人数较多的版本&#xff0c;复制依赖&#xff0c;放入项目中即可 快捷方法&#xff08;复制下面的代…

科普:PD协议、QC协议、三星AFC、华为SCP是什么,怎么获取这些协议及协议通讯原理

PD协议是什么 PD协议是由 USB-IF 组织制定的一种快速充电规范&#xff0c;它一般使用Type-C接口&#xff0c;所以常见的Type-C接口充电器一般都是支持PD协议。 USB Power Delivery(USB PD)是目前主流的快充协议之一&#xff0c;USB PD 通过Type-C电缆和连接器增加电力输送&…

【Unity动画系统】动画基本原理与Avater骨骼复用

动画基本原理 动画片段文件是一个描述物体变化状态的文本文件 在Unity中创建的资源文件大多都是YAML语言编写的文本文件 Curves表示一种变化状态&#xff0c;为空的话则没有记录任何内容 位置变化后的旋转变化状态&#xff1a; 动画文件里的Path名字要相同才能播放相同的动画 …

uniapp制作分页查询功能

效果 代码 标签中 <uni-pagination change"pageChanged" :current"pageIndex" :pageSize"pageSize" :total"pageTotle" class"pagination" /> data中 pageIndex: 1, //分页器页码 pageSize: 10, //分页器每页显示…

[笔试训练](九)

目录 025&#xff1a;添加逗号 026&#xff1a;跳台阶 027&#xff1a;扑克牌顺子 025&#xff1a;添加逗号 添加逗号_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 将输入的数字&#xff0c;每次模上10&#xff0c;从个位开始取每一位数&#xff…