axis2+spring集成
1、新建一个web project项目,最终工程目录如下:
注意:本文只注重webservice服务器端的开发,因此com.ljq.client和com.ljq.test忽略不计
2、添加所需jar
3、接口HelloWorld
package com.ljq.service; public interface HelloWorld { public String greeting(String name); public String print(); }
4、接口实现类HelloWorldBean
package com.ljq.service; public class HelloWorldBean implements HelloWorld { public String greeting(String name) { return " 你好 " + name; } public String print() { return " 我叫林计钦 " ; } }
5、webservice类HelloWorldWebService
package com.ljq.service; import org.apache.axis2.AxisFault; import org.apache.axis2.ServiceObjectSupplier; import org.apache.axis2.description.AxisService; import org.apache.axis2.description.Parameter; import org.apache.axis2.i18n.Messages; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * 可能出现Axis2 spring bean not found 或者 Spring applicationContext not found。 * * 解决办法:构建自己的ServiceObjectSupplier,实现接口ServiceObjectSupplier,同时也实现Spring的ApplicationContextAware接口 * * * @author Administrator * */ public class HelloWorldWebService implements ServiceObjectSupplier, ApplicationContextAware { private static ApplicationContext ctx; public Object getServiceObject(AxisService axisService) throws AxisFault { Parameter springBeanName = axisService.getParameter( " SpringBeanName " ); String beanName = ((String) springBeanName.getValue()).trim(); if (beanName != null ) { if (ctx == null ) throw new AxisFault( " applicationContext is NULL! " ); if (ctx.getBean(beanName) == null ) throw new AxisFault( " Axis2 Can't find Spring Bean: " + beanName); return ctx.getBean(beanName); } else { throw new AxisFault(Messages.getMessage( " paramIsNotSpecified " , " SERVICE_SPRING_BEANNAME " )); } } public void setApplicationContext(ApplicationContext ctx) throws BeansException { this .ctx = ctx; } }
6、配置web.xml文件
<? xml version="1.0" encoding="UTF-8" ?> < web-app version ="2.5" xmlns ="http://java.sun.com/xml/ns/javaee" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > <!-- 添加spring监听器 --> < listener > < listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class > </ listener > <!-- 加载spring的配置文件 --> < context-param > < param-name > contextConfigLocation </ param-name > < param-value > /WEB-INF/applicationContext.xml </ param-value > </ context-param > <!-- 注册axis2的servlet --> < servlet > < servlet-name > AxisServlet </ servlet-name > < servlet-class > org.apache.axis2.transport.http.AxisServlet </ servlet-class > < load-on-startup > 1 </ load-on-startup > </ servlet > < servlet-mapping > < servlet-name > AxisServlet </ servlet-name > < url-pattern > /services/* </ url-pattern > </ servlet-mapping > < welcome-file-list > < welcome-file > index.jsp </ welcome-file > </ welcome-file-list > </ web-app >
7、在WEB-INF目录下配置applicationContext.xml(不存在则自己创建)
<? xml version="1.0" encoding="UTF-8" ?> <! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" > < beans > < bean id ="applicationContext" class ="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" /> < bean id ="helloWorld" class ="com.ljq.service.HelloWorldBean" ></ bean > </ beans >
8、在WEB-INF\services\axis\META-INF\目录下配置services.xml(不存在则自己创建)
<? xml version="1.0" encoding="UTF-8" ?> < service name ="hwWebService" > < description > axis2与spring集成案例 </ description > <!-- 通过ServiceObjectSupplier参数指定SpringServletContextObjectSupplier类来获得Spring的ApplicationContext对象 --> < parameter name ="ServiceObjectSupplier" > org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier </ parameter > <!-- SpringBeanName固定的不能改 helloWorld是spring中注册的实现类得id --> < parameter name ="SpringBeanName" > helloWorld </ parameter > <!-- 在这里最值得注意的是<messageReceivers>元素,该元素用于设置处理WebService方法的处理器。 例如,getGreeting方法有一个返回值,因此,需要使用可处理输入输出的RPCMessageReceiver类, 而update方法没有返回值,因此,需要使用只能处理输入的RPCInOnlyMessageReceiver类。 --> < messageReceivers > < messageReceiver mep ="http://www.w3.org/2004/08/wsdl/in-only" class ="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> < messageReceiver mep ="http://www.w3.org/2004/08/wsdl/in-out" class ="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </ messageReceivers > </ service >
axis2+spring集成到此已经开发完成,接下把工程部署到tomcat,
然后通过http://localhost:8083/axis2spring/services/hwWebService?wsdl访问