DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG·
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=35372>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND·
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=35372





------- Additional Comments From [EMAIL PROTECTED]  2005-06-17 19:36 -------
Thanks,

Well here is the code I use for streaming to an output stream, maybe you'll find
it helpfull. Perhaps a special mode that does now allow a retry

package example;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;

public class Example {
        static class SubmitWorker extends Thread {
                private final HttpClient _client;

                private final PostMethod _method;

                private Exception _ex;

                private InputStream _in;

                public SubmitWorker(HttpClient client, PostMethod method) {
                        _client = client;
                        _method = method;
                }
                public void setInputStream(InputStream in)
                {
                        _in = in;
                }
                /**
                 * @return
                 */
                public Exception getException() {
                        return _ex;
                }

                public void run() {
                        try {
                                _client.executeMethod(_method);
                        } catch (Exception e) {
                                _ex = e;
                                try {
                                        // if an exception happens in the 
method, we need
                                        // to force the parent thread to abort 
it's write
                                        // the close forces the writer to get 
an error
                                        _in.close();
                                } catch (IOException e1) {
                                }

                        } finally {
                        }
                }
        }

        private static void checkStatus(PostMethod httppost) throws Exception {
                // We check for status, this can fail due to NPE, so we need
                // to ignore that and let the caller throw the real exception
                // that is set by the worker.
                try {
                        if (httppost.getStatusCode() == HttpStatus.SC_OK) {
                                return;
                        }
                } catch (Exception ex) {
                        return;
                }
                throw new Exception("Request failed - \n"
                                + httppost.getResponseBodyAsString());

        }

        public static OutputStream getOutputStream(PostMethod httppost, 
HttpClient
client, SubmitWorker worker)
                        throws Exception

        {
                PipedOutputStream pipedOut = new PipedOutputStream();
                InputStream pipedIn = new PipedInputStream(pipedOut);
                httppost.setRequestBody(pipedIn);
                worker.setInputStream(pipedIn);
                worker.start();
                return pipedOut;
        }

        public static void main(String[] args) {
                try {
                        if (args.length != 2)
                        {
                                System.err.println("Usage: url inReadFile");
                                System.exit(1);
                        }
                        String url = args[0];
                        String fileName = args[1];
                        HttpClient client = new HttpClient();
                        PostMethod method = new PostMethod(url);
                        SubmitWorker worker = new SubmitWorker(client, method);

                        try {
                                BufferedInputStream in = new 
BufferedInputStream(
                                                new FileInputStream(fileName));
                                BufferedOutputStream out = new 
BufferedOutputStream(
                                                getOutputStream(method, client, 
worker));
                                worker.start();
                                int count;
                                int buffSize = 1024;
                                byte[] buf = new byte[buffSize];
                                boolean abort = false;
                                while ((count = in.read(buf, 0, buffSize)) > 0 
&& !abort) {
                                        out.write(buf, 0, count);
                                }
                                in.close();
                                worker.join();
                        } catch (Exception e) {
                                if (worker.getException() != null) {
                                        checkStatus(method);
                                        throw worker.getException();
                                }
                                throw e;
                        } finally {
                                method.releaseConnection();
                        }
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
}

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to