[prev in list] [next in list] [prev in thread] [next in thread] 

List:       sandesha-dev
Subject:    [jira] Commented: (AXIS2-4662) Improve Spring Integration for Axis2
From:       "Stephan van Hugten (JIRA)" <jira () apache ! org>
Date:       2010-03-30 13:00:27
Message-ID: 1787042685.577941269954027841.JavaMail.jira () brutus ! apache ! org
[Download RAW message or body]


    [ https://issues.apache.org/jira/browse/AXIS2-4662?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12851383#action_12851383 \
] 

Stephan van Hugten commented on AXIS2-4662:
-------------------------------------------

After some tinkering I have come up with this:

ApplicationContext.xml:

  <context:component-scan base-package="com.example">
  	<context:include-filter type="annotation" expression="javax.jws.WebService"/>
  </context:component-scan>
  
  <bean class="com.example.poc.beanprocessor.WebServiceAnnotationBeanPostProcessor" \
/>

BeanPostProcessor:

public class WebServiceAnnotationBeanPostProcessor extends \
CommonAnnotationBeanPostProcessor implements  ApplicationContextAware {

	/**
	 * 
	 */
	private static final long serialVersionUID = -4394340453143619407L;
	private AxisServer axisServer;
	private ApplicationContext applicationContext;

	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) throws \
BeansException {  if (bean.getClass().isAnnotationPresent(WebService.class)) {
			if (axisServer == null) {
				Map beans = applicationContext.getBeansOfType(AxisServer.class);
				if (beans.isEmpty()) {
					throw new NoSuchBeanDefinitionException("No Axis2 engine configured in the \
Spring context!");  } else {
					// TODO Can there be more than 1?
					axisServer = (AxisServer) beans.values().iterator().next();
				}
			}
			try {
				//FIXME: Use annotation configured servicename
				axisServer.deployService(bean);
			} catch (AxisFault e) {
				throw new BeanCreationException(e.getMessage(), e);
			}
		}
		return bean;
	}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws \
BeansException {  this.applicationContext = applicationContext;
	}
}

> Improve Spring Integration for Axis2
> ------------------------------------
> 
> Key: AXIS2-4662
> URL: https://issues.apache.org/jira/browse/AXIS2-4662
> Project: Axis2
> Issue Type: Improvement
> Components: kernel
> Affects Versions: 1.5.1
> Reporter: Stephan van Hugten
> Attachments: POC_Axis2.zip
> 
> 
> I wanted to create an application that has tight integration between Axis2 \
> webservices and Spring. There is already a solution presented at the Axis2 website, \
> http://ws.apache.org/axis2/1_5_1/spring.html, but I found that solution very \
> cumbersome in my opinion and doesn't support the JSR 181 annotations. With my \
> proposed approach it is possible to fully integrate the Axis2 run-time with a \
> spring container, whether it is stand-alone or in a web server such as Tomcat. This \
> solution also supports both the JSR 181 annotated classes and the regular \
> AAR-files. To fully integrate Axis2 with Spring I have overridden the \
> SimpleAxis2Server class used by the standard stand-alone run-time. A full listing \
> of this class is included in my example application. The important stuff is in line \
> 21 up to 36. First it determines the absolute path of the repository and config \
> location parameters. Then it passes those to the AxisRunner constructor (lines 10 \
> to 13) and starts the server. After it successfully starts the Axis2 server it \
> returns the bean to the Spring Container. After the creation of the bean it will \
> invoke setDeployedWebservices (lines 46 to 51) which will cycle through the passed \
> webservice classes and deploy them at the created run-time. That's it! No \
> additional configuration or packaging is needed. If the Spring container starts up, \
> so does the Axis2 run-time and the webservices get deployed. The needed \
> configuration in order to integrate Axis2 is quite simple. Below is a complete \
> listing of my applicationContext.xml (Spring 2.5.6): <?xml version="1.0" \
> encoding="UTF-8"?> <beans xmlns="namespace stuff">
> 
> <bean name="axisServer" class="com.example.poc.server.AxisRunner" \
> factory-method="create" scope="singleton">  <constructor-arg value="repository" />
> 	<constructor-arg value="config/axis2.xml" />
> 	<property name="deployedWebservices">
> 		<props>
> 			<prop key="WeatherSpringService">
> com.example.poc.webservice.WeatherSpringService
> </prop>
> 		</props>
> 	</property>
> </bean>
> </beans>
> With a little bit more effort I think it's also possible to integrate this solution \
> with the Spring component scan, making it possible to annotate the webservice \
> classes and the run-time with @component. I have tested my war-project with Tomcat \
> 6 and Sun Webserver 7.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic