Axis2学习总结

[b]Axis2工具使用介绍[/b]
Axis2提供了工具包(bin)和部署包(war):
工具包主要有Axis2类库、bin里一些小工具(wsdl2java、java2wsdl等)、Web应用、模块、服务和示例,我只用工具包的小工具生成Java代码和WSDL。甚至由于项目中已经包含了Axis2的类库,在使用Ant生成aar时也不会用到这里的东西。至于其中的Web应用,我也没有用过,这些东西在war包中已经有了。
部署包主要是Axis2的应用,这个应用是用来干什么的呢?
1. 管理Web服务引擎
2. 发布和管理Web服务
是不是发布Web服务必须使用Axis2提供的这个Web应用?
官方文档中提供的两种发布Web服务的方式(POJO和AAR包),都是发布在自己的Web应用下,至于是否可以采用其他方式还不清楚(比如像CXF,通过配置的方式嵌入到现有的应用中,以对外提供Web服务)。

[b]生成客户端[/b]
生成客户端代码还是很简单的,通过服务端的wsdl,使用wsdl2java即可生成客户端代码,即可以透明方式访问远程服务。

[b]部署Web服务[/b]
部署Web服务的方式有两种:POJO和AAR
如果使用[color=red]POJO方式[/color](与开发所说的POJO不是一个概念),那么将编译好的class文件放到WEB-INF/pojo/目录下即可,但这种class不能使用包,因此局限性非常明显,没什么价值。
另一种是使用[color=red]AAR包[/color],部署到WEB-INF/services目录下。AAR有自己的特定结构,内部有包结构的class文件,在META-INF目录下放services.xml,在lib目录下放类库(貌似无法加载不起作用)。

其实还可以将AAR包的内容解压出来直接放到axis2\WEB-INF\classes下,相当于[color=red]在axis2的web应用下做二次开发[/color],这样可以将用到的jar直接放到axis2\WEB-INF\lib下,也可以获取到ServletContext。

[b]开发Web服务[/b]
POJO:
直接使用POJO来作为Web服务是最简单的方式,只需要配置好services.xml并按AAR包的格式打包好发布即可。

POJO和Spring:
[color=red]1. 如果可以在Web应用级使用Spring(With a ServletContext):[/color]
a) 那么可以在web.xml中使用servlet或listener将Spring的context加载进来。
b) Spring配置文件中只需定义Web服务所需的bean配置。
c) Axis2可以获取到ServletContext(applicationContext.xml在Axis2的Web应用中,而不在AAR包),因此在services.xml中配置依赖Spring的服务需要使用ServiceObjectSupplier(SpringServletContextObjectSupplier)和SpringBeanName以制定所需要配置为服务的Bean。

[color=red]2. 如果是在在Web应用级使用Spring,但Axis2不能获取到Spring的Context,比如Axis2在AAR包中(Without a ServletContext)(其实就是Spring能初始化,但Axis2获取不到ServletContext,那就换种方式获取Context):[/color]
a) 在Spring的applicationContext.xml文件中添加Axis2的ApplicationContextHolder,让Axis2能够获取到Spring的Context。
b) Axis2的services.xml中对于使用Spring定义的bean使用ServiceObjectSupplier(SpringAppContextAwareObjectSupplier)和SpringBeanName。

[color=red]3. 如果是在AAR内部使用Spring(Spring Inside an AAR)(无法实现)[/color]
a) 需要定义加载Spring配置文件的初始化程序(SpringInit),需要实现ServiceLifeCycle接口。
b) 在services.xml中配置SpringInit,需要设置ServiceTCCL为composite、load-on-startup为true。这样在加载其他services前已经将Spring进行了初始化。
c) 需要在Spring的applicationContext.xml文件中配置ApplicationContextHolder,这样Axis2便可以通过SpringAppContextAwareObjectSupplier获取到Spring的Context。
d) 官方文档说可以将Spring的包放到AAR的lib目录下,但实际使用中无法加载AAR包lib目录下的类库,所以只能放到Axis2 Web应用的lib目录下。

[color=red]4. 问题[/color]
a) [color=red]AAR中的lib包无法加载[/color],导致不可能在AAR包中使用Spring。只能将jar放到axis2\WEB-INF\lib下。这样就无法实现AAR包热部署的优势,而且不能解决多个AAR包用到同一个类库而是用的版本不同的问题。
b) The service will not deploy if you add the above .jar files(axis2-spring-1.5.3.jar and spring.jar files) to the service archive due to class loding issues.可见Axis2并不能很好的处理AAR包中的lib问题。
c) Hibernate by default looks for its config files in the classpath. By running Hibernate inside the AAR, Hibernate won't be able to find its config files. The way to get around this limitation is either to expand the AAR or place the hibernate config files in a specific directory under WEB-INF/classes - and then use Spring's setMappingDirectoryLocations for several options.如果AAR包中不但用到了Spring,还用到了Hibernate,那就更是不能AAR包支持内部使用了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值