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

ops/2024/12/23 0:02:54/

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

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包

java">  <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代码案例:

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.ppmy.cn/ops/19077.html

相关文章

HTTP网络协议的请求方法,具体详解(2024-04-26)

1、HTTP 即超文本传输协议&#xff0c;是一种实现客户端和服务器之间通信的响应协议&#xff0c;它是用作客户端和服务器之间的请求 根据 HTTP 标准&#xff0c;HTTP 请求可以使用多种请求方法。 2、方法分类 HTTP1.0 定义了三种请求方法&#xff1a; GET, POST 和 HEAD 方…

FPGA“题目周周练”活动来啦!

Hi&#xff0c;各位编程精英er~ 不知道大家的FPGA学习之旅到达哪一个阶段了呢&#xff1f;又在这个过程中遇到了哪些困惑&#xff1f; 作为一门高度专业化且充满挑战的技术&#xff0c;FPGA的学习是一场不断思考、认知、持续深化的过程。在这个过程中&#xff0c;思维的敏捷和…

【ARMv9 DSU-120 系列 4 -- Utility bus 详细介绍 1】

请阅读【Arm DynamIQ™ Shared Unit-120 专栏 】 文章目录 DSU-120 Utility bus事务类型访问大小事务长度安全状态总结缓存控制(ARCACHEU 或 AWCACHEU)突发类型(ARBURSTU 或 AWBURSTU)锁定信号(ARLOCKU 或 AWLOCKU)Utility bus acceptance capabilities

神经网络与深度学习(三)——卷积神经网络基础

卷积神经网络基础 1.为什么要学习神经网络1.1全连接网络问题1.2深度学习平台简介1.3PyTorch简介1.4简单示例 2.卷积神经网络基础2.1进化史2.2特征提取2.3基本结构 3.学习算法3.1前向传播3.2误差反向传播3.2.1经典BP算法3.2.2卷积NN的BP算法 4.LeNet-5网络4.1网络介绍4.2网络结构…

MySQL基础操作

前言&#x1f440;~ 结束了java数据结构篇章&#xff0c;紧接着来到MySQL的学习喽~ 如果各位对文章的内容感兴趣的话&#xff0c;请点点小赞&#xff0c;关注一手不迷路&#xff0c;如果内容有什么问题的话&#xff0c;欢迎各位评论纠正 &#x1f91e;&#x1f91e;&#x1f9…

【MATLAB源码-第199期】基于MATLAB的深度学习(CNN)数字、模拟调制识别仿真,输出识别率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 基于深度学习的调制识别系统利用复杂的数学模型和算法来识别和分类从不同来源接收到的无线信号的调制类型。这种技术的应用广泛&#xff0c;特别是在无线通信、电子战、频谱监测和认知无线电等领域中具有重要价值。调制识别系…

Docker之安装部署

本次部署使用openEuler操作系统&#xff1a; 方式一&#xff1a;使用yum安装(openEuler源中有自带的docker18.09.0版本) [rootnode1 ~]# yum install docker -y [rootnode1 ~]# docker version Client: Version: 18.09.0 EulerVersion: 18.09.0.332 API ver…

java接口加密解密

这里写目录标题 controller加解密工具类加密&#xff08;本质是对ResponseBody加密&#xff09;解密&#xff08;本质是对RequestBody传参解密&#xff09;注解 controller Controller public class PathVariableController {GetMapping(value "/test")ResponseBod…