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;