WebServices调用方式

以车辆环保清单VIN码上报国家接口为例
在这里插入图片描述
1.服务地址后面加上?wsdl
http://web1.vecc-mep.org.cn/WSXxgkVin/WSXxgkVin.asmx?wsdl
2.通过cxf获取服务端代码
wsdl2java -encoding utf-8 -p com.ly.mp.mom.common.webservice.vecc -d d:\Test -client http://web1.vecc-mep.org.cn/WSXxgkVin/WSXxgkVin.asmx?wsdl
com.ly.mp.mom.common.webservice.vecc:表示生成文件的包路径
d:\Test:表示生成的文件保存在d:\Test文件夹
在这里插入图片描述

3.将生成的代码贴到项目里,如下:
在这里插入图片描述
4.调用接口

以调用登录接口为例:
在这里插入图片描述
调用代码如下:

String wsdlUrl = "http://web1.vecc-mep.org.cn/WSXxgkVin/WSXxgkVin.asmx?wsdl";
URL wsdlURL = new URL(wsdlUrl);
WSXxgkVin ss = new WSXxgkVin(wsdlURL);
WSXxgkVinSoap port = ss.getWSXxgkVinSoap12();
String account = "登录账号";
String pwd = "登录pwd";
// 直接通过port.login()调用解析服务端代码里的登录接口
String result = port.login(account, pwd);

解析的服务端代码:
在这里插入图片描述
登录及VIN码上报完整代码如下:

package com.ly.mp.mom.service.biz.lowregulation;

import com.ly.mp.basic.forwarder.programproxy.PMethodHandle;
import com.ly.mp.component.entities.EntityResult;
import com.ly.mp.mom.common.webservice.vecc.vecc_mep.web1.wsxxgkvin.WSXxgkVin;
import com.ly.mp.mom.common.webservice.vecc.vecc_mep.web1.wsxxgkvin.WSXxgkVinSoap;
import com.ly.mp.mom.mapper.TQmsDbZsHbqdMapper;
import com.ly.mp.mom.service.ibiz.lowregulation.HBQDUploadReport;
import com.ly.mp.project.common.exception.BusicenException;
import com.ly.mp.project.common.utils.ResultHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;
import java.util.Set;

/**
 * 
 * @Date 2023/04/27
 **/
@Slf4j
@Service
public class HBQDUploadReportImpl implements HBQDUploadReport {
    @Value("${hbqd_mep_wsdl_url}")
    String wsdlUrl;

    @Value("${hbqd_qybm}")
    private String qybm;

    @Value("${hbqd_upload_password}")
    private String uploadPassword;

    @Autowired
    private TQmsDbZsHbqdMapper dbZsHbqdMapper;

    /**
     * 环保清单VIN码上报
     *
     * @param mapParam
     * @return
     * @throws Exception
     */
    @Override
    @PMethodHandle(runMethodName = "LowRegulationServiceImpl.uploadHBQDVinReport", timeout = 600)
    public EntityResult uploadHBQDVinReport(Map<String, Object> mapParam) throws Exception {
        if (ObjectUtils.isEmpty(mapParam.get("vin"))) throw new BusicenException("参数不能为空");
        // 查询上报数据
        Map<String, Object> map = dbZsHbqdMapper.findHBQDVinReportData(mapParam.get("vin").toString());
        if (CollectionUtils.isEmpty(map)) throw new BusicenException("未获取到该车辆需上报的数据");
        URL wsdlURL = new URL(wsdlUrl);
        WSXxgkVin ss = new WSXxgkVin(wsdlURL);
        WSXxgkVinSoap port = ss.getWSXxgkVinSoap12();
        // 登录
        String token = this.mepLogin(qybm, uploadPassword, port);
        if (!StringUtils.isNotBlank(token)) throw new BusicenException("登录国家环保网失败");
        // 构建上报参数
        String strVinData = this.getVinReportParam(map);
        log.warn("环保清单VIN码上报参数为>>>>>>>>>>strVinData:" + strVinData);
        log.info("环保清单VIN码上报参数为>>>>>>>>>>strVinData:" + strVinData);
        String res = port.sendVinData(token, strVinData);
        log.warn("环保清单VIN码上报结果为>>>>>>>>>>res:" + res);
        log.info("环保清单VIN码上报结果为>>>>>>>>>>res:" + res);
        if (StringUtils.isNotBlank(res)) {
            if (res.contains("<succeed>true</succeed>")) {
                if (res.contains("<failure_info>")) {
                    log.warn("环保清单VIN码上报失败>>>>>>>>>>failure_info");
                    log.info("环保清单VIN码上报失败>>>>>>>>>>failure_info");
                    int index = res.indexOf("<vin>");
                    int index2 = res.indexOf("</vin>");
                    String vin = res.substring(index, index2 + 1);
                    int index3 = res.indexOf("<reason>");
                    int index4 = res.indexOf("</reason>");
                    String reason = res.substring(index3, index4 + 1);
                    // logOut
                    port.logout(token);
                    return ResultHelper.ngEntity(vin + ":" + reason);
                } else {
                    log.warn("环保清单VIN码上报成功>>>>>>>>>>SUCCESS");
                    log.info("环保清单VIN码上报成功>>>>>>>>>>SUCCESS");
                    // logOut
                    port.logout(token);
                    return ResultHelper.okEntity("该车辆VIN码上报成功");
                }
            } else if (res.contains("<succeed>false</succeed>")) {
                log.warn("环保清单VIN码上报失败>>>>>>>>>>FAIL:" + res);
                log.info("环保清单VIN码上报失败>>>>>>>>>>FAIL:" + res);
                // logOut
                port.logout(token);
                return ResultHelper.ngEntity("该车辆VIN码上报失败,格式错误,请检查!");
            }
        } else {
            log.warn("环保清单VIN码上报失败>>>>**********>>>>>>FAIL:" + res);
            log.info("环保清单VIN码上报失败>>>>**********>>>>>>FAIL:" + res);
            // logOut
            port.logout(token);
            return ResultHelper.okEntity("该车辆VIN码上报失败");
        }
        return null;
    }

    public String getVinReportParam(Map<String, Object> map) {
        String param = "<vindatas>\n" +
                "<vindata>\n" +
                "<vin>" + map.get("vin") + "</vin>\n" +
                "<xxgkh>" + map.get("xxgkbm") + "</xxgkh>\n" +
                "<sb>" + map.get("sb") + "</sb>\n" +
                "<sccdz>" + map.get("sccdz") + "</sccdz>\n" +
                "<fdjh>" + map.get("fdjh") + "</fdjh>\n" +
                "<scdate>" + map.get("scrq") + "</scdate>\n" +
                "<ccdate>" + map.get("scrq") + "</ccdate>\n" +
                "<ccsy>双怠速法</ccsy>\n" +
                "<ccjl>通过</ccjl>\n" +
                "<gkwww>https://www.vecc-mep.org.cn</gkwww>\n" +
                "<fdjsb>" + map.get("fdjcp") + "</fdjsb>\n" +
                "<fdjsccdz>" + map.get("scrq") + "</fdjsccdz>\n" +
                "</vindata>\n" +
                "</vindatas>";
        return param;
    }

    /**
     * 环保随车清单上传登录
     *
     * @param account 账号
     * @param pwd     密码
     * @return
     */
    public String mepLogin(String account, String pwd, WSXxgkVinSoap port) {
        String token = "";
        try {
            String result = port.login(account, pwd);
            if (StringUtils.isNotBlank(result) && "ok".equals(forRes(result))) {
                token = result.substring(result.indexOf("<data>") + 6, result.indexOf("</data>"));
            }
            return token;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * @param res
     * @return
     * @category webservice返回结果处理
     * @createtime 2017年3月29日上午11:12:22
     */
    public String forRes(String res) {
        String result = "fail";
        if (StringUtils.isNotBlank(res) && res.indexOf("<succeed>") >= 0 && res.indexOf("</succeed>") >= 9) {
            res = res.substring(res.indexOf("<succeed>") + 9, res.indexOf("</succeed>"));
            if (StringUtils.isNotBlank(res) && "true".equals(res)) {
                result = "ok";
            }
        }
        return result;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值