From 0adb45ea9067e1074bf1c1dc1a4338940dc5e03c Mon Sep 17 00:00:00 2001 From: Jeen Broekstra Date: Tue, 25 Apr 2023 11:53:39 +1200 Subject: [PATCH] GH-4492 use new txn action endpoints in protocol client, backward compatible --- .../http/client/RDF4JProtocolSession.java | 131 +++++++++++------- .../eclipse/rdf4j/http/protocol/Protocol.java | 4 +- .../reference/rest-api/changelog.md | 37 +++++ .../reference/rest-api/rdf4j-openapi.yaml | 6 +- .../transaction/AbstractActionController.java | 6 +- .../repository/transaction/AddController.java | 2 +- .../transaction/CommitController.java | 2 +- .../transaction/DeleteController.java | 2 +- .../transaction/ExportController.java | 2 +- .../transaction/PingController.java | 2 +- .../transaction/PrepareController.java | 2 +- .../transaction/QueryController.java | 3 +- .../transaction/RollbackController.java | 2 +- .../transaction/SizeController.java | 2 +- .../transaction/TransactionController.java | 2 +- .../transaction/UpdateController.java | 3 +- 16 files changed, 144 insertions(+), 64 deletions(-) create mode 100644 site/content/documentation/reference/rest-api/changelog.md diff --git a/core/http/client/src/main/java/org/eclipse/rdf4j/http/client/RDF4JProtocolSession.java b/core/http/client/src/main/java/org/eclipse/rdf4j/http/client/RDF4JProtocolSession.java index 158216ba4c2..07a4fbe7dec 100644 --- a/core/http/client/src/main/java/org/eclipse/rdf4j/http/client/RDF4JProtocolSession.java +++ b/core/http/client/src/main/java/org/eclipse/rdf4j/http/client/RDF4JProtocolSession.java @@ -20,6 +20,7 @@ import java.io.OutputStreamWriter; import java.io.Reader; import java.net.HttpURLConnection; +import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -121,6 +122,8 @@ public class RDF4JProtocolSession extends SPARQLProtocolSession { private long pingDelay = PINGDELAY; + private int serverProtocolVersion = 0; + /** * @deprecated Use {@link #RDF4JProtocolSession(HttpClient, ExecutorService)} instead */ @@ -165,6 +168,7 @@ public void setServerURL(String serverURL) { } this.serverURL = serverURL; + this.serverProtocolVersion = 0; // side effect } public String getServerURL() { @@ -275,6 +279,16 @@ public String getServerProtocol() throws IOException, RepositoryException, Unaut } } + private int getServerProtocolVersion() throws UnauthorizedException, RepositoryException, IOException { + if (serverProtocolVersion > 0) { + return serverProtocolVersion; + } + + var protocolVersionString = getServerProtocol(); + serverProtocolVersion = Integer.parseInt(protocolVersionString); + return serverProtocolVersion; + } + /*-------------------------* * Repository/context size * *-------------------------*/ @@ -286,9 +300,8 @@ public long size(Resource... contexts) throws IOException, RepositoryException, String transactionURL = getTransactionURL(); final boolean useTransaction = transactionURL != null; - String baseLocation = useTransaction ? appendAction(transactionURL, Action.SIZE) - : Protocol.getSizeLocation(getQueryURL()); - URIBuilder url = new URIBuilder(baseLocation); + URIBuilder url = useTransaction ? getTxnActionURIBuilder(Action.SIZE) + : new URIBuilder(Protocol.getSizeLocation(getQueryURL())); String[] encodedContexts = Protocol.encodeContexts(contexts); for (int i = 0; i < encodedContexts.length; i++) { @@ -591,8 +604,8 @@ public void getStatements(Resource subj, IRI pred, Value obj, boolean includeInf String transactionURL = getTransactionURL(); final boolean useTransaction = transactionURL != null; - String baseLocation = useTransaction ? transactionURL : Protocol.getStatementsLocation(getQueryURL()); - URIBuilder url = new URIBuilder(baseLocation); + URIBuilder url = useTransaction ? getTxnActionURIBuilder(Action.GET) + : new URIBuilder(Protocol.getStatementsLocation(getQueryURL())); if (subj != null) { url.setParameter(Protocol.SUBJECT_PARAM_NAME, Protocol.encodeValue(subj)); @@ -607,9 +620,6 @@ public void getStatements(Resource subj, IRI pred, Value obj, boolean includeInf url.addParameter(Protocol.CONTEXT_PARAM_NAME, encodedContext); } url.setParameter(Protocol.INCLUDE_INFERRED_PARAM_NAME, Boolean.toString(includeInferred)); - if (useTransaction) { - url.setParameter(Protocol.ACTION_PARAM_NAME, Action.GET.toString()); - } HttpRequestBase method = useTransaction ? new HttpPut(url.build()) : new HttpGet(url.build()); method = applyAdditionalHeaders(method); @@ -683,6 +693,24 @@ public synchronized void beginTransaction(TransactionSetting... transactionSetti } } + private URIBuilder getTxnActionURIBuilder(Action action) + throws RDF4JException, IOException, UnauthorizedException { + Objects.requireNonNull(action); + try { + if (getServerProtocolVersion() < 14) { // use legacy action parameter instead of dedicated action endpoint + URIBuilder builder = new URIBuilder(transactionURL); + builder.addParameter(Protocol.ACTION_PARAM_NAME, action.toString()); + return builder; + } + + URIBuilder builder = new URIBuilder(transactionURL + "/" + action.toString().toLowerCase()); + return builder; + } catch (URISyntaxException e) { + logger.error("could not create URL for transaction " + action, e); + throw new RuntimeException(e); + } + } + public synchronized void prepareTransaction() throws RDF4JException, IOException, UnauthorizedException { checkRepositoryURL(); @@ -692,9 +720,8 @@ public synchronized void prepareTransaction() throws RDF4JException, IOException HttpPut method = null; try { - URIBuilder url = new URIBuilder(transactionURL); - url.addParameter(Protocol.ACTION_PARAM_NAME, Action.PREPARE.toString()); - method = applyAdditionalHeaders(new HttpPut(url.build())); + var uriBuilder = getTxnActionURIBuilder(Action.PREPARE); + method = applyAdditionalHeaders(new HttpPut(uriBuilder.build())); final HttpResponse response = execute(method); try { @@ -725,9 +752,8 @@ public synchronized void commitTransaction() throws RDF4JException, IOException, HttpPut method = null; try { - URIBuilder url = new URIBuilder(transactionURL); - url.addParameter(Protocol.ACTION_PARAM_NAME, Action.COMMIT.toString()); - method = applyAdditionalHeaders(new HttpPut(url.build())); + var uriBuilder = getTxnActionURIBuilder(Action.COMMIT); + method = applyAdditionalHeaders(new HttpPut(uriBuilder.build())); final HttpResponse response = execute(method); try { @@ -804,11 +830,10 @@ void executeTransactionPing() { if (transactionURL == null) { return; // transaction has already been closed } - HttpPost method; try { - URIBuilder url = new URIBuilder(transactionURL); - url.addParameter(Protocol.ACTION_PARAM_NAME, Action.PING.toString()); - method = applyAdditionalHeaders(new HttpPost(url.build())); + var uriBuilder = getTxnActionURIBuilder(Action.PING); + var method = applyAdditionalHeaders(new HttpPost(uriBuilder.build())); + String text = EntityUtils.toString(executeOK(method).getEntity()); long timeout = Long.parseLong(text); // clients should ping before server timeouts transaction @@ -824,16 +849,16 @@ void executeTransactionPing() { pingTransaction(); // reschedule } - /** - * Appends the action as a parameter to the supplied url - * - * @param url a url on which to append the parameter. it is assumed the url has no parameters. - * @param action the action to add as a parameter - * @return the url parametrized with the supplied action - */ - private String appendAction(String url, Action action) { - return url + "?" + Protocol.ACTION_PARAM_NAME + "=" + action.toString(); - } +// /** +// * Appends the action as a parameter to the supplied url +// * +// * @param url a url on which to append the parameter. it is assumed the url has no parameters. +// * @param action the action to add as a parameter +// * @return the url parametrized with the supplied action +// */ +// private String appendAction(String url, Action action) { +// return url + "?" + Protocol.ACTION_PARAM_NAME + "=" + action.toString(); +// } /** * Sends a transaction list as serialized XML to the server. @@ -938,9 +963,16 @@ protected HttpUriRequest getQueryMethod(QueryLanguage ql, String query, String b RequestBuilder builder; String transactionURL = getTransactionURL(); if (transactionURL != null) { - builder = RequestBuilder.put(transactionURL); + URI requestURI; + try { + requestURI = getTxnActionURIBuilder(Action.QUERY).build(); + } catch (URISyntaxException | IOException e) { + logger.error("could not create URL for transaction query", e); + throw new RuntimeException(e); + } + + builder = RequestBuilder.put(requestURI); builder.setHeader("Content-Type", Protocol.SPARQL_QUERY_MIME_TYPE + "; charset=utf-8"); - builder.addParameter(Protocol.ACTION_PARAM_NAME, Action.QUERY.toString()); for (NameValuePair nvp : getQueryMethodParameters(ql, null, baseURI, dataset, includeInferred, maxQueryTime, bindings)) { builder.addParameter(nvp); @@ -971,9 +1003,17 @@ protected HttpUriRequest getUpdateMethod(QueryLanguage ql, String update, String RequestBuilder builder; String transactionURL = getTransactionURL(); if (transactionURL != null) { - builder = RequestBuilder.put(transactionURL); + + URI requestURI; + try { + requestURI = getTxnActionURIBuilder(Action.UPDATE).build(); + } catch (URISyntaxException | IOException e) { + logger.error("could not create URL for transaction update", e); + throw new RuntimeException(e); + } + + builder = RequestBuilder.put(requestURI); builder.addHeader("Content-Type", Protocol.SPARQL_UPDATE_MIME_TYPE + "; charset=utf-8"); - builder.addParameter(Protocol.ACTION_PARAM_NAME, Action.UPDATE.toString()); for (NameValuePair nvp : getUpdateMethodParameters(ql, null, baseURI, dataset, includeInferred, maxExecutionTime, bindings)) { builder.addParameter(nvp); @@ -1061,36 +1101,28 @@ protected void upload(HttpEntity reqEntity, String baseURI, boolean overwrite, b boolean useTransaction = transactionURL != null; try { - - String baseLocation = useTransaction ? transactionURL : Protocol.getStatementsLocation(getQueryURL()); - URIBuilder url = new URIBuilder(baseLocation); + URIBuilder uriBuilder = useTransaction ? getTxnActionURIBuilder(action) + : new URIBuilder(Protocol.getStatementsLocation(getQueryURL())); // Set relevant query parameters for (String encodedContext : Protocol.encodeContexts(contexts)) { - url.addParameter(Protocol.CONTEXT_PARAM_NAME, encodedContext); + uriBuilder.addParameter(Protocol.CONTEXT_PARAM_NAME, encodedContext); } if (baseURI != null && baseURI.trim().length() != 0) { String encodedBaseURI = Protocol.encodeValue(SimpleValueFactory.getInstance().createIRI(baseURI)); - url.setParameter(Protocol.BASEURI_PARAM_NAME, encodedBaseURI); + uriBuilder.setParameter(Protocol.BASEURI_PARAM_NAME, encodedBaseURI); } if (preserveNodeIds) { - url.setParameter(Protocol.PRESERVE_BNODE_ID_PARAM_NAME, "true"); - } - - if (useTransaction) { - if (action == null) { - throw new IllegalArgumentException("action can not be null on transaction operation"); - } - url.setParameter(Protocol.ACTION_PARAM_NAME, action.toString()); + uriBuilder.setParameter(Protocol.PRESERVE_BNODE_ID_PARAM_NAME, "true"); } // Select appropriate HTTP method HttpEntityEnclosingRequestBase method = null; try { if (overwrite || useTransaction) { - method = applyAdditionalHeaders(new HttpPut(url.build())); + method = applyAdditionalHeaders(new HttpPut(uriBuilder.build())); } else { - method = applyAdditionalHeaders(new HttpPost(url.build())); + method = applyAdditionalHeaders(new HttpPost(uriBuilder.build())); } // Set payload @@ -1217,4 +1249,9 @@ private T applyAdditionalHeaders(T method) { } return method; } + + private boolean useDeprecatedTxnActions() + throws UnauthorizedException, NumberFormatException, RepositoryException, IOException { + return Integer.parseInt(getServerProtocol()) < 14; + } } diff --git a/core/http/protocol/src/main/java/org/eclipse/rdf4j/http/protocol/Protocol.java b/core/http/protocol/src/main/java/org/eclipse/rdf4j/http/protocol/Protocol.java index 0eb50ddb466..6ead8fee17f 100644 --- a/core/http/protocol/src/main/java/org/eclipse/rdf4j/http/protocol/Protocol.java +++ b/core/http/protocol/src/main/java/org/eclipse/rdf4j/http/protocol/Protocol.java @@ -104,13 +104,15 @@ public enum TIMEOUT { * Protocol version. * * */ - public static final String VERSION = "12"; + public static final String VERSION = "14"; /** * Parameter name for the 'subject' parameter of a statement query. diff --git a/site/content/documentation/reference/rest-api/changelog.md b/site/content/documentation/reference/rest-api/changelog.md new file mode 100644 index 00000000000..6372f9f65a5 --- /dev/null +++ b/site/content/documentation/reference/rest-api/changelog.md @@ -0,0 +1,37 @@ +--- +title: "RDF4J REST API: Changelog" +toc: true +weight: 1 +--- + +[OpenAPI specification](/documentation/reference/rest-api/) + +## Version history + +The RDF4J REST API uses a single integer version numbering scheme. It does not follow semantic versioning. However, the implementations of the API client and server in RDF4J make a conscious effort to stay backward compatible with at least one previous protocol version. + +### 14: since RDF4J 4.3.0 + +- Replaced usage of the `action` parameter on the `/transactions/{txnID}` endpoint with separate endpoints for each available action: `/transactions/{txnID}/add`, `/transactions/{txnID}/query`, and so on. +- `action` parameter for transactions is deprecated + +### 13: since RDF4J 4.0.0 + +- Removed support for the deprecated SYSTEM repository. + +### 12: since RDF4J 3.5.0 + +- Added suport for the `prepare` transaction operation. + +### 11: since RDF4J 3.3.0 + +- Added support for sending general transaction setting parameters. + +### 10: since RDF4J 3.1.0 + +- Added support for retrieving a repository configuration. + +### 9: since RDF4J 3.0.0 + +- Added direct API support for creating a new repository remotely and/or updating an existing repository's configuration. +- SYSTEM repository support is deprecated. diff --git a/site/static/documentation/reference/rest-api/rdf4j-openapi.yaml b/site/static/documentation/reference/rest-api/rdf4j-openapi.yaml index 3bdc164998c..e6c2bdbcccc 100644 --- a/site/static/documentation/reference/rest-api/rdf4j-openapi.yaml +++ b/site/static/documentation/reference/rest-api/rdf4j-openapi.yaml @@ -1,14 +1,16 @@ openapi: "3.0.1" info: title: RDF4J REST API - version: "10" + version: "14" description: | The RDF4J REST API is an HTTP protocol that covers a fully compliant implementation of the [SPARQL 1.1 Protocol W3C Recommendation](https://www.w3.org/TR/sparql11-protocol/). This ensures that RDF4J Server functions as a fully standard-compliant [SPARQL](https://www.w3.org/TR/sparql11-query/) endpoint. The RDF4J REST API additionally supports the [SPARQL 1.1 Graph Store HTTP Protocol W3C Recommendation](https://www.w3.org/TR/sparql11-http-rdf-update/). The RDF4J REST API extends the W3C standards in several aspects, the most important of which is database transaction management. + Version 13 was released as part of RDF4J 4.3.0. See the [REST API Changelog](/documentation/reference/rest-api/changelog) for details. + externalDocs: - url: https://rdf4j.org/documentation/reference/rest-api/ + url: https://rdf4j.org/documentation/reference/rest-api/changelog.md servers: - url: http://localhost:8080/rdf4j-server/ diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/AbstractActionController.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/AbstractActionController.java index 534ee7ee13d..4f0b5872b61 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/AbstractActionController.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/AbstractActionController.java @@ -11,6 +11,7 @@ package org.eclipse.rdf4j.http.server.repository.transaction; import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; + import static org.eclipse.rdf4j.http.protocol.Protocol.CONTEXT_PARAM_NAME; import java.nio.charset.Charset; @@ -91,9 +92,10 @@ protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpSer public void destroy() throws Exception { ActiveTransactionRegistry.INSTANCE.destroyScheduler(); } + /** * Handle the specific action as part of the supplied {@link Transaction} object. - * + * * @param request the request * @param transaction the transaction on which the action is to be executed * @return result of the action (may not be null) @@ -101,7 +103,6 @@ public void destroy() throws Exception { protected abstract ModelAndView handleAction(HttpServletRequest request, HttpServletResponse response, Transaction transaction) throws Exception; - static RDFFormat getRDFFormat(HttpServletRequest request) { return Rio.getParserFormatForMIMEType(request.getContentType()) .orElseThrow(Rio.unsupportedFormat(request.getContentType())); @@ -155,5 +156,4 @@ private UUID getTransactionID(HttpServletRequest request) throws ClientHTTPExcep return txnID; } - } diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/AddController.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/AddController.java index 9897f9deb5e..9067c5547d2 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/AddController.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/AddController.java @@ -4,7 +4,7 @@ * 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 + * http://www.eclipse.org/org/documents/edl-v10.php * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/CommitController.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/CommitController.java index c18e4d58989..dbc30cbff5a 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/CommitController.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/CommitController.java @@ -4,7 +4,7 @@ * 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 + * http://www.eclipse.org/org/documents/edl-v10.php * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/DeleteController.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/DeleteController.java index 6b4449dc129..2bd38caee92 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/DeleteController.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/DeleteController.java @@ -4,7 +4,7 @@ * 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 + * http://www.eclipse.org/org/documents/edl-v10.php * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/ExportController.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/ExportController.java index a5ba7e1de1f..d5d7e44b436 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/ExportController.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/ExportController.java @@ -4,7 +4,7 @@ * 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 + * http://www.eclipse.org/org/documents/edl-v10.php * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/PingController.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/PingController.java index adb938495b1..74a021aea95 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/PingController.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/PingController.java @@ -4,7 +4,7 @@ * 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 + * http://www.eclipse.org/org/documents/edl-v10.php * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/PrepareController.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/PrepareController.java index 796165d07b8..9eabddcc707 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/PrepareController.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/PrepareController.java @@ -4,7 +4,7 @@ * 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 + * http://www.eclipse.org/org/documents/edl-v10.php * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/QueryController.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/QueryController.java index ae52d4e4300..f646ecf267e 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/QueryController.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/QueryController.java @@ -4,7 +4,7 @@ * 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 + * http://www.eclipse.org/org/documents/edl-v10.php * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ @@ -14,6 +14,7 @@ import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR; import static javax.servlet.http.HttpServletResponse.SC_SERVICE_UNAVAILABLE; + import static org.eclipse.rdf4j.http.protocol.Protocol.BINDING_PREFIX; import static org.eclipse.rdf4j.http.protocol.Protocol.DEFAULT_GRAPH_PARAM_NAME; import static org.eclipse.rdf4j.http.protocol.Protocol.INCLUDE_INFERRED_PARAM_NAME; diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/RollbackController.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/RollbackController.java index d1b7a0a061a..be93ad297bc 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/RollbackController.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/RollbackController.java @@ -4,7 +4,7 @@ * 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 + * http://www.eclipse.org/org/documents/edl-v10.php * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/SizeController.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/SizeController.java index 9842c437f80..706f174f604 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/SizeController.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/SizeController.java @@ -4,7 +4,7 @@ * 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 + * http://www.eclipse.org/org/documents/edl-v10.php * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/TransactionController.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/TransactionController.java index f6b2a72d0f3..53e69115888 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/TransactionController.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/TransactionController.java @@ -31,7 +31,7 @@ /** * Handles requests for transaction rollbacks on a repository, and provides backward-compatible (deprecated) support for * all other transaction operations. - * + * * @author Jeen Broekstra */ public class TransactionController extends AbstractController implements DisposableBean { diff --git a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/UpdateController.java b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/UpdateController.java index f78f5e7c4d6..75a0b192b71 100644 --- a/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/UpdateController.java +++ b/tools/server-spring/src/main/java/org/eclipse/rdf4j/http/server/repository/transaction/UpdateController.java @@ -4,7 +4,7 @@ * 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 + * http://www.eclipse.org/org/documents/edl-v10.php * * SPDX-License-Identifier: BSD-3-Clause *******************************************************************************/ @@ -13,6 +13,7 @@ import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; import static javax.servlet.http.HttpServletResponse.SC_NOT_ACCEPTABLE; + import static org.eclipse.rdf4j.http.protocol.Protocol.BINDING_PREFIX; import static org.eclipse.rdf4j.http.protocol.Protocol.INCLUDE_INFERRED_PARAM_NAME; import static org.eclipse.rdf4j.http.protocol.Protocol.INSERT_GRAPH_PARAM_NAME;