From fb01e2a2681ddbd150fa27ebb2928c4265386621 Mon Sep 17 00:00:00 2001 From: Vilnis Termanis Date: Thu, 16 May 2024 14:15:28 +0200 Subject: [PATCH] fixup! GH-4968: server-spring - Close query result on pre-render exception --- .../repository/BooleanQueryResultView.java | 2 +- .../repository/BooleanQueryResultWrapper.java | 35 ------------------- .../handler/AbstractQueryRequestHandler.java | 16 +++++---- .../handler/DefaultQueryRequestHandler.java | 8 ++--- 4 files changed, 14 insertions(+), 47 deletions(-) delete mode 100644 tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/BooleanQueryResultWrapper.java diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/BooleanQueryResultView.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/BooleanQueryResultView.java index 6ecbf980a2d..367e9154534 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/BooleanQueryResultView.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/BooleanQueryResultView.java @@ -61,7 +61,7 @@ protected void renderInternal(Map model, HttpServletRequest request, HttpServlet if (!headersOnly) { try (OutputStream out = response.getOutputStream()) { BooleanQueryResultWriter qrWriter = brWriterFactory.getWriter(out); - boolean value = ((BooleanQueryResultWrapper) model.get(QUERY_RESULT_KEY)).get(); + boolean value = (Boolean) model.get(QUERY_RESULT_KEY); qrWriter.handleBoolean(value); } catch (QueryResultHandlerException e) { if (e.getCause() != null && e.getCause() instanceof IOException) { diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/BooleanQueryResultWrapper.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/BooleanQueryResultWrapper.java deleted file mode 100644 index dde0cd318f3..00000000000 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/BooleanQueryResultWrapper.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2024 Eclipse RDF4J contributors. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Distribution License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * SPDX-License-Identifier: BSD-3-Clause - *******************************************************************************/ - -package org.eclipse.rdf4j.http.server.repository; - -import org.eclipse.rdf4j.http.server.repository.handler.AbstractQueryRequestHandler; - -/** - * Simple wrapper to allow for {@link AbstractQueryRequestHandler#evaluateQuery} to be satisfied - */ -public class BooleanQueryResultWrapper implements AutoCloseable { - - private Boolean result; - - public BooleanQueryResultWrapper(Boolean result) { - this.result = result; - } - - public Boolean get() { - return result; - } - - @Override - public void close() throws Exception { - // No-op - } -} 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 91df49b1529..bd5871c71b9 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,7 +58,7 @@ public ModelAndView handleQueryRequest(HttpServletRequest request, RequestMethod HttpServletResponse response) throws HTTPException, IOException { RepositoryConnection repositoryCon = null; - AutoCloseable queryResponse = null; + Object queryResponse = null; try { Repository repository = repositoryResolver.getRepository(request); @@ -115,14 +115,18 @@ public ModelAndView handleQueryRequest(HttpServletRequest request, RequestMethod // only close the response & connection when an exception occurs. Otherwise, the QueryResultView will take // care of closing it. try { - if (queryResponse != null) { - queryResponse.close(); + if (queryResponse instanceof AutoCloseable) { + ((AutoCloseable)queryResponse).close(); } } catch (Exception qre) { logger.warn("Query response closing error", qre); } finally { - if (repositoryCon != null) { - repositoryCon.close(); + try { + if (repositoryCon != null) { + repositoryCon.close(); + } + } catch (Exception qre) { + logger.warn("Connection closing error", qre); } } throw e; @@ -130,7 +134,7 @@ public ModelAndView handleQueryRequest(HttpServletRequest request, RequestMethod } - abstract protected AutoCloseable evaluateQuery(Query query, long limit, long offset, boolean distinct) + abstract protected Object evaluateQuery(Query query, long limit, long offset, boolean distinct) throws ClientHTTPException; abstract protected View getViewFor(Query query); diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/handler/DefaultQueryRequestHandler.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/handler/DefaultQueryRequestHandler.java index 798b407b2c6..934260d1ddb 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/handler/DefaultQueryRequestHandler.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/handler/DefaultQueryRequestHandler.java @@ -39,7 +39,6 @@ import org.eclipse.rdf4j.http.server.HTTPException; import org.eclipse.rdf4j.http.server.ProtocolUtil; import org.eclipse.rdf4j.http.server.repository.BooleanQueryResultView; -import org.eclipse.rdf4j.http.server.repository.BooleanQueryResultWrapper; import org.eclipse.rdf4j.http.server.repository.GraphQueryResultView; import org.eclipse.rdf4j.http.server.repository.TupleQueryResultView; import org.eclipse.rdf4j.http.server.repository.resolver.RepositoryResolver; @@ -77,8 +76,7 @@ public DefaultQueryRequestHandler(RepositoryResolver repositoryResolver) { } @Override - protected AutoCloseable evaluateQuery(Query query, long limit, long offset, boolean distinct) - throws ClientHTTPException { + protected Object evaluateQuery(Query query, long limit, long offset, boolean distinct) throws ClientHTTPException { if (query instanceof TupleQuery) { return evaluateQuery((TupleQuery) query, limit, offset, distinct); } else if (query instanceof GraphQuery) { @@ -91,8 +89,8 @@ protected AutoCloseable evaluateQuery(Query query, long limit, long offset, bool } } - protected BooleanQueryResultWrapper evaluateQuery(BooleanQuery query, long limit, long offset, boolean distinct) { - return new BooleanQueryResultWrapper(query.evaluate()); + protected Boolean evaluateQuery(BooleanQuery query, long limit, long offset, boolean distinct) { + return query.evaluate(); } protected GraphQueryResult evaluateQuery(GraphQuery query, long limit, long offset, boolean distinct) {