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