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)