From 7d5da163624c5562f2f24d32f831d8cdde5fc75e Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Tue, 10 Oct 2006 01:38:25 +0000 Subject: [PATCH] Thrift Java HTTP client line, and those below, will be ignored-- A java/src/transport/THttpClient.java git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664820 13f79535-47bb-0310-9956-ffa450edef68 --- lib/java/src/transport/THttpClient.java | 110 ++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 lib/java/src/transport/THttpClient.java diff --git a/lib/java/src/transport/THttpClient.java b/lib/java/src/transport/THttpClient.java new file mode 100644 index 00000000..77ffe625 --- /dev/null +++ b/lib/java/src/transport/THttpClient.java @@ -0,0 +1,110 @@ +package com.facebook.thrift.transport; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.IOException; + +import java.net.URL; +import java.net.HttpURLConnection; + +/** + * HTTP implementation of the TTransport interface. Used for working with a + * Thrift web services implementation. + * + * @author Mark Slee + */ +public class THttpClient extends TTransport { + + private URL url_ = null; + + private final ByteArrayOutputStream requestBuffer_ = + new ByteArrayOutputStream(); + + private InputStream inputStream_ = null; + + private int connectTimeout_ = 0; + + private int readTimeout_ = 0; + + public THttpClient(String url) throws TTransportException { + try { + url_ = new URL(url); + } catch (IOException iox) { + throw new TTransportException(iox); + } + } + + public void setConnectTimeout(int timeout) { + connectTimeout_ = timeout; + } + + public void setReadTimeout(int timeout) { + readTimeout_ = timeout; + } + + public void open() {} + + public void close() {} + + public boolean isOpen() { + return true; + } + + public int read(byte[] buf, int off, int len) throws TTransportException { + if (inputStream_ == null) { + throw new TTransportException("Response buffer is empty, no request."); + } + try { + int ret = inputStream_.read(buf, off, len); + if (ret == -1) { + throw new TTransportException("No more data available."); + } + return ret; + } catch (IOException iox) { + throw new TTransportException(iox); + } + } + + public void write(byte[] buf, int off, int len) { + requestBuffer_.write(buf, off, len); + } + + public void flush() throws TTransportException { + // Extract request and reset buffer + byte[] data = requestBuffer_.toByteArray(); + requestBuffer_.reset(); + + try { + // Create connection object + HttpURLConnection connection = (HttpURLConnection)url_.openConnection(); + + // Timeouts, only if explicitly set + if (connectTimeout_ > 0) { + connection.setConnectTimeout(connectTimeout_); + } + if (readTimeout_ > 0) { + connection.setReadTimeout(readTimeout_); + } + + // Make the request + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "application/x-thrift"); + connection.setRequestProperty("Accept", "application/x-thrift"); + connection.setRequestProperty("User-Agent", "Java/THttpClient"); + connection.setDoOutput(true); + connection.connect(); + connection.getOutputStream().write(data); + + int responseCode = connection.getResponseCode(); + if (responseCode != HttpURLConnection.HTTP_OK) { + throw new TTransportException("HTTP Response code: " + responseCode); + } + + // Read the responses + inputStream_ = connection.getInputStream(); + + } catch (IOException iox) { + throw new TTransportException(iox); + } + } +} -- 2.17.1