Author: lukaszlenart Date: Mon Feb 18 19:53:42 2013 New Revision: 1447453 URL: http://svn.apache.org/r1447453 Log: WW-3986 Reverts partially changes introduced with WW-3363 to use @Inject MultiPartRequest instead of name of MultiPartRequest
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?rev=1447453&r1=1447452&r2=1447453&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java Mon Feb 18 19:53:42 2013 @@ -139,9 +139,9 @@ public class Dispatcher { private String multipartSaveDir; /** - * Stores reference to instance of {@link MultiPartRequest} implementation defined by {@link StrutsConstants#STRUTS_MULTIPART_PARSER} + * Stores the value of StrutsConstants.STRUTS_MULTIPART_HANDLER setting */ - private MultiPartRequest multipartHandler; + private String multipartHandlerName; /** * Provide list of default configuration files. @@ -252,9 +252,9 @@ public class Dispatcher { multipartSaveDir = val; } - @Inject - public void setMultipartHandler(MultiPartRequest multiPartRequest) { - this.multipartHandler = multiPartRequest; + @Inject(StrutsConstants.STRUTS_MULTIPART_PARSER) + public void setMultipartHandler(String val) { + multipartHandlerName = val; } @Inject @@ -774,8 +774,9 @@ public class Dispatcher { String content_type = request.getContentType(); if (content_type != null && content_type.contains("multipart/form-data")) { + MultiPartRequest mpr = getMultiPartRequest(); LocaleProvider provider = getContainer().getInstance(LocaleProvider.class); - request = new MultiPartRequestWrapper(multipartHandler, request, getSaveDir(servletContext), provider); + request = new MultiPartRequestWrapper(mpr, request, getSaveDir(servletContext), provider); } else { request = new StrutsRequestWrapper(request); } @@ -784,6 +785,27 @@ public class Dispatcher { } /** + * On each request it must return a new instance as implementation could be not thread safe + * and thus ensure of resource clean up + * + * @return + */ + protected MultiPartRequest getMultiPartRequest() { + MultiPartRequest mpr = null; + //check for alternate implementations of MultiPartRequest + Set<String> multiNames = getContainer().getInstanceNames(MultiPartRequest.class); + for (String multiName : multiNames) { + if (multiName.equals(multipartHandlerName)) { + mpr = getContainer().getInstance(MultiPartRequest.class, multiName); + } + } + if (mpr == null ) { + mpr = getContainer().getInstance(MultiPartRequest.class); + } + return mpr; + } + + /** * Removes all the files created by MultiPartRequestWrapper. * * @param request the HttpServletRequest object.