我在 JAX-WS 中有一个 Java Web 服务,它从另一个方法返回一个 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 的原因 - 流式传输数据。我似乎无法理解如何直接从我需要提供给返回的 DataHandler(以及最终接收 StreamingDataHandler 的客户端)的 OutputStream 流式传输数据。
我尝试过使用 PipedInputStream 和 PipedOutputStream,但这些似乎并不是我所需要的,因为在写入 PipedOutputStream 之后需要返回 DataHandler。
有任何想法吗?