Play / Akka与Java OutputStreams集成

时间:2013-04-17 16:31:33

标签: java scala playframework-2.0 akka outputstream

我正在写一个游戏!暴露REST API的应用程序,允许用户生成PDF报告。我受到使用旧Java API进行实际报告生成的要求的限制。该库有一个方法generate(OutputStream out, ...),即它会在java.io.OutputStream处写出生成的报告。

我的问题是将其与Play / Akka集成以提供Chunked Encoding中的内容。为此,我需要创建一个Enumerator[Array[Byte]],它以某种方式包含Java库中的OutputStream。我提出了一个使用PipedOutputSteam / PipedInputStream二人组的工作解决方案,使用Enumerator.fromStream将库的输出传输到Enumerator。

我想知道是否有更好的方法来实现这一点,但我似乎无法在Akka或Play中找到一个明确的例子!将枚举器与OutputStream集成的文档。我知道Java库的阻塞IO是设计更好的解决方案的限制因素,但也许有一种更简洁的方法来做到这一点。有什么想法吗?

跟进

假设我使用Enumerator.outputStream,那么将实际报告生成移动到另一个actor(可能在另一台机器上)的安全方法是什么?例如,我猜测发送OutputStream是不安全的(并且只能在本地工作)。

1 个答案:

答案 0 :(得分:1)

Play 2.1有以下方法:Enumerator.outputStream(a: (OutputStream) ⇒ Unit): Enumerator[Array[Byte]]可能完全符合您的要求。

它的实现是专门使用其他Play 2.1类,所以如果你使用Play 2.0,你需要做一些额外的挖掘来实现同样的目的。