From 05a9f19f8367f299bdc38fda51e089aaa821c8fd Mon Sep 17 00:00:00 2001 From: Robert Butora <robert.butora@gmail.com> Date: Wed, 27 Mar 2024 10:15:36 -0400 Subject: [PATCH] adds VO error handling to SearchServlet --- .../vlkb/webapi/FormatResponseFilter.java | 17 +++-- .../webapi/MultiValuedParamNotSupported.java | 8 +++ .../main/java/vlkb/webapi/SearchServlet.java | 71 +++++++++++++++++-- 3 files changed, 85 insertions(+), 11 deletions(-) create mode 100644 data-discovery/src/main/java/vlkb/webapi/MultiValuedParamNotSupported.java diff --git a/data-discovery/src/main/java/vlkb/webapi/FormatResponseFilter.java b/data-discovery/src/main/java/vlkb/webapi/FormatResponseFilter.java index f110678..1f7718c 100644 --- a/data-discovery/src/main/java/vlkb/webapi/FormatResponseFilter.java +++ b/data-discovery/src/main/java/vlkb/webapi/FormatResponseFilter.java @@ -78,7 +78,7 @@ public class FormatResponseFilter implements Filter LOGGER.info("REQUEST START ============================================================================================="); Map<String, String[]> params = request.getParameterMap(); - for(String keys : params.keySet()) LOGGER.info("Params: " + keys); + //for(String keys : params.keySet()) LOGGER.info("Params: " + keys); Coord coord = new Coord(params); SubsurveyId subsurveyId = new SubsurveyId(params); // FIXME add invalid param excpetions @@ -89,15 +89,15 @@ public class FormatResponseFilter implements Filter long startTime_msec = System.currentTimeMillis(); - PrintWriter responseWriter = ((HttpServletResponse)response).getWriter(); + String[] pubdidArr = responseWrapper.getPubdidArr(); - if (true) - //if (responseWrapper.getContentType().contains("text/plain")) + if ((pubdidArr != null) && (pubdidArr.length > 0)) { + PrintWriter responseWriter = ((HttpServletResponse)response).getWriter(); Dataset[] datasetArr = queryObsCore( - responseWrapper.getPubdidArr(), - coord,// VLKB: calc ovelrap-code in Spectrum + pubdidArr, + coord,// VLKB: calc ovelrap-codes settings.serviceUrls.cutoutUrl()); SearchOutputData searchOutputData = SearchOutputData.marshall( @@ -132,6 +132,11 @@ public class FormatResponseFilter implements Filter responseWriter.close(); } + else + { + LOGGER.info("Servlet returned no ID's."); + } + LOGGER.info("REQUEST END ============================================================================================="); } diff --git a/data-discovery/src/main/java/vlkb/webapi/MultiValuedParamNotSupported.java b/data-discovery/src/main/java/vlkb/webapi/MultiValuedParamNotSupported.java new file mode 100644 index 0000000..2b3dd3c --- /dev/null +++ b/data-discovery/src/main/java/vlkb/webapi/MultiValuedParamNotSupported.java @@ -0,0 +1,8 @@ + + + +public class MultiValuedParamNotSupported extends IllegalArgumentException { + public MultiValuedParamNotSupported(String errorMessage){//, Throwable err) { + super(errorMessage);//, err); + } +} diff --git a/data-discovery/src/main/java/vlkb/webapi/SearchServlet.java b/data-discovery/src/main/java/vlkb/webapi/SearchServlet.java index 73e1cd0..86e13c2 100644 --- a/data-discovery/src/main/java/vlkb/webapi/SearchServlet.java +++ b/data-discovery/src/main/java/vlkb/webapi/SearchServlet.java @@ -32,12 +32,29 @@ public class SearchServlet extends javax.servlet.http.HttpServlet LOGGER.info("DB : " + settings.dbConn.toString()); } + protected void doMultiValuedParamNotSupported(String message, PrintWriter printWriter) + { + printWriter.println("MultiValuedParamNotSupported : " + message); + } + + protected void doUsageError(String message, PrintWriter printWriter) + { + printWriter.println("UsageError : " + message); + } + + protected void doError(String message, PrintWriter printWriter) + { + printWriter.println("Error : " + message); + } + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, UnsupportedEncodingException { LOGGER.info("trace"); + PrintWriter writer = response.getWriter(); + long startTime_msec = System.currentTimeMillis(); legacyLogEntry(request); @@ -82,7 +99,7 @@ public class SearchServlet extends javax.servlet.http.HttpServlet response.setContentType("text/plain"); response.setCharacterEncoding(RESPONSE_ENCODING); - PrintWriter writer = response.getWriter(); + //PrintWriter writer = response.getWriter(); for(String pubdid : pubdidArr) { @@ -91,18 +108,62 @@ public class SearchServlet extends javax.servlet.http.HttpServlet writer.close(); } } - catch (IllegalArgumentException illArg) + catch(MultiValuedParamNotSupported ex) { - response.sendError(HttpServletResponse.SC_BAD_REQUEST, - "Request with incorrect parameters: " + illArg.getMessage()); - return; + LOGGER.info("MultiValuedParamNotSupported: " + ex.getMessage()); + + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + response.setContentType("text/plain"); + //PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, RESPONSE_ENCODING)); + + doMultiValuedParamNotSupported(ex.getMessage(), writer); + writer.close(); + } + catch(IllegalArgumentException ex) + { + LOGGER.info("IllegalArgumentException: " + ex.getMessage()); + + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + response.setContentType("text/plain"); + //PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, RESPONSE_ENCODING)); + + doUsageError(ex.getMessage(), writer); + writer.close(); } catch(Exception ex) { LOGGER.info("Exception: " + ex.getMessage()); ex.printStackTrace(); + + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + response.setContentType("text/plain"); + //PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, RESPONSE_ENCODING)); + + doError(ex.toString(), writer); + writer.close(); + } + finally + { + //writer.close(); } + + + + + /* + catch (IllegalArgumentException illArg) + { + response.sendError(HttpServletResponse.SC_BAD_REQUEST, + "Request with incorrect parameters: " + illArg.getMessage()); + return; + } + catch(Exception ex) + { + LOGGER.info("Exception: " + ex.getMessage()); + ex.printStackTrace(); + } + */ return; } -- GitLab