diff --git a/pom.xml b/pom.xml index df7f4bd5b54..5d4e11f874a 100644 --- a/pom.xml +++ b/pom.xml @@ -391,11 +391,6 @@ commons-cli 1.4 - - commons-fileupload - commons-fileupload - 1.3.3 - commons-io commons-io diff --git a/tools/workbench/pom.xml b/tools/workbench/pom.xml index 23b22810374..e7e05778232 100644 --- a/tools/workbench/pom.xml +++ b/tools/workbench/pom.xml @@ -40,11 +40,6 @@ javax.servlet-api provided - - - commons-fileupload - commons-fileupload - org.slf4j slf4j-api diff --git a/tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/AddServlet.java b/tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/AddServlet.java index baf112da637..31af152a078 100644 --- a/tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/AddServlet.java +++ b/tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/commands/AddServlet.java @@ -18,7 +18,6 @@ import javax.servlet.http.HttpServletResponse; -import org.apache.commons.fileupload.FileUploadException; import org.eclipse.rdf4j.model.Resource; import org.eclipse.rdf4j.query.QueryResultHandlerException; import org.eclipse.rdf4j.repository.RepositoryConnection; @@ -41,7 +40,7 @@ public class AddServlet extends TransformationServlet { @Override protected void doPost(WorkbenchRequest req, HttpServletResponse resp, String xslPath) - throws IOException, RepositoryException, FileUploadException, QueryResultHandlerException { + throws IOException, RepositoryException, QueryResultHandlerException { try { String baseURI = req.getParameter("baseURI"); String contentType = req.getParameter("Content-Type"); diff --git a/tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/proxy/WorkbenchGateway.java b/tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/proxy/WorkbenchGateway.java index 6df2f9f7e21..e62aa89c2e7 100644 --- a/tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/proxy/WorkbenchGateway.java +++ b/tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/proxy/WorkbenchGateway.java @@ -19,6 +19,7 @@ import javax.servlet.ServletConfig; import javax.servlet.ServletException; +import javax.servlet.annotation.MultipartConfig; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -31,6 +32,7 @@ /** * All requests are serviced by this Servlet, though it usually delegates to other Servlets. */ +@MultipartConfig public class WorkbenchGateway extends AbstractServlet { private static final String DEFAULT_SERVER = "default-server"; diff --git a/tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/util/WorkbenchRequest.java b/tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/util/WorkbenchRequest.java index 2d7c4d62bb9..060370aac05 100644 --- a/tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/util/WorkbenchRequest.java +++ b/tools/workbench/src/main/java/org/eclipse/rdf4j/workbench/util/WorkbenchRequest.java @@ -21,16 +21,15 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.HashMap; +import java.util.Locale; import java.util.Map; +import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; +import javax.servlet.http.Part; -import org.apache.commons.fileupload.FileItemIterator; -import org.apache.commons.fileupload.FileItemStream; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.eclipse.rdf4j.model.IRI; import org.eclipse.rdf4j.model.Resource; import org.eclipse.rdf4j.model.Value; @@ -40,7 +39,7 @@ import org.eclipse.rdf4j.workbench.exceptions.BadRequestException; /** - * Request wrapper used by {@link org.eclipse.rdf4j.workbench.base TransformationServlet}. + * Request wrapper used by {@link org.eclipse.rdf4j.workbench.base.TransformationServlet}. */ public class WorkbenchRequest extends HttpServletRequestWrapper { @@ -62,22 +61,36 @@ public class WorkbenchRequest extends HttpServletRequestWrapper { * @param defaults application default parameter values * @throws RepositoryException if there is an issue retrieving the parameter map * @throws IOException if there is an issue retrieving the parameter map - * @throws FileUploadException if there is an issue retrieving the parameter map + * @throws ServletException if there is an issue retrieving the parameter map */ public WorkbenchRequest(Repository repository, HttpServletRequest request, Map defaults) - throws RepositoryException, IOException, FileUploadException { + throws RepositoryException, IOException, ServletException { super(request); this.defaults = defaults; this.decoder = new ValueDecoder(repository, (repository == null) ? SimpleValueFactory.getInstance() : repository.getValueFactory()); String url = request.getRequestURL().toString(); - if (ServletFileUpload.isMultipartContent(this)) { + if (isMultipartContent(this)) { parameters = getMultipartParameterMap(); } else if (request.getQueryString() == null && url.contains(";")) { parameters = getUrlParameterMap(url); } } + private static boolean isMultipartContent(HttpServletRequest request) { + if (!"POST".equalsIgnoreCase(request.getMethod())) { + return false; + } + String contentType = request.getContentType(); + if (contentType == null) { + return false; + } + if (contentType.toLowerCase(Locale.ENGLISH).startsWith("multipart/")) { + return true; + } + return false; + } + /** * Get the content of any uploaded file that is part of this request. * @@ -265,26 +278,21 @@ public Value getValue(String name) throws BadRequestException, RepositoryExcepti return decoder.decodeValue(getParameter(name)); } - private String firstLine(FileItemStream item) throws IOException { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(item.openStream()))) { - return reader.readLine(); - } - } - private Map getMultipartParameterMap() - throws RepositoryException, IOException, FileUploadException { + throws RepositoryException, IOException, ServletException { Map parameters = new HashMap<>(); - ServletFileUpload upload = new ServletFileUpload(); - FileItemIterator iter = upload.getItemIterator(this); - while (iter.hasNext()) { - FileItemStream item = iter.next(); - String name = item.getFieldName(); + for (Part part : getParts()) { + String name = part.getName(); if ("content".equals(name)) { - content = item.openStream(); - contentFileName = item.getName(); + content = part.getInputStream(); + contentFileName = part.getSubmittedFileName(); break; } else { - parameters.put(name, firstLine(item)); + String firstLine; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(part.getInputStream()))) { + firstLine = reader.readLine(); + } + parameters.put(name, firstLine); } } return parameters;