2013-04-17 2 views
4

Я пишу игру! приложение, которое предоставляет REST API, позволяющий пользователям создавать отчеты PDF. Я ограничена требованиями использовать старый Java API для создания фактического отчета. Эта библиотека имеет метод generate(OutputStream out, ...), то есть принимает java.io.OutputStream, где записывает итоговый отчет.Play/Akka интеграция с Java OutputStreams

Моя проблема заключается в интеграции этого с Play/Akka для обслуживания содержимого в Chunked Encoding. Для этого мне нужно создать Enumerator[Array[Byte]], который каким-то образом содержит OutputStream из библиотеки Java. Я придумал рабочее решение, которое использует дуэт PipedOutputSteam/PipedInputStream, чтобы передать вывод из библиотеки в Enumerator с помощью Enumerator.fromStream.

Мне интересно, есть ли лучший способ достичь этого, но я не могу найти явный пример в Akka или Play! документация, которая объединяет Enumerators с OutputStreams. Я знаю, что блокировка IO библиотеки Java является ограничивающим фактором при разработке лучшего решения, но, возможно, есть более простой способ сделать это. Есть предположения?

РАЗВЕЙТЕ

Предполагая, что я использую Enumerator.outputStream, что было бы безопасным способом перемещения фактического создания отчета к другому актеру (возможно, на другой машине)? Например, я предполагаю, что отправка OutputStream небезопасна (и будет работать только локально).

ответ

1

Play 2.1 имеет следующий способ: Enumerator.outputStream(a: (OutputStream) ⇒ Unit): Enumerator[Array[Byte]] который, вероятно, делает именно то, что вы хотите.

Реализация специально используется в других классах 2.1, поэтому, если вы используете Play 2.0, вам нужно будет сделать некоторые дополнительные копания, чтобы достичь того же.

+0

Спасибо! Я полностью пропустил это! – user510159

Смежные вопросы