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 2013/07/09 14:55:26 UTC
svn commit: r1501230 - in /cxf/branches/2.6.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookContinuationStore.java
Author: sergeyb
Date: Tue Jul 9 12:55:25 2013
New Revision: 1501230
URL: http://svn.apache.org/r1501230
Log:
Merged revisions 1501222 via svnmerge from
https://svn.apache.org/repos/asf/cxf/branches/2.7.x-fixes
................
r1501222 | sergeyb | 2013-07-09 13:33:24 +0100 (Tue, 09 Jul 2013) | 9 lines
Merged revisions 1501213 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1501213 | sergeyb | 2013-07-09 13:13:39 +0100 (Tue, 09 Jul 2013) | 1 line
[CXF-5104] Releasing contexts when CXF continuations are used, using PhaseInterceptorChain when the call is resumed directly on a subresource instance
........
................
Modified:
cxf/branches/2.6.x-fixes/ (props changed)
cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookContinuationStore.java
Propchange: cxf/branches/2.6.x-fixes/
------------------------------------------------------------------------------
Merged /cxf/branches/2.7.x-fixes:r1501222
Merged /cxf/trunk:r1501213
Propchange: cxf/branches/2.6.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java?rev=1501230&r1=1501229&r2=1501230&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java (original)
+++ cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java Tue Jul 9 12:55:25 2013
@@ -95,19 +95,17 @@ public class JAXRSInvoker extends Abstra
return handleFault(ex, exchange.getInMessage());
} finally {
boolean suspended = exchange.getInMessage().getInterceptorChain().getState() == State.SUSPENDED;
+ if (exchange.isOneWay() || suspended) {
+ ProviderFactory.getInstance(exchange.getInMessage()).clearThreadLocalProxies();
+ }
if (!suspended) {
- if (exchange.isOneWay()) {
- ProviderFactory.getInstance(exchange.getInMessage()).clearThreadLocalProxies();
- }
if (!isServiceObjectRequestScope(exchange.getInMessage())) {
provider.releaseInstance(exchange.getInMessage(), rootInstance);
- } else {
- persistRoots(exchange, rootInstance, provider);
}
} else {
- persistRoots(exchange, rootInstance, provider);
exchange.put(REQUEST_WAS_SUSPENDED, true);
}
+ persistRoots(exchange, rootInstance, provider);
}
}
@@ -126,25 +124,24 @@ public class JAXRSInvoker extends Abstra
if (!wasSuspended) {
pushOntoStack(ori, ClassHelper.getRealClass(resourceObject), exchange.getInMessage());
-
- if (cri.isRoot()) {
- Object realResourceObject = ClassHelper.getRealObject(resourceObject);
- JAXRSUtils.injectParameters(ori, realResourceObject,
- 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());
- }
+ }
+ if (cri.isRoot()) {
+ Object realResourceObject = ClassHelper.getRealObject(resourceObject);
+ JAXRSUtils.injectParameters(ori, realResourceObject,
+ 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.6.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookContinuationStore.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookContinuationStore.java?rev=1501230&r1=1501229&r2=1501230&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookContinuationStore.java (original)
+++ cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookContinuationStore.java Tue Jul 9 12:55:25 2013
@@ -19,7 +19,7 @@
package org.apache.cxf.systest.jaxrs;
-
+import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ArrayBlockingQueue;
@@ -27,14 +27,19 @@ import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
-import javax.annotation.Resource;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
import org.apache.cxf.continuations.Continuation;
import org.apache.cxf.continuations.ContinuationProvider;
import org.apache.cxf.jaxrs.ext.MessageContext;
+import org.apache.cxf.jaxrs.impl.UriInfoImpl;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.PhaseInterceptorChain;
@Path("/bookstore")
public class BookContinuationStore {
@@ -45,7 +50,7 @@ public class BookContinuationStore {
private Executor executor = new ThreadPoolExecutor(5, 5, 0, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(10));
- @Resource
+ @Context
private MessageContext context;
public BookContinuationStore() {
@@ -55,7 +60,10 @@ public class BookContinuationStore {
@GET
@Path("/books/{id}")
public String getBookDescription(@PathParam("id") String id) {
-
+ URI uri = context.getUriInfo().getAbsolutePath();
+ if (!uri.toString().contains("/books/")) {
+ throw new WebApplicationException(500);
+ }
return handleContinuationRequest(id);
}
@@ -128,8 +136,21 @@ public class BookContinuationStore {
}
private Continuation getContinuation(String name) {
-
- //System.out.println("Getting continuation for " + name);
+ ContinuationProvider provider =
+ (ContinuationProvider)context.get(ContinuationProvider.class.getName());
+ if (provider == null) {
+ Message m = PhaseInterceptorChain.getCurrentMessage();
+ UriInfo uriInfo = new UriInfoImpl(m);
+ if (uriInfo.getAbsolutePath().toString().contains("/books/subresources/")) {
+ // when we suspend a CXF continuation from a sub-resource, the invocation will
+ // return directly to that object - and sub-resources do not have contexts supported
+ // by default - so we just need to depend on PhaseInterceptorChain
+ provider = (ContinuationProvider)m.get(ContinuationProvider.class.getName());
+ }
+ }
+ if (provider == null) {
+ throw new WebApplicationException(500);
+ }
synchronized (suspended) {
Continuation suspendedCont = suspended.remove(name);
@@ -138,8 +159,6 @@ public class BookContinuationStore {
}
}
- ContinuationProvider provider =
- (ContinuationProvider)context.get(ContinuationProvider.class.getName());
return provider.getContinuation();
}