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