diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/handler/AbstractQueryRequestHandler.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/handler/AbstractQueryRequestHandler.java index 987b84abd57..c9274bb83f6 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/handler/AbstractQueryRequestHandler.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/handler/AbstractQueryRequestHandler.java @@ -58,6 +58,7 @@ public ModelAndView handleQueryRequest(HttpServletRequest request, RequestMethod HttpServletResponse response) throws HTTPException, IOException { RepositoryConnection repositoryCon = null; + Object queryResponse = null; try { Repository repository = repositoryResolver.getRepository(request); @@ -75,9 +76,6 @@ public ModelAndView handleQueryRequest(HttpServletRequest request, RequestMethod boolean distinct = isDistinct(request); try { - - Object queryResponse; - if (headersOnly) { queryResponse = null; } else { @@ -114,10 +112,22 @@ public ModelAndView handleQueryRequest(HttpServletRequest request, RequestMethod } } catch (Exception e) { - // only close the connection when an exception occurs. Otherwise, the QueryResultView will take care of - // closing it. - if (repositoryCon != null) { - repositoryCon.close(); + // only close the response & connection when an exception occurs. Otherwise, the QueryResultView will take + // care of closing it. + try { + if (queryResponse instanceof AutoCloseable) { + ((AutoCloseable) queryResponse).close(); + } + } catch (Exception qre) { + logger.warn("Query response closing error", qre); + } finally { + try { + if (repositoryCon != null) { + repositoryCon.close(); + } + } catch (Exception qre) { + logger.warn("Connection closing error", qre); + } } throw e; }