现在的位置: 首页 > 综合 > 正文

快速构建axis应用

2013年08月08日 ⁄ 综合 ⁄ 共 4798字 ⁄ 字号 评论关闭
        本文目的在于使用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.java
public 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.java
public class AxisServerInterface {
       public String ping() throws MyException {
              return "do u hear me?";
       }
       public Player getPlayer(int id) throws MyException {
              if (id
                     throw new MyException("invalid student");
              }
              Player s = new Player();
              s.setId(id);
              s.setName("Bush" + id);
              return s;
       }
}
本程序是服务端入口,现在提供了ping和getStudent方法。客户端通过axis可以访问这两个服务。
Player.java
public 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.java
public 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
   
      
      
      
      
   
   
      
          
      
   
   
      
       
      
      
       qname="ns:Player"
       xmlns:ns="http://service.server.axis.mi.com"
       languageSpecificType="java:com.mi.axis.server.service.Player"/>
      
       qname="ns:MyException"
       xmlns:ns="http://service.server.axis.mi.com"
       languageSpecificType="java:com.mi.axis.server.service.MyException"/> 
   
这个文件进行了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异常。
 
相关程序网址:
jetty: jetty.mortbay.org

Axis: www.apache.org

抱歉!评论已关闭.