From 598f39cca82c059d24d7d8bbad255e2c9bca0632 Mon Sep 17 00:00:00 2001 From: Jordan Padams Date: Wed, 9 Oct 2024 14:36:20 -0700 Subject: [PATCH 1/2] Update servlet to use apache httpclient5 Supposedly more performant, this client will hopefully release JVM resources faster than the base java.net implementation. Resolves #40 --- .secrets.baseline | 4 +- pom.xml | 5 ++ .../search/servlet/RegistryLegacyServlet.java | 46 +++++++++++-------- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/.secrets.baseline b/.secrets.baseline index aac713b..f4b0def 100644 --- a/.secrets.baseline +++ b/.secrets.baseline @@ -149,7 +149,7 @@ "filename": "src/main/java/gov/nasa/pds/search/servlet/RegistryLegacyServlet.java", "hashed_secret": "4fb813c304003b3813b35a85f05b7cb0c3994cc1", "is_verified": false, - "line_number": 123, + "line_number": 131, "is_secret": false } ], @@ -216,5 +216,5 @@ } ] }, - "generated_at": "2024-10-07T13:30:59Z" + "generated_at": "2024-10-09T21:36:12Z" } diff --git a/pom.xml b/pom.xml index bf835de..90ae8e4 100644 --- a/pom.xml +++ b/pom.xml @@ -130,6 +130,11 @@ 1.3.4 runtime + + org.apache.httpcomponents.client5 + httpclient5 + 5.4 + diff --git a/src/main/java/gov/nasa/pds/search/servlet/RegistryLegacyServlet.java b/src/main/java/gov/nasa/pds/search/servlet/RegistryLegacyServlet.java index e91ec1c..6bb4c17 100644 --- a/src/main/java/gov/nasa/pds/search/servlet/RegistryLegacyServlet.java +++ b/src/main/java/gov/nasa/pds/search/servlet/RegistryLegacyServlet.java @@ -2,12 +2,7 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; -import java.net.URI; import java.net.URLEncoder; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.net.http.HttpResponse.BodyHandlers; import java.util.ArrayList; import java.util.Arrays; import java.util.Enumeration; @@ -18,9 +13,17 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.http.HttpHeaders; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; +import org.apache.hc.client5.http.impl.classic.HttpClients; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpHeaders; +import org.apache.hc.core5.http.io.entity.EntityUtils; +import org.apache.hc.core5.http.io.support.ClassicRequestBuilder; import gov.nasa.pds.search.util.XssUtils; + public class RegistryLegacyServlet extends HttpServlet { private static final long serialVersionUID = 6640363130974190821L; @@ -41,7 +44,7 @@ public class RegistryLegacyServlet extends HttpServlet { new ArrayList( List.of("q", "sort", "start", "rows", "fq", "fl", "wt", "json.wrf", "_", "facet.field", "facet", "facet.sort", "facet.mincount", "facet.method", "facet.excludeTerms", - "facet.pivot", "facet.contains")); + "facet.pivot", "facet.contains", "facet.limit")); private static List SOLR_FACET_FIELDS = new ArrayList(List.of("facet_agency", "facet_instrument", "facet_investigation", "facet_target", "facet_type", "facet_pds_model_version", "facet_primary_result_purpose", @@ -85,7 +88,7 @@ public void init(ServletConfig servletConfig) throws ServletException { this.solrRequestHandler = DEFAULT_REQUEST_HANDLER; } - LOG.info("Solr Server URL: " + this.solrServerUrl); + LOG.fine("Solr Server URL: " + this.solrServerUrl); super.init(servletConfig); } @@ -106,21 +109,28 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) String url = String.format("%s/%s/%s?%s", this.solrServerUrl, this.solrCollection, this.solrRequestHandler, queryString); - HttpClient client = HttpClient.newHttpClient(); - HttpRequest solrRequest = HttpRequest.newBuilder().uri(URI.create(url)).build(); - - - HttpResponse solrResponse = client.send(solrRequest, BodyHandlers.ofString()); - response.setStatus(solrResponse.statusCode()); + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + ClassicHttpRequest httpGet = ClassicRequestBuilder.get(url).build(); + String resultContent = null; + try (CloseableHttpResponse solrResponse = + httpClient.execute(httpGet)) { + response.setStatus(solrResponse.getCode()); + setResponseHeader(request.getParameter("wt"), response); + HttpEntity entity = solrResponse.getEntity(); - setResponseHeader(request.getParameter("wt"), response); - response.getOutputStream().write(solrResponse.body().getBytes()); + // Get response information + resultContent = EntityUtils.toString(entity); + } + response.getWriter().write(resultContent); + } } catch (Exception e) { LOG.severe(e.getMessage()); e.printStackTrace(); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal system failure. Contact pds-operator@jpl.nasa.gov for additional assistance."); + } finally { + } } @@ -173,7 +183,7 @@ private String getQueryString(HttpServletRequest request) throws UnsupportedEnco return "q=*:*"; } - LOG.info("Solr query: " + queryString); + LOG.fine("Solr query: " + queryString); return queryString; } @@ -184,7 +194,6 @@ private String appendQueryParameters(String key, String[] parameterValues) String queryString = ""; for (String v : Arrays.asList(parameterValues)) { value = XssUtils.clean(v); - LOG.info("key: " + key + " value: " + value); queryString += String.format("%s=%s&", key, URLEncoder.encode(value, "UTF-8")); } @@ -203,3 +212,4 @@ private void setResponseHeader(String wt, HttpServletResponse response) { response.addHeader(HttpHeaders.CONTENT_TYPE, contentType); } } + From c6208b977d945a749ecc72ca8a6980f48a2e55a6 Mon Sep 17 00:00:00 2001 From: Jordan Padams Date: Wed, 9 Oct 2024 22:08:02 -0700 Subject: [PATCH 2/2] Update return --- .../gov/nasa/pds/search/servlet/RegistryLegacyServlet.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/gov/nasa/pds/search/servlet/RegistryLegacyServlet.java b/src/main/java/gov/nasa/pds/search/servlet/RegistryLegacyServlet.java index 6bb4c17..3256817 100644 --- a/src/main/java/gov/nasa/pds/search/servlet/RegistryLegacyServlet.java +++ b/src/main/java/gov/nasa/pds/search/servlet/RegistryLegacyServlet.java @@ -180,10 +180,10 @@ private String getQueryString(HttpServletRequest request) throws UnsupportedEnco } if (queryString.equals("")) { - return "q=*:*"; + queryString = "q=*:*"; } - LOG.fine("Solr query: " + queryString); + LOG.info("Solr query: " + queryString); return queryString; }