From 86d6937147012f13f2b3c0b0f16f91c7ba80f38c Mon Sep 17 00:00:00 2001
From: Robert Butora <robert.butora@inaf.it>
Date: Thu, 16 May 2024 19:10:30 +0200
Subject: [PATCH] chooses Resolver on Servlet init (if DbUri set) and modifies
 Resolver's both implementations to return subsurveyId (in ResolverFromId
 subsurveyId not implemented yet only API)

---
 .../servlet/src/main/java/ops/JdlMCutout.java |   2 +-
 .../servlet/src/main/java/ops/Vlkb.java       |   5 -
 .../servlet/src/main/java/ops/VlkbAmqp.java   |  67 ++---
 .../servlet/src/main/java/ops/VlkbCli.java    |  63 ++---
 .../src/main/java/resolver/Resolver.java      |   1 +
 .../main/java/resolver/ResolverFromId.java    |  13 +-
 .../src/main/java/webapi/ServletCutout.java   |  32 ++-
 .../src/main/java/webapi/ServletMCutout.java  | 157 -----------
 .../src/main/java/webapi/ServletMerge.java    | 244 ------------------
 .../servlet/src/main/java/webapi/UWSSoda.java |  80 ------
 .../src/main/java/webapi/UWSSodaWork.java     | 193 --------------
 .../webapp/WEB-INF/web-cutout-garrtoken.xml   |  41 ---
 .../webapp/WEB-INF/web-cutout-ia2token.xml    |  42 +--
 .../webapp/WEB-INF/web-cutout-iamtoken.xml    |  44 +---
 .../servlet/src/main/webapp/WEB-INF/web.xml   |  44 +---
 15 files changed, 89 insertions(+), 939 deletions(-)
 delete mode 100644 data-access/servlet/src/main/java/webapi/ServletMCutout.java
 delete mode 100644 data-access/servlet/src/main/java/webapi/ServletMerge.java
 delete mode 100644 data-access/servlet/src/main/java/webapi/UWSSoda.java
 delete mode 100644 data-access/servlet/src/main/java/webapi/UWSSodaWork.java

diff --git a/data-access/servlet/src/main/java/ops/JdlMCutout.java b/data-access/servlet/src/main/java/ops/JdlMCutout.java
index e3e7d10..4b24b11 100644
--- a/data-access/servlet/src/main/java/ops/JdlMCutout.java
+++ b/data-access/servlet/src/main/java/ops/JdlMCutout.java
@@ -35,7 +35,7 @@ public class JdlMCutout
 
             FitsCard[] extraCards = null;
 
-            Resolver rsl = new ResolverFromId();//settings.dbConn, subsurveys);
+            Resolver rsl = new ResolverFromId(null);//settings.dbConn, subsurveys);
                                                 //ResolverByObsCore rsl = new ResolverByObsCore(settings.dbConn, subsurveys);
             rsl.resolve(publisherDid);
 
diff --git a/data-access/servlet/src/main/java/ops/Vlkb.java b/data-access/servlet/src/main/java/ops/Vlkb.java
index a4f3488..3302a40 100644
--- a/data-access/servlet/src/main/java/ops/Vlkb.java
+++ b/data-access/servlet/src/main/java/ops/Vlkb.java
@@ -19,11 +19,6 @@ public interface Vlkb
          throws IOException, InterruptedException;
 
 
-   public CutResult doFileById(String id, Pos pos, Band band, Time time, Pol pol, String pixels,
-         boolean countNullValues, Subsurvey[] subsurveys)
-         throws IOException, InterruptedException;
-
-
 
    public MCutResult doMCutout(String jdlJson)
       throws IOException, InterruptedException;
diff --git a/data-access/servlet/src/main/java/ops/VlkbAmqp.java b/data-access/servlet/src/main/java/ops/VlkbAmqp.java
index 10dfbf2..64af5a4 100644
--- a/data-access/servlet/src/main/java/ops/VlkbAmqp.java
+++ b/data-access/servlet/src/main/java/ops/VlkbAmqp.java
@@ -33,11 +33,14 @@ class VlkbAmqp implements Vlkb
 
    private Settings    settings   = null;
    private Subsurvey[] subsurveys = null;
+   private Resolver    resolver   = null;
 
    public VlkbAmqp()
    {
       LOGGER.info("trace VlkbAmqp()");
       this.settings = Settings.getInstance();
+      this.resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys)
+            : new ResolverByObsCore(settings.dbConn, subsurveys));
    }
 
 
@@ -45,33 +48,38 @@ class VlkbAmqp implements Vlkb
    {
       LOGGER.info("trace VlkbAmqp(settings)");
       this.settings = settings;
+      this.resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys)
+            : new ResolverByObsCore(settings.dbConn, subsurveys));
    }
 
 
+
    public VlkbAmqp(Settings settings, Subsurvey[] subsurveys)
    {
       LOGGER.info("trace VlkbAmqp(settings, subsurveys)");
       this.settings = settings;
       this.subsurveys = subsurveys;
+      this.resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys)
+            : new ResolverByObsCore(settings.dbConn, subsurveys));
    }
 
 
 
 
    public CutResult doMerge(String[] idArr, Coord coord, boolean countNullValues)
-         throws FileNotFoundException, IOException
-      {
-         LOGGER.info("trace");
+      throws FileNotFoundException, IOException
+   {
+      LOGGER.info("trace");
 
-         return merge(idArr, coord, countNullValues);
-      }
+      return merge(idArr, coord, countNullValues);
+   }
 
 
-///////////////////////////////////////////////////////////////////////////////////
+   ///////////////////////////////////////////////////////////////////////////////////
 
    public CutResult doFile(String relPathname, int hdunum,
-         Pos pos, Band band, Time time, Pol pol, String pixels,
-         boolean countNullValues, FitsCard[] extraCards)
+      Pos pos, Band band, Time time, Pol pol, String pixels,
+      boolean countNullValues, FitsCard[] extraCards)
          throws IOException, InterruptedException
       {
          LOGGER.info("trace: " + pos.toString() );
@@ -101,51 +109,26 @@ class VlkbAmqp implements Vlkb
 
 
 
-   public CutResult doFileById(String id, Pos pos, Band band, Time time, Pol pol, String pixels,
+   private CutResult doFileById(String id, Pos pos, Band band, Time time, Pol pol, String pixels,
          boolean countNullValues, Subsurvey[] subsurveys)
          throws IOException, InterruptedException
       {
          LOGGER.info("trace");
 
-         String relPathname;
-         int hdunum;
-
          FitsCard[] extraCards = null;
 
-         String dbUri = settings.dbConn.uri();
+         this.resolver.resolve(id);
+         String relPathname = this.resolver.relPathname();
+         int hdunum         = this.resolver.hdunum();
+         String subsurveyId = this.resolver.obsCollection();
 
-         if(settings.dbConn.isDbUriEmpty())
+         if(subsurveyId != null)
          {
-            Resolver rsl = new ResolverFromId();
-            rsl.resolve(id);
-            relPathname = rsl.relPathname();
-            hdunum      = rsl.hdunum();
-
-            /* FIXME needs also match on filename - some subsurveys have the same storage-path,
-             * and file-filter distiguishes frequences
-             * OR
-             * ivoid must include obs-collection
-
-             Path path = Paths.get(rsl.relPathname());
-             String storagePath = path.getParent().toString();
-             extraCards = Subsurvey.subsurveysFindCardsByStoragePath(subsurveys, storagePath);
-             */
+            extraCards = Subsurvey.subsurveysFindCards(subsurveys, subsurveyId);
          }
          else
          {
-            ResolverByObsCore rsl = new ResolverByObsCore(settings.dbConn, subsurveys);
-            rsl.resolve(id);
-            relPathname = rsl.relPathname();
-            hdunum      = rsl.hdunum();
-            String subsurveyId = rsl.obsCollection();
-            if(subsurveyId != null)
-            {
-               extraCards = Subsurvey.subsurveysFindCards(subsurveys, subsurveyId);
-            }
-            else
-            {
-               LOGGER.info("Resolver with Obscore returns subsurveyId null: no extraCards loaded.");
-            }
+            LOGGER.info("Resolver returns subsurveyId null: no extraCards loaded.");
          }
 
          final String DEFAULT_TIME_SYSTEM = "MJD_UTC"; // FIXME take from confif file
@@ -209,7 +192,7 @@ class VlkbAmqp implements Vlkb
          boolean countNullValues)
    {
       // ResolverByObsCore rsl = new ResolverByObsCore(settings.dbConn, subsurveys);
-      Resolver rsl = new ResolverFromId();//settings.dbConn, subsurveys);
+      Resolver rsl = resolver;//new ResolverFromId();//settings.dbConn, subsurveys);
       rsl.resolve(publisherDid);
 
       FitsCard[] extraCards = null;
diff --git a/data-access/servlet/src/main/java/ops/VlkbCli.java b/data-access/servlet/src/main/java/ops/VlkbCli.java
index f009948..4e15e3b 100644
--- a/data-access/servlet/src/main/java/ops/VlkbCli.java
+++ b/data-access/servlet/src/main/java/ops/VlkbCli.java
@@ -44,12 +44,15 @@ class VlkbCli implements Vlkb
    private Settings    settings   = null;
    private Subsurvey[] subsurveys = null;
    private Soda        soda       = null;
+   private Resolver    resolver   = null;
 
    public VlkbCli()
    {
       LOGGER.info("trace VlkbCli()");
       this.settings = Settings.getInstance();
-      soda = new SodaImpl(settings, subsurveys);
+      this.soda = new SodaImpl(settings, subsurveys);
+      this.resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys)
+            : new ResolverByObsCore(settings.dbConn, subsurveys));
    }
 
 
@@ -58,6 +61,8 @@ class VlkbCli implements Vlkb
       LOGGER.info("trace VlkbCli(settings)");
       this.settings = settings;
       this.soda = new SodaImpl(settings, subsurveys);
+      this.resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys)
+            : new ResolverByObsCore(settings.dbConn, subsurveys));
    }
 
 
@@ -67,22 +72,25 @@ class VlkbCli implements Vlkb
       this.settings = settings;
       this.subsurveys = subsurveys;
       this.soda = new SodaImpl(settings, subsurveys);
+      this.resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys)
+            : new ResolverByObsCore(settings.dbConn, subsurveys));
    }
 
 
 
 
+
    public CutResult doMerge(String[] idArr, Coord coord, boolean countNullValues)
-         throws FileNotFoundException, IOException
-      {
-         LOGGER.info("trace doMerge by CLI is NOT IMPLEMENTED (only by AMQP)");
+      throws FileNotFoundException, IOException
+   {
+      LOGGER.info("trace doMerge by CLI is NOT IMPLEMENTED (only by AMQP)");
 
-         return new CutResult();
-      }
+      return new CutResult();
+   }
 
 
 
-///////////////////////////////////////////////////////////////////////////////////////
+   ///////////////////////////////////////////////////////////////////////////////////////
 
 
    private NullValueCount doCountNullValues(String absPathname, int hdunum)
@@ -171,51 +179,26 @@ class VlkbCli implements Vlkb
       }
 
 
-   public CutResult doFileById(String id, Pos pos, Band band, Time time, Pol pol, String pixels,
+   private CutResult doFileById(String id, Pos pos, Band band, Time time, Pol pol, String pixels,
          boolean countNullValues, Subsurvey[] subsurveys)
          throws IOException, InterruptedException
       {
          LOGGER.info("trace");
 
-         String relPathname;
-         int hdunum;
-
          FitsCard[] extraCards = null;
 
-         String dbUri = settings.dbConn.uri();
+         this.resolver.resolve(id);
+         String relPathname = this.resolver.relPathname();
+         int hdunum         = this.resolver.hdunum();
+         String subsurveyId = this.resolver.obsCollection();
 
-         if(settings.dbConn.isDbUriEmpty())
+         if(subsurveyId != null)
          {
-            Resolver rsl = new ResolverFromId();
-            rsl.resolve(id);
-            relPathname = rsl.relPathname();
-            hdunum      = rsl.hdunum();
-
-            /* FIXME needs also match on filename - some subsurveys have the same storage-path,
-             * and file-filter distiguishes frequences
-             * OR
-             * ivoid must include obs-collection
-
-             Path path = Paths.get(rsl.relPathname());
-             String storagePath = path.getParent().toString();
-             extraCards = Subsurvey.subsurveysFindCardsByStoragePath(subsurveys, storagePath);
-             */
+            extraCards = Subsurvey.subsurveysFindCards(subsurveys, subsurveyId);
          }
          else
          {
-            ResolverByObsCore rsl = new ResolverByObsCore(settings.dbConn, subsurveys);
-            rsl.resolve(id);
-            relPathname = rsl.relPathname();
-            hdunum      = rsl.hdunum();
-            String subsurveyId = rsl.obsCollection();
-            if(subsurveyId != null)
-            {
-               extraCards = Subsurvey.subsurveysFindCards(subsurveys, subsurveyId);
-            }
-            else
-            {
-               LOGGER.info("Resolver with Obscore returns subsurveyId null: no extraCards loaded.");
-            }
+            LOGGER.info("Resolver returns subsurveyId null: no extraCards loaded.");
          }
 
          final String DEFAULT_TIME_SYSTEM = "MJD_UTC"; // FIXME take from confif file
diff --git a/data-access/servlet/src/main/java/resolver/Resolver.java b/data-access/servlet/src/main/java/resolver/Resolver.java
index f9b762d..6955b10 100644
--- a/data-access/servlet/src/main/java/resolver/Resolver.java
+++ b/data-access/servlet/src/main/java/resolver/Resolver.java
@@ -6,6 +6,7 @@ interface Resolver
 
    public String relPathname();
    public int    hdunum();
+   public String obsCollection();
 }
 
 
diff --git a/data-access/servlet/src/main/java/resolver/ResolverFromId.java b/data-access/servlet/src/main/java/resolver/ResolverFromId.java
index c78fbcd..95ee9ec 100644
--- a/data-access/servlet/src/main/java/resolver/ResolverFromId.java
+++ b/data-access/servlet/src/main/java/resolver/ResolverFromId.java
@@ -7,13 +7,21 @@ class ResolverFromId implements Resolver
 {
    private static final Logger LOGGER = Logger.getLogger(ResolverFromId.class.getName());
 
+   private Subsurvey[] subsurveys;
+
    private String   relPathname;
    private int      hdunum;
+   private String   subsurveyId;
+
+   public ResolverFromId(Subsurvey[] subsurveys)
+   {
+      this.subsurveys = subsurveys;
+   }
 
 
    public String relPathname() {return this.relPathname;}
    public int    hdunum() {return this.hdunum;}
-
+   public String obsCollection() { return this.subsurveyId; }
 
    public void resolve(String pubdid)
    {
@@ -25,8 +33,11 @@ class ResolverFromId implements Resolver
       {
          resolveIvoid(pubdid);
 
+         // FIXME resolve subsurveyId by matching relPathname to subsurveys::storage-path & file-filter
+
          LOGGER.info("relPathname : " + relPathname);
          LOGGER.info("hdunum      : " + String.valueOf(hdunum));
+         LOGGER.info("subsurveyId : " + ((subsurveyId == null) ? "null" : this.subsurveyId) );
       }
       else
       {
diff --git a/data-access/servlet/src/main/java/webapi/ServletCutout.java b/data-access/servlet/src/main/java/webapi/ServletCutout.java
index e484d4a..0eefaf1 100644
--- a/data-access/servlet/src/main/java/webapi/ServletCutout.java
+++ b/data-access/servlet/src/main/java/webapi/ServletCutout.java
@@ -59,8 +59,9 @@ public class ServletCutout extends javax.servlet.http.HttpServlet
 
    private Subsurvey[] subsurveys = null;
 
-   protected Soda soda     = new SodaImpl(settings, subsurveys);
+   protected Soda soda = new SodaImpl(settings, subsurveys);
    protected Vlkb vlkb = ( settings.amqpConn.isHostnameEmpty() ? new VlkbCli(settings): new VlkbAmqp(settings) );
+   protected Resolver resolver = null;
 
    public void init() throws ServletException
    {
@@ -71,6 +72,9 @@ public class ServletCutout extends javax.servlet.http.HttpServlet
       String surveysAbsPathname = settings.fitsPaths.surveysMetadataAbsPathname();
       if( (surveysAbsPathname != null) && (surveysAbsPathname.length() > 1) )
          subsurveys = Subsurvey.loadSubsurveys(surveysAbsPathname);
+
+      resolver = (settings.dbConn.isDbUriEmpty() ? new ResolverFromId(subsurveys)
+            : new ResolverByObsCore(settings.dbConn, subsurveys));
    }
 
 
@@ -123,21 +127,33 @@ public class ServletCutout extends javax.servlet.http.HttpServlet
    {
       LOGGER.info("trace" + pos);
 
-      Resolver rsl = new ResolverFromId();
-      rsl.resolve(id);
+      resolver.resolve(id);
 
-      soda.doStream(rsl.relPathname(), rsl.hdunum(), pos, band, time, pol, pixels, respOutputStream);
+      soda.doStream(resolver.relPathname(), resolver.hdunum(), pos, band, time, pol, pixels, respOutputStream);
    }
 
 
    protected CutResult doCutoutFile(String id, Pos pos, Band band, Time time, Pol pol, String pixels,
          boolean countNullValues)
          throws IOException, InterruptedException
-   {
-      LOGGER.info("trace");
+      {
+         LOGGER.info("trace");
 
-      return vlkb.doFileById(id, pos, band, time, pol, pixels, countNullValues, subsurveys);
-   }
+         FitsCard[] extraCards = null;
+
+         String subsurveyId = resolver.obsCollection();
+         if(subsurveyId != null)
+         {
+            extraCards = Subsurvey.subsurveysFindCards(subsurveys, subsurveyId);
+         }
+         else
+         {
+            LOGGER.info("Resolver returns subsurveyId null: no extraCards loaded.");
+         }
+
+         return vlkb.doFile(resolver.relPathname(), resolver.hdunum(),
+               pos, band, time, pol, pixels, countNullValues, extraCards);
+      }
 
 
    protected void doMultiValuedParamNotSupported(String message, PrintWriter printWriter)
diff --git a/data-access/servlet/src/main/java/webapi/ServletMCutout.java b/data-access/servlet/src/main/java/webapi/ServletMCutout.java
deleted file mode 100644
index 63127de..0000000
--- a/data-access/servlet/src/main/java/webapi/ServletMCutout.java
+++ /dev/null
@@ -1,157 +0,0 @@
-
-import java.util.logging.Logger;
-
-import java.security.Principal;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.BufferedReader;
-import java.io.PrintWriter;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Properties;
-
-// for Logging/Accounting
-import org.json.simple.JSONObject;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.TimeZone;
-
-// read HTTP body
-import java.util.stream.Collectors;
-import org.apache.commons.io.IOUtils;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-
-public class ServletMCutout extends javax.servlet.http.HttpServlet
-{
-   private static final Logger   LOGGER   = Logger.getLogger(ServletMCutout.class.getName());
-   private static final Settings settings = Settings.getInstance();
-
-   protected Vlkb vlkb = ( settings.amqpConn.isHostnameEmpty() ? new VlkbCli(settings): new VlkbAmqp(settings) );
-
-
-   public void init() throws ServletException
-   {
-      super.init();
-
-      LOGGER.info("FITS : " + settings.fitsPaths.toString());
-      LOGGER.info("AMQP : " + settings.amqpConn.toString());
-      LOGGER.info("DB   : " + settings.dbConn.toString());
-
-   }
-
-
-   /* DALI allows GET and POST for sync services */
-
-   protected void doGet(HttpServletRequest request, HttpServletResponse response)
-       throws ServletException, IOException
-   {
-      processRequest(request, response);
-   }
-
-   protected void doPost(HttpServletRequest request, HttpServletResponse response)
-      throws ServletException, IOException
-   {
-      processRequest(request, response);
-   }
-
-
-
-   protected void processRequest(HttpServletRequest request, HttpServletResponse response)
-      throws ServletException, IOException
-   {
-            long startTime_msec = System.currentTimeMillis();
-      boolean showDuration = true;
-
-      InputStreamReader isr                  = null;
-
-      response.setContentType("text/xml");
-      try
-      {
-         isr    = new InputStreamReader(request.getInputStream(),"utf-8");
-
-
-         BufferedReader input = new BufferedReader(isr);
-         StringBuffer jsonStringBuffer = new StringBuffer();
-         String line;
-         while((line = input.readLine()) != null)
-         {
-            jsonStringBuffer.append(line);
-         }
-         String reqJsonString = jsonStringBuffer.toString();
-
-         OutputStream respOutputStream = response.getOutputStream();
-
-         MCutResult result = vlkb.doMCutout(reqJsonString);
-
-         final String contentType = "text/xml"; // FIXME
-         final String respEncoding = "utf-8"; // FIXME
-         if(contentType.equals("text/xml") || contentType.equals("application/xml"))
-         {
-            PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, respEncoding));
-
-
-            String accessUrl = convertLocalPathnameToRemoteUrl(result.fileName,
-                  settings.fitsPaths.cutouts(),
-                  settings.fitsPaths.cutoutsUrl());
-
-            XmlSerializer.serializeToLegacyCutResult(writer, respEncoding,
-                  result, accessUrl,
-                  //id, pos, band, time, pol, pixels, countNullValues,
-                  showDuration, startTime_msec);
-
-
-            writer.close();
-         }
-         else if(contentType.equals("application/tar.gz")) // FIXME mime for tgz ?
-         {
-            //LOGGER.info("streaming the file NOT IMPLEMENTED yet for mcutout");
-            /*  
-                File downloadFile = new File(cod.absCutPathname);
-                FileInputStream input = new BuffereInputStream(new FileInputStream(downloadFile));
-                input.transferTo(respOutputStream);
-                LOGGER.info("Deleting after download: " + downloadFile.getName() );
-                downloadFile.delete();
-                */
-         }
-         else
-         {
-            throw new AssertionError("Unsupported contentType for output: " + contentType);
-         }
-
-
-      }
-      catch(Exception ex)
-      {
-         /* FIXME find better exception */
-         throw new AssertionError("internal error: jsonFile.open() throws IOException:" + ex.getMessage());
-      }
-   }
-
-  private String convertLocalPathnameToRemoteUrl(String localPathname,
-         String FITScutpath, String FITSRemoteUrlCutouts)
-   {   
-      LOGGER.info("trace " + localPathname);
-      String fileName = localPathname.replaceAll(FITScutpath + "/", "");
-      LOGGER.info("local filename: " + fileName);
-      String remotefname = FITSRemoteUrlCutouts + "/" + fileName;
-      LOGGER.info("remote url    : " + remotefname);
-      return remotefname;
-   }   
-
-
-}
-
diff --git a/data-access/servlet/src/main/java/webapi/ServletMerge.java b/data-access/servlet/src/main/java/webapi/ServletMerge.java
deleted file mode 100644
index 3c2a8e1..0000000
--- a/data-access/servlet/src/main/java/webapi/ServletMerge.java
+++ /dev/null
@@ -1,244 +0,0 @@
-
-import java.util.logging.Logger;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.File;
-import java.io.OutputStream;
-import java.util.Enumeration;
-import java.util.*; // ArrayList<String>
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.ServletOutputStream; // for SOOA
-
-// from vlkb_mergefiles.java - dir & file handling
-import java.io.*;
-
-import java.nio.file.*;
-import static java.nio.file.StandardCopyOption.*;
-
-//import nom.tam.fits.*;// Fits - for regridding -- merge only
-
-// config file
-import java.util.Properties;
-
-
-// for Logging/Accounting
-import org.json.simple.JSONObject;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.TimeZone;
-
-import java.security.Principal;
-
-import vo.parameter.*;
-
-public class ServletMerge extends javax.servlet.http.HttpServlet
-{
-   private static final Logger   LOGGER   = Logger.getLogger(ServletMerge.class.getName());
-   private static final Settings settings = Settings.getInstance();
-
-   final String RESPONSE_ENCODING = "utf-8";
-   final String DEFAULT_RESPONSEFORMAT = settings.defaults.responseFormat;
-   final String DEFAULT_SKY_SYSTEM     = settings.defaults.skySystem;
-   final String DEFAULT_SPEC_SYSTEM    = settings.defaults.specSystem;
-
-
-   protected Vlkb vlkb = ( settings.amqpConn.isHostnameEmpty() ? new VlkbCli(settings): new VlkbAmqp(settings) );
-
-
-   public void init() throws ServletException
-   {
-      super.init();
-
-      LOGGER.info("FITS : " + settings.fitsPaths.toString());
-      LOGGER.info("AMQP : " + settings.amqpConn.toString());
-      LOGGER.info("DB   : " + settings.dbConn.toString());
-   }
-
-
-   /* DALI allows GET and POST for sync services */
-
-   protected void doGet(HttpServletRequest request, HttpServletResponse response)
-         throws ServletException, IOException
-      {
-         processRequest(request, response);
-      }
-
-   protected void doPost(HttpServletRequest request, HttpServletResponse response)
-         throws ServletException, IOException
-      {
-         processRequest(request, response);
-      }
-
-
-
-   protected void processRequest(HttpServletRequest request, HttpServletResponse response)
-         throws ServletException, IOException
-      {
-         long startTime_msec = System.currentTimeMillis();
-         boolean showDuration = true;
-
-         ServletOutputStream  respOutputStream = response.getOutputStream();
-
-         try
-         {
-
-           /* Map<SodaParam, String[]> params = collectSodaParams(request);
-            SodaParser parser = new SodaParser(params);
-
-            String id   = null;
-            Pos    pos  = null;
-            Band   band = null;
-            Time   time = null;
-            Pol    pol  = null;
-
-            if(parser.sodaReq_hasSodaId())
-            {
-               id   = parser.sodaReq_getId();
-               pos  = parser.sodaReq_getPosCirclePolygon();
-               band = parser.sodaReq_getBand();
-               time = parser.sodaReq_getTime();
-               pol  = parser.sodaReq_getPol();
-            }
-            else
-            {
-               id   = parser.vlkbReq_getPubdid();
-               pos  = parser.vlkbReq_getCircleRect();
-               band = parser.vlkbReq_getVelocity();
-            }
-*/
-            Map<String, String[]> params = request.getParameterMap();
-            String id   = null;
-            Pos    pos  = null;
-            Band   band = null;
-            Time   time = null;
-            Pol    pol  = null;
-            String pixels = null;
-
-
-
-
-
-            String respFormat = DEFAULT_RESPONSEFORMAT;//sodaReq_getResponseFormat(request, DEFAULT_RESPONSEFORMAT);
-
-            Coord coord = new Coord(DEFAULT_SKY_SYSTEM, pos, DEFAULT_SPEC_SYSTEM, band, time, pol);
-
-            // FIXME should parse from params
-            boolean countNullValues = false;
-            String respContentType = DEFAULT_RESPONSEFORMAT;
-
-            response.setContentType(respContentType);
-
-            CutResult cutResult = vlkb.doMerge(parseLegacyPubdidArr(id), coord, countNullValues);
-
-            String contentType = respContentType;
-            String respEncoding = RESPONSE_ENCODING;
-
-            if(contentType.equals("text/xml") || contentType.equals("application/xml"))
-            {
-               LOGGER.info("writing xml");
-               PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, respEncoding));
-
-               String accessUrl = convertLocalPathnameToRemoteUrl(cutResult.fileName,
-                     settings.fitsPaths.cutouts(),
-                     settings.fitsPaths.cutoutsUrl());
-
-               XmlSerializer.serializeToLegacyCutResult(writer, RESPONSE_ENCODING,
-                     cutResult, accessUrl,
-                     id, pos, band, time, pol, pixels, countNullValues,
-                     showDuration, startTime_msec);
-
-               writer.close();
-            }
-            else if(contentType.equals("application/fits"))
-            {
-               LOGGER.info("streaming the file");
-
-               String absCutPathname = cutResult.fileName;
-               File downloadFile = new File(absCutPathname);
-               FileInputStream input = new FileInputStream(downloadFile);
-
-               input.transferTo(respOutputStream);
-
-               LOGGER.info("Deleting after download: " + downloadFile.getName() );
-               downloadFile.delete();
-            }
-            else
-            {
-               throw new AssertionError("Unsupported contentType for output: " + contentType);
-            }
-
-            respOutputStream.close();
-         }
-         catch(IllegalArgumentException ex)
-         {
-            LOGGER.info("Illegal arg : " + ex.getMessage());
-
-            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
-            response.setContentType("text/plain");
-            PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, RESPONSE_ENCODING));
-            writer.println("UsageError : " + ex.getMessage());
-            writer.close();
-         }
-         catch(Exception ex)
-         {
-            ex.printStackTrace();
-
-            response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
-            response.setContentType("text/plain");
-            PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, RESPONSE_ENCODING));
-            writer.println("Error : " + ex.getMessage());
-            writer.close();
-         }
-
-         LOGGER.info("processRequest normal exit");
-      }
-
-   /*
-      private Map<SodaParam, String[]> collectSodaParams(HttpServletRequest req)
-      {
-      Map<SodaParam, String[]> params = new HashMap<SodaParam, String[]>();
-      for(SodaParam paramToken : SodaParam.values())
-      {
-      String[] paramValue = req.getParameterValues(paramToken.toString());
-      params.put(paramToken, paramValue);
-      }
-      return params;
-      }
-      */
-
-   /* semi-colon separated list of pudids convert to arra */
-   private String[] parseLegacyPubdidArr(String pubdids)
-   {   
-      List<String> pubdidList = new ArrayList<String>();
-      String[] pdArr = pubdids.split(";");
-      for(String pd : pdArr)
-         if(pd.length() > 0) pubdidList.add(pd);
-
-      String[] pubdidArr = new String[pubdidList.size()];
-
-      return pubdidList.toArray(pubdidArr);
-   }   
-
-
-
-      private String convertLocalPathnameToRemoteUrl(String localPathname,
-         String FITScutpath, String FITSRemoteUrlCutouts)
-   {
-      LOGGER.info("trace " + localPathname);
-      String fileName = localPathname.replaceAll(FITScutpath + "/", "");
-      LOGGER.info("local filename: " + fileName);
-      String remotefname = FITSRemoteUrlCutouts + "/" + fileName;
-      LOGGER.info("remote url    : " + remotefname);
-      return remotefname;
-   }
-
-
-
-
-}
-
diff --git a/data-access/servlet/src/main/java/webapi/UWSSoda.java b/data-access/servlet/src/main/java/webapi/UWSSoda.java
deleted file mode 100644
index 86d8d87..0000000
--- a/data-access/servlet/src/main/java/webapi/UWSSoda.java
+++ /dev/null
@@ -1,80 +0,0 @@
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import uws.UWSException;
-import uws.job.ErrorType;
-import uws.job.JobList;
-import uws.job.JobThread;
-import uws.job.UWSJob;
-import uws.job.parameters.InputParamController;
-import uws.job.parameters.NumericParamController;
-import uws.job.parameters.StringParamController;
-import uws.job.user.JobOwner;
-import uws.service.UWSServlet;
-import uws.service.UWSUrl;
-
-public class UWSSoda extends UWSServlet {
-   private static final long serialVersionUID = 1L;
-
-   public static final Settings settings = Settings.getInstance();
-         
-   public static final String csvSurveysFile = settings.fitsPaths.FITSpath + "/" + "survey_populate.csv"; // FIXME make it a settings
-   public static final Subsurvey[] subsurveys = Subsurvey.loadSubsurveys(csvSurveysFile);
-
-   /* REQUIRED
-    * Initialize your UWS. At least, you should create one jobs list. */
-   @Override
-   public void initUWS() throws UWSException{
-      addJobList(new JobList("soda_cuts"));
-
-      addExpectedAdditionalParameter("ID");
-      //setInputParamController("ID", new StringParamController("ID"));
-
-      addExpectedAdditionalParameter("CIRCLE");
-      addExpectedAdditionalParameter("BAND");
-
-      /* non standard params */
-      addExpectedAdditionalParameter("skysystem");
-      addExpectedAdditionalParameter("specsystem");
-
-      //setInputParamController("l", new NumericParamController());
-      //setInputParamController("vt", new StringParamController("1", "1", new String[]{"1","2"}, false));
-   }
-
-   /*
-    * REQUIRED
-    * Create instances of jobs, but only the "work" part. The "work" and the description of the job (and all the provided parameters)
-    * are now separated and only kept in the UWSJob given in parameter. This one is created automatically by the API.
-    * You just have to provide the "work" part.
-    */
-   @Override
-   public JobThread createJobThread(UWSJob job) throws UWSException{
-      if (job.getJobList().getName().equals("soda_cuts"))
-         return new UWSSodaWork(job);
-      else
-         throw new UWSException("Impossible to create a job inside the jobs list \"" + job.getJobList().getName() + "\" !");
-   }
-
-   /* OPTIONAL
-    * By overriding this function, you can customize the root of your UWS.
-    * If this function is not overridden an XML document which lists all registered jobs lists is returned. */
-   @Override
-   protected void writeHomePage(UWSUrl requestUrl, HttpServletRequest req, HttpServletResponse resp, JobOwner user) throws UWSException, ServletException, IOException{
-      PrintWriter out = resp.getWriter();
-
-      out.println("<html><head><title>Soda UWSv4 service</title></head><body>");
-      out.println("<h1>Soda UWS service</h1");
-      out.println("<p>Available job lists:</p>");
-
-      out.println("<ul>");
-      for(JobList jl : this){
-         out.println("<li>" + jl.getName() + " - " + jl.getNbJobs() + " jobs - <a href=\"" + requestUrl.listJobs(jl.getName()) + "\">" + requestUrl.listJobs(jl.getName()) + "</a></li>");
-      }
-      out.println("</ul>");
-   }
-
-}
diff --git a/data-access/servlet/src/main/java/webapi/UWSSodaWork.java b/data-access/servlet/src/main/java/webapi/UWSSodaWork.java
deleted file mode 100644
index c79eac2..0000000
--- a/data-access/servlet/src/main/java/webapi/UWSSodaWork.java
+++ /dev/null
@@ -1,193 +0,0 @@
-import java.io.PrintWriter;
-import java.io.BufferedOutputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-
-import java.io.File;
-import java.io.FileInputStream;
-
-import uws.UWSException;
-import uws.job.ErrorType;
-import uws.job.JobThread;
-import uws.job.Result;
-import uws.job.UWSJob;
-import uws.service.UWSUrl;
-
-import java.util.Map;
-import java.util.HashMap;
-
-import java.security.Principal;
-
-public class UWSSodaWork extends JobThread
-{
-   private Settings     settings    = UWSSoda.settings;
-   private Subsurvey[]  subsurveys  = UWSSoda.subsurveys;
-
-   final String RESPONSE_ENCODING = "utf-8";
-   final String DEFAULT_RESPONSEFORMAT = settings.defaults.responseFormat;
-   final String DEFAULT_SKY_SYSTEM     = settings.defaults.skySystem;
-   final String DEFAULT_SPEC_SYSTEM    = settings.defaults.specSystem;
-
-   /* NOTE needed if cutouts dir served by vlkb-datasets */
-   private String webappRootRequestUrl = null;
-
-   protected Vlkb vlkb = ( settings.amqpConn.isHostnameEmpty() ? new VlkbCli(settings): new VlkbAmqp(settings) );$
-
-
-   public UWSSodaWork(UWSJob j) throws UWSException
-   {
-      super(j);
-      UWSUrl url = j.getUrl();
-      webappRootRequestUrl = url.getUrlHeader();
-   }
-
-
-
-   @Override
-   protected void jobWork() throws UWSException, InterruptedException
-   {
-      long startTime_msec = System.currentTimeMillis();
-      boolean showDuration = true;
-
-      final String RESPONSE_ENCODING = "utf-8";
-
-      try
-      {
-         Map<SodaParam, String[]> params = collectSodaParams(job);
-         SodaParser parser = new SodaParser(params);
-
-         String id   = null;
-         Pos    pos  = null;
-         Band   band = null;
-         Time   time = null;
-         Pol    pol  = null;
-
-         if(parser.sodaReq_hasSodaId())
-         {
-            id   = parser.sodaReq_getId();
-            pos  = parser.sodaReq_getPosCirclePolygon();
-            band = parser.sodaReq_getBand();
-            time = parser.sodaReq_getTime();
-            pol  = parser.sodaReq_getPol();
-         }
-         else
-         {
-            id   = parser.vlkbReq_getPubdid();
-            pos  = parser.vlkbReq_getCircleRect();
-            band = parser.vlkbReq_getVelocity();
-         }
-
-         Coord coord = new Coord(DEFAULT_SKY_SYSTEM, pos, DEFAULT_SPEC_SYSTEM, band, time, pol);
-
-         final String respContentType = "application/fits"; // FIXME parse this from RESPONSEFORMAT param
-
-         // implementation
-
-         Resolver rsl = new Resolver(settings);
-         rsl.resolve(id);
-
-         /* metadata/subsurveys */
-         FitsCard[] extraCards = null;
-         if(rsl.subsurveyId != null)
-         {
-            extraCards = Subsurvey.subsurveysFindCards(subsurveys, rsl.subsurveyId);
-         }
-
-         final String DEFAULT_TIME_SYSTEM = "MJD_UTC"; // FIXME take from confif file
-
-         if(pos  != null) pos.setSystem(Pos.System.valueOf(DEFAULT_SKY_SYSTEM));
-         if(band != null) band.setSystem(Band.System.valueOf(DEFAULT_SPEC_SYSTEM));
-         if(time != null) time.setSystem(Time.System.valueOf(DEFAULT_TIME_SYSTEM));
-
-         CutResult cutResult = vlkb.doCutoutFile(rsl.relPathname, rsl.hdunum, pos, band, time, pol, false, null);
-
-         /* send Results */
-
-         Result result = createResult("cutout");
-         result.setMimeType(respContentType);
-         OutputStream respOutputStream = getResultOutput(result);
-
-         if(respContentType.equals("text/xml") || respContentType.equals("application/xml"))
-         {
-            PrintWriter writer = new PrintWriter(new OutputStreamWriter(respOutputStream, RESPONSE_ENCODING));
-
-            String accessUrl = convertLocalPathnameToRemoteUrl(cutResult.fileName,
-                  settings.fitsPaths.cutouts(),
-                  settings.fitsPaths.cutoutsUrl());
-
-            XmlSerializer.serializeToLegacyCutResult(writer, RESPONSE_ENCODING,
-                  cutResult, accessUrl,
-                  id, pos, band, time, pol, null, false,
-                  showDuration, startTime_msec);
-
-               writer.close();
-         }
-         else if(respContentType.equals("application/fits"))
-         {
-            String absCutPathname = cutResult.fileName;
-            File downloadFile = new File(absCutPathname);
-            FileInputStream input = new FileInputStream(downloadFile);
-
-            input.transferTo(respOutputStream);
-
-            downloadFile.delete();
-         }
-         else
-         {
-            throw new AssertionError("Unsupported contentType for response: " + respContentType);
-         }
-
-         respOutputStream.close();
-         publishResult(result);
-      }
-      catch(IllegalArgumentException ex)
-      {
-         throw new UWSException(UWSException.INTERNAL_SERVER_ERROR, ex,
-               "Illegal arg exception " + job.getJobId() + " !", ErrorType.TRANSIENT);
-      }
-      catch(IOException ex)
-      {
-         throw new UWSException(UWSException.INTERNAL_SERVER_ERROR, ex,
-               "IO exception " + job.getJobId() + " !", ErrorType.TRANSIENT);
-      }
-   }
-
-
-   private String convertLocalPathnameToRemoteUrl(String localPathname,
-         String FITScutpath, String FITSRemoteUrlCutouts)
-   {
-      LOGGER.info("trace " + localPathname);
-      String fileName = localPathname.replaceAll(FITScutpath + "/", "");
-      LOGGER.info("local filename: " + fileName);
-      String remotefname = FITSRemoteUrlCutouts + "/" + fileName;
-      LOGGER.info("remote url    : " + remotefname);
-      return remotefname;
-   }
-
-
-
-
-   /* see UWSParameters::getAdditionalParameter -> UWSParameters.java.l465: ...returned value maybe an array... */
-   /* Object getAdditionalParameterValue(String paramName) --> calls UWSParameters::getAdditionalParameters()   */
-   private Map<SodaParam, String[]> collectSodaParams(UWSJob job)
-   {
-      Map<SodaParam, String[]> params = new HashMap<SodaParam, String[]>();
-      for(SodaParam paramToken : SodaParam.values())
-      {
-         String[] paramValue = (String[])job.getAdditionalParameterValue(paramToken.toString());
-         params.put(paramToken, paramValue);
-      }
-      return params;
-   }
-
-   /*
-      Map<String, String[]> params = Map.of(
-      "ID" , new String[]{pubdid},
-      "CIRCLE", new String[]{circleStr},
-      "BAND", new String[]{bandStr},
-      "skysystem", new String[]{skysystemStr},
-      "specsystem", new String[]{specsystemStr}
-      );
-      */
-}
diff --git a/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-garrtoken.xml b/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-garrtoken.xml
index 4bfa308..016c7b9 100644
--- a/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-garrtoken.xml
+++ b/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-garrtoken.xml
@@ -69,25 +69,6 @@
                 <url-pattern>/vlkb_cutout</url-pattern>
         </servlet-mapping>
 
-        <servlet>
-                <servlet-name>vlkb_mcutout</servlet-name>
-                <servlet-class>ServletMCutout</servlet-class>
-        </servlet>
-        <servlet-mapping>
-                <servlet-name>vlkb_mcutout</servlet-name>
-                <url-pattern>/vlkb_mcutout</url-pattern>
-        </servlet-mapping>
-
-
-        <servlet>
-                <servlet-name>vlkb_merge</servlet-name>
-                <servlet-class>ServletMerge</servlet-class>
-        </servlet>
-        <servlet-mapping>
-                <servlet-name>vlkb_merge</servlet-name>
-                <url-pattern>/vlkb_merge</url-pattern>
-        </servlet-mapping>
-
 
         <servlet>
                 <servlet-name>vlkb_vosi_availability</servlet-name>
@@ -116,11 +97,6 @@
                 <servlet-name>vlkb_soda</servlet-name>
                 <url-pattern>/soda</url-pattern>
         </servlet-mapping>
-        <servlet-mapping>
-                <servlet-name>vlkb_soda</servlet-name>
-                <url-pattern>/vlkb_soda</url-pattern>
-        </servlet-mapping>
-
 
         <servlet>
                 <servlet-name>uws_merge</servlet-name>
@@ -158,21 +134,4 @@
         </servlet-mapping>
 
 
-        <servlet>
-                <servlet-name>uws_soda</servlet-name>
-                <servlet-class>UWSSoda</servlet-class>
-                <init-param>
-                        <param-name>name</param-name>
-                        <param-value>soda_uws</param-value>
-                </init-param>
-                <init-param>
-                        <param-name>rootDirectory</param-name>
-                        <param-value>/tmp</param-value>
-                </init-param>
-        </servlet>
-        <servlet-mapping>
-                <servlet-name>uws_soda</servlet-name>
-                <url-pattern>/soda_uws/*</url-pattern>
-        </servlet-mapping>
-
 </web-app>
diff --git a/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-ia2token.xml b/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-ia2token.xml
index 4f93735..33c03f4 100644
--- a/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-ia2token.xml
+++ b/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-ia2token.xml
@@ -79,25 +79,6 @@
                 <url-pattern>/vlkb_cutout</url-pattern>
         </servlet-mapping>
 
-        <servlet>
-                <servlet-name>vlkb_mcutout</servlet-name>
-                <servlet-class>ServletMCutout</servlet-class>
-        </servlet>
-        <servlet-mapping>
-                <servlet-name>vlkb_mcutout</servlet-name>
-                <url-pattern>/vlkb_mcutout</url-pattern>
-        </servlet-mapping>
-
-
-        <servlet>
-                <servlet-name>vlkb_merge</servlet-name>
-                <servlet-class>ServletMerge</servlet-class>
-        </servlet>
-        <servlet-mapping>
-                <servlet-name>vlkb_merge</servlet-name>
-                <url-pattern>/vlkb_merge</url-pattern>
-        </servlet-mapping>
-
 
         <servlet>
                 <servlet-name>vlkb_vosi_availability</servlet-name>
@@ -126,11 +107,6 @@
                 <servlet-name>vlkb_soda</servlet-name>
                 <url-pattern>/soda</url-pattern>
         </servlet-mapping>
-        <servlet-mapping>
-                <servlet-name>vlkb_soda</servlet-name>
-                <url-pattern>/vlkb_soda</url-pattern>
-        </servlet-mapping>
-
 
         <servlet>
                 <servlet-name>uws_merge</servlet-name>
@@ -168,21 +144,5 @@
         </servlet-mapping>
 
 
-        <servlet>
-                <servlet-name>uws_soda</servlet-name>
-                <servlet-class>UWSSoda</servlet-class>
-                <init-param>
-                        <param-name>name</param-name>
-                        <param-value>soda_uws</param-value>
-                </init-param>
-                <init-param>
-                        <param-name>rootDirectory</param-name>
-                        <param-value>/tmp</param-value>
-                </init-param>
-        </servlet>
-        <servlet-mapping>
-                <servlet-name>uws_soda</servlet-name>
-                <url-pattern>/soda_uws/*</url-pattern>
-        </servlet-mapping>
-
 </web-app>
+
diff --git a/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-iamtoken.xml b/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-iamtoken.xml
index 1c3b163..ba077dd 100644
--- a/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-iamtoken.xml
+++ b/data-access/servlet/src/main/webapp/WEB-INF/web-cutout-iamtoken.xml
@@ -60,26 +60,6 @@
                 <url-pattern>/vlkb_cutout</url-pattern>
         </servlet-mapping>
 
-        <servlet>
-                <servlet-name>vlkb_mcutout</servlet-name>
-                <servlet-class>ServletMCutout</servlet-class>
-        </servlet>
-        <servlet-mapping>
-                <servlet-name>vlkb_mcutout</servlet-name>
-                <url-pattern>/vlkb_mcutout</url-pattern>
-        </servlet-mapping>
-
-
-        <servlet>
-                <servlet-name>vlkb_merge</servlet-name>
-                <servlet-class>ServletMerge</servlet-class>
-        </servlet>
-        <servlet-mapping>
-                <servlet-name>vlkb_merge</servlet-name>
-                <url-pattern>/vlkb_merge</url-pattern>
-        </servlet-mapping>
-
-
         <servlet>
                 <servlet-name>vlkb_vosi_availability</servlet-name>
                 <servlet-class>VlkbServletFile</servlet-class>
@@ -107,11 +87,6 @@
                 <servlet-name>vlkb_soda</servlet-name>
                 <url-pattern>/soda</url-pattern>
         </servlet-mapping>
-        <servlet-mapping>
-                <servlet-name>vlkb_soda</servlet-name>
-                <url-pattern>/vlkb_soda</url-pattern>
-        </servlet-mapping>
-
 
         <servlet>
                 <servlet-name>uws_merge</servlet-name>
@@ -148,22 +123,5 @@
                 <url-pattern>/uws_mcutout/*</url-pattern>
         </servlet-mapping>
 
-
-        <servlet>
-                <servlet-name>uws_soda</servlet-name>
-                <servlet-class>UWSSoda</servlet-class>
-                <init-param>
-                        <param-name>name</param-name>
-                        <param-value>soda_uws</param-value>
-                </init-param>
-                <init-param>
-                        <param-name>rootDirectory</param-name>
-                        <param-value>/tmp</param-value>
-                </init-param>
-        </servlet>
-        <servlet-mapping>
-                <servlet-name>uws_soda</servlet-name>
-                <url-pattern>/soda_uws/*</url-pattern>
-        </servlet-mapping>
-
 </web-app>
+
diff --git a/data-access/servlet/src/main/webapp/WEB-INF/web.xml b/data-access/servlet/src/main/webapp/WEB-INF/web.xml
index 5cc30e2..2bd1e53 100644
--- a/data-access/servlet/src/main/webapp/WEB-INF/web.xml
+++ b/data-access/servlet/src/main/webapp/WEB-INF/web.xml
@@ -93,26 +93,6 @@
                 <url-pattern>/vlkb_cutout</url-pattern>
         </servlet-mapping>
 
-        <servlet>
-                <servlet-name>vlkb_mcutout</servlet-name>
-                <servlet-class>ServletMCutout</servlet-class>
-        </servlet>
-        <servlet-mapping>
-                <servlet-name>vlkb_mcutout</servlet-name>
-                <url-pattern>/vlkb_mcutout</url-pattern>
-        </servlet-mapping>
-
-
-        <servlet>
-                <servlet-name>vlkb_merge</servlet-name>
-                <servlet-class>ServletMerge</servlet-class>
-        </servlet>
-        <servlet-mapping>
-                <servlet-name>vlkb_merge</servlet-name>
-                <url-pattern>/vlkb_merge</url-pattern>
-        </servlet-mapping>
-
-
         <servlet>
                 <servlet-name>vlkb_vosi_availability</servlet-name>
                 <servlet-class>VlkbServletFile</servlet-class>
@@ -140,11 +120,6 @@
                 <servlet-name>vlkb_soda</servlet-name>
                 <url-pattern>/soda</url-pattern>
         </servlet-mapping>
-        <servlet-mapping>
-                <servlet-name>vlkb_soda</servlet-name>
-                <url-pattern>/vlkb_soda</url-pattern>
-        </servlet-mapping>
-
 
         <servlet>
                 <servlet-name>uws_merge</servlet-name>
@@ -181,22 +156,5 @@
                 <url-pattern>/uws_mcutout/*</url-pattern>
         </servlet-mapping>
 
-
-        <servlet>
-                <servlet-name>uws_soda</servlet-name>
-                <servlet-class>UWSSoda</servlet-class>
-                <init-param>
-                        <param-name>name</param-name>
-                        <param-value>soda_uws</param-value>
-                </init-param>
-                <init-param>
-                        <param-name>rootDirectory</param-name>
-                        <param-value>/tmp</param-value>
-                </init-param>
-        </servlet>
-        <servlet-mapping>
-                <servlet-name>uws_soda</servlet-name>
-                <url-pattern>/soda_uws/*</url-pattern>
-        </servlet-mapping>
-
 </web-app>
+
-- 
GitLab