1.下载jetty:http://ftp.neu.edu.cn/mirrors/eclipse/jetty/index.html,版本jetty-distribution-8.0.0.v20110901.zip,解压到当前文件夹
(补充:启动Jetty可输入如下命令: java -jar start.jar)
2.下载axis:http://www.apache.org/dist//ws/axis/1_4/ ,版本axis-bin-1_4.tar.gz,解压到当前文件夹,并将axis-1_4\webapps中的内容拷贝到jetty根目录的jetty_home\webapps中
(补充:开启jetty后,可通过访问http://localhost:8080/axis/测试axis是否安装好)
3.创建工程FaltTolerance,在包isLiveManager中创建接口IisLiveManager.java,内容为:
package isLiveManager;
public interface IisLiveManager {
public boolean isLiveAsk();
public boolean isLiveAnswer();
public boolean callBackTime(int time);
}
4.生成jar包
右键单击IisLiveManager.java,导出为isLiveManager.jar
5.将isLiveManager.jar拷贝到jetty_home\webapps\axis\WEB-INF\lib中
6.由jar包生成wsdl文件,运行如下指令:
E:\jetty-8.0.0\webapps\axis\WEB-INF\lib>set linpath=axis.jar;axis-ant.jar;commons-discovery-0.2.jar;commons-logging-1.0.4.jar;jaxrpc.jar;log4j-1.2.8.jar;saaj.jar;wsdl4j-1.5.1.jar;mailapi_1_3_1.jar;activation.jar;isLiveManager.jar
E:\jetty-8.0.0\webapps\axis\WEB-INF\lib>java -cp %linpath% org.apache.axis.wsdl.Java2WSDL -o isLiveManager.wsdl -l "http://localhost:8080/services/isLiveManager"isLiveManager.IisLiveManager
可以看到当前目录下生成了isLiveManager.wsdl。
(注意:此处url连接之后一定要用isLiveManager.IisLiveManager,必须和之前编写接口是的名称一致.比如标红部分错误写成isLiveManager,则会出现如下错误提示:Java.lang.ClassNotFoundException:isLiveManager at····at····at····)
(补充:命令org.apache.axis.wsdl.Java2WSDL -o ···· -l ·····中,-o表示output WSDL filenames,-l表示service location url)
(补充:命令java -cp后面是类路径,用于指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包)
7.由wsdl生成java文件,运行指令如下:
E:\jetty-8.0.0\webapps\axis\WEB-INF\lib>set linpath=axis.jar;axis-ant.jar;commons-discovery-0.2.jar;commons-logging-1.0.4.jar;jaxrpc.jar;log4j-1.2.8.jar;saaj.jar;wsdl4j-1.5.1.jar;mailapi_1_3_1.jar;activation.jar
E:\jetty-8.0.0\webapps\axis\WEB-INF\lib>java -cp %linpath% org.apache.axis.wsdl.WSDL2Java -s -S true isLiveManager.wsdl
(补充:命令org.apache.axis.wsdl.WSDL2Java -s -S···中,-s 表示server-side, emit server-side bingdings for web service;-S skeletonDeploy<argument>
deploy skeleton (true) or implementation (false) in deploy.wsdd.Default is false. Assumes --server-side.)
可以看到当前目录下生成了isLiveManager文件夹
文件夹isLiveManager中有自动生成的java文件,如下:
IisLiveManager.java
IisLiveManagerService.java
IisLiveManagerServiceLocator.java
IsLiveManagerSoapBindingImpl.java
IsLiveManagerSoapBindingSkeleton.java
IsLiveManagerSoapBindingStub.java
deploy.wsdd
undeploy.wsdd
文件的简单说明:
1.deploy即是我们部署webservices要用到的部署文件
2.IisLiveManagerSoapBindingImpl.java 即是我们要实现的服务器端的功能实现类,它是IisLivetManager.java的实现类
3.IisLiveService.java 即是客户端调用服务器端的服务的功能类
8.服务器代码的实现:
新建工程,将7中生成的6个java文件加入工程
注意要将如下所示jar包含到buildpath中:(注意单独在project中添加一个lib文件夹,并拷贝进去这些jar还不行,一定要在java build path中导入一次)
axis.jar;axis-ant.jar;commons-discovery-0.2.jar;commons-logging-1.0.4.jar;jaxrpc.jar;log4j-1.2.14.jar;saaj.jar;wsdl4j-1.5.1.jar;mailapi_1_3_1.jar;activation.jar
修改IsLiveManagerSoapBindingImpl.java的代码,如下:
package isLiveManager;
public class IsLiveManagerSoapBindingImpl implements isLiveManager.IisLiveManager{
public boolean isLiveAsk() throws java.rmi.RemoteException {
System.out.println("The method isLiveAsk() is running well.");
return false;
}
public boolean callBackTime(int in0) throws java.rmi.RemoteException {
System.out.println("The method callBackTime() is running well.The callBackTime is "+ in0+" ms.");
return false;
}
public boolean isLiveAnswer() throws java.rmi.RemoteException {
System.out.println("The method isLiveAnswer() is running well.");
return false;
}
}
9.编译:
将E:\Eclipse\FaultTolerance\bin中的isLiveManager文件夹(要注意类包结构)拷贝到:jetty_home\webapps\axis\WEB-INF\classes下。
注意,每次对IsLiveManagerSoapBindingImpl.java进行了修改,还应该再拷贝一次class文件。因为启动jetty运行的是jetty_home\webapps\axis\WEB-INF\classes中的的calss文件。
10.服务器端发布服务:
将步骤7中生成的deploy.wsdd拷贝到jetty_home\webapps\axis\WEB-INF\lib目录下
启动jetty ,命令:
E:\jetty-8.0.0>java -jar start.jar
发布服务命令
E:\jetty-8.0.0\webapps\axis\WEB-INF\lib>set linpath=axis.jar;axis-ant.jar;commons-discovery-0.2.jar;commons-logging-1.0.4.jar;jaxrpc.jar;log4j-1.2.8.jar;saaj.jar;wsdl4j-1.5.1.jar;mailapi_1_3_1.jar;activation.jar
E:\jetty-8.0.0\webapps\axis\WEB-INF\lib>java -cp %linpath% org.apache.axis.client.AdminClient deploy.wsdd
可看到如下输出
Processing file deploy.wsdd
<Admin>Done processing</Admin>
表示发布成功.
验证可查看:http://localhost:8080/axis
11.客户端调用服务器端发布的webservice:
客户端代码如下:
package test;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import isLiveManager.IisLiveManager;
import isLiveManager.IisLiveManagerServiceLocator;
public class testFaultTolerance {
public static void main(String[] args) {
IisLiveManagerServiceLocator ilmLoc = new IisLiveManagerServiceLocator();
try
{
IisLiveManager ilm = ilmLoc.getisLiveManager(new URL("http://localhost:8080/axis/services/isLiveManager"));
ilm.isLiveAnswer();
ilm.callBackTime(5);
ilm.isLiveAsk();
}
catch (MalformedURLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ServiceException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (RemoteException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
调用webservice成功,可以再开启jetty的后台看到输出: