webservice soap客户端接口开发
时间:2020-01-08
本文章向大家介绍webservice soap客户端接口开发,主要包括webservice soap客户端接口开发使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
场景:合作方服务器接口为webservice 方式,需使用soap方式调用
SoapUI调用测试步骤:
1.创建工程
2.请求接口,可以看到调用接口需要传的参数结构,以及接口返回的具体参数结构
后台使用axis2封装xml信息->请求合作方->解析返回参数:
ServiceClient sender = new ServiceClient(); String serviceUrl = "wsdl地址"; String targetNameSpace = "浏览器访问wsdl地址拿到targetNamespace"; String policyInfoXml = getPolicyInfoXml(orderInfo);// StringBuffer封装xml信息 String opName = "approval";// 要调用的方法 Options options = new Options(); EndpointReference targetEPR = new EndpointReference(serviceUrl); options.setTo(targetEPR); options.setAction(targetNameSpace + opName); sender.setOptions(options); OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace(targetNameSpace, ""); OMElement method = fac.createOMElement(opName, omNs); OMElement request = fac.createOMElement("request", omNs); OMElement policyInfo = fac.createOMElement("policyInfo", omNs); policyInfo.setText(getPolicyInfoXml(orderInfo)); OMElement checkCode = fac.createOMElement("checkCode", omNs); checkCode.setText(getCheckCode(policyInfoXml)); OMElement formCommit = fac.createOMElement("formCommit", omNs); formCommit.setText("true"); OMElement productInfo = fac.createOMElement("productInfo", omNs); OMElement classesCode = fac.createOMElement("classesCode", omNs); classesCode.setText("12040100"); productInfo.addChild(classesCode); OMElement userInfo = fac.createOMElement("userInfo", omNs); OMElement password = fac.createOMElement("password", omNs); password.setText(getPassWord()); OMElement userName = fac.createOMElement("userName", omNs); userName.setText(getUserName()); userInfo.addChild(userName); userInfo.addChild(password); request.addChild(checkCode); request.addChild(policyInfo); request.addChild(formCommit); request.addChild(productInfo); request.addChild(userInfo); method.addChild(request); method.build(); // 发送参数至合作商 OMElement resp = sender.sendReceive(method); logger.info("返回响应结果:" + resp); String resultXml = StringEscapeUtils.unescapeXml(resp.toString()); // 解析<ns1:sysMessage> int sysStart = resultXml.indexOf("<ns1:sysMessage>"); int sysEnd = resultXml.indexOf("</ns1:sysMessage>"); if (sysStart == -1 || sysEnd == -1) { logger.error("返回参数错误,<ns1:sysMessage>不存在"); return result; } String sysMessageStr = resultXml.substring(sysStart, sysEnd + "</ns1:sysMessage>".length()).replaceAll("ns1:", ""); // xml->map Map<String, Object> sysMap = XmlUtil.xml2Map(sysMessageStr); //xml2Map转换方法见本人另一博客 if (sysMap == null || sysMap.size() == 0) { logger.error("返回响应结果-<ns1:sysMessage>解析失败"); return result; } String resultStatus = (String) sysMap.get("resultStatus"); String errorCode = (String) sysMap.get("errorCode"); String errorMsg = (String) sysMap.get("errorMsg"); if (StringUtil.isBlank(resultStatus) || !"S|F".contains(resultStatus)) { logger.error("返回响应结果-resultStatus参数错误"); return result; } // 解析policyInfo携带的xml int rootStart = resultXml.indexOf("<ROOT>"); int rootEnd = resultXml.indexOf("</ROOT>"); if (rootStart == -1 || rootEnd == -1) { logger.error("返回响应结果参数错误,<ROOT>不存在"); return result; } String rootStr = resultXml.substring(rootStart, rootEnd + "</ROOT>".length()); // xml->map Map<String, Object> rootMap = XmlUtil.xml2Map(rootStr); String ApplyId = (String) rootMap.get("ApplyId"); String STATUS = (String) rootMap.get("STATUS"); String APPLYNO = (String) rootMap.get("APPLYNO"); String POLICYNO = (String) rootMap.get("POLICYNO"); String FILE_URL = (String) rootMap.get("FILE_URL");
原文地址:https://www.cnblogs.com/yfzhou528/p/12167319.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 守护进程
- 【tensorflow2.0】自动微分机制
- Vue3.0 beta版学习笔记
- 【tensorflow2.0】低阶api--张量操作、计算图、自动微分
- mybatis之第一个mybatis程序(一)
- 进程间通信
- django-表单之创建表单(一)
- 原来sqlite3_get_table() 是这样抓取数据的!!!
- 【tensorflow2.0】中阶api--模型、损失函数、优化器、数据管道、特征列等
- 最短路径Dijkstra算法的简单实现
- django-表单之获取表单信息(二)
- 【tensorflow2.0】高阶api--主要为tf.keras.models提供的模型的类接口
- django-表单之模型表单(三)
- sqlite3数据库封装 - 动态链接库
- 【tensorflow2.0】张量的结构操作