1 package org.codehaus.xfire.spring;
2
3 import org.codehaus.xfire.annotations.AnnotationServiceFactory;
4 import org.codehaus.xfire.annotations.WebAnnotations;
5 import org.codehaus.xfire.service.Service;
6 import org.codehaus.xfire.service.ServiceRegistry;
7 import org.codehaus.xfire.service.binding.BeanInvoker;
8 import org.springframework.beans.BeansException;
9 import org.springframework.beans.factory.config.BeanPostProcessor;
10
11 /***
12 * This BeanPostProcessor will create an XFire service from a service class if and only if
13 * it is marked with the JSR 181 @WebService attribute. This replaces the need for using the
14 * ServiceComponent class.
15 *
16 * @see org.codehaus.xfire.spring.ServiceBean
17 * @author Jason Carreira <jcarreira@eplus.com>
18 */
19 public class Jsr181BeanPostProcessor
20 implements BeanPostProcessor
21 {
22 private WebAnnotations annotations;
23
24 private AnnotationServiceFactory serviceFactory;
25
26 private ServiceRegistry registry;
27
28 public Jsr181BeanPostProcessor(WebAnnotations annotations,
29 AnnotationServiceFactory serviceFactory, ServiceRegistry registry)
30 {
31 this.annotations = annotations;
32 this.serviceFactory = serviceFactory;
33 this.registry = registry;
34 }
35
36 public Object postProcessBeforeInitialization(Object bean, String beanName)
37 throws BeansException
38 {
39 return bean;
40 }
41
42 public Object postProcessAfterInitialization(Object bean, String beanName)
43 throws BeansException
44 {
45 Class clazz = bean.getClass();
46 if (annotations.hasWebServiceAnnotation(clazz))
47 {
48 Service service = serviceFactory.create(clazz);
49 service.getBinding().setInvoker(new BeanInvoker(bean));
50 registry.register(service);
51 }
52 return bean;
53 }
54 }