前几天对接阿里云短信接口时,需要调用其他系统的数据,该系统开发人员给我提供了webservice接口。对于从来没见过webservice接口的我,真的是一脸懵。现在把记录一下,方便自己以后用,说不定也能帮到正在看这篇文档的你。
首先需要确认,我这边写的是java后台直接调用webservice接口,并且接口后缀为asmx。
下面直接上代码:
public static void main(String[] args){
String url = "http://xxx.xxx.xxx/Webservice.asmx";// 提供接口的地址
String soapaction = "http://tempuri.org/"; // 域名,这是在server定义的--不知道的可以问接口提供方,他们一并提供这个
Service service = new Service();
try{
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(new QName(soapaction, "SendSms")); // 设置要调用哪个方法
// 设置要传递的参数-要和接口方提供的参数名一致
call.addParameter(
new QName(soapaction,"un"),
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.addParameter(
new QName(soapaction, "pwd"),
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.addParameter(
new QName(soapaction, "PhoneNumbers"),
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.setReturnType(new QName(soapaction, "SendSms"), String.class); // 要返回的数据类型(自定义类型,我这边接口提供方给我返回的是json字符串,所以我用string类型接收。这个地方一定要设置好,不然各种报错很崩溃)
call.setUseSOAPAction(true);
call.setSOAPActionURI(soapaction + "SendSms");
String v = (String) call.invoke(new Object[] { un, pwd, PhoneNumbers });// 调用方法并传递参数-传递的参数和设置的参数要对应,顺序不能搞错了
System.out.print(v);//打印结果
}catch (Exception ex){
ex.printStackTrace();
}
}
嗯,上面这段代码要想成功运行还需要加载几个jar包:
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>axis</groupId>
<artifactId>axis-jaxrpc</artifactId>
<version>1.4</version>
</dependency>