package com.workingmouse.webservice.axis; import org.apache.axis.AxisFault; import org.apache.axis.MessageContext; import org.apache.axis.handlers.soap.SOAPService; import org.apache.axis.providers.java.RPCProvider; /** * Axis provider for RPC-style services that uses Spring Framework * to retrieve service classes and resolve their dependencies. * Simply delegates to {@link com.workingmouse.webservice.axis.SpringBeanProvider}. *

* To use this class:
* 1. Configure {@link com.workingmouse.webservice.axis.SpringAxisServlet} as your axis servlet in web.xml. *

 * <servlet>
 *   <servlet-name>axis</servlet-name>
 *   <display-name>Apache-Axis Servlet</display-name>
 *   <servlet-class>de.soapwars.webservice.axis.SpringAxisServlet</servlet-class>
 * </servlet>
 * 
* 2. Configure your server-config.wsdd service to use this class as the service handler. *
 * <service name="products.jws" provider="Handler" style="document" use="literal">
 *   <parameter name="handlerClass" value="de.soapwars.webservice.axis.SpringBeanRPCProvider"/>
 *   <parameter name="wsdlTargetNamespace" value="http://www.ioof.com.au/schemas/public"/>
 *   <parameter name="springBean" value="productWS"/>
 * </service>
 * 
* 3. Configure a Spring-managed bean in axis-servlet.xml that will act as the web service end point. *
 * <bean id="productWS" class="de.soapwars.webservice.ProductWebServices">
 *   <property name="productServices"><ref bean="productServices"/></property>
 * </bean>
 * 
* * @author Tom Czarniecki (cThomas AT workingmouse DOT com) * * @see com.workingmouse.webservice.axis.SpringAxisServlet * @see com.workingmouse.webservice.axis.SpringBeanProvider */ public class SpringBeanRPCProvider extends RPCProvider { /** * its serializable */ private static final long serialVersionUID = -7067788485671530833L; private final SpringBeanProvider provider = new SpringBeanProvider(); /** * @see org.apache.axis.providers.java.JavaProvider#makeNewServiceObject(org.apache.axis.MessageContext, java.lang.String) */ protected Object makeNewServiceObject(MessageContext msgContext, String clsName) throws Exception { return provider.getBean(msgContext.getAxisEngine(), clsName); } /** * @see org.apache.axis.providers.java.JavaProvider#getServiceClass(java.lang.String, org.apache.axis.handlers.soap.SOAPService, org.apache.axis.MessageContext) */ protected Class getServiceClass(String clsName, SOAPService service, MessageContext msgContext) throws AxisFault { return provider.getBeanClass(service.getEngine(), clsName); } /** * @see org.apache.axis.providers.java.JavaProvider#getServiceClassNameOptionName() */ protected String getServiceClassNameOptionName() { return SpringBeanProvider.BEAN_OPTION_NAME; } }