1、 axis2+spring集成 简洁并可运行成功的例子(POJO和Spring:1的实现)
http://blog.youkuaiyun.com/shimiso/article/details/9946743
2、axis2+spring集成 (POJO和Spring:2的实现)
http://tzz6.iteye.com/blog/2269441
axis2 服务发布与spring对象注入总结:
部署Web服务
部署Web服务的方式有两种:POJO和AAR
如果使用 POJO方式(与开发所说的POJO不是一个概念),那么将编译好的class文件放到WEB-INF/pojo/目录下即可,但这种class不能使用包,因此局限性非常明显,没什么价值。
另一种是使用 AAR包,部署到WEB-INF/services目录下。AAR有自己的特定结构,内部有包结构的class文件,在META-INF目录下放services.xml,在lib目录下放类库(貌似无法加载不起作用)。
其实还可以将AAR包的内容解压出来直接放到axis2\WEB-INF\classes下,相当于 在axis2的web应用下做二次开发,这样可以将用到的jar直接放到axis2\WEB-INF\lib下,也可以获取到ServletContext。
开发Web服务
POJO:
直接使用POJO来作为Web服务是最简单的方式,只需要配置好services.xml并按AAR包的格式打包好发布即可。
POJO和Spring:
1. 如果可以在Web应用级使用Spring(With a ServletContext):
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。
2. 如果是在在Web应用级使用Spring,但Axis2不能获取到Spring的Context,比如Axis2在AAR包中(Without a ServletContext)(其实就是Spring能初始化,但Axis2获取不到ServletContext,那就换种方式获取Context):
a) 在Spring的applicationContext.xml文件中添加Axis2的ApplicationContextHolder,让Axis2能够获取到Spring的Context。
b) Axis2的services.xml中对于使用Spring定义的bean使用ServiceObjectSupplier(SpringAppContextAwareObjectSupplier)和SpringBeanName。
3. 如果是在AAR内部使用Spring(Spring Inside an AAR)(无法实现)
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目录下。