Could anyone point me on the right direction to use these code changes with the HttpClient rather than having to use the HttpCore?
Ben On 6 March 2012 21:00, Ben Short <[email protected]> wrote: > Thanks Oleg. > > On 6 March 2012 15:28, Oleg Kalnichevski <[email protected]> wrote: > > On Tue, Mar 06, 2012 at 01:20:19PM +0000, Ben Short wrote: > >> Hi, > >> > >> I have something working as shown below. The input and output streams > >> are managed outside of the doHttpRequest. Does this seam like a > >> reasonable solution? > >> > >> public class InputStreamSessionInputBuffer extends > AbstractSessionInputBuffer { > >> > >> public InputStreamSessionInputBuffer(final InputStream is, final > >> HttpParams params) { > >> super(); > >> init(is, 1024, params); > >> } > >> > >> public boolean isDataAvailable(int timeout) throws IOException { > >> boolean result = hasBufferedData(); > >> if (!result) { > >> fillBuffer(); > >> result = hasBufferedData(); > >> } > >> return result; > >> } > >> } > >> > >> > >> public class OutputStreamSessionInputBuffer extends > >> AbstractSessionOutputBuffer { > >> > >> public OutputStreamSessionInputBuffer(final OutputStream os, final > >> HttpParams params) { > >> super(); > >> init(os, 1024, params); > >> } > >> } > >> > >> public class StreamHttpClientConnection extends > AbstractHttpClientConnection { > >> > >> private boolean open = false; > >> private InputStream is; > >> private OutputStream os; > >> private SessionInputBuffer inputBuffer; > >> private SessionOutputBuffer outputBuffer; > >> > >> public StreamHttpClientConnection() { > >> } > >> > >> public void init(InputStream is, OutputStream os, HttpParams > >> params) throws IOException { > >> > >> this.is = is; > >> this.os = os; > >> > >> this.inputBuffer = new InputStreamSessionInputBuffer(is, > params); > >> this.outputBuffer = new OutputStreamSessionInputBuffer(os, > params); > >> > >> init(this.inputBuffer, this.outputBuffer, params); > >> > >> this.open = true; > >> } > >> > >> @Override > >> protected void assertOpen() throws IllegalStateException { > >> if (!this.open) { > >> throw new IllegalStateException("Connection is not open"); > >> } > >> } > >> > >> public void close() throws IOException { > >> if (!this.open) { > >> return; > >> } > >> this.open = false; > >> > >> this.os.flush(); > >> } > >> > >> public boolean isOpen() { > >> return this.open; > >> } > >> > >> public void setSocketTimeout(int i) { > >> } > >> > >> public int getSocketTimeout() { > >> return -1; > >> } > >> > >> public void shutdown() throws IOException { > >> this.close(); > >> } > >> } > >> > >> > >> public static void doHttpRequest(InputStream is, OutputStream os) > >> throws IOException, HttpException { > >> > >> HttpParams params = new SyncBasicHttpParams(); > >> HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); > >> HttpProtocolParams.setContentCharset(params, "UTF-8"); > >> HttpProtocolParams.setUserAgent(params, "HttpComponents/1.1"); > >> HttpProtocolParams.setUseExpectContinue(params, true); > >> > >> HttpProcessor httpproc = new ImmutableHttpProcessor(new > >> HttpRequestInterceptor[] { > >> // Required protocol interceptors > >> new RequestContent(), > >> new RequestTargetHost(), > >> // Recommended protocol interceptors > >> new RequestConnControl(), > >> new RequestUserAgent(), > >> new RequestExpectContinue()}); > >> > >> HttpRequestExecutor httpexecutor = new HttpRequestExecutor(); > >> > >> HttpContext context = new BasicHttpContext(null); > >> HttpHost host = new HttpHost("10.10.20.60", 4050); > >> > >> StreamHttpClientConnection conn = new > StreamHttpClientConnection(); > >> > >> //DefaultHttpClientConnection conn = new > DefaultHttpClientConnection(); > >> ConnectionReuseStrategy connStrategy = new > >> DefaultConnectionReuseStrategy(); > >> > >> context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn); > >> context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, host); > >> > >> conn.init(is, os, params); > >> > >> //conn.bind(new Socket(host.getHostName(), host.getPort()), > params); > >> > >> HttpRequest request = new BasicHttpRequest("GET", > >> "/messages?validity=active_only"); > >> > >> httpexecutor.preProcess(request, httpproc, context); > >> HttpResponse response = httpexecutor.execute(request, conn, > context); > >> response.setParams(params); > >> httpexecutor.postProcess(response, httpproc, context); > >> > >> System.out.println("<< Response: " + response.getStatusLine()); > >> System.out.println(EntityUtils.toString(response.getEntity())); > >> > >> conn.shutdown(); > >> } > >> > > > > Looks all right to me. > > > > Cheers > > > > Oleg > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > >
