如何使用axis发布webservices

来源:百度文库 编辑:神马文学网 时间:2024/04/28 21:17:16
本文借鉴了网上的两篇文章:
 
AXIS学习笔记
 
使用Handler来增强Web服务的功能
 
 
 
我们使用的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






 
 
进入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定义