From d19a2fbd5bf2603c1e644dff7386ed4dba1a9564 Mon Sep 17 00:00:00 2001 From: markt Date: Thu, 3 Dec 2009 15:25:54 +0000 Subject: [PATCH] Add support for the MultipartConfig annotation git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@886814 13f79535-47bb-0310-9956-ffa450edef68 --- java/org/apache/catalina/Wrapper.java | 4 ++-- java/org/apache/catalina/connector/Request.java | 11 +++++++++-- java/org/apache/catalina/core/StandardWrapper.java | 21 ++++++++++++++++----- java/org/apache/catalina/startup/WebXml.java | 13 ++++--------- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/java/org/apache/catalina/Wrapper.java b/java/org/apache/catalina/Wrapper.java index 465924e26..bd684374f 100644 --- a/java/org/apache/catalina/Wrapper.java +++ b/java/org/apache/catalina/Wrapper.java @@ -340,12 +340,12 @@ public interface Wrapper extends Container { * multi-part configuration has been defined, then null will be * returned. */ - public MultipartConfigElement getMultipartConfig(); + public MultipartConfigElement getMultipartConfigElement(); /** * Set the multi-part configuration for the associated servlet. To clear the * multi-part configuration specify null as the new value. */ - public void setMultipartConfig(MultipartConfigElement multipartConfig); + public void setMultipartConfigElement(MultipartConfigElement multipartConfig); } diff --git a/java/org/apache/catalina/connector/Request.java b/java/org/apache/catalina/connector/Request.java index 743655e2b..47f481a2f 100644 --- a/java/org/apache/catalina/connector/Request.java +++ b/java/org/apache/catalina/connector/Request.java @@ -2393,12 +2393,19 @@ public class Request public Collection getParts() throws IOException, IllegalStateException, ServletException { - MultipartConfigElement mce = getWrapper().getMultipartConfig(); + MultipartConfigElement mce = getWrapper().getMultipartConfigElement(); if (mce == null) { return Collections.emptyList(); } - File location = new File(mce.getLocation()); + File location; + String locationStr = mce.getLocation(); + if (locationStr == null || locationStr.length() == 0) { + location = ((File) context.getServletContext().getAttribute( + ServletContext.TEMPDIR)); + } else { + location = new File(locationStr); + } if (!location.isAbsolute() || !location.isDirectory()) { throw new IOException( diff --git a/java/org/apache/catalina/core/StandardWrapper.java b/java/org/apache/catalina/core/StandardWrapper.java index 1ab5b021f..90435d61f 100644 --- a/java/org/apache/catalina/core/StandardWrapper.java +++ b/java/org/apache/catalina/core/StandardWrapper.java @@ -44,6 +44,7 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.SingleThreadModel; import javax.servlet.UnavailableException; +import javax.servlet.annotation.MultipartConfig; import org.apache.catalina.Container; import org.apache.catalina.ContainerServlet; @@ -258,7 +259,7 @@ public class StandardWrapper /** * Multipart config */ - protected MultipartConfigElement multipartConfig = null; + protected MultipartConfigElement multipartConfigElement = null; /** * Static class array used when the SecurityManager is turned on and @@ -1052,6 +1053,15 @@ public class StandardWrapper (sm.getString("standardWrapper.instantiate", actualClass), e); } + if (multipartConfigElement == null) { + MultipartConfig annotation = + servlet.getClass().getAnnotation(MultipartConfig.class); + if (annotation != null) { + multipartConfigElement = + new MultipartConfigElement(annotation); + } + } + // Special handling for ContainerServlet instances if ((servlet instanceof ContainerServlet) && (isContainerProvidedServlet(actualClass) || @@ -1483,12 +1493,13 @@ public class StandardWrapper return classLoadTime; } - public MultipartConfigElement getMultipartConfig() { - return multipartConfig; + public MultipartConfigElement getMultipartConfigElement() { + return multipartConfigElement; } - public void setMultipartConfig(MultipartConfigElement multipartConfig) { - this.multipartConfig = multipartConfig; + public void setMultipartConfigElement( + MultipartConfigElement multipartConfigElement) { + this.multipartConfigElement = multipartConfigElement; } // -------------------------------------------------------- Package Methods diff --git a/java/org/apache/catalina/startup/WebXml.java b/java/org/apache/catalina/startup/WebXml.java index 8ace5ff4e..e59e7ab1d 100644 --- a/java/org/apache/catalina/startup/WebXml.java +++ b/java/org/apache/catalina/startup/WebXml.java @@ -568,23 +568,18 @@ public class WebXml { wrapper.setServletClass(servlet.getServletClass()); MultipartDef multipartdef = servlet.getMultipartDef(); if (multipartdef != null) { - String location = multipartdef.getLocation(); - if (location == null || location.length() == 0) { - location = ((File) context.getServletContext().getAttribute( - ServletContext.TEMPDIR)).getAbsolutePath(); - } if (multipartdef.getMaxFileSize() != null && multipartdef.getMaxRequestSize()!= null && multipartdef.getFileSizeThreshold() != null) { - wrapper.setMultipartConfig(new MultipartConfigElement( - location, + wrapper.setMultipartConfigElement(new MultipartConfigElement( + multipartdef.getLocation(), Long.parseLong(multipartdef.getMaxFileSize()), Long.parseLong(multipartdef.getMaxRequestSize()), Integer.parseInt( multipartdef.getFileSizeThreshold()))); } else { - wrapper.setMultipartConfig(new MultipartConfigElement( - location)); + wrapper.setMultipartConfigElement(new MultipartConfigElement( + multipartdef.getLocation())); } } context.addChild(wrapper); -- 2.11.0