zoukankan      html  css  js  c++  java
  • webservice soap axis2客户端接口开发

    场景:合作方服务器接口为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转换方法见https://www.cnblogs.com/yfzhou528/p/12147357.html
    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");
  • 相关阅读:
    基于Taro开发小程序笔记--07修改state的任意数据
    基于Taro开发小程序笔记--06Taro框架生命周期
    基于Taro开发小程序笔记--05小程序图片放大组件
    基于Taro开发小程序笔记--04路由跳转的几种方式
    基于Taro开发小程序笔记--03项目API处理
    基于Taro开发小程序笔记--02项目结构梳理
    基于Taro开发小程序笔记--01开发前准备
    2018年那些事
    Css Sticky footer布局
    背景图毛玻璃效果
  • 原文地址:https://www.cnblogs.com/yfzhou528/p/12167319.html
Copyright © 2011-2022 走看看