diff --git a/webapp/lib/commons-httpclient-3.1.jar b/webapp/lib/commons-httpclient-3.1.jar deleted file mode 100644 index 7c59774ae..000000000 Binary files a/webapp/lib/commons-httpclient-3.1.jar and /dev/null differ diff --git a/webapp/lib/fluent-hc-4.3.2.jar b/webapp/lib/fluent-hc-4.3.2.jar new file mode 100644 index 000000000..0b6288ada Binary files /dev/null and b/webapp/lib/fluent-hc-4.3.2.jar differ diff --git a/webapp/lib/httpclient-4.2.5.jar b/webapp/lib/httpclient-4.2.5.jar deleted file mode 100644 index 5310588ef..000000000 Binary files a/webapp/lib/httpclient-4.2.5.jar and /dev/null differ diff --git a/webapp/lib/httpclient-4.3.2.jar b/webapp/lib/httpclient-4.3.2.jar new file mode 100644 index 000000000..904409dac Binary files /dev/null and b/webapp/lib/httpclient-4.3.2.jar differ diff --git a/webapp/lib/httpcore-4.2.4.jar b/webapp/lib/httpcore-4.2.4.jar deleted file mode 100644 index 9f45bd91c..000000000 Binary files a/webapp/lib/httpcore-4.2.4.jar and /dev/null differ diff --git a/webapp/lib/httpcore-4.3.1.jar b/webapp/lib/httpcore-4.3.1.jar new file mode 100644 index 000000000..422cd6f5d Binary files /dev/null and b/webapp/lib/httpcore-4.3.1.jar differ diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveDelete.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveDelete.java index 0bade4a44..9e4b0b389 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveDelete.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveDelete.java @@ -2,9 +2,10 @@ package edu.cornell.mannlib.vitro.webapp.controller.edit; +import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED; + import javax.servlet.http.HttpServletResponse; -import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -42,7 +43,7 @@ public class PrimitiveDelete extends VitroAjaxController { if( !hasPermission ){ //if not okay, send error message - doError(response,"Insufficent permissions.", HttpStatus.SC_UNAUTHORIZED); + doError(response,"Insufficent permissions.", SC_UNAUTHORIZED); return; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEdit.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEdit.java index 74378e48f..6a4a71f8a 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEdit.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEdit.java @@ -2,6 +2,9 @@ package edu.cornell.mannlib.vitro.webapp.controller.edit; +import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; +import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR; + import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; @@ -11,7 +14,6 @@ import java.util.Set; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; -import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -66,7 +68,7 @@ public class PrimitiveRdfEdit extends VitroAjaxController { try { additions = parseRdfParam(vreq.getParameterValues("additions"),format); } catch (Exception e) { - doError(response,"Error reading RDF, set log level to debug for this class to get error messages in the server logs.",HttpStatus.SC_BAD_REQUEST); + doError(response,"Error reading RDF, set log level to debug for this class to get error messages in the server logs.",SC_BAD_REQUEST); return; } @@ -74,7 +76,7 @@ public class PrimitiveRdfEdit extends VitroAjaxController { try { retractions = parseRdfParam(vreq.getParameterValues("retractions"),format); } catch (Exception e) { - doError(response,"Error reading RDF, set log level to debug for this class to get error messages in the server logs.",HttpStatus.SC_BAD_REQUEST); + doError(response,"Error reading RDF, set log level to debug for this class to get error messages in the server logs.",SC_BAD_REQUEST); return; } @@ -92,7 +94,7 @@ public class PrimitiveRdfEdit extends VitroAjaxController { toBeRetracted.add(depResRetractions); processChanges(editorUri, getWriteModel(vreq), toBeAdded, toBeRetracted); } catch (Exception e) { - doError(response,e.getMessage(),HttpStatus.SC_INTERNAL_SERVER_ERROR); + doError(response,e.getMessage(),SC_INTERNAL_SERVER_ERROR); } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/ReorderController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/ReorderController.java index 3b0260a1d..a277ef2e2 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/ReorderController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/ReorderController.java @@ -2,9 +2,13 @@ package edu.cornell.mannlib.vitro.webapp.controller.edit; +import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; +import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR; +import static javax.servlet.http.HttpServletResponse.SC_OK; +import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED; + import javax.servlet.http.HttpServletResponse; -import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -57,7 +61,7 @@ public class ReorderController extends VitroAjaxController { if (rankPredicate == null) { errorMsg = "No rank parameter specified"; log.error(errorMsg); - doError(response, errorMsg, HttpServletResponse.SC_BAD_REQUEST ); + doError(response, errorMsg, SC_BAD_REQUEST ); return; } @@ -65,7 +69,7 @@ public class ReorderController extends VitroAjaxController { if (individualUris == null || individualUris.length == 0) { errorMsg = "No individuals specified"; log.error(errorMsg); - doError(response, errorMsg, HttpServletResponse.SC_BAD_REQUEST); + doError(response, errorMsg, SC_BAD_REQUEST); return; } @@ -73,7 +77,7 @@ public class ReorderController extends VitroAjaxController { if( vreq.getWebappDaoFactory() == null) { errorMsg = "No WebappDaoFactory available"; log.error(errorMsg); - doError(response, errorMsg, HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + doError(response, errorMsg, SC_INTERNAL_SERVER_ERROR); return; } @@ -81,7 +85,7 @@ public class ReorderController extends VitroAjaxController { if( dpsDao == null) { errorMsg = "No DataPropertyStatementDao available"; log.error(errorMsg); - doError(response, errorMsg, HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + doError(response, errorMsg, SC_INTERNAL_SERVER_ERROR); return; } @@ -91,7 +95,7 @@ public class ReorderController extends VitroAjaxController { boolean hasPermission = true; if( !hasPermission ){ //if not okay, send error message - doError(response,"Insufficent permissions", HttpStatus.SC_UNAUTHORIZED); + doError(response,"Insufficent permissions", SC_UNAUTHORIZED); return; } @@ -100,7 +104,7 @@ public class ReorderController extends VitroAjaxController { reorderIndividuals(individualUris, vreq, rankPredicate); - response.setStatus(HttpServletResponse.SC_OK); + response.setStatus(SC_OK); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/sparql/RDFServiceSparql.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/sparql/RDFServiceSparql.java index b20c6cba3..e7875a341 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/sparql/RDFServiceSparql.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/sparql/RDFServiceSparql.java @@ -7,20 +7,25 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; +import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.concurrent.ConcurrentLinkedQueue; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; -import org.apache.commons.httpclient.NameValuePair; -import org.apache.commons.httpclient.methods.GetMethod; -import org.apache.commons.httpclient.methods.PostMethod; -import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.message.BasicNameValuePair; import org.openrdf.model.Resource; import org.openrdf.repository.RepositoryConnection; import org.openrdf.repository.RepositoryException; @@ -41,7 +46,6 @@ import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.rdf.model.StmtIterator; -import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP; import edu.cornell.mannlib.vitro.webapp.dao.jena.SparqlGraph; import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeListener; @@ -65,7 +69,7 @@ public class RDFServiceSparql extends RDFServiceImpl implements RDFService { protected String updateEndpointURI; private HTTPRepository readRepository; private HTTPRepository updateRepository; - private HttpClient httpClient; + private CloseableHttpClient httpClient; private boolean useSesameContextQuery = true; // the number of triples to be private static final int CHUNK_SIZE = 1000; // added/removed in a single @@ -88,9 +92,9 @@ public class RDFServiceSparql extends RDFServiceImpl implements RDFService { this.readRepository = new HTTPRepository(readEndpointURI); this.updateRepository = new HTTPRepository(updateEndpointURI); - MultiThreadedHttpConnectionManager mgr = new MultiThreadedHttpConnectionManager(); - mgr.getParams().setDefaultMaxConnectionsPerHost(50); - this.httpClient = new HttpClient(mgr); + PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); + cm.setDefaultMaxPerRoute(50); + this.httpClient = HttpClients.custom().setConnectionManager(cm).build(); testConnection(); } @@ -284,51 +288,49 @@ public class RDFServiceSparql extends RDFServiceImpl implements RDFService { public InputStream sparqlSelectQuery(String queryStr, RDFService.ResultFormat resultFormat) throws RDFServiceException { //QueryEngineHTTP qh = new QueryEngineHTTP(readEndpointURI, queryStr); - - GetMethod meth = new GetMethod(readEndpointURI); + try { - meth.addRequestHeader("Accept", "application/sparql-results+xml"); - NameValuePair param = new NameValuePair(); - param.setName("query"); - param.setValue(queryStr); - NameValuePair[] params = new NameValuePair[1]; - params[0] = param; - meth.setQueryString(params); - int response = httpClient.executeMethod(meth); - if (response > 399) { - log.error("response " + response + " to query. \n"); - log.debug("update string: \n" + queryStr); - throw new RDFServiceException("Unable to perform SPARQL UPDATE"); + HttpGet meth = new HttpGet(new URIBuilder(readEndpointURI).addParameter("query", queryStr).build()); + meth.addHeader("Accept", "application/sparql-results+xml"); + CloseableHttpResponse response = httpClient.execute(meth); + try { + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode > 399) { + log.error("response " + statusCode + " to query. \n"); + log.debug("update string: \n" + queryStr); + throw new RDFServiceException("Unable to perform SPARQL UPDATE"); + } + + InputStream in = response.getEntity().getContent(); + ResultSet resultSet = ResultSetFactory.fromXML(in); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + + switch (resultFormat) { + case CSV: + ResultSetFormatter.outputAsCSV(outputStream,resultSet); + break; + case TEXT: + ResultSetFormatter.out(outputStream,resultSet); + break; + case JSON: + ResultSetFormatter.outputAsJSON(outputStream, resultSet); + break; + case XML: + ResultSetFormatter.outputAsXML(outputStream, resultSet); + break; + default: + throw new RDFServiceException("unrecognized result format"); + } + InputStream result = new ByteArrayInputStream(outputStream.toByteArray()); + return result; + } finally { + response.close(); } - - InputStream in = meth.getResponseBodyAsStream(); - ResultSet resultSet = ResultSetFactory.fromXML(in); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - - switch (resultFormat) { - case CSV: - ResultSetFormatter.outputAsCSV(outputStream,resultSet); - break; - case TEXT: - ResultSetFormatter.out(outputStream,resultSet); - break; - case JSON: - ResultSetFormatter.outputAsJSON(outputStream, resultSet); - break; - case XML: - ResultSetFormatter.outputAsXML(outputStream, resultSet); - break; - default: - throw new RDFServiceException("unrecognized result format"); - } - InputStream result = new ByteArrayInputStream(outputStream.toByteArray()); - return result; } catch (IOException ioe) { throw new RuntimeException(ioe); - } finally { - //qh.close(); - meth.releaseConnection(); - } + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } } /** @@ -486,20 +488,19 @@ public class RDFServiceSparql extends RDFServiceImpl implements RDFService { protected void executeUpdate(String updateString) throws RDFServiceException { try { - PostMethod meth = new PostMethod(updateEndpointURI); + HttpPost meth = new HttpPost(updateEndpointURI); + meth.addHeader("Content-Type", "application/x-www-form-urlencoded"); + meth.setEntity(new UrlEncodedFormEntity(Arrays.asList(new BasicNameValuePair("update", updateString)))); + CloseableHttpResponse response = httpClient.execute(meth); try { - meth.addRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - NameValuePair[] body = new NameValuePair[1]; - body[0] = new NameValuePair("update", updateString); - meth.setRequestBody(body); - int response = httpClient.executeMethod(meth); - if (response > 399) { - log.error("response " + response + " to update. \n"); + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode > 399) { + log.error("response " + statusCode + " to update. \n"); //log.debug("update string: \n" + updateString); throw new RDFServiceException("Unable to perform SPARQL UPDATE"); } } finally { - meth.releaseConnection(); + response.close(); } } catch (Exception e) { throw new RDFServiceException("Unable to perform change set update", e); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/SolrSmokeTest.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/SolrSmokeTest.java index 76065eeee..0f79ba152 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/SolrSmokeTest.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/SolrSmokeTest.java @@ -3,7 +3,6 @@ package edu.cornell.mannlib.vitro.webapp.servlet.setup; import java.io.IOException; -import java.io.InputStream; import java.net.ConnectException; import java.net.MalformedURLException; import java.net.SocketTimeoutException; @@ -13,12 +12,14 @@ import java.net.UnknownHostException; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpException; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpException; +import org.apache.http.HttpStatus; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus; @@ -142,7 +143,10 @@ public class SolrSmokeTest implements ServletContextListener { } private void reportPingProblem(SolrProblemException e) { - ss.warning(listener, "The Solr search engine did not respond to a 'ping' request", e); + ss.warning( + listener, + "The Solr search engine did not respond to a 'ping' request", + e); } private void warnSocketTimeout() { @@ -203,7 +207,8 @@ public class SolrSmokeTest implements ServletContextListener { private static final long SLEEP_INTERVAL = 20000; // 20 seconds private final URL solrUrl; - private final HttpClient httpClient = new HttpClient(); + private final CloseableHttpClient httpClient = HttpClients + .createDefault(); private int statusCode; @@ -230,23 +235,22 @@ public class SolrSmokeTest implements ServletContextListener { } private void tryToConnect() throws SolrProblemException { - GetMethod method = new GetMethod(solrUrl.toExternalForm()); try { + HttpGet method = new HttpGet(solrUrl.toExternalForm()); SolrSmokeTest.log.debug("Trying to connect to Solr"); - statusCode = httpClient.executeMethod(method); - SolrSmokeTest.log.debug("HTTP status was " + statusCode); - - // clear the buffer. - InputStream stream = method.getResponseBodyAsStream(); - stream.close(); + CloseableHttpResponse response = httpClient.execute(method); + try { + statusCode = response.getStatusLine().getStatusCode(); + SolrSmokeTest.log.debug("HTTP status was " + statusCode); + } finally { + response.close(); + } } catch (SocketTimeoutException e) { // Catch the exception so we can retry this. // Save the status so we know why we failed. statusCode = SolrSmokeTest.SOCKET_TIMEOUT_STATUS; } catch (Exception e) { throw new SolrProblemException(e); - } finally { - method.releaseConnection(); } } @@ -275,30 +279,30 @@ public class SolrSmokeTest implements ServletContextListener { */ private static class SolrPinger { private final URL solrUrl; - private final HttpClient httpClient = new HttpClient(); + private final CloseableHttpClient httpClient = HttpClients + .createDefault(); public SolrPinger(URL solrUrl) { this.solrUrl = solrUrl; } public void ping() throws SolrProblemException { - GetMethod method = new GetMethod(solrUrl.toExternalForm() + "/admin/ping"); try { + HttpGet method = new HttpGet(solrUrl.toExternalForm() + + "/admin/ping"); SolrSmokeTest.log.debug("Trying to ping Solr"); - int statusCode = httpClient.executeMethod(method); + CloseableHttpResponse response = httpClient.execute(method); SolrSmokeTest.log.debug("Finished pinging Solr"); - - // clear the buffer. - InputStream stream = method.getResponseBodyAsStream(); - stream.close(); - - if (statusCode != HttpStatus.SC_OK) { - throw new SolrProblemException(statusCode); + try { + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode != HttpStatus.SC_OK) { + throw new SolrProblemException(statusCode); + } + } finally { + response.close(); } } catch (IOException e) { throw new SolrProblemException(e); - } finally { - method.releaseConnection(); } } } diff --git a/webapp/src/edu/ucsf/vitro/opensocial/OpenSocialSmokeTests.java b/webapp/src/edu/ucsf/vitro/opensocial/OpenSocialSmokeTests.java index 7ecfce485..3edb11c6f 100644 --- a/webapp/src/edu/ucsf/vitro/opensocial/OpenSocialSmokeTests.java +++ b/webapp/src/edu/ucsf/vitro/opensocial/OpenSocialSmokeTests.java @@ -19,12 +19,14 @@ import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.commons.dbcp.BasicDataSource; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpStatus; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus; @@ -70,7 +72,8 @@ public class OpenSocialSmokeTests implements ServletContextListener { configProps = ConfigurationProperties.getBean(ctx); /* - * If OpenSocial is not configured in runtime.properties, skip the tests. + * If OpenSocial is not configured in runtime.properties, skip the + * tests. */ if (!configurationPresent()) { ss.info(this, "The OpenSocial connection is not configured."); @@ -210,14 +213,15 @@ public class OpenSocialSmokeTests implements ServletContextListener { } /** - * Get the Token Service info from runtime.properties. It must be in the form - * of host:port, and may not refer to localhost. + * Get the Token Service info from runtime.properties. It must be in the + * form of host:port, and may not refer to localhost. */ private void checkTokenServiceInfo() { String tsInfo = configProps.getProperty(PROPERTY_SHINDIG_TOKEN_SERVICE); if (StringUtils.isEmpty(tsInfo)) { warnings.add(new Warning("There is no value for '" - + PROPERTY_SHINDIG_TOKEN_SERVICE + "' in runtime.properties")); + + PROPERTY_SHINDIG_TOKEN_SERVICE + + "' in runtime.properties")); return; } @@ -346,7 +350,8 @@ public class OpenSocialSmokeTests implements ServletContextListener { private final String shindigBaseUrl; private final String shindigTestUrl; - private final HttpClient httpClient = new HttpClient(); + private final CloseableHttpClient httpClient = HttpClients + .createDefault(); private int statusCode = Integer.MIN_VALUE; @@ -375,15 +380,16 @@ public class OpenSocialSmokeTests implements ServletContextListener { } private void testConnection() throws ShindigTesterException { - GetMethod method = new GetMethod(shindigTestUrl); + HttpGet method = new HttpGet(shindigTestUrl); try { log.debug("Trying to connect to Shindig"); - statusCode = httpClient.executeMethod(method); - log.debug("HTTP status was " + statusCode); - - // clear the buffer. - InputStream stream = method.getResponseBodyAsStream(); - stream.close(); + CloseableHttpResponse response = httpClient.execute(method); + try { + statusCode = response.getStatusLine().getStatusCode(); + log.debug("HTTP status was " + statusCode); + } finally { + response.close(); + } } catch (SocketTimeoutException e) { // Catch the exception so we can retry this. // Save the status so we know why we failed. @@ -391,8 +397,6 @@ public class OpenSocialSmokeTests implements ServletContextListener { } catch (Exception e) { throw new ShindigTesterException(e, shindigBaseUrl, shindigTestUrl); - } finally { - method.releaseConnection(); } } @@ -513,25 +517,28 @@ public class OpenSocialSmokeTests implements ServletContextListener { try { log.debug("Connecting to the token service"); Socket s = new Socket(host, port); + try { + s.getOutputStream().write("c=default\n".getBytes()); - s.getOutputStream().write("c=default\n".getBytes()); + int byteCount = 0; + int totalBytecount = 0; + byte[] buffer = new byte[8192]; - int byteCount = 0; - int totalBytecount = 0; - byte[] buffer = new byte[8192]; + // The following will block until the page is transmitted. + InputStream inputStream = s.getInputStream(); + while ((byteCount = inputStream.read(buffer)) > 0) { + totalBytecount += byteCount; + } - // The following will block until the page is transmitted. - InputStream inputStream = s.getInputStream(); - while ((byteCount = inputStream.read(buffer)) > 0) { - totalBytecount += byteCount; - } - - if (totalBytecount == 0) { - log.debug("Received an empty response."); - problem = "The Shindig security token service responded to a test, but the response was empty."; - } else { - log.debug("Recieved the token."); - problem = null; + if (totalBytecount == 0) { + log.debug("Received an empty response."); + problem = "The Shindig security token service responded to a test, but the response was empty."; + } else { + log.debug("Recieved the token."); + problem = null; + } + } finally { + s.close(); } } catch (Exception e) { log.debug("Problem with the token service", e);