Move SpringBeanFactory
diff --git a/core/pom.xml b/core/pom.xml index 566b240..61a1231 100644 --- a/core/pom.xml +++ b/core/pom.xml
@@ -135,11 +135,6 @@ </dependency> <dependency> <groupId>org.springframework</groupId> - <artifactId>spring-context</artifactId> - <optional>true</optional> - </dependency> - <dependency> - <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <scope>provided</scope> <optional>true</optional>
diff --git a/core/src/main/java/org/apache/cxf/annotations/FactoryType.java b/core/src/main/java/org/apache/cxf/annotations/FactoryType.java index e9a83b7..50e4436 100644 --- a/core/src/main/java/org/apache/cxf/annotations/FactoryType.java +++ b/core/src/main/java/org/apache/cxf/annotations/FactoryType.java
@@ -24,6 +24,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; + +import org.apache.cxf.message.Exchange; +import org.apache.cxf.service.invoker.Factory; /** * Defines the factory used for the service. * @@ -45,16 +48,21 @@ * 1) The Class for the service * 2) String[] of the args from above */ - Class<?> factoryClass() default DEFAULT.class; + Class<? extends Factory> factoryClass() default DEFAULT.class; enum Type { Singleton, Session, Pooled, //args[0] is the size of the pool PerRequest, - Spring, //args[0] is the Spring bean name }; - static final class DEFAULT { } + static final class DEFAULT implements Factory { + public Object create(Exchange e) throws Throwable { + return null; + } + public void release(Exchange e, Object o) { + } + } }
diff --git a/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java b/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java index 655eb68..05ee510 100644 --- a/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java +++ b/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
@@ -53,7 +53,6 @@ import org.apache.cxf.service.invoker.PooledFactory; import org.apache.cxf.service.invoker.SessionFactory; import org.apache.cxf.service.invoker.SingletonFactory; -import org.apache.cxf.service.invoker.SpringBeanFactory; import org.apache.cxf.service.model.BindingFaultInfo; import org.apache.cxf.service.model.BindingOperationInfo; import org.apache.cxf.service.model.FaultInfo; @@ -190,16 +189,13 @@ case Pooled: f = new PooledFactory(cls, Integer.parseInt(scope.args()[0])); break; - case Spring: - f = new SpringBeanFactory(scope.args()[0]); - break; default: f = new SingletonFactory(cls); break; } } else { try { - f = (Factory)scope.factoryClass().getConstructor(Class.class, String[].class) + f = scope.factoryClass().getConstructor(Class.class, String[].class) .newInstance(cls, scope.args()); } catch (Throwable t) { throw new ServiceConstructionException(t);
diff --git a/core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java b/rt/spring/src/main/java/org/apache/cxf/service/invoker/spring/SpringBeanFactory.java similarity index 88% rename from core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java rename to rt/spring/src/main/java/org/apache/cxf/service/invoker/spring/SpringBeanFactory.java index f942019..74e7182 100644 --- a/core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java +++ b/rt/spring/src/main/java/org/apache/cxf/service/invoker/spring/SpringBeanFactory.java
@@ -17,9 +17,10 @@ * under the License. */ -package org.apache.cxf.service.invoker; +package org.apache.cxf.service.invoker.spring; import org.apache.cxf.message.Exchange; +import org.apache.cxf.service.invoker.Factory; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; @@ -34,12 +35,15 @@ * to pool the beans or the SessionFactory or similar. */ public class SpringBeanFactory implements Factory, ApplicationContextAware { - ApplicationContext ctx; - String beanName; + volatile ApplicationContext ctx; + final String beanName; public SpringBeanFactory(String name) { beanName = name; } + public SpringBeanFactory(Class<?> cls, String args[]) { + beanName = args[0]; + } /** {@inheritDoc}*/ public Object create(Exchange e) throws Throwable {
diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/http/SpringAnnotationGreeterImpl.java b/systests/transports/src/test/java/org/apache/cxf/systest/http/SpringAnnotationGreeterImpl.java index c9a9b8b..c7265e7 100644 --- a/systests/transports/src/test/java/org/apache/cxf/systest/http/SpringAnnotationGreeterImpl.java +++ b/systests/transports/src/test/java/org/apache/cxf/systest/http/SpringAnnotationGreeterImpl.java
@@ -24,18 +24,18 @@ import javax.xml.ws.AsyncHandler; import javax.xml.ws.Response; - import org.apache.cxf.annotations.FactoryType; import org.apache.cxf.greeter_control.Greeter; import org.apache.cxf.greeter_control.types.GreetMeResponse; import org.apache.cxf.greeter_control.types.PingMeResponse; import org.apache.cxf.greeter_control.types.SayHiResponse; +import org.apache.cxf.service.invoker.spring.SpringBeanFactory; @WebService(serviceName = "GreeterService", portName = "GreeterPort", endpointInterface = "org.apache.cxf.greeter_control.Greeter", targetNamespace = "http://cxf.apache.org/greeter_control") -@FactoryType(value = FactoryType.Type.Spring, args = { "SpringBean" }) +@FactoryType(factoryClass = SpringBeanFactory.class, args = { "SpringBean" }) public class SpringAnnotationGreeterImpl implements Greeter { String name;