Ho bisogno di chiamare un servizio upstream (Servizio BLOB di Azure) per inviare i dati a un OutputStream, che poi devo girare e rispedire al client, tramite Akka. Senza Akka (e solo codice servlet), otterrei semplicemente ServletOutputStream e lo passerei al metodo del servizio azzurro.
Il più vicino che posso provare a inciampare, e chiaramente questo è sbagliato, è qualcosa di simile
Source<ByteString, OutputStream> source = StreamConverters.asOutputStream().mapMaterializedValue(os -> {
blobClient.download(os);
return os;
});
ResponseEntity resposeEntity = HttpEntities.create(ContentTypes.APPLICATION_OCTET_STREAM, preAuthData.getFileSize(), source);
sender().tell(new RequestResult(resposeEntity, StatusCodes.OK), self());
L'idea è che sto chiamando un servizio upstream per ottenere un outputstream popolato chiamando blobClient.download (os);
Sembra che la funzione lambda venga chiamata e ritorni, ma poi fallisce, perché non ci sono dati o qualcosa del genere. Come se non dovessi avere quella funzione lambda per fare il lavoro, ma forse restituire qualche oggetto che fa il lavoro? Non sono sicuro.
Come si fa a fare questo?
download
? Trasmette i dati in streamingos
e li restituisce solo dopo che i dati sono stati scritti?