I am currently designing some libraries for transfering files through web services. I will provide different services, depending on the client code requirements.
For example, I have already developed a simple web service that receives / returns the file contents as a Base64 encoded string. I have also an optional servlet that accepts PUT requests, so I can upload large files without worrying about memory consumption on the server side.
Now, I would like to implement an attachment version of my upload / download service, but I have some doubts: looking at the Axis code, I have seen that, at least MIME attachments, seem to be read into a ByteArrayOuputStream. Is there any way to tell Axis to write the incoming attachment directly on disk, without buffering the whole contents in memory? Is there any difference in this sense between DIME and MIME implementations?
My idea was to improve large files support with respect to my first low-level service (the one using the Base64 encoded string), but if attachments are still being fully read into memory, I cannot use them for large files.
I am also planning a different approach: a web service providing methods for opening, closing, and read/write byte blocks. The idea is to create RemoteFileInputStream and RemoteFileOutputStream classes that wrapping my web service stubs will provide me the same interface as a local file in client applications. Anybody has been working in something similar? I would appreciate any comments on this idea :-)
Thanks in advance, Rodrigo Ruiz