Tôi đã có một dịch vụ web Java trong JAX-WS trả về một OutputStream từ một phương thức khác. Tôi không thể tìm ra cách để luồng OutputStream vào DataHandler được trả về theo bất kỳ cách nào khác ngoài việc tạo một tệp tạm thời, ghi vào nó, sau đó mở nó trở lại như một InputStream. Dưới đây là ví dụ:Làm thế nào để bạn có thể tạo một OutputStream thành một 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;
}
}
Vấn đề chính là phương thức writeToOut() có thể trả về dữ liệu lớn hơn nhiều so với bộ nhớ của máy tính. Đó là lý do tại sao phương pháp này đang sử dụng MTOM ngay từ đầu - để truyền dữ liệu. Tôi dường như không thể quấn đầu xung quanh cách truyền dữ liệu trực tiếp từ OutputStream mà tôi cần cung cấp cho DataHandler được trả về (và cuối cùng là máy khách, người nhận được StreamingDataHandler).
Tôi đã thử chơi với PipedInputStream và PipedOutputStream, nhưng những thứ đó dường như không hoàn toàn là những gì tôi cần, vì DataHandler cần được trả về sau khi PipedOutputStream được ghi vào.
Bất kỳ ý tưởng nào?
Xem thêm [câu hỏi này] (http: // stackoverflow.com/questions/2830561/how-to-convert-an-inputstream-to-a-datahandler) – schnatterer