Tengo un servicio web Java en JAX-WS que devuelve un OutputStream desde otro método. Parece que no puedo entender cómo transmitir el OutputStream al DataHandler devuelto de otra manera que no sea crear un archivo temporal, escribir en él y luego abrirlo de nuevo como un InputStream. He aquí un ejemplo:¿Cómo se puede canalizar un OutputStream a un 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;
}
}
El principal problema es que el método writeToOut() puede devolver los datos que son mucho más grandes que la memoria del ordenador. Es por eso que el método está utilizando MTOM en primer lugar: para transmitir los datos. Parece que no puedo entender cómo transmitir los datos directamente desde el OutputStream que debo proporcionar al DataHandler devuelto (y en última instancia al cliente, que recibe el StreamingDataHandler).
He intentado jugar con PipedInputStream y PipedOutputStream, pero esos no parecen ser todo lo que necesito, porque el DataHandler tendría que ser devuelto después de que se escribió el PipedOutputStream.
¿Alguna idea?
Véase también [esta cuestión] (http: // stackoverflow.com/questions/2830561/how-to-convert-an-inputstream-to-a-datahandler) – schnatterer