首先是所需要的jar包:
记录两种常用方式:
方法一:AXIS调用远程的web service
url后加上wsdl
以下为例子
import java.util.Date;
import java.text.DateFormat;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import java.lang.Integer;
import javax.xml.rpc.ParameterMode;
public class caClient {
public static void main(String[] args) {
try {
String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";
//直接引用远程的wsdl文件
//以下都是套路
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName("addUser");//WSDL里面描述的接口名称
call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,
javax.xml.rpc.ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
String temp = "测试人员";
String result = (String)call.invoke(new Object[]{temp});
//给方法传递参数,并且调用方法
System.out.println("result is "+result);
}
catch (Exception e) {
System.err.println(e.toString());
}
}
}
方法二:
使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用,即可。仍然以前面的global weather report为例。
首先 java org.apache.axis.wsdl.WSDL2Java http://www.webservicex.net/globalweather.asmx.WSDL
原本的网址是http://www.webservicex.net/globalweather.asmx?WSDL,中间个各问号,但是Linux下面它不能解析,所以去掉问号,改为点号。
GlobalWeather.java GlobalWeatherLocator.java GlobalWeatherSoap.java GlobalWeatherSoapStub.java
其中GlobalWeatherSoap.java是我们最为关心的接口文件,如果你对RMI等SOAP实现的具体细节不感兴趣,那么你只需要看接口文件即可,在使用的时候,引入这个接口即可,就好像使用本地类一样。
public class OneCardWebServiceManagerImpl implements OneCardWebManager {
GlobalWeatherLocator locator = new GlobalWeatherLocator();
private String USERNAME = "username";
private String PASSWORD = "password";
@SuppressWarnings("unchecked")
public Map getOneCardSoution(String sno) {
Map map = new HashMap();
GlobalWeatherSoap service;
try {
service = locator.getTrjnSearchService();
((GlobalWeatherSoapStub) service).setUsername(USERNAME);
((GlobalWeatherSoapStub) service).setPassword(PASSWORD);
service.方法名(参数);
}catch (ServiceException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
ps:参考http://yang-min.iteye.com/blog/600172