You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2014/02/05 13:46:53 UTC
svn commit: r1564750 - in
/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs:
model/AbstractResourceInfo.java model/ProviderInfo.java
utils/InjectionUtils.java
Author: sergeyb
Date: Wed Feb 5 12:46:53 2014
New Revision: 1564750
URL: http://svn.apache.org/r1564750
Log:
[CXF-5542] Adding the changes to the JAXRS frontend
Modified:
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/ProviderInfo.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
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=1564750&r1=1564749&r2=1564750&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 Wed Feb 5 12:46:53 2014
@@ -58,7 +58,7 @@ public abstract class AbstractResourceIn
protected AbstractResourceInfo(Class<?> resourceClass, Class<?> serviceClass,
boolean isRoot, boolean checkContexts, Bus bus) {
- this(resourceClass, serviceClass, isRoot, checkContexts, null, bus);
+ this(resourceClass, serviceClass, isRoot, checkContexts, null, bus, null);
}
protected AbstractResourceInfo(Class<?> resourceClass,
@@ -66,18 +66,20 @@ public abstract class AbstractResourceIn
boolean isRoot,
boolean checkContexts,
Map<Class<?>, ThreadLocalProxy<?>> constructorProxies,
- Bus bus) {
+ Bus bus,
+ Object provider) {
this.bus = bus;
this.serviceClass = serviceClass;
this.resourceClass = resourceClass;
root = isRoot;
if (checkContexts && resourceClass != null) {
- findContexts(serviceClass, constructorProxies);
+ findContexts(serviceClass, provider, constructorProxies);
}
}
- private void findContexts(Class<?> cls, Map<Class<?>, ThreadLocalProxy<?>> constructorProxies) {
- findContextFields(cls);
+ private void findContexts(Class<?> cls, Object provider,
+ Map<Class<?>, ThreadLocalProxy<?>> constructorProxies) {
+ findContextFields(cls, provider);
findContextSetterMethods(cls);
if (constructorProxies != null) {
Map<Class<?>, Map<Class<?>, ThreadLocalProxy<?>>> proxies = getConstructorProxyMap(true);
@@ -102,7 +104,7 @@ public abstract class AbstractResourceIn
public void setResourceClass(Class<?> rClass) {
resourceClass = rClass;
if (serviceClass.isInterface() && resourceClass != null && !resourceClass.isInterface()) {
- findContexts(resourceClass, null);
+ findContexts(resourceClass, null, null);
}
}
@@ -110,7 +112,7 @@ public abstract class AbstractResourceIn
return serviceClass;
}
- private void findContextFields(Class<?> cls) {
+ private void findContextFields(Class<?> cls, Object provider) {
if (cls == Object.class || cls == null) {
return;
}
@@ -119,12 +121,28 @@ public abstract class AbstractResourceIn
if (a.annotationType() == Context.class) {
contextFields = addContextField(contextFields, f);
if (f.getType() != Application.class) {
- addToMap(getFieldProxyMap(true), f, InjectionUtils.createThreadLocalProxy(f.getType()));
+ addToMap(getFieldProxyMap(true), f, getFieldThreadLocalProxy(f, provider));
}
}
}
}
- findContextFields(cls.getSuperclass());
+ findContextFields(cls.getSuperclass(), provider);
+ }
+
+ private static ThreadLocalProxy<?> getFieldThreadLocalProxy(Field f, Object provider) {
+ if (provider != null) {
+ synchronized (provider) {
+ try {
+ Object proxy = InjectionUtils.extractFieldValue(f, provider);
+ if (proxy instanceof ThreadLocalProxy) {
+ return (ThreadLocalProxy<?>)proxy;
+ }
+ } catch (Throwable t) {
+ // continue
+ }
+ }
+ }
+ return InjectionUtils.createThreadLocalProxy(f.getType());
}
@SuppressWarnings("unchecked")
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=1564750&r1=1564749&r2=1564750&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 Wed Feb 5 12:46:53 2014
@@ -35,7 +35,7 @@ public class ProviderInfo<T> extends Abs
public ProviderInfo(T provider,
Map<Class<?>, ThreadLocalProxy<?>> constructorProxies,
Bus bus) {
- super(provider.getClass(), provider.getClass(), true, true, constructorProxies, bus);
+ super(provider.getClass(), provider.getClass(), true, true, constructorProxies, bus, provider);
this.provider = provider;
}
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=1564750&r1=1564749&r2=1564750&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 Wed Feb 5 12:46:53 2014
@@ -987,6 +987,15 @@ public final class InjectionUtils {
for (Field f : cri.getContextFields()) {
Object value = f.getType() == Application.class ? app : cri.getContextFieldProxy(f);
+ try {
+ synchronized (instance) {
+ if (value == InjectionUtils.extractFieldValue(f, instance)) {
+ continue;
+ }
+ }
+ } catch (Throwable t) {
+ // continue
+ }
InjectionUtils.injectFieldValue(f, instance, value);
}
}