最近对接接口,直接给了一个接口地址,是以?wsdl结尾结束,看着有些懵,开始只是用原来的请求接口的方式试了一下,很不幸,都不能访问通,后来才知道原来这样的接口形式是webService形式的接口,通过给出的地址可以查看相应的方法和参数,例如:
http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl---这是查询号码归属地的地址,可以拿来结合实际记录一下。
以上就是这个地址展示出来的信息,这里不记录具体是什么意思了,可以自行百度一下, 比较好理解,上面标注的红框内基本就是要用的信息,方法名和参数等。
关键就是怎么拿这些信息进行请求该方法,这就需要自己写请求端:
String endpoint = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";
String res = null;
// 查询电话号码的接口方法名
String operationName = "getMobileCodeInfo";
// 定义service对象
Service service = new Service();
// 创建一个call对象
Call call = (Call) service.createCall();
// 设置目标地址,即webservice路径
call.setTargetEndpointAddress(endpoint);
// 设置操作名称,即方法名称 http://WebXml.com.cn/
call.setOperationName(new QName("http://WebXml.com.cn/",operationName));
// 设置方法参数1
call.addParameter( new QName("http://WebXml.com.cn/","mobileCode"),
XMLType.XSD_INT,
javax.xml.rpc.ParameterMode.IN);
call.addParameter( new QName("http://WebXml.com.cn/","userID"),
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
// 设置方法参数2
call.addParameter("mobileCode",XMLType.XSD_INT, ParameterMode.IN);
call.addParameter("userID", Constants.XSD_INTEGER, ParameterMode.IN);
//方式2结束,这种方式在实际使用中,能传参成功
// 设置返回值类型
//对于返回是字符串数组的返回类型只有这两种可行
//call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_VECTOR);
call.setReturnClass(java.lang.String.class);
call.setUseSOAPAction(true);
call.setSOAPActionURI("http://WebXml.com.cn/"+"getMobileCodeInfo");
res=(String) call.invoke(new Object[]{mobileCode,userID});
// 如果返回类型是org.apache.axis.encoding.XMLType.SOAP_VECTOR时用下面的转型接收
//Vector v=(Vector) call.invoke(new Object[]{cityCode,userId});
System.out.println(res);
具体使用方式,要根据实际项目情况定。