Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-6389

set initialSuspend=true incorrectly when resume the asyncresponse

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.0, 3.0.3, 2.7.15
    • 3.1.1, 3.0.6
    • JAX-RS
    • None
    • Unknown
    • Patch

    Description

      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); }

      }

      Attachments

        Activity

          People

            sergey_beryozkin Sergey Beryozkin
            irisding Iris Ding
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: