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/07/08 17:38:25 UTC

git commit: [CXF-5861] Injecting context values immediately after ResourceContext creates a bean

Repository: cxf
Updated Branches:
  refs/heads/master 84c1a74ec -> d044e1c0e


[CXF-5861] Injecting context values immediately after ResourceContext creates a bean


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/d044e1c0
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/d044e1c0
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/d044e1c0

Branch: refs/heads/master
Commit: d044e1c0e6d8c81ff38f2f3705e1ec7b02d440c1
Parents: 84c1a74
Author: Sergey Beryozkin <sb...@talend.com>
Authored: Tue Jul 8 16:38:05 2014 +0100
Committer: Sergey Beryozkin <sb...@talend.com>
Committed: Tue Jul 8 16:38:05 2014 +0100

----------------------------------------------------------------------
 .../java/org/apache/cxf/jaxrs/JAXRSInvoker.java | 13 +---------
 .../cxf/jaxrs/impl/ResourceContextImpl.java     |  1 +
 .../cxf/jaxrs/model/ClassResourceInfo.java      | 27 ++++++++++++++++++++
 .../org/apache/cxf/systest/jaxrs/Book2.java     |  4 +++
 .../org/apache/cxf/systest/jaxrs/BookStore.java |  4 ++-
 5 files changed, 36 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/d044e1c0/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
index 67d980e..135ac8d 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
@@ -155,19 +155,8 @@ public class JAXRSInvoker extends AbstractInvoker {
         final ClassResourceInfo cri = ori.getClassResourceInfo();
         final Message inMessage = exchange.getInMessage();
         final ServerProviderFactory providerFactory = ServerProviderFactory.getInstance(inMessage);
-
-        final boolean contextsAvailable = cri.contextsAvailable();
-        final boolean paramsAvailable = cri.paramsAvailable();
-        if (contextsAvailable || paramsAvailable) {
-            Object realResourceObject = ClassHelper.getRealObject(resourceObject);
-            if (paramsAvailable) {
-                JAXRSUtils.injectParameters(ori, realResourceObject, inMessage);
-            }
-            if (contextsAvailable) {
-                InjectionUtils.injectContexts(realResourceObject, cri, inMessage);
-            }
-        }
         if (cri.isRoot()) {
+            cri.injectContexts(resourceObject, ori, inMessage);
             ProviderInfo<Application> appProvider = providerFactory.getApplicationProvider();
             if (appProvider != null) {
                 InjectionUtils.injectContexts(appProvider.getProvider(),

http://git-wip-us.apache.org/repos/asf/cxf/blob/d044e1c0/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResourceContextImpl.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResourceContextImpl.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResourceContextImpl.java
index c8870f5..60b70aa 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResourceContextImpl.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResourceContextImpl.java
@@ -50,6 +50,7 @@ public class ResourceContextImpl implements ResourceContext {
     private <T> T doInitResource(Class<?> cls, T resource) {
         ClassResourceInfo sub = cri.getSubResource(subClass, cls, resource, true, m);
         sub.initBeanParamInfo(ServerProviderFactory.getInstance(m));
+        sub.injectContexts(resource, m.getExchange().get(OperationResourceInfo.class), m);
         return resource;
     }
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/d044e1c0/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
index 2cbe7e6..67959d2 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
@@ -37,6 +37,7 @@ import javax.ws.rs.core.MediaType;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
+import org.apache.cxf.common.util.ClassHelper;
 import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
 import org.apache.cxf.jaxrs.provider.ServerProviderFactory;
 import org.apache.cxf.jaxrs.utils.AnnotationUtils;
@@ -322,4 +323,30 @@ public class ClassResourceInfo extends BeanResourceInfo {
             }
         }
     }
+    
+    @Override
+    public void clearThreadLocalProxies() {
+        super.clearThreadLocalProxies();
+        if (!injectedSubInstances.isEmpty()) {
+            for (ClassResourceInfo sub : subResources.values()) {
+                if (sub != this) {
+                    sub.clearThreadLocalProxies();
+                }
+            }
+        }
+    }
+    
+    public void injectContexts(Object resourceObject, OperationResourceInfo ori, Message inMessage) {
+        final boolean contextsAvailable = contextsAvailable();
+        final boolean paramsAvailable = paramsAvailable();
+        if (contextsAvailable || paramsAvailable) {
+            Object realResourceObject = ClassHelper.getRealObject(resourceObject);
+            if (paramsAvailable) {
+                JAXRSUtils.injectParameters(ori, this, realResourceObject, inMessage);
+            }
+            if (contextsAvailable) {
+                InjectionUtils.injectContexts(realResourceObject, this, inMessage);
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/d044e1c0/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book2.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book2.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book2.java
index 3b77a5e..74e1050 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book2.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/Book2.java
@@ -85,6 +85,10 @@ public class Book2 {
         return this;
     }
     
+    public void checkContext() {
+        uriInfo.getQueryParameters();
+    }
+    
     @GET
     @Path("rc/bean")
     @Produces("application/xml")

http://git-wip-us.apache.org/repos/asf/cxf/blob/d044e1c0/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
index af4bdc6..c724269 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java
@@ -1132,7 +1132,9 @@ public class BookStore {
     
     @Path("/booksubresource/context")
     public Book2 getBookSubResourceRC() {
-        return resourceContext.getResource(Book2.class);
+        Book2 book = resourceContext.getResource(Book2.class);
+        book.checkContext();
+        return book;
     }
     
     @Path("/booksubresource/instance/context")