最近要对接金蝶财务系统,对方提供了一个webService接口。而且测试接口地址还是内网的,每改一处代码都要部署堡垒机去测试,光是一个登录接口就花了我两天时间很是无语(主要是接口文档地址不会看)
接口的地址大就是这种,以wsdl结尾的
图一:
打开这个接口地址之后里面就是接口方法以及接口调用参数
图二:
相信看到这,大家都有点蒙,不知如何下手,今天就以我的亲身经历告诉大家如何解决这种问题(hutool)是个好东西
图三:
解析后的内容就是这种
图四:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:log="http://login.webservice.bos.kingdee.com">
<soapenv:Header/>
<soapenv:Body>
<log:login soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<userName xsi:type="xsd:string">"21"</userName>
<password xsi:type="xsd:string">21@2022</password>
<slnName xsi:type="xsd:string">eas</slnName>
<dcName xsi:type="xsd:string">21</dcName>
<language xsi:type="xsd:string">l2</language>
<dbType xsi:type="xsd:int">1</dbType>
</log:login>
</soapenv:Body>
</soapenv:Envelope>
下面是Java代码
@GetMapping("/test6")
public R test6(){
Map<String,Object> map=new HashMap<>();
map.put("userName","user");
map.put("password","kduser@2022");
map.put("slnName","eas");
map.put("dcName","gxlqtest");
map.put("language","L2");
map.put("dbType",1);
SoapClient client = SoapClient.create("http://192.168.15.56:9191/ormrpc/services/EASLogin")
// 设置要请求的方法,此接口方法前缀为web,传入对应的命名空间
.setMethod("log:login", "http://login.webservice.bos.kingdee.com")
.setParams(map,false).header("SOAPAction","application/soap+xml;charset=utf-8 ");
// 设置参数,此处自动添加方法的前缀:web
// 发送请求,参数true表示返回一个格式化后的XML内容
// 返回内容为XML字符串,可以配合XmlUtil解析这个响应
client.sendForResponse().getCookie("JSESSIONID");
log.info(client.sendForResponse().toString());
return R.ok();
}
上面传参的内容可以参考图四,map是要传入的参数
调用成功之后就会返回下图获取sessionId,我们还可以获取cookie等参数,具体要根据你们的业务来获取即可
到此处就算是调用成功了,后面如遇到其他问题还会继续更新此文章的!希望对大家有所帮助,少走些弯路!