AXIS发布WebService

 

axis版本是apache axis-bin-1_3,可以到apache网站下载。


1.环境变量设置
AXIS_HOME
即axis-bin-1_2.zip解压的目录(我的是在 F:/opensource/axis-1_2)
   AXIS_LIB
即 %AXIS_HOME%/lib

2.导入jar包
将axisa解压缩后,复制lib目录下列jar包到应用目录的lib目录:
saaj.jar
wsdl4j-1.5.1.jar
jaxrpc.jar
commons-logging-1.0.4.jar
commons-discovery-0.2.jar
axis-schema.jar
axis-ant.jar
axis.jar

3.修改web.Xml
将axis需要的servlet复制到应用的web.xml文件里面,注意顺序。
重新启动服务,可以访问“/servlet/AxisServlet”试一下,
比如:http://10.162.11.70:9080/newsdaoa/servlet/AxisServlet
       
           AxisServlet
           Apache-Axis Servlet
          
               org.apache.axis.transport.http.AxisServlet
          
       
       
          AdminServlet
          Axis Admin Servlet
         
            org.apache.axis.transport.http.AdminServlet
         
          100
      
      
         SOAPMonitorService
         SOAPMonitorService
        
            org.apache.axis.monitor.SOAPMonitorService
       
       
          SOAPMonitorPort
          5001
       
        100
       

          AxisServlet
          /servlet/AxisServlet
       
       
          AxisServlet
          *.jws
       
       
          AxisServlet
          /services/*
       
       
          SOAPMonitorService
          /SOAPMonitor
       


4.添加服务

将server-config.wsdd文件复制到发布应用的WEB-INF目录下,这就是AXIS的配置文件,以后所有的服务发布描述都会在里面找到。
如果还没有server-config.wsdd文件,可以先写一个发布描述文件,然后用axis来生成,以后需要发布新的服务,直接往里面添加即可。
比如有一个HelloWorld.class类,里面有sayHello(String msg)方法,想把它发布webservices,先写发布文件deploy.wsdd文件,即SOAP服务发布描述文件deploy.wsdd
http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
   
       
       
   

进入dos窗口,执行下列命令:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd
即可生成server-config.wsdd文件。
如果想发布新的服务,直接往server-config.wsdd里面添加service描述,比如想把知识管理模块导入知识功能发布成webservices,对应的程序文件是com.lc.v3.ecp.km.inteface.KmDelegate.java,需要发布的方法是importKm(String kmXmlStr),将此文件编译成class后,放到发布系统的相应目录下,往server-config.wsdd添加下列描述:


 
 
重新启动服务,一个新的webservices就发布成功了,如果系统发布地址是http://10.162.11.70:9080/newsdaoa
调用的url是:http://10.162.11.70:9080/newsdaoa/services/ImportKm

5.给服务添加Handler

J2EE Web 服务中的Handler技术特点非常像Servlet技术中的Filter。我们知道,在Servlet中,当一个HTTP到达服务端时,往往要经过多个Filter对请求进行过滤,然后才到达提供服务的Servlet,这些Filter的功能往往是对请求进行统一编码,对用户进行认证,把用户的访问写入系统日志等。相应的,Web服务中的Handler通常也提供一下的功能:
对客户端进行认证、授权;
把用户的访问写入系统日志;
对请求的SOAP消息进行加密,解密;
为Web Services对象做缓存。

SOAP消息Handler能够访问代表RPC请求或者响应的SOAP消息。在JAX-RPC技术中,SOAP消息Handler可以部署在服务端,也可以在客户端使用。
至于如何开发handler,可以到网上去搜索陈亚强写的《使用Handler来增强Web服务的功能》,人家写的比较好,我就不在这废话了。
比如服务必须有用户名和密码才能访问,可以添加axis自带的检验认证handler,用户名和密码存放在/WEB-INF下的users.lst文件中。handler分别是:
//访问者必须提供用户名和密码,只要用户名和密码正确即可
org.apache.axis.handlers.SimpleAuthenticationHandler
//访问者必须提供指定的用户名和密码,用户名和密码正确即可
//在services中用allowedRoles属性指定访问的用户名
org.apache.axis.handlers.SimpleAuthorizationHandler

如果想给上面的ImportKm服务添加用户校验,并且只允许用户是pubnet,密码是123456的用户访问,首先往users.lst添加用户名和密码,格式是:
pubnet 123456
user1 pass1
user2
user3 pass3

改变上述server-config.wsdd里面service的描述:

//添加handler,直接指定java类
 
   
   
 
  
  
  

除了上面方式外,还可以先单独声明handler,然后再添加到service里,比如自己开发了一个日志handler,用来记录每次对webservice的访问,程序是com.lc.v3.ecp.pub.webservies. AxisLogHandler,添加方式改变为:
//先单独定义日志handler

   //日志记录文件
  

//再往service添加

  
    //引用log定义
    

PS:....................................

第二种发布方式:

1、将HelloWorld.java编译成HelloWorld.class,放到%TOMCAT_HOME%/webapps/axis/WEB-INF/classes下

2、在%TOMCAT_HOME%/webapps/axis/WEB-INF下新建deploy.wsdd文件,即SOAP服务发布描述文件 deploy.wsdd


    
        
        
    


在DOS下转换目录到%TOMCAT_HOME%/webapps/axis/WEB-INF,命令:

java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

你会发现目录下多了一个server-config.wsdd文件,这就是AXIS的配置文件,以后所有的服务发布描述都会在里面找到。(当然,你可以直接修改它,不用再写deploy.wsdd)然后打开浏览器http://localhost:8080/axis/servlet/AxisServlet,你就会看到你的服务已发布

同样用客户端程序访问一下:(注意和上边的差别!!)

HelloClient.java

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class HelloClient
{
   public static void main(String [] args) throws Exception {

       String endpoint = "http://localhost:" +"8080"+ "/axis/services/HelloWorld";//注意!差别仅仅在这里!!

       Service  service = new Service();
       Call     call    = (Call) service.createCall();
       call.setTargetEndpointAddress( new java.net.URL(endpoint) );
        call.setOperationName("sayHello"  );

         String res = (String) call.invoke( new Object[] {} );

                         System.out.println( res );
   }
}

 

来自: http://bound.blogdriver.com/bound/1120135.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值