原文链接:https://my.oschina.net/erichsbc/blog/148913
1.下载AXIS2类库,AXIS2是目前java调用webservice的一个主要方法(由于更新较频繁,请自行google该类库的网址)
2.由于是第三方webservice,直接引入AXIS2的包就可以用了,代码如下:
import java.rmi.RemoteException;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
public class webServiceTest {
public String invokeRemoteFuc() {
String endpoint = "http://localhost:8080/webservice/services/helloworld";
String result = "no result!";
Service service = new Service();
Call call;
Object[] object = new Object[1];
object[0] = "Dear I miss you";//Object是用来存储方法的参数
try {
call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);// 远程调用路径
call.setOperationName("say");// 调用的方法名
// 设置参数名:
call.addParameter("str1", // 参数名
XMLType.XSD_STRING,// 参数类型:String
ParameterMode.IN);// 参数模式:'IN' or 'OUT'
// 设置返回值类型:
call.setReturnType(XMLType.XSD_STRING);// 返回值类型:String
result = (String) call.invoke(object);// 远程调用
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
webServiceTest t = new webServiceTest();
String result = t.invokeRemoteFuc();
System.out.println(result);
}
}
该方法的原理很简单,通过AXIS2封装好的类设置URL和参数,直接调用就好了,我们要关注的就是设置URL,方法,还有方法的参数,其他的copy&paste就可以了。
附自己总结的共通方法:
import java.rmi.RemoteException;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
public class WebserviceClientUtils {
/**
* 使用webservice获取网页内容(参数暂时只支持String类型)
* !!参数和参数名需一一对应!!
*
* @Title: getWebserviceContent
* @Description: TODO
* @param endpoint
* 远程调用路径
* @param method
* 调用的方法名
* @param params
* 参数
* @param paramsName
* 参数名
* @return 正常情况返回JSON类型字符串,异常情况返回"error"
*/
public static String getWebserviceContent(String endpoint, String method, Object[] params, String[] paramsName) {
String result = "error";
// 参数及参数名是否符合要求判断
if (params == null || paramsName == null || params.length != paramsName.length) {
return result;
}
Service service = new Service();
Call call;
try {
call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);// 远程调用路径
call.setOperationName(method);// 调用的方法名
// 设置参数名:
for (String paramName : paramsName) {
// 参数名、参数类型:String、 参数模式:'IN' or 'OUT'
call.addParameter(paramName, XMLType.XSD_STRING, ParameterMode.IN);
}
// 设置返回值类型:
call.setReturnType(XMLType.XSD_STRING);// 返回值类型:String
result = (String) call.invoke(params);// 远程调用
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
return result;
}
}