以车辆环保清单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;
}
}