Yes it's quite odd. And to me it sounds like a bigger hack than passing an OutputStream. Source has a getInputStream() and represents a "source of data" according to its documentation. It doesn't even have getOutputStream().
WriteableSource does.
Stefano.