iris ding created CXF-6389:
------------------------------

             Summary: set initialSuspend=true incorrectly when resume the 
asyncresponse
                 Key: CXF-6389
                 URL: https://issues.apache.org/jira/browse/CXF-6389
             Project: CXF
          Issue Type: Bug
          Components: JAX-RS
    Affects Versions: 2.7.15, 3.0.3, 3.0.0
            Reporter: iris ding


My Resource class: 
@Path("resource")
public class Resource
{

   public static final String RESUMED = "Response resumed";
   public static final String FALSE = "A method returned false";
   public static final String TRUE = "A method return true";

   //
   private static final AsyncResponseBlockingQueue[] stage = {
           new AsyncResponseBlockingQueue(1),
           new AsyncResponseBlockingQueue(1),
           new AsyncResponseBlockingQueue(1)};

   @GET
   @Path("suspend")
   public void suspend(@Suspended AsyncResponse asyncResponse)
   {
      stage[0].add(asyncResponse);
   }
   
   @GET
   @Path("cancelvoid")
   public String cancel(@QueryParam("stage") String stage)
   {
      AsyncResponse response = takeAsyncResponse(stage);
      boolean ret = response.cancel();
      System.out.println("*** response.cancel() 1 " + ret);
      ret &= response.cancel();
      System.out.println("*** response.cancel() 2 " + ret);
      addResponse(response, stage);
      return ret ? TRUE : FALSE;
   }
   
    @POST
   @Path("resume")
   public String resume(@QueryParam("stage") String stage, String response)
   {
      AsyncResponse async = takeAsyncResponse(stage);
      boolean b = resume(async, response);
      addResponse(async, stage);
      return b ? TRUE : FALSE;
   }
   
     protected static AsyncResponse takeAsyncResponse(String stageId)
   {
      return takeAsyncResponse(Integer.parseInt(stageId));
   }

   protected static AsyncResponse takeAsyncResponse(int stageId)
   {
      final ResponseBuilder error = createErrorResponseBuilder();
      AsyncResponse asyncResponse = null;
      try
      {
         asyncResponse = stage[stageId].take();
      }
      catch (InterruptedException e)
      {
         throw new WebApplicationException(error.entity(
                 "ArrayBlockingQueue#take").build());
      }
      return asyncResponse;
   }

   protected static final void addResponse(AsyncResponse response, String 
stageId)
   {
      int id = Integer.parseInt(stageId) + 1;
      if (id != stage.length)
         stage[id].add(response);
   }

   protected static boolean resume(AsyncResponse takenResponse, Object response)
   {
      return takenResponse.resume(response);
   }

   protected static ResponseBuilder createErrorResponseBuilder()
   {
      return Response.status(Status.EXPECTATION_FAILED);
   }
   }



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to