使用WebService调用接口,找了很多方法,终于可以用了
参考文章:java调用webservice随感
public static String getPhone(String mobileCode ,String userID) throws RemoteException, ServiceException{
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));
// 设置方法参数
call.addParameter( new QName("http://WebXml.com.cn/","mobileCode"),
org.apache.axis.encoding.XMLType.XSD_STRING,
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);
// 设置返回值类型
//对于返回是字符串数组的返回类型只有这两种可行
//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);
return res;
}
下边是自己搭建的简单的WebServices服务器和客户端
服务器
package com.band.server;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class PrintName {
public static void main(String[] args) {
String address = "http://localhost:9001/service/PrintName?wsdl";
Endpoint.publish(address, new PrintName());
System.out.println("--发布成功--");
}
//随便定义的方法
public String findUserInfoByName(String arg0){
System.out.println("---------conn----------");
return arg0;
}
}
客户端
public static String print(String names){
String result = null;
try {
String endpoint = "http://localhost:9001/service/PrintName?wsdl";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
/**
*注意这里,要设置Namespace
*/
call.setOperationName(new QName("http://server.band.com/","findUserInfoByName"));//WSDL里面描述的接口名称
call.addParameter("arg0", org.apache.axis.encoding.XMLType.XSD_STRING,ParameterMode.IN);//接口的参数
//call.addParameter("userID", org.apache.axis.encoding.XMLType.XSD_STRING,ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
call.setUseSOAPAction(true);
call.setSOAPActionURI("http://server.band.com/findUserInfoByName");
result = (String)call.invoke(new Object[]{names});
//给方法传递参数,并且调用方法
System.out.println("result is :"+result);
}
catch (Exception e) {
System.err.println(e.toString());
}
return result;
}