У меня есть веб-сервис Java в JAX-WS, который возвращает OutputStream из другого метода. Кажется, я не могу понять, как направить OutputStream в возвращенный DataHandler каким-либо иным способом, кроме как создать временный файл, записать в него, а затем снова открыть его обратно как InputStream. Вот пример:
@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;
}
}
Основная проблема заключается в том, что метод writeToOut () может возвращать данные, которые намного больше, чем память компьютера. Вот почему метод использует MTOM в первую очередь - для потоковой передачи данных. Кажется, я не могу понять, как передавать данные напрямую из OutputStream, который я должен предоставить возвращенному DataHandler (и, в конечном счете, клиенту, который получает StreamingDataHandler).
Я пытался поиграться с PipedInputStream и PipedOutputStream, но, похоже, это не совсем то, что мне нужно, потому что DataHandler нужно будет возвращать после записи в PipedOutputStream.
Есть идеи?