You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Sergey Beryozkin <sb...@gmail.com> on 2011/02/24 13:04:33 UTC
Re: svn commit: r1074119 - in /cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport:
http/AbstractHTTPDestination.java http/Servlet3ContinuationProvider.java servlet/ServletDestination.java
Hi Willem
Are you planning to commit to the trunk ? Just wondering why you
started from the 2.3.x branch...
Cheers, Sergey
On Thu, Feb 24, 2011 at 11:58 AM, <ni...@apache.org> wrote:
> Author: ningjiang
> Date: Thu Feb 24 11:58:26 2011
> New Revision: 1074119
>
> URL: http://svn.apache.org/viewvc?rev=1074119&view=rev
> Log:
> CXF-3362 Fix the issue of CXF Servlet deploying into Servlet3 container
>
> Modified:
> cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
> cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Servlet3ContinuationProvider.java
> cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java
>
> Modified: cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
> URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java?rev=1074119&r1=1074118&r2=1074119&view=diff
> ==============================================================================
> --- cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java (original)
> +++ cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java Thu Feb 24 11:58:26 2011
> @@ -384,7 +384,7 @@ public abstract class AbstractHTTPDestin
> protected void setupContinuation(Message inMessage,
> final HttpServletRequest req,
> final HttpServletResponse resp) {
> - if (isServlet3) {
> + if (isServlet3 && req.isAsyncSupported()) {
> inMessage.put(ContinuationProvider.class.getName(),
> new Servlet3ContinuationProvider(req, resp, inMessage));
> }
>
> Modified: cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Servlet3ContinuationProvider.java
> URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Servlet3ContinuationProvider.java?rev=1074119&r1=1074118&r2=1074119&view=diff
> ==============================================================================
> --- cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Servlet3ContinuationProvider.java (original)
> +++ cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Servlet3ContinuationProvider.java Thu Feb 24 11:58:26 2011
> @@ -39,6 +39,7 @@ public class Servlet3ContinuationProvide
> HttpServletResponse resp;
> Message inMessage;
>
> +
> public Servlet3ContinuationProvider(HttpServletRequest req,
> HttpServletResponse resp,
> Message inMessage) {
> @@ -64,7 +65,9 @@ public class Servlet3ContinuationProvide
> Object obj;
>
> public Servlet3Continuation() {
> - isNew = !req.isAsyncStarted();
> + // It looks current Servlet3 implementation request doesn't pass the isAsyncStart
> + // status to the redispatched request, so we use the attribute to check the statues
> + isNew = req.getAttribute(AbstractHTTPDestination.CXF_CONTINUATION_MESSAGE) == null;
> if (isNew) {
> req.setAttribute(AbstractHTTPDestination.CXF_CONTINUATION_MESSAGE,
> inMessage.getExchange().getInMessage());
> @@ -83,7 +86,6 @@ public class Servlet3ContinuationProvide
> isNew = false;
> // Need to get the right message which is handled in the interceptor chain
> inMessage.getExchange().getInMessage().getInterceptorChain().suspend();
> -
> isPending = true;
> return true;
> }
>
> Modified: cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java
> URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java?rev=1074119&r1=1074118&r2=1074119&view=diff
> ==============================================================================
> --- cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java (original)
> +++ cxf/branches/2.3.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ServletDestination.java Thu Feb 24 11:58:26 2011
> @@ -30,7 +30,9 @@ import javax.servlet.http.HttpServletRes
>
> import org.apache.cxf.Bus;
> import org.apache.cxf.common.logging.LogUtils;
> +import org.apache.cxf.continuations.SuspendedInvocationException;
> import org.apache.cxf.message.ExchangeImpl;
> +import org.apache.cxf.message.Message;
> import org.apache.cxf.message.MessageImpl;
> import org.apache.cxf.service.model.EndpointInfo;
> import org.apache.cxf.transport.http.AbstractHTTPDestination;
> @@ -70,6 +72,15 @@ public class ServletDestination extends
> protected Logger getLogger() {
> return LOG;
> }
> +
> + protected Message retrieveFromServlet3Async(HttpServletRequest req) {
> + // It looks current Servlet3 implementation request doesn't pass the isAsyncStart
> + // status to the redispatched request
> + if (req.isAsyncSupported()) {
> + return (Message)req.getAttribute(CXF_CONTINUATION_MESSAGE);
> + }
> + return null;
> + }
>
> public void invoke(final ServletContext context,
> final HttpServletRequest req,
> @@ -81,20 +92,32 @@ public class ServletDestination extends
> final ServletContext context,
> final HttpServletRequest req,
> final HttpServletResponse resp) throws IOException {
> -
> - MessageImpl inMessage = new MessageImpl();
> - setupMessage(inMessage,
> + Message inMessage = retrieveFromContinuation(req);
> + if (inMessage == null) {
> + LOG.fine("Create a new message for processing");
> + inMessage = new MessageImpl();
> + setupMessage(inMessage,
> config,
> context,
> req,
> resp);
>
> - ExchangeImpl exchange = new ExchangeImpl();
> - exchange.setInMessage(inMessage);
> - exchange.setSession(new HTTPSession(req));
> - inMessage.setDestination(this);
> + ExchangeImpl exchange = new ExchangeImpl();
> + exchange.setInMessage(inMessage);
> + exchange.setSession(new HTTPSession(req));
> + ((MessageImpl)inMessage).setDestination(this);
> + } else {
> + LOG.fine("Get the message from the request for processing");
> + }
>
> - incomingObserver.onMessage(inMessage);
> + try {
> + incomingObserver.onMessage(inMessage);
> + } catch (SuspendedInvocationException ex) {
> + if (ex.getRuntimeException() != null) {
> + throw ex.getRuntimeException();
> + }
> + //else nothing to do, just finishing the processing
> + }
>
> }
> protected String getBasePath(String contextPath) throws IOException {
>
>
>