Package fr.gouv.vitam.common.server.application

# Class AsyncInputStreamHelper

java.lang.Object
fr.gouv.vitam.common.server.application.AsyncInputStreamHelper

public class AsyncInputStreamHelper extends Object
Async Response for InputStream Helper Usage: Direct download, where no Http Client is called but a direct InputStream generated

     @Path(DOWNLOAD + HttpMethod.GET)
     @GET
     @Produces(MediaType.APPLICATION_OCTET_STREAM)
     @Consumes(MediaType.WILDCARD)
     public void downloadDirectGet(@Suspended final AsyncResponse asyncResponse) {
     VitamThreadPoolExecutor.getInstance().execute(new Runnable() {

     @Override
     public void run() {
     File file = new File(...)
     FileInputStream inputStream = new FileInputStream(file);
     new AsyncInputStreamHelper(asyncResponse, inputStream)
     .writeResponse(Response.ok());
     }
     });
     }

Indirect download, where one Http Client is called to get an InputStream to forward

     @Path(DOWNLOAD_INDIRECT + HttpMethod.GET)
     @GET
     @Produces(MediaType.APPLICATION_OCTET_STREAM)
     @Consumes(MediaType.WILDCARD)
     public void downloadIndirectGet(@Suspended final AsyncResponse asyncResponse) throws VitamClientInternalException {
     VitamThreadPoolExecutor.getInstance().execute(new Runnable() {

     @Override
     public void run() {
     String method = HttpMethod.GET;
     Response response = null;
     try (final BenchmarkClientRest client =
     BenchmarkClientFactory.getInstance().getClient()) {
     response = client.performRequest(method, BenchmarkResourceProduceInputStream.DOWNLOAD + method,
     null, MediaType.APPLICATION_OCTET_STREAM_TYPE);
     buildReponse(asyncResponse, response); // Using AsyncInputStreamHelper
     } catch (VitamClientInternalException e) {
     AsyncInputStreamHelper.asyncResponseResume(asyncResponse,
     Response.status(Status.INTERNAL_SERVER_ERROR).build());
     }
     }
     });
     }

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `AsyncInputStreamHelper(jakarta.ws.rs.container.AsyncResponse asyncResponse, jakarta.ws.rs.core.Response receivedResponse)`
  Constructor using native InputStream and size to forward
  `AsyncInputStreamHelper(jakarta.ws.rs.container.AsyncResponse asyncResponse, InputStream inputStream)`
  Constructor using received response containing an InputStream to forward

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static void`
  `asyncResponseResume(jakarta.ws.rs.container.AsyncResponse asyncResponse, jakarta.ws.rs.core.Response response)`
  Call this to finalize your operation in case of Error message while no remote client operation is done. Note you must not call this method if you have already a received Response but the `writeErrorResponse(Response)`.
  `static void`
  `asyncResponseResume(jakarta.ws.rs.container.AsyncResponse asyncResponse, jakarta.ws.rs.core.Response response, InputStream stream)`
  Call this to finalize your operation in case of Error message while no remote client operation is done. Note you must not call this method if you have already a received Response but the `writeErrorResponse(Response)`.
  `void`
  `writeErrorResponse(jakarta.ws.rs.core.Response errorResponse)`
  Once constructed, call this to finalize your operation in case of Error message. Note that receivedResponse if any is fully read and closed for you there.
  `void`
  `writeResponse(jakarta.ws.rs.core.Response.ResponseBuilder responseBuilder)`
  Once constructed, call this to finalize your operation. Note that receivedResponse if any is closed for you there.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### AsyncInputStreamHelper

    public AsyncInputStreamHelper(jakarta.ws.rs.container.AsyncResponse asyncResponse, InputStream inputStream)
    Constructor using received response containing an InputStream to forward
    Parameters:
      `asyncResponse` - the AsyncReponse from the Resource API
      `inputStream` - the native InputStream to send (not from a Client response)

  - ### AsyncInputStreamHelper

    public AsyncInputStreamHelper(jakarta.ws.rs.container.AsyncResponse asyncResponse, jakarta.ws.rs.core.Response receivedResponse)
    Constructor using native InputStream and size to forward
    Parameters:
      `asyncResponse` - the AsyncReponse from the Resource API
      `receivedResponse` - Received Response containing the InputStream to forward as is

- ## Method Details

  - ### writeErrorResponse

    public void writeErrorResponse(jakarta.ws.rs.core.Response errorResponse)
    Once constructed, call this to finalize your operation in case of Error message. Note that receivedResponse if any is fully read and closed for you there.
    Parameters:
      `errorResponse` - the fully prepared ErrorResponse

  - ### writeResponse

    public void writeResponse(jakarta.ws.rs.core.Response.ResponseBuilder responseBuilder)
    Once constructed, call this to finalize your operation. Note that receivedResponse if any is closed for you there.
    Parameters:
      `responseBuilder` - the ResponseBuilder initialize with your own parameters and status

  - ### asyncResponseResume

    public static void asyncResponseResume(jakarta.ws.rs.container.AsyncResponse asyncResponse, jakarta.ws.rs.core.Response response)
    Call this to finalize your operation in case of Error message while no remote client operation is done. Note you must not call this method if you have already a received Response but the `writeErrorResponse(Response)`.
    Parameters:
      `asyncResponse` -
      `response` - the fully prepared ErrorResponse

  - ### asyncResponseResume

    public static void asyncResponseResume(jakarta.ws.rs.container.AsyncResponse asyncResponse, jakarta.ws.rs.core.Response response, InputStream stream)
    Call this to finalize your operation in case of Error message while no remote client operation is done. Note you must not call this method if you have already a received Response but the `writeErrorResponse(Response)`.
    Parameters:
      `asyncResponse` -
      `response` - the fully prepared ErrorResponse
      `stream` - an inputStream to close anyway