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 2011/03/24 15:39:03 UTC
svn commit: r1084970 - in /cxf/branches/2.3.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/
rt/frontend/jaxrs/s...
Author: sergeyb
Date: Thu Mar 24 14:39:03 2011
New Revision: 1084970
URL: http://svn.apache.org/viewvc?rev=1084970&view=rev
Log:
Merged revisions 1084966 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1084966 | sergeyb | 2011-03-24 14:27:25 +0000 (Thu, 24 Mar 2011) | 1 line
[CXF-3417] Injection of contexts into Applications
........
Modified:
cxf/branches/2.3.x-fixes/ (props changed)
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/CustomerApplication.java
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
svn:mergeinfo = /cxf/trunk:1084966
Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java?rev=1084970&r1=1084969&r2=1084970&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java Thu Mar 24 14:39:03 2011
@@ -28,6 +28,7 @@ import java.util.ResourceBundle;
import java.util.logging.Logger;
import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
@@ -46,6 +47,7 @@ import org.apache.cxf.jaxrs.model.Operat
import org.apache.cxf.jaxrs.model.OperationResourceInfoStack;
import org.apache.cxf.jaxrs.model.Parameter;
import org.apache.cxf.jaxrs.model.ParameterType;
+import org.apache.cxf.jaxrs.model.ProviderInfo;
import org.apache.cxf.jaxrs.model.URITemplate;
import org.apache.cxf.jaxrs.provider.ProviderFactory;
import org.apache.cxf.jaxrs.utils.InjectionUtils;
@@ -121,15 +123,21 @@ public class JAXRSInvoker extends Abstra
if (cri.isRoot()) {
Object realResourceObject = ClassHelper.getRealObject(resourceObject);
- JAXRSUtils.handleSetters(ori, realResourceObject,
+ JAXRSUtils.injectParameters(ori, realResourceObject,
exchange.getInMessage());
- InjectionUtils.injectContextFields(realResourceObject,
- ori.getClassResourceInfo(),
- exchange.getInMessage());
- InjectionUtils.injectResourceFields(realResourceObject,
- ori.getClassResourceInfo(),
- exchange.getInMessage());
+ InjectionUtils.injectContexts(realResourceObject,
+ ori.getClassResourceInfo(),
+ exchange.getInMessage());
+
+ ProviderInfo<?> appProvider =
+ (ProviderInfo)exchange.getEndpoint().get(Application.class.getName());
+ if (appProvider != null) {
+ InjectionUtils.injectContexts(appProvider.getProvider(),
+ appProvider,
+ exchange.getInMessage());
+ }
+
}
}
Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java?rev=1084970&r1=1084969&r2=1084970&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java Thu Mar 24 14:39:03 2011
@@ -39,6 +39,7 @@ import org.apache.cxf.jaxrs.impl.Request
import org.apache.cxf.jaxrs.lifecycle.PerRequestResourceProvider;
import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.model.ProviderInfo;
import org.apache.cxf.jaxrs.provider.ProviderFactory;
import org.apache.cxf.jaxrs.utils.InjectionUtils;
import org.apache.cxf.service.factory.FactoryBeanListener;
@@ -66,7 +67,7 @@ public class JAXRSServerFactoryBean exte
private Map<Object, Object> languageMappings;
private Map<Object, Object> extensionMappings;
private ResourceComparator rc;
- private Application application;
+ private ProviderInfo<Application> appProvider;
public JAXRSServerFactoryBean() {
this(new JAXRSServiceFactoryBean());
@@ -81,7 +82,7 @@ public class JAXRSServerFactoryBean exte
* @param app
*/
public void setApplication(Application app) {
- application = app;
+ appProvider = new ProviderInfo<Application>(app);
}
/**
@@ -132,8 +133,10 @@ public class JAXRSServerFactoryBean exte
ep.getService().setInvoker(invoker);
}
- ep.put(Application.class.getName(), application);
ProviderFactory factory = setupFactory(ep);
+ ep.put(Application.class.getName(), appProvider);
+ factory.setApplicationProvider(appProvider);
+
factory.setRequestPreprocessor(
new RequestPreprocessor(languageMappings, extensionMappings));
if (rc != null) {
@@ -315,6 +318,7 @@ public class JAXRSServerFactoryBean exte
}
private void injectContexts() {
+ Application application = appProvider == null ? null : appProvider.getProvider();
for (ClassResourceInfo cri : serviceFactory.getClassResourceInfo()) {
if (cri.isSingleton()) {
InjectionUtils.injectContextProxiesAndApplication(cri,
@@ -322,6 +326,10 @@ public class JAXRSServerFactoryBean exte
application);
}
}
+ if (application != null) {
+ InjectionUtils.injectContextProxiesAndApplication(appProvider,
+ application, null);
+ }
}
private void updateClassResourceProviders() {
Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java?rev=1084970&r1=1084969&r2=1084970&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java Thu Mar 24 14:39:03 2011
@@ -33,6 +33,7 @@ import java.util.List;
import java.util.Set;
import java.util.logging.Logger;
+import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.ExceptionMapper;
@@ -90,6 +91,8 @@ public final class ProviderFactory {
private List<ProviderInfo<ResponseExceptionMapper>> responseExceptionMappers =
new ArrayList<ProviderInfo<ResponseExceptionMapper>>(1);
private RequestPreprocessor requestPreprocessor;
+ private ProviderInfo<Application> application;
+
private ProviderFactory() {
}
@@ -573,6 +576,10 @@ public final class ProviderFactory {
}
}
+ public void setApplicationProvider(ProviderInfo<Application> app) {
+ application = app;
+ }
+
public void setRequestPreprocessor(RequestPreprocessor rp) {
this.requestPreprocessor = rp;
}
@@ -588,6 +595,9 @@ public final class ProviderFactory {
requestHandlers,
responseHandlers,
exceptionMappers);
+ if (application != null) {
+ application.clearThreadLocalProxies();
+ }
if (this != SHARED_FACTORY) {
SHARED_FACTORY.clearThreadLocalProxies();
}
Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java?rev=1084970&r1=1084969&r2=1084970&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java Thu Mar 24 14:39:03 2011
@@ -814,6 +814,14 @@ public final class InjectionUtils {
}
}
+ public static void injectContexts(Object requestObject,
+ AbstractResourceInfo resource,
+ Message message) {
+ injectContextMethods(requestObject, resource, message);
+ injectContextFields(requestObject, resource, message);
+ injectResourceFields(requestObject, resource, message);
+ }
+
@SuppressWarnings("unchecked")
public static void injectContextMethods(Object requestObject,
AbstractResourceInfo cri,
Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java?rev=1084970&r1=1084969&r2=1084970&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java Thu Mar 24 14:39:03 2011
@@ -92,6 +92,7 @@ import org.apache.cxf.jaxrs.model.Operat
import org.apache.cxf.jaxrs.model.OperationResourceInfoComparator;
import org.apache.cxf.jaxrs.model.Parameter;
import org.apache.cxf.jaxrs.model.ParameterType;
+import org.apache.cxf.jaxrs.model.ProviderInfo;
import org.apache.cxf.jaxrs.model.URITemplate;
import org.apache.cxf.jaxrs.provider.AbstractConfigurableProvider;
import org.apache.cxf.jaxrs.provider.ProviderFactory;
@@ -183,12 +184,11 @@ public final class JAXRSUtils {
}
@SuppressWarnings("unchecked")
- public static void handleSetters(OperationResourceInfo ori,
- Object requestObject,
- Message message) {
+ public static void injectParameters(OperationResourceInfo ori,
+ Object requestObject,
+ Message message) {
ClassResourceInfo cri = ori.getClassResourceInfo();
- InjectionUtils.injectContextMethods(requestObject, cri, message);
-
+
if (cri.isSingleton()
&& (!cri.getParameterMethods().isEmpty() || !cri.getParameterFields().isEmpty())) {
LOG.fine("Injecting request parameters into singleton resource is not thread-safe");
@@ -814,7 +814,9 @@ public final class JAXRSUtils {
} else if (SearchContext.class.isAssignableFrom(clazz)) {
o = new SearchContextImpl(m);
} else if (Application.class.isAssignableFrom(clazz)) {
- o = contextMessage.getExchange().getEndpoint().get(Application.class.getName());
+ ProviderInfo<?> providerInfo =
+ (ProviderInfo)contextMessage.getExchange().getEndpoint().get(Application.class.getName());
+ o = providerInfo == null ? providerInfo : providerInfo.getProvider();
}
if (o == null && contextMessage != null && !MessageUtils.isRequestor(contextMessage)) {
o = createServletResourceValue(contextMessage, clazz);
Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/CustomerApplication.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/CustomerApplication.java?rev=1084970&r1=1084969&r2=1084970&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/CustomerApplication.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/CustomerApplication.java Thu Mar 24 14:39:03 2011
@@ -19,7 +19,14 @@
package org.apache.cxf.jaxrs;
import javax.ws.rs.core.Application;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
public class CustomerApplication extends Application {
-
+ @Context
+ private UriInfo uriInfo;
+
+ public UriInfo getUriInfo() {
+ return uriInfo;
+ }
}
Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java?rev=1084970&r1=1084969&r2=1084970&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java Thu Mar 24 14:39:03 2011
@@ -119,7 +119,7 @@ public class JAXRSUtilsTest extends Asse
@Test
public void testInjectApplicationInSingleton() throws Exception {
- Application app = new CustomerApplication();
+ CustomerApplication app = new CustomerApplication();
JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
Customer customer = new Customer();
sf.setServiceBeanObjects(customer);
@@ -128,20 +128,26 @@ public class JAXRSUtilsTest extends Asse
Server server = sf.create();
assertSame(app, customer.getApplication1());
assertSame(app, customer.getApplication2());
+ ThreadLocalProxy proxy = (ThreadLocalProxy)app.getUriInfo();
+ assertNotNull(proxy);
invokeCustomerMethod(sf.getServiceFactory().getClassResourceInfo().get(0),
customer, server);
assertSame(app, customer.getApplication2());
+ assertTrue(proxy.get() instanceof UriInfo);
}
@Test
public void testInjectApplicationInPerRequestResource() throws Exception {
- Application app = new CustomerApplication();
+ CustomerApplication app = new CustomerApplication();
JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
sf.setServiceClass(Customer.class);
sf.setApplication(app);
sf.setStart(false);
Server server = sf.create();
+ ThreadLocalProxy proxy = (ThreadLocalProxy)app.getUriInfo();
+ assertNotNull(proxy);
+
ClassResourceInfo cri = sf.getServiceFactory().getClassResourceInfo().get(0);
Customer customer = (Customer)cri.getResourceProvider().getInstance(
@@ -153,6 +159,8 @@ public class JAXRSUtilsTest extends Asse
invokeCustomerMethod(cri, customer, server);
assertSame(app, customer.getApplication1());
assertSame(app, customer.getApplication2());
+
+ assertTrue(proxy.get() instanceof UriInfo);
}
private void invokeCustomerMethod(ClassResourceInfo cri,
@@ -1425,7 +1433,7 @@ public class JAXRSUtilsTest extends Asse
OperationResourceInfo ori = new OperationResourceInfo(Customer.class.getMethods()[0],
cri);
Message message = new MessageImpl();
- JAXRSUtils.handleSetters(ori, c, message);
+ InjectionUtils.injectContextMethods(c, ori.getClassResourceInfo(), message);
assertNotNull(c.getUriInfo());
assertSame(ThreadLocalUriInfo.class, c.getUriInfo().getClass());
assertSame(UriInfoImpl.class,
@@ -1446,7 +1454,7 @@ public class JAXRSUtilsTest extends Asse
headers.add("AHeader2", "theAHeader2");
m.put(Message.PROTOCOL_HEADERS, headers);
m.put(Message.QUERY_STRING, "a=aValue&query2=b");
- JAXRSUtils.handleSetters(ori, c, m);
+ JAXRSUtils.injectParameters(ori, c, m);
assertEquals("aValue", c.getQueryParam());
assertEquals("theAHeader2", c.getAHeader2());
}
@@ -1464,7 +1472,7 @@ public class JAXRSUtilsTest extends Asse
headers.add("AHeader", "theAHeader");
m.put(Message.PROTOCOL_HEADERS, headers);
m.put(Message.QUERY_STRING, "b=bValue");
- JAXRSUtils.handleSetters(ori, c, m);
+ JAXRSUtils.injectParameters(ori, c, m);
assertEquals("bValue", c.getB());
assertEquals("theAHeader", c.getAHeader());
}