Gianugo Rabellino wrote:

I'm having a hell of a time using flow with processPipelineTo() and OutputStreams coming out from FileSource(s).

The problem is that FileSource#getOutputStream() creates a temporary file (... to be discussed later ...) and such file gets renamed to the original one only upon OutputStream.close(). Now, AbstractInterpreter, line 201, actually calls flush() but *never* close. As a result, everything is kinda ... well... screwed up.

Patch is trivial, but I'm wondering if adding out.close() in AbstractInterpreter.java might break something: any flow experts around?


I don't see why there should be some consequences on the flow itself... Just replace flush() by close() !

Now for the FileSource: I do understand *some* of the reasoning behind using a temporary file, but I have to disagree on the implementation: naming it [filename].tmp is a bit of a bet, since someone might legitimately have such a filename around. While I understand that there might be memory issues with large files, I guess that either:

1. keeping a ByteArrayOutputStream;
2. forget about it and just write the file;
3. use a more "clever" name that doesn't risk conflicts this much


I would avoid 2. The reason why I used a temporary file is because of the streamed nature of Cocoon pipelines. If an error occurs within the processing, the original content is not partially overwritten. My preference would go to 3.

are all better options.

Is that OK to you if I work on it? I don't know if I have access to the Excalibur CVS though...


As a Cocoon committer, you should.

Sylvain

--
Sylvain Wallez                                  Anyware Technologies
http://www.apache.org/~sylvain           http://www.anyware-tech.com
{ XML, Java, Cocoon, OpenSource }*{ Training, Consulting, Projects }
Orixo, the opensource XML business alliance  -  http://www.orixo.com




Reply via email to