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;