Ho un servizio Web Java in JAX-WS che restituisce un OutputStream da un altro metodo. Non riesco a capire come eseguire lo streaming di OutputStream nel DataHandler restituito in un altro modo se non quello di creare un file temporaneo, scrivere su di esso, quindi aprirlo di nuovo come InputStream. Ecco un esempio:Come si può reindirizzare un OutputStream a uno StreamingDataHandler?
@MTOM
@WebService
class Example {
@WebMethod
public @XmlMimeType("application/octet-stream") DataHandler service() {
// Create a temporary file to write to
File fTemp = File.createTempFile("my", "tmp");
OutputStream out = new FileOutputStream(fTemp);
// Method takes an output stream and writes to it
writeToOut(out);
out.close();
// Create a data source and data handler based on that temporary file
DataSource ds = new FileDataSource(fTemp);
DataHandler dh = new DataHandler(ds);
return dh;
}
}
Il problema principale è che il metodo writeToOut() può restituire i dati che sono molto più grandi di memoria del computer. Ecco perché il metodo sta utilizzando MTOM in primo luogo - per trasmettere i dati in streaming. Non riesco a capire come eseguire il flusso dei dati direttamente da OutputStream che devo fornire al DataHandler restituito (e in definitiva al client, che riceve StreamingDataHandler).
Ho provato a giocare con PipedInputStream e PipedOutputStream, ma non sembra proprio quello di cui ho bisogno, perché DataHandler dovrebbe essere restituito dopo che PipedOutputStream è stato scritto.
Qualche idea?
Vedi anche [questa domanda] (http: // StackOverflow.it/questions/2830561/how-to-convert-an-inputstream-to-a-datahandler) – schnatterer