最近做业务的时候,需要调用一个第三方接口,接口协议为:接口协议:WebServices。
之前没搞过这种调用,所以查了很多资料,最终搞定。
这里记录下使用心得,希望能帮到正在看此文章的你。
接口提供方给的文档中,有接口地址,方法名,入参等。
直接贴代码,这里是采用axis的方式调用。
<dependency>
<groupId></groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId>axis-jaxrpc</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.5</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
正式代码
public Object deal(@RequestBody Map<String, Object> map) throws Exception {
String xxx= (String) ("xxx");
//获取webservice接口地址
String endpoint = "/xxx/";
//命名空间,可以直接打开接口地址查看
String soapaction = "/";
//调用的方法名
String method = "xxx";
// 创建一个服务(service)调用(call)
service = new ();
// 通过service创建call对象
Call call = (Call) ();
// 设置service所在URL
(endpoint);
(new QName(soapaction, method));
//设置参数及类型,与接口参数对应
//之前这里一直不知道是什么意思,搞了很久才明白
//第一个参数:命名空间
//第二个参数:参数的名字
//第三个参数:参数的类型
(new QName(soapaction, "username"),
Constants.XSD_STRING, );
(new QName(soapaction, "password"),
Constants.XSD_STRING, );
(new QName(soapaction, "xxx"),
Constants.XSD_STRING, );
(true);
//返回参数的类型
(new QName(soapaction, method), );
(soapaction + method);
//invoke调用方法并传递参数,获取XML
//new Object[]里是调用第三方接口的入参,可以在方法入参有,或者直接写死,我这里我username,password就是写死的
String invoke = (String) (new Object[]{username, password, xxx});
JSONObject result = (invoke);
return result ;
}
本来也是直接接收第三方接口需要的入参的,结果不知道为什么整个json都变成入参了,所以现在是用map接收。
之前我搜索资料的时候,好多文章的接口地址后面不是"asmx",而是"?"结尾,目前还不知道有什么区别,大家在使用的时候直接把你的东西替换掉就可以了。