Author: sergeyb
Date: Fri May 25 22:23:44 2012
New Revision: 1342824
URL: http://svn.apache.org/viewvc?rev=1342824&view=rev
Log:
[CXF-4343] Removing static maps from AbstractResourceInfo
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/AbstractResourceInfo.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ProviderInfo.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/ClassResourceInfoTest.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java?rev=1342824&r1=1342823&r2=1342824&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java
Fri May 25 22:23:44 2012
@@ -73,10 +73,6 @@ public class AbstractJAXRSFactoryBean ex
protected JAXRSServiceFactoryBean serviceFactory;
protected List<?> entityProviders;
- protected AbstractJAXRSFactoryBean() {
- this(new JAXRSServiceFactoryBean());
- }
-
protected AbstractJAXRSFactoryBean(JAXRSServiceFactoryBean serviceFactory)
{
this.serviceFactory = serviceFactory;
setBindingId(JAXRSBindingFactory.JAXRS_BINDING_ID);
@@ -116,6 +112,7 @@ public class AbstractJAXRSFactoryBean ex
public void setBus(Bus bus) {
super.setBus(bus);
checkBindingFactory(bus);
+ serviceFactory.setBus(bus);
}
/*
@@ -314,7 +311,7 @@ public class AbstractJAXRSFactoryBean ex
}
protected ProviderFactory setupFactory(Endpoint ep) {
- ProviderFactory factory = ProviderFactory.getInstance();
+ ProviderFactory factory = ProviderFactory.getInstance(getBus());
if (entityProviders != null) {
factory.setUserProviders(entityProviders);
}
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java?rev=1342824&r1=1342823&r2=1342824&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
Fri May 25 22:23:44 2012
@@ -93,7 +93,7 @@ public class JAXRSServerFactoryBean exte
* @param app
*/
public void setApplication(Application app) {
- appProvider = new ProviderInfo<Application>(app);
+ appProvider = new ProviderInfo<Application>(app, getBus());
}
/**
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java?rev=1342824&r1=1342823&r2=1342824&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java
Fri May 25 22:23:44 2012
@@ -30,6 +30,8 @@ import java.util.concurrent.Executor;
import javax.ws.rs.Path;
import javax.xml.namespace.QName;
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
import org.apache.cxf.common.util.ClassHelper;
import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
@@ -60,6 +62,17 @@ public class JAXRSServiceFactoryBean ext
public JAXRSServiceFactoryBean() {
}
+ public Bus getBus() {
+ Bus bus = super.getBus();
+ return bus == null ? BusFactory.getThreadDefaultBus() : bus;
+ }
+
+ public void setBus(Bus bus) {
+ if (super.getBus() == null) {
+ super.setBus(bus);
+ }
+ }
+
public void setServiceName(QName name) {
this.serviceName = name;
}
@@ -159,7 +172,8 @@ public class JAXRSServiceFactoryBean ext
Map<String, UserResource> map = userResourcesAsMap(resources);
for (UserResource ur : resources) {
if (ur.getPath() != null) {
- ClassResourceInfo cri =
ResourceUtils.createClassResourceInfo(map, ur, true, enableStatic);
+ ClassResourceInfo cri =
ResourceUtils.createClassResourceInfo(map, ur, true, enableStatic,
+
getBus());
if (cri != null) {
classResourceInfos.add(cri);
}
@@ -171,7 +185,7 @@ public class JAXRSServiceFactoryBean ext
Map<String, UserResource> map = userResourcesAsMap(resources);
for (Class<?> sClass : sClasses) {
ClassResourceInfo cri =
ResourceUtils.createServiceClassResourceInfo(
- map, map.get(sClass.getName()), sClass, true, enableStatic);
+ map, map.get(sClass.getName()), sClass, true, enableStatic,
getBus());
if (cri != null) {
classResourceInfos.add(cri);
}
@@ -188,7 +202,7 @@ public class JAXRSServiceFactoryBean ext
protected ClassResourceInfo createResourceInfo(Class<?> cls, boolean
isRoot) {
ClassResourceInfo classResourceInfo =
- ResourceUtils.createClassResourceInfo(cls, cls, isRoot,
enableStatic);
+ ResourceUtils.createClassResourceInfo(cls, cls, isRoot,
enableStatic, getBus());
if (classResourceInfo != null) {
classResourceInfos.add(classResourceInfo);
}
@@ -215,7 +229,8 @@ public class JAXRSServiceFactoryBean ext
continue;
}
- cri = ResourceUtils.createClassResourceInfo(bean.getClass(),
realClass, true, enableStatic);
+ cri = ResourceUtils.createClassResourceInfo(bean.getClass(),
realClass, true, enableStatic,
+ getBus());
if (cri != null) {
classResourceInfos.add(cri);
cri.setResourceProvider(
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/AbstractResourceInfo.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/AbstractResourceInfo.java?rev=1342824&r1=1342823&r2=1342824&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/AbstractResourceInfo.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/AbstractResourceInfo.java
Fri May 25 22:23:44 2012
@@ -33,31 +33,30 @@ import javax.annotation.Resource;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Context;
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
import org.apache.cxf.jaxrs.impl.tl.ThreadLocalProxy;
import org.apache.cxf.jaxrs.utils.AnnotationUtils;
import org.apache.cxf.jaxrs.utils.InjectionUtils;
public abstract class AbstractResourceInfo {
- private static Map<Class<?>, Map<Field, ThreadLocalProxy<?>>> fieldProxyMap
- = new ConcurrentHashMap<Class<?>, Map<Field, ThreadLocalProxy<?>>>(2);
- private static Map<Class<?>, Map<Field, ThreadLocalProxy<?>>>
resourceProxyMap
- = new ConcurrentHashMap<Class<?>, Map<Field, ThreadLocalProxy<?>>>(2);
- private static Map<Class<?>, Map<Method, ThreadLocalProxy<?>>>
setterProxyMap
- = new ConcurrentHashMap<Class<?>, Map<Method, ThreadLocalProxy<?>>>(2);
+ private static final String FIELD_PROXY_MAP = "jaxrs-field-proxy-map";
+ private static final String SETTER_PROXY_MAP = "jaxrs-setter-proxy-map";
protected boolean root;
protected Class<?> resourceClass;
protected Class<?> serviceClass;
private Map<Class<?>, List<Field>> contextFields;
- private Map<Class<?>, List<Field>> resourceFields;
private Map<Class<?>, Map<Class<?>, Method>> contextMethods;
+ private Bus bus;
- protected AbstractResourceInfo() {
-
+ protected AbstractResourceInfo(Bus bus) {
+ this.bus = bus;
}
- protected AbstractResourceInfo(Class<?> resourceClass, Class<?>
serviceClass, boolean isRoot) {
+ protected AbstractResourceInfo(Class<?> resourceClass, Class<?>
serviceClass, boolean isRoot, Bus bus) {
+ this.bus = bus;
this.serviceClass = serviceClass;
this.resourceClass = resourceClass;
root = isRoot;
@@ -67,6 +66,10 @@ public abstract class AbstractResourceIn
}
}
+ public Bus getBus() {
+ return bus;
+ }
+
public void setResourceClass(Class<?> rClass) {
resourceClass = rClass;
if (serviceClass.isInterface() && resourceClass != null &&
!resourceClass.isInterface()) {
@@ -85,26 +88,36 @@ public abstract class AbstractResourceIn
}
for (Field f : cls.getDeclaredFields()) {
for (Annotation a : f.getAnnotations()) {
- if (a.annotationType() == Context.class) {
+ if (a.annotationType() == Context.class || a.annotationType()
== Resource.class
+ && AnnotationUtils.isContextClass(f.getType())) {
contextFields = addContextField(contextFields, f);
if (f.getType() != Application.class) {
- fieldProxyMap = getProxyMap(Field.class,
fieldProxyMap);
- addToMap(fieldProxyMap, f,
InjectionUtils.createThreadLocalProxy(f.getType()));
+ addToMap(getFieldProxyMap(), f,
InjectionUtils.createThreadLocalProxy(f.getType()));
}
- } else if (a.annotationType() == Resource.class
- && AnnotationUtils.isContextClass(f.getType())) {
- resourceFields = addContextField(resourceFields, f);
- resourceProxyMap = getProxyMap(Field.class,
resourceProxyMap);
- addToMap(resourceProxyMap, f,
InjectionUtils.createThreadLocalProxy(f.getType()));
}
}
}
findContextFields(cls.getSuperclass());
}
- private <T> Map<Class<?>, Map<T, ThreadLocalProxy<?>>>
getProxyMap(Class<T> keyClass,
- Map<Class<?>, Map<T, ThreadLocalProxy<?>>> map) {
- return map == null ? new HashMap<Class<?>, Map<T,
ThreadLocalProxy<?>>>() : map;
+ @SuppressWarnings("unchecked")
+ private <T> Map<Class<?>, Map<T, ThreadLocalProxy<?>>>
getProxyMap(Class<T> keyCls, String prop) {
+ Object property = bus.getProperty(prop);
+ if (property == null) {
+ Map<Class<?>, Map<T, ThreadLocalProxy<?>>> map
+ = new ConcurrentHashMap<Class<?>, Map<T,
ThreadLocalProxy<?>>>(2);
+ bus.setProperty(prop, map);
+ property = map;
+ }
+ return (Map<Class<?>, Map<T, ThreadLocalProxy<?>>>)property;
+ }
+
+ private Map<Class<?>, Map<Field, ThreadLocalProxy<?>>> getFieldProxyMap() {
+ return getProxyMap(Field.class, FIELD_PROXY_MAP);
+ }
+
+ private Map<Class<?>, Map<Method, ThreadLocalProxy<?>>>
getSetterProxyMap() {
+ return getProxyMap(Method.class, SETTER_PROXY_MAP);
}
private void findContextSetterMethods(Class<?> cls) {
@@ -147,8 +160,7 @@ public abstract class AbstractResourceIn
}
addToMap(contextMethods, contextClass, m);
if (m.getParameterTypes()[0] != Application.class) {
- setterProxyMap = getProxyMap(Method.class, setterProxyMap);
- addToMap(setterProxyMap, m,
+ addToMap(getSetterProxyMap(), m,
InjectionUtils.createThreadLocalProxy(m.getParameterTypes()[0]));
}
}
@@ -165,34 +177,34 @@ public abstract class AbstractResourceIn
return getList(contextFields);
}
- public List<Field> getResourceFields() {
- return getList(resourceFields);
- }
-
public ThreadLocalProxy<?> getContextFieldProxy(Field f) {
- return getProxy(fieldProxyMap, f);
- }
-
- public ThreadLocalProxy<?> getResourceFieldProxy(Field f) {
- return getProxy(resourceProxyMap, f);
+ return getProxy(getFieldProxyMap(), f);
}
public ThreadLocalProxy<?> getContextSetterProxy(Method m) {
- return getProxy(setterProxyMap, m);
+ return getProxy(getSetterProxyMap(), m);
}
public abstract boolean isSingleton();
+ @SuppressWarnings("rawtypes")
public static void clearAllMaps() {
- fieldProxyMap.clear();
- resourceProxyMap.clear();
- setterProxyMap.clear();
+ Bus bus = BusFactory.getThreadDefaultBus(false);
+ if (bus != null) {
+ Object property = bus.getProperty(FIELD_PROXY_MAP);
+ if (property != null) {
+ ((Map)property).clear();
+ }
+ property = bus.getProperty(SETTER_PROXY_MAP);
+ if (property != null) {
+ ((Map)property).clear();
+ }
+ }
}
public void clearThreadLocalProxies() {
- clearProxies(fieldProxyMap);
- clearProxies(resourceProxyMap);
- clearProxies(setterProxyMap);
+ clearProxies(getFieldProxyMap());
+ clearProxies(getSetterProxyMap());
}
private <T> void clearProxies(Map<Class<?>, Map<T, ThreadLocalProxy<?>>>
tlps) {
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java?rev=1342824&r1=1342823&r2=1342824&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
Fri May 25 22:23:44 2012
@@ -35,6 +35,8 @@ import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
import org.apache.cxf.jaxrs.utils.AnnotationUtils;
import org.apache.cxf.jaxrs.utils.InjectionUtils;
@@ -56,12 +58,8 @@ public class ClassResourceInfo extends A
private String consumesTypes;
private String producesTypes;
- public ClassResourceInfo(Class<?> theResourceClass) {
- this(theResourceClass, false);
- }
-
public ClassResourceInfo(ClassResourceInfo cri) {
-
+ super(cri.getBus());
if (cri.isCreatedFromModel() &&
!InjectionUtils.isConcreteClass(cri.getServiceClass())) {
this.root = cri.root;
this.serviceClass = cri.serviceClass;
@@ -77,21 +75,9 @@ public class ClassResourceInfo extends A
}
- public ClassResourceInfo(Class<?> theResourceClass, boolean theRoot) {
- this(theResourceClass, theResourceClass, theRoot);
- }
-
- public ClassResourceInfo(Class<?> theResourceClass, Class<?>
theServiceClass) {
- this(theResourceClass, theServiceClass, false);
- }
-
- public ClassResourceInfo(Class<?> theResourceClass, Class<?>
theServiceClass, boolean theRoot) {
- this(theResourceClass, theServiceClass, theRoot, false);
- }
-
public ClassResourceInfo(Class<?> theResourceClass, Class<?>
theServiceClass,
- boolean theRoot, boolean enableStatic) {
- super(theResourceClass, theServiceClass, theRoot);
+ boolean theRoot, boolean enableStatic, Bus bus) {
+ super(theResourceClass, theServiceClass, theRoot, bus);
this.enableStatic = enableStatic;
if (root && resourceClass != null) {
setParamField(serviceClass);
@@ -100,19 +86,37 @@ public class ClassResourceInfo extends A
}
public ClassResourceInfo(Class<?> theResourceClass, Class<?>
theServiceClass,
- boolean theRoot, boolean enableStatic, boolean
createdFromModel) {
- this(theResourceClass, theServiceClass, theRoot, enableStatic);
+ boolean theRoot, boolean enableStatic, boolean
createdFromModel, Bus bus) {
+ this(theResourceClass, theServiceClass, theRoot, enableStatic, bus);
this.createdFromModel = createdFromModel;
}
-
+ //CHECKSTYLE:OFF
public ClassResourceInfo(Class<?> theResourceClass, Class<?> c,
- boolean theRoot, boolean enableStatic, boolean
createdFromModel,
- String consumesTypes, String producesTypes) {
- this(theResourceClass, theResourceClass, theRoot, enableStatic,
createdFromModel);
+ boolean theRoot, boolean enableStatic, boolean
createdFromModel,
+ String consumesTypes, String producesTypes, Bus
bus) {
+ //CHECKSTYLE:ON
+ this(theResourceClass, theResourceClass, theRoot, enableStatic,
createdFromModel, bus);
this.consumesTypes = consumesTypes;
this.producesTypes = producesTypes;
}
+ // The following constructors are used by tests only
+ public ClassResourceInfo(Class<?> theResourceClass) {
+ this(theResourceClass, false);
+ }
+
+ public ClassResourceInfo(Class<?> theResourceClass, boolean theRoot) {
+ this(theResourceClass, theResourceClass, theRoot);
+ }
+
+ public ClassResourceInfo(Class<?> theResourceClass, Class<?>
theServiceClass) {
+ this(theResourceClass, theServiceClass, false);
+ }
+
+ public ClassResourceInfo(Class<?> theResourceClass, Class<?>
theServiceClass, boolean theRoot) {
+ this(theResourceClass, theServiceClass, theRoot, false,
BusFactory.getDefaultBus(true));
+ }
+
public ClassResourceInfo findResource(Class<?> typedClass, Class<?>
instanceClass) {
instanceClass = enableStatic ? typedClass : instanceClass;
SubresourceKey key = new SubresourceKey(typedClass, instanceClass);
@@ -126,7 +130,8 @@ public class ClassResourceInfo extends A
SubresourceKey key = new SubresourceKey(typedClass, instanceClass);
ClassResourceInfo cri = subResources.get(key);
if (cri == null && !enableStatic) {
- cri = ResourceUtils.createClassResourceInfo(typedClass,
instanceClass, false, enableStatic);
+ cri = ResourceUtils.createClassResourceInfo(typedClass,
instanceClass, false, enableStatic,
+ getBus());
if (cri != null) {
subResources.putIfAbsent(key, cri);
}
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ProviderInfo.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ProviderInfo.java?rev=1342824&r1=1342823&r2=1342824&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ProviderInfo.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ProviderInfo.java
Fri May 25 22:23:44 2012
@@ -19,12 +19,14 @@
package org.apache.cxf.jaxrs.model;
+import org.apache.cxf.Bus;
+
public class ProviderInfo<T> extends AbstractResourceInfo {
private T provider;
- public ProviderInfo(T provider) {
- super(provider.getClass(), provider.getClass(), true);
+ public ProviderInfo(T provider, Bus bus) {
+ super(provider.getClass(), provider.getClass(), true, bus);
this.provider = provider;
}
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java?rev=1342824&r1=1342823&r2=1342824&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
Fri May 25 22:23:44 2012
@@ -43,6 +43,7 @@ import javax.ws.rs.ext.MessageBodyReader
import javax.ws.rs.ext.MessageBodyWriter;
import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
import org.apache.cxf.common.classloader.ClassLoaderUtils;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.common.util.ClassHelper;
@@ -66,7 +67,7 @@ import org.apache.cxf.message.MessageUti
public final class ProviderFactory {
private static final Logger LOG =
LogUtils.getL7dLogger(ProviderFactory.class);
- private static final ProviderFactory SHARED_FACTORY = new
ProviderFactory();
+ private static final ProviderFactory SHARED_FACTORY = getInstance();
private static final String JAXB_PROVIDER_NAME =
"org.apache.cxf.jaxrs.provider.JAXBElementProvider";
private static final String JSON_PROVIDER_NAME =
"org.apache.cxf.jaxrs.provider.json.JSONProvider";
@@ -108,7 +109,10 @@ public final class ProviderFactory {
private List<ProviderInfo<MessageBodyWriter<?>>> jaxbWriters =
new ArrayList<ProviderInfo<MessageBodyWriter<?>>>();
- private ProviderFactory() {
+ private Bus bus;
+
+ private ProviderFactory(Bus bus) {
+ this.bus = bus;
initJaxbProviders();
}
@@ -119,13 +123,13 @@ public final class ProviderFactory {
private void initJaxbProviders() {
Object jaxbProvider = createProvider(JAXB_PROVIDER_NAME);
if (jaxbProvider != null) {
- jaxbReaders.add(new
ProviderInfo<MessageBodyReader<?>>((MessageBodyReader<?>)jaxbProvider));
- jaxbWriters.add(new
ProviderInfo<MessageBodyWriter<?>>((MessageBodyWriter<?>)jaxbProvider));
+ jaxbReaders.add(new
ProviderInfo<MessageBodyReader<?>>((MessageBodyReader<?>)jaxbProvider, bus));
+ jaxbWriters.add(new
ProviderInfo<MessageBodyWriter<?>>((MessageBodyWriter<?>)jaxbProvider, bus));
}
Object jsonProvider = createProvider(JSON_PROVIDER_NAME);
if (jsonProvider != null) {
- jaxbReaders.add(new
ProviderInfo<MessageBodyReader<?>>((MessageBodyReader<?>)jsonProvider));
- jaxbWriters.add(new
ProviderInfo<MessageBodyWriter<?>>((MessageBodyWriter<?>)jsonProvider));
+ jaxbReaders.add(new
ProviderInfo<MessageBodyReader<?>>((MessageBodyReader<?>)jsonProvider, bus));
+ jaxbWriters.add(new
ProviderInfo<MessageBodyWriter<?>>((MessageBodyWriter<?>)jsonProvider, bus));
}
injectContextProxies(jaxbReaders, jaxbWriters);
}
@@ -149,7 +153,11 @@ public final class ProviderFactory {
}
public static ProviderFactory getInstance() {
- return new ProviderFactory();
+ return new ProviderFactory(BusFactory.getThreadDefaultBus());
+ }
+
+ public static ProviderFactory getInstance(Bus bus) {
+ return new ProviderFactory(bus);
}
public static ProviderFactory getInstance(Message m) {
@@ -480,39 +488,39 @@ public final class ProviderFactory {
Class<?> oClass = ClassHelper.getRealClass(o);
if (MessageBodyReader.class.isAssignableFrom(oClass)) {
- messageReaders.add(new
ProviderInfo<MessageBodyReader<?>>((MessageBodyReader<?>)o));
+ messageReaders.add(new
ProviderInfo<MessageBodyReader<?>>((MessageBodyReader<?>)o, bus));
}
if (MessageBodyWriter.class.isAssignableFrom(oClass)) {
- messageWriters.add(new
ProviderInfo<MessageBodyWriter<?>>((MessageBodyWriter<?>)o));
+ messageWriters.add(new
ProviderInfo<MessageBodyWriter<?>>((MessageBodyWriter<?>)o, bus));
}
if (ContextResolver.class.isAssignableFrom(oClass)) {
- contextResolvers.add(new
ProviderInfo<ContextResolver<?>>((ContextResolver<?>)o));
+ contextResolvers.add(new
ProviderInfo<ContextResolver<?>>((ContextResolver<?>)o, bus));
}
if (ContextProvider.class.isAssignableFrom(oClass)) {
- contextProviders.add(new
ProviderInfo<ContextProvider<?>>((ContextProvider<?>)o));
+ contextProviders.add(new
ProviderInfo<ContextProvider<?>>((ContextProvider<?>)o, bus));
}
if (RequestHandler.class.isAssignableFrom(oClass)) {
- requestHandlers.add(new
ProviderInfo<RequestHandler>((RequestHandler)o));
+ requestHandlers.add(new
ProviderInfo<RequestHandler>((RequestHandler)o, bus));
}
if (ResponseHandler.class.isAssignableFrom(oClass)) {
- responseHandlers.add(new
ProviderInfo<ResponseHandler>((ResponseHandler)o));
+ responseHandlers.add(new
ProviderInfo<ResponseHandler>((ResponseHandler)o, bus));
}
if (ExceptionMapper.class.isAssignableFrom(oClass)) {
- exceptionMappers.add(new
ProviderInfo<ExceptionMapper<?>>((ExceptionMapper<?>)o));
+ exceptionMappers.add(new
ProviderInfo<ExceptionMapper<?>>((ExceptionMapper<?>)o, bus));
}
if (ResponseExceptionMapper.class.isAssignableFrom(oClass)) {
- responseExceptionMappers.add(new
ProviderInfo<ResponseExceptionMapper<?>>((ResponseExceptionMapper<?>)o));
+ responseExceptionMappers.add(new
ProviderInfo<ResponseExceptionMapper<?>>((ResponseExceptionMapper<?>)o, bus));
}
if (ParameterHandler.class.isAssignableFrom(oClass)) {
- paramHandlers.add(new
ProviderInfo<ParameterHandler<?>>((ParameterHandler<?>)o));
+ paramHandlers.add(new
ProviderInfo<ParameterHandler<?>>((ParameterHandler<?>)o, bus));
}
}
sortReaders();
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java?rev=1342824&r1=1342823&r2=1342824&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
Fri May 25 22:23:44 2012
@@ -918,11 +918,6 @@ public final class InjectionUtils {
Object value = f.getType() == Application.class ? app :
cri.getContextFieldProxy(f);
InjectionUtils.injectFieldValue(f, instance, value);
}
-
- for (Field f : cri.getResourceFields()) {
- ThreadLocalProxy<?> proxy = cri.getResourceFieldProxy(f);
- InjectionUtils.injectFieldValue(f, instance, proxy);
- }
}
public static void injectContextProxies(AbstractResourceInfo cri, Object
instance) {
@@ -931,14 +926,11 @@ public final class InjectionUtils {
@SuppressWarnings("unchecked")
public static void injectContextField(AbstractResourceInfo cri,
- Field f, Object o, Object value,
- boolean resource) {
+ Field f, Object o, Object value) {
if (!cri.isSingleton()) {
InjectionUtils.injectFieldValue(f, o, value);
} else {
- ThreadLocalProxy<Object> proxy = (ThreadLocalProxy<Object>)(
- resource ? cri.getResourceFieldProxy(f)
- : cri.getContextFieldProxy(f));
+ ThreadLocalProxy<Object> proxy =
(ThreadLocalProxy<Object>)cri.getContextFieldProxy(f);
if (proxy != null) {
proxy.set(value);
}
@@ -950,7 +942,6 @@ public final class InjectionUtils {
Message message) {
injectContextMethods(requestObject, resource, message);
injectContextFields(requestObject, resource, message);
- injectResourceFields(requestObject, resource, message);
}
@SuppressWarnings("unchecked")
@@ -993,17 +984,7 @@ public final class InjectionUtils {
continue;
}
Object value = JAXRSUtils.createContextValue(m,
f.getGenericType(), f.getType());
- InjectionUtils.injectContextField(cri, f, o, value, false);
- }
- }
-
- public static void injectResourceFields(Object o,
- AbstractResourceInfo cri,
- Message m) {
-
- for (Field f : cri.getResourceFields()) {
- Object value = JAXRSUtils.createResourceValue(m,
f.getGenericType(), f.getType());
- InjectionUtils.injectContextField(cri, f, o, value, true);
+ InjectionUtils.injectContextField(cri, f, o, value);
}
}
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java?rev=1342824&r1=1342823&r2=1342824&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java
Fri May 25 22:23:44 2012
@@ -143,22 +143,29 @@ public final class ResourceUtils {
return null;
}
+ public static ClassResourceInfo createClassResourceInfo(Map<String,
UserResource> resources,
+ UserResource
model, boolean isRoot, boolean enableStatic) {
+ return createClassResourceInfo(resources, model, isRoot, enableStatic,
+ BusFactory.getThreadDefaultBus());
+ }
+
public static ClassResourceInfo createClassResourceInfo(
- Map<String, UserResource> resources, UserResource model, boolean
isRoot, boolean enableStatic) {
+ Map<String, UserResource> resources, UserResource model, boolean
isRoot, boolean enableStatic,
+ Bus bus) {
Class<?> sClass = loadClass(model.getName());
- return createServiceClassResourceInfo(resources, model, sClass,
isRoot, enableStatic);
+ return createServiceClassResourceInfo(resources, model, sClass,
isRoot, enableStatic, bus);
}
public static ClassResourceInfo createServiceClassResourceInfo(
Map<String, UserResource> resources, UserResource model,
- Class<?> sClass, boolean isRoot, boolean enableStatic) {
+ Class<?> sClass, boolean isRoot, boolean enableStatic, Bus bus) {
if (model == null) {
throw new RuntimeException("Resource class " + sClass.getName() +
" has no model info");
}
ClassResourceInfo cri =
new ClassResourceInfo(sClass, sClass, isRoot, enableStatic, true,
- model.getConsumes(), model.getProduces());
+ model.getConsumes(), model.getProduces(),
bus);
URITemplate t = URITemplate.createTemplate(model.getPath());
cri.setURITemplate(t);
MethodDispatcher md = new MethodDispatcher();
@@ -178,7 +185,7 @@ public final class ResourceUtils {
if (resources.containsKey(rClassName)) {
ClassResourceInfo subCri =
rClassName.equals(model.getName()) ? cri
: createServiceClassResourceInfo(resources,
resources.get(rClassName),
- m.getReturnType(),
false, enableStatic);
+ m.getReturnType(),
false, enableStatic, bus);
if (subCri != null) {
cri.addSubClassResourceInfo(subCri);
md.bind(ori, m);
@@ -193,10 +200,20 @@ public final class ResourceUtils {
}
+ public static ClassResourceInfo createClassResourceInfo(final Class<?>
rClass,
+ final Class<?>
sClass,
+ boolean root,
+ boolean
enableStatic) {
+ return createClassResourceInfo(rClass, sClass, root, enableStatic,
BusFactory.getThreadDefaultBus());
+
+ }
- public static ClassResourceInfo createClassResourceInfo(
- final Class<?> rClass, final Class<?> sClass, boolean root, boolean
enableStatic) {
- ClassResourceInfo cri = new ClassResourceInfo(rClass, sClass, root,
enableStatic);
+ public static ClassResourceInfo createClassResourceInfo(final Class<?>
rClass,
+ final Class<?>
sClass,
+ boolean root,
+ boolean
enableStatic,
+ Bus bus) {
+ ClassResourceInfo cri = new ClassResourceInfo(rClass, sClass, root,
enableStatic, bus);
if (root) {
URITemplate t = URITemplate.createTemplate(cri.getPath());
@@ -225,7 +242,8 @@ public final class ResourceUtils {
ClassResourceInfo subCri = cri.findResource(subClass,
subClass);
if (subCri == null) {
subCri = subClass == cri.getServiceClass() ? cri
- : createClassResourceInfo(subClass,
subClass, false, enableStatic);
+ : createClassResourceInfo(subClass,
subClass, false, enableStatic,
+ cri.getBus());
}
if (subCri != null) {
Modified:
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/ClassResourceInfoTest.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/ClassResourceInfoTest.java?rev=1342824&r1=1342823&r2=1342824&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/ClassResourceInfoTest.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/ClassResourceInfoTest.java
Fri May 25 22:23:44 2012
@@ -39,6 +39,7 @@ import javax.ws.rs.core.UriInfo;
import org.apache.cxf.jaxrs.utils.ResourceUtils;
+import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
@@ -91,6 +92,11 @@ public class ClassResourceInfoTest exten
}
}
+ @After
+ public void tearDown() {
+ AbstractResourceInfo.clearAllMaps();
+ }
+
@Test
public void testGetHttpContexts() {
ClassResourceInfo c = new ClassResourceInfo(TestClass.class);
@@ -99,33 +105,19 @@ public class ClassResourceInfoTest exten
c = new ClassResourceInfo(TestClass.class, true);
fields = c.getContextFields();
- assertEquals("2 http context fields available", 2, fields.size());
- assertTrue("Wrong fields selected",
- (fields.get(0).getType() == UriInfo.class
- || fields.get(1).getType() == UriInfo.class)
- && (fields.get(0).getType() == HttpHeaders.class
- || fields.get(1).getType() == HttpHeaders.class));
- }
-
- @Test
- public void testGetResources() {
- ClassResourceInfo c = new ClassResourceInfo(TestClass3.class);
- List<Field> fields = c.getResourceFields();
- assertEquals("Only root classes should check these fields", 0,
fields.size());
- c = new ClassResourceInfo(TestClass3.class, true);
- fields = c.getResourceFields();
-
Set<Class<?>> clses = new HashSet<Class<?>>();
for (Field f : fields) {
clses.add(f.getType());
}
- assertEquals("3 resources fields available", 3, fields.size());
+ assertEquals("5 http context fields available", 5, clses.size());
assertTrue("Wrong fields selected",
clses.contains(HttpServletRequest.class)
&& clses.contains(HttpServletResponse.class)
- && clses.contains(ServletContext.class));
+ && clses.contains(ServletContext.class)
+ && clses.contains(UriInfo.class)
+ && clses.contains(HttpHeaders.class));
}
-
+
@Test
public void testGetPath() {
ClassResourceInfo c = new ClassResourceInfo(TestClass.class);
Modified:
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java?rev=1342824&r1=1342823&r2=1342824&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java
Fri May 25 22:23:44 2012
@@ -62,6 +62,7 @@ import org.apache.cxf.jaxrs.ext.Paramete
import org.apache.cxf.jaxrs.ext.RequestHandler;
import org.apache.cxf.jaxrs.impl.MetadataMap;
import org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper;
+import org.apache.cxf.jaxrs.model.AbstractResourceInfo;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
import org.apache.cxf.jaxrs.model.ProviderInfo;
import org.apache.cxf.jaxrs.model.wadl.WadlGenerator;
@@ -84,6 +85,7 @@ public class ProviderFactoryTest extends
@Before
public void setUp() {
ProviderFactory.getInstance().clearProviders();
+ AbstractResourceInfo.clearAllMaps();
}
@Test
Modified:
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java?rev=1342824&r1=1342823&r2=1342824&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
Fri May 25 22:23:44 2012
@@ -80,6 +80,7 @@ import org.apache.cxf.jaxrs.impl.tl.Thre
import org.apache.cxf.jaxrs.impl.tl.ThreadLocalUriInfo;
import org.apache.cxf.jaxrs.lifecycle.PerRequestResourceProvider;
import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
+import org.apache.cxf.jaxrs.model.AbstractResourceInfo;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
import org.apache.cxf.jaxrs.model.MethodDispatcher;
import org.apache.cxf.jaxrs.model.OperationResourceInfo;
@@ -93,6 +94,7 @@ import org.apache.cxf.message.MessageImp
import org.apache.cxf.transport.http.AbstractHTTPDestination;
import org.easymock.EasyMock;
+import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -102,6 +104,10 @@ public class JAXRSUtilsTest extends Asse
@Before
public void setUp() {
}
+ @After
+ public void tearDown() {
+ AbstractResourceInfo.clearAllMaps();
+ }
@Test
public void testFormParametersUTF8Encoding() throws Exception {
@@ -1589,7 +1595,7 @@ public class JAXRSUtilsTest extends Asse
Customer c = new Customer();
cri.setResourceProvider(new SingletonResourceProvider(c));
- Message m = new MessageImpl();
+ Message m = createMessage();
ServletContext servletContextMock =
EasyMock.createNiceMock(ServletContext.class);
m.put(AbstractHTTPDestination.HTTP_CONTEXT, servletContextMock);
HttpServletRequest httpRequest =
EasyMock.createNiceMock(HttpServletRequest.class);
@@ -1597,7 +1603,7 @@ public class JAXRSUtilsTest extends Asse
HttpServletResponse httpResponse =
EasyMock.createMock(HttpServletResponse.class);
m.put(AbstractHTTPDestination.HTTP_RESPONSE, httpResponse);
InjectionUtils.injectContextProxies(cri,
cri.getResourceProvider().getInstance(null));
- InjectionUtils.injectResourceFields(c, cri, m);
+ InjectionUtils.injectContextFields(c, cri, m);
assertSame(servletContextMock,
((ThreadLocalProxy<ServletContext>)c.getServletContextResource()).get());
assertSame(httpRequest,
@@ -1727,20 +1733,17 @@ public class JAXRSUtilsTest extends Asse
m.put(AbstractHTTPDestination.HTTP_RESPONSE, response);
m.put(AbstractHTTPDestination.HTTP_CONTEXT, context);
- InjectionUtils.injectResourceFields(c, ori.getClassResourceInfo(), m);
+ InjectionUtils.injectContextFields(c, ori.getClassResourceInfo(), m);
assertSame(request.getClass(),
c.getServletRequestResource().getClass());
HttpServletResponseFilter filter =
(HttpServletResponseFilter)c.getServletResponseResource();
assertSame(response.getClass(), filter.getResponse().getClass());
assertSame(context.getClass(),
c.getServletContextResource().getClass());
- assertNull(c.getServletRequest());
- assertNull(c.getServletResponse());
- assertNull(c.getServletContext());
-
- c = new Customer();
- InjectionUtils.injectContextFields(c, ori.getClassResourceInfo(), m);
- assertNull(c.getServletRequestResource());
- assertNull(c.getServletResponseResource());
- assertNull(c.getServletContextResource());
+ assertNotNull(c.getServletRequest());
+ assertNotNull(c.getServletResponse());
+ assertNotNull(c.getServletContext());
+ assertNotNull(c.getServletRequestResource());
+ assertNotNull(c.getServletResponseResource());
+ assertNotNull(c.getServletContextResource());
assertSame(request.getClass(), c.getServletRequest().getClass());
filter = (HttpServletResponseFilter)c.getServletResponse();
assertSame(response.getClass(), filter.getResponse().getClass());