您的位置:首页 > 其它

快速构建axis应用

2008-04-10 06:54 309 查看
        本文目的在于使用axis快速构建可用于实际项目开发的系统结构,对于SOAP协议理论方面不做赘述。本文中使用Jetty作为服务器,Jetty是一个免费的开放源码的100%纯Java的Http服务器和Servlet容器, 它具有轻量级、高性能和高可靠性、嵌入式、可扩展等优点。IDE使用eclipse。 服务端构建

         服务端项目Axisserver,中,lib下为服务端用到的jar文件,包括jetty相关jar文件和axis相关jar文件,将这些jar文件全部引入到项目中。server-config.wsdd为soap服务端配置文件,包含soap服务访问入口,相关参数,以及自定义的类等信息。AxisServer.java用来启动jetty服务器并注册axis服务。AxisServerInterface.java是用来为客户端提供服务的接口,客户端通过其可以访问所有开放的web services服务。Player.java是自己定义的对象,需要通过axis将此对象在服务端和客户端之间传递。MyException是自定义的异常,用来封装本项目内部的错误。 AxisServer.javapublic class AxisServer {       public void start() {              Server server = new Server();              SocketListener listener = new SocketListener();              listener.setPort(8080);              ServletHttpContext context = (ServletHttpContext) server                            .getContext("/");              context.setResourceBase("./web/");              try {                     context.addServlet("AxisDefault", "/webservices/*",                                   "org.apache.axis.transport.http.AxisServlet");                     server.addContext(context);                     server.addListener(listener);                     server.start();              } catch (Exception e) {                     e.printStackTrace();              }       }        public static void main(String[] args) {              new AxisServer().start();       }}AxisServer.java是项目是启动程序,负责启动jetty服务器,注册web services服务。AxisServerInterface.javapublic class AxisServerInterface {       public String ping() throws MyException {              return "do u hear me?";       }       public Player getPlayer(int id) throws MyException {              if (id < 0) {                     throw new MyException("invalid student");              }              Player s = new Player();              s.setId(id);              s.setName("Bush" + id);              return s;       }}本程序是服务端入口,现在提供了ping和getStudent方法。客户端通过axis可以访问这两个服务。Player.javapublic class Player {       private int id;       private String name;       private String team;       public int getId() {              return id;       }       public void setId(int id) {              this.id = id;       }       public String getName() {              return name;       }       public void setName(String name) {              this.name = name;       }       public String getTeam() {              return team;       }       public void setTeam(String team) {              this.team = team;       }}Player是一个保存数据的对象,负责在服务端和客户端之间传递数据。MyException.javapublic class MyException extends Exception implements Serializable {       String errorMsg;        public MyException() {       }       public MyException(String message) {              errorMsg = message;       }       public String getErrorMsg() {              return errorMsg;       }       public void setErrorMsg(String errorMsg) {              this.errorMsg = errorMsg;       }}MyException用来封装项目内部产生的异常,通过它,可以将服务端的异常传递到客户端。 server-config.wsdd[align=left][/align][align=left][/align][align=left]    [/align][align=left]       [/align][align=left]       [/align][align=left]       [/align][align=left]       [/align][align=left]    [/align][align=left]    [/align][align=left]       [/align][align=left]           [/align][align=left]       [/align][align=left]    [/align][align=left]    [/align][align=left]       [/align][align=left]        [/align][align=left]       [/align][align=left]       [/align][align=left]       qname="ns:Player"[/align][align=left]       xmlns:ns="http://service.server.axis.mi.com"[/align][align=left]       languageSpecificType="java:com.mi.axis.server.service.Player"/>[/align][align=left]       [/align][align=left]       qname="ns:MyException"[/align][align=left]       xmlns:ns="http://service.server.axis.mi.com"[/align][align=left]       languageSpecificType="java:com.mi.axis.server.service.MyException"/> [/align][align=left]    [/align]这个文件进行了axis服务端的相关定义,定义了web services的提供者的相关属性,定义了要传递的对象。 客户端构建

Axisclient为客户端项目,它引入了服务端项目的所有axis相关jar文件。Client.java用来演示如何访问web services。build.xml 是为使用ant 来编译产生可供Client.java使用的客户端程序。Axis.wsdl为生成的中间文件。 首先由ant 执行build.xml编译产生客户端程序,然后客户端程序Client.java调用产生了客户端程序访问服务端。build.xml                                                                                                                                                                                             通过服务端提供的web services生常中间文件axis.wsdl,在由编译asix.wsdl生成可供调用的客户端程序,程序生成在com.mi.axis.wsdl包下。注意项目一定要引入axis-ant.jar。 Client.java此程序访问服务端提供的web services,得到相关的结果,执行此程序前,要先启动服务器,即执行AxisSrver.java程序。public class Client {       public static void main(String[] args) {              AxisServerInterface asi = null;              try {                     URL url = new URL("http://localhost:8080/webservices/asi");                     AxisServerInterfaceServiceLocator loc = new AxisServerInterfaceServiceLocator();                     loc.setMaintainSession(true);                     asi = loc.getAxisServerInterfac(url);                     System.out.println(asi.ping());              } catch (Exception e) {              }              try {                     Player p = asi.getPlayer(12);                     System.out.println(p.getName());                     p = asi.getPlayer(-12);              } catch (MyException e) {                     System.out.println("I've got it");              } catch (RemoteException e) {                     System.out.println("sth wrong");              }       }}当执行asi.getPlayer(-12);时,catch到系统自定义的异常MyException。 执行:       先启动AxisServer,再执行Client,得到要传递的Player对象,和要catch的MyException异常。 相关程序网址:eclipse: www.eclipse.orgjetty: jetty.mortbay.orgAxis: www.apache.org
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: