svn commit: r931828 - /struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreemarkerDecoratorServlet.java
Author: lukaszlenart Date: Thu Apr 8 08:18:25 2010 New Revision: 931828 URL: http://svn.apache.org/viewvc?rev=931828&view=rev Log: Improved log message Modified: struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreemarkerDecoratorServlet.java Modified: struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreemarkerDecoratorServlet.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreemarkerDecoratorServlet.java?rev=931828&r1=931827&r2=931828&view=diff == --- struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreemarkerDecoratorServlet.java (original) +++ struts/struts2/trunk/plugins/sitemesh/src/main/java/org/apache/struts2/sitemesh/FreemarkerDecoratorServlet.java Thu Apr 8 08:18:25 2010 @@ -25,9 +25,12 @@ import com.opensymphony.module.sitemesh. import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.util.logging.LoggerFactory; import freemarker.core.InvalidReferenceException; -import freemarker.ext.jsp.TaglibFactory; -import freemarker.ext.servlet.*; -import freemarker.template.*; +import freemarker.template.Configuration; +import freemarker.template.ObjectWrapper; +import freemarker.template.SimpleHash; +import freemarker.template.Template; +import freemarker.template.TemplateException; +import freemarker.template.TemplateModel; import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsStatics; import org.apache.struts2.dispatcher.Dispatcher; @@ -40,14 +43,10 @@ import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; import java.io.FileNotFoundException; import java.io.IOException; import java.io.StringWriter; -import java.text.SimpleDateFormat; -import java.util.Calendar; import java.util.Enumeration; -import java.util.GregorianCalendar; import java.util.Locale; /** @@ -195,7 +194,7 @@ public class FreemarkerDecoratorServlet StringBuilder msgBuf = new StringBuilder("Error applying freemarker template to\n request: "); msgBuf.append(req.getRequestURL()); -if (req.getQueryString() == null) msgBuf.append("?").append(req.getQueryString()); +if (req.getQueryString() != null) msgBuf.append("?").append(req.getQueryString()); msgBuf.append(" with resultCode: ").append(resultCode).append(".\n\n").append(x.getMessage()); String msg = msgBuf.toString(); LOG.error(msg, x);
svn commit: r931829 - /struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
Author: lukaszlenart Date: Thu Apr 8 08:21:00 2010 New Revision: 931829 URL: http://svn.apache.org/viewvc?rev=931829&view=rev Log: Improved log message 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=931829&r1=931828&r2=931829&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 Thu Apr 8 08:21:00 2010 @@ -21,39 +21,6 @@ package org.apache.struts2.dispatcher; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.CopyOnWriteArrayList; - -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.StrutsConstants; -import org.apache.struts2.StrutsStatics; -import org.apache.struts2.StrutsException; -import org.apache.struts2.config.BeanSelectionProvider; -import org.apache.struts2.config.DefaultPropertiesProvider; -import org.apache.struts2.config.LegacyPropertiesConfigurationProvider; -import org.apache.struts2.config.StrutsXmlConfigurationProvider; -import org.apache.struts2.dispatcher.mapper.ActionMapping; -import org.apache.struts2.dispatcher.multipart.MultiPartRequest; -import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper; -import org.apache.struts2.util.AttributeMap; -import org.apache.struts2.util.ClassLoaderUtils; -import org.apache.struts2.util.ObjectFactoryDestroyable; -import org.apache.struts2.views.freemarker.FreemarkerManager; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.ActionProxyFactory; @@ -81,8 +48,38 @@ import com.opensymphony.xwork2.util.loca import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; import com.opensymphony.xwork2.util.profiling.UtilTimerStack; - import freemarker.template.Template; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.StrutsConstants; +import org.apache.struts2.StrutsException; +import org.apache.struts2.StrutsStatics; +import org.apache.struts2.config.BeanSelectionProvider; +import org.apache.struts2.config.DefaultPropertiesProvider; +import org.apache.struts2.config.LegacyPropertiesConfigurationProvider; +import org.apache.struts2.config.StrutsXmlConfigurationProvider; +import org.apache.struts2.dispatcher.mapper.ActionMapping; +import org.apache.struts2.dispatcher.multipart.MultiPartRequest; +import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper; +import org.apache.struts2.util.AttributeMap; +import org.apache.struts2.util.ClassLoaderUtils; +import org.apache.struts2.util.ObjectFactoryDestroyable; +import org.apache.struts2.views.freemarker.FreemarkerManager; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CopyOnWriteArrayList; /** * A utility class the actual dispatcher delegates most of its tasks to. Each instance @@ -495,8 +492,12 @@ public class Dispatcher { } catch (ConfigurationException e) { // WW-2874 Only log error if in devMode if(devMode) { - LOG.error("Could not find action or result", e); - } +String reqStr = request.getRequestURI(); +if (request.getQueryString() != null) { +reqStr = reqStr + "?" + request.getQueryString(); +} +LOG.error("Could not find action or result\n" + reqStr, e); +} else { LOG.warn("Could not find action or result", e); }
svn commit: r931994 - /struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/validation/JSONValidationInterceptor.java
Author: lukaszlenart Date: Thu Apr 8 16:33:14 2010 New Revision: 931994 URL: http://svn.apache.org/viewvc?rev=931994&view=rev Log: Resolved WW-3237 - added special parameter to disable setting up character encoding on response - especialy needed in portlet environment Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/validation/JSONValidationInterceptor.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/validation/JSONValidationInterceptor.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/validation/JSONValidationInterceptor.java?rev=931994&r1=931993&r2=931994&view=diff == --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/validation/JSONValidationInterceptor.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/validation/JSONValidationInterceptor.java Thu Apr 8 16:33:14 2010 @@ -21,18 +21,6 @@ package org.apache.struts2.interceptor.validation; -import java.text.CharacterIterator; -import java.text.StringCharacterIterator; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.struts2.ServletActionContext; -import org.apache.commons.lang.xwork.StringEscapeUtils; - import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ModelDriven; @@ -40,6 +28,15 @@ import com.opensymphony.xwork2.Validatio import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; +import org.apache.commons.lang.xwork.StringEscapeUtils; +import org.apache.struts2.ServletActionContext; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Collection; +import java.util.List; +import java.util.Map; /** * Serializes validation and action errors into JSON. This interceptor does not @@ -64,14 +61,22 @@ import com.opensymphony.xwork2.util.logg * If the request has a parameter 'struts.validateOnly' execution will return after * validation (action won't be executed). * - * A request parameter named 'enableJSONValidation' must be set to 'true' to + * A request parameter named 'struts.enableJSONValidation' must be set to 'true' to * use this interceptor + * + * If the request has a parameter 'struts.JSONValidation.set.encoding' set to true + * the character encoding will NOT be set on the response - is needed in portlet environment + * - for more details see issue WW-3237 */ public class JSONValidationInterceptor extends MethodFilterInterceptor { + private static final Logger LOG = LoggerFactory.getLogger(JSONValidationInterceptor.class); private static final String VALIDATE_ONLY_PARAM = "struts.validateOnly"; private static final String VALIDATE_JSON_PARAM = "struts.enableJSONValidation"; +private static final String NO_ENCODING_SET_PARAM = "struts.JSONValidation.no.encoding"; + +private static final String DEFAULT_ENCODING = "UTF-8"; private int validationFailedStatus = -1; @@ -89,26 +94,18 @@ public class JSONValidationInterceptor e HttpServletRequest request = ServletActionContext.getRequest(); Object action = invocation.getAction(); -String jsonEnabled = request.getParameter(VALIDATE_JSON_PARAM); -if (jsonEnabled != null && "true".equals(jsonEnabled)) { +if (isJsonEnabled(request)) { if (action instanceof ValidationAware) { // generate json ValidationAware validationAware = (ValidationAware) action; if (validationAware.hasErrors()) { -if (validationFailedStatus >= 0) -response.setStatus(validationFailedStatus); -response.setCharacterEncoding("UTF-8"); -response.getWriter().print(buildResponse(validationAware)); -response.setContentType("application/json"); -return Action.NONE; +return generateJSON(request, response, validationAware); } } - -String validateOnly = request.getParameter(VALIDATE_ONLY_PARAM); -if (validateOnly != null && "true".equals(validateOnly)) { +if (isValidateOnly(request)) { //there were no errors -response.setCharacterEncoding("UTF-8"); +setupEncoding(response, request); response.getWriter().print("/* {} */"); response.setContentType("application/json"); return Ac
svn commit: r932008 - /struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java
Author: lukaszlenart Date: Thu Apr 8 16:59:51 2010 New Revision: 932008 URL: http://svn.apache.org/viewvc?rev=932008&view=rev Log: Removed unneeded statics Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java?rev=932008&r1=932007&r2=932008&view=diff == --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java Thu Apr 8 16:59:51 2010 @@ -21,14 +21,6 @@ package org.apache.struts2.interceptor; -import java.io.File; -import java.util.*; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.struts2.ServletActionContext; -import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper; - import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; @@ -38,6 +30,19 @@ import com.opensymphony.xwork2.util.Loca import com.opensymphony.xwork2.util.TextParseUtil; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; +import org.apache.struts2.ServletActionContext; +import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper; + +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; /** * @@ -383,7 +388,7 @@ public class FileUploadInterceptor exten * @param filename- filename to check. * @return true if the filename has an allowed extension, false otherwise. */ -private static boolean hasAllowedExtension(Collection extensionCollection, String filename) { +private boolean hasAllowedExtension(Collection extensionCollection, String filename) { if (filename == null) { return false; } @@ -403,11 +408,11 @@ public class FileUploadInterceptor exten * @param item - Item to search for. * @return true if itemCollection contains the item, false otherwise. */ -private static boolean containsItem(Collection itemCollection, String item) { +private boolean containsItem(Collection itemCollection, String item) { return itemCollection.contains(item.toLowerCase()); } -private static boolean isNonEmpty(Object[] objArray) { +private boolean isNonEmpty(Object[] objArray) { boolean result = false; for (int index = 0; index < objArray.length && !result; index++) { if (objArray[index] != null) {
svn commit: r932009 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java test/java/org/apache/struts2/interceptor/FileUploadInterceptorTe
Author: lukaszlenart Date: Thu Apr 8 17:01:16 2010 New Revision: 932009 URL: http://svn.apache.org/viewvc?rev=932009&view=rev Log: Huge parse method refactoring and generifying Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java?rev=932009&r1=932008&r2=932009&view=diff == --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java Thu Apr 8 17:01:16 2010 @@ -21,9 +21,22 @@ package org.apache.struts2.dispatcher.multipart; +import com.opensymphony.xwork2.inject.Inject; +import com.opensymphony.xwork2.util.logging.Logger; +import com.opensymphony.xwork2.util.logging.LoggerFactory; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileUploadException; +import org.apache.commons.fileupload.RequestContext; +import org.apache.commons.fileupload.disk.DiskFileItem; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.struts2.StrutsConstants; + +import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; @@ -31,20 +44,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.RequestContext; -import org.apache.commons.fileupload.disk.DiskFileItem; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.apache.struts2.StrutsConstants; - -import com.opensymphony.xwork2.inject.Inject; -import com.opensymphony.xwork2.util.logging.Logger; -import com.opensymphony.xwork2.util.logging.LoggerFactory; - /** * Multipart form data request adapter for Jakarta Commons Fileupload package. */ @@ -62,7 +61,7 @@ public class JakartaMultiPartRequest imp protected List errors = new ArrayList(); protected long maxSize; - + @Inject(StrutsConstants.STRUTS_MULTIPART_MAXSIZE) public void setMaxSize(String maxSize) { this.maxSize = Long.parseLong(maxSize); @@ -73,72 +72,87 @@ public class JakartaMultiPartRequest imp * multipart classes (see class description). * * @param saveDirthe directory to save off the file - * @param servletRequest the request containing the multipart + * @param request the request containing the multipart * @throws java.io.IOException is thrown if encoding fails. */ -public void parse(HttpServletRequest servletRequest, String saveDir) -throws IOException { -DiskFileItemFactory fac = new DiskFileItemFactory(); -// Make sure that the data is written to file -fac.setSizeThreshold(0); -if (saveDir != null) { -fac.setRepository(new File(saveDir)); +public void parse(HttpServletRequest request, String saveDir) throws IOException { +try { +processUpload(request, saveDir); +} catch (FileUploadException e) { +LOG.warn("Unable to parse request", e); +errors.add(e.getMessage()); } +} -// Parse the request -try { -ServletFileUpload upload = new ServletFileUpload(fac); -upload.setSizeMax(maxSize); +private void processUpload(HttpServletRequest request, String saveDir) throws FileUploadException, UnsupportedEncodingException { +for (FileItem item : parseRequest(request, saveDir)) { +if (LOG.isDebugEnabled()) { +LOG.debug("Found item " + item.getFieldName()); +} +if (item.isFormField()) { +processNormalFormField(item, request.getCharacterEncoding()); +} else { +processFileField(item); +} +} +} -List items = upload.parseRequest(createRequestContext(servletRequest)); +private void processFileField(FileItem item) { +LOG.debug("Item is a file upload"); -for (Object item1 : items) { -
[CONF] Confluence Changes in the last 24 hours
This is a daily summary of all recent changes in Confluence. - Updated Spaces: - Apache ActiveMQ (http://cwiki.apache.org/confluence/display/ACTIVEMQ) Pages - Version 5 Performance Tuning edited by tjsnell (02:02 AM) http://cwiki.apache.org/confluence/display/ACTIVEMQ/Version+5+Performance+Tuning Connection Configuration URI edited by tjsnell (02:00 AM) http://cwiki.apache.org/confluence/display/ACTIVEMQ/Connection+Configuration+URI Apache Camel (http://cwiki.apache.org/confluence/display/CAMEL) Pages - Creating a new Camel Component edited by njiang (03:37 AM) http://cwiki.apache.org/confluence/display/CAMEL/Creating+a+new+Camel+Component Community Development Site (http://cwiki.apache.org/confluence/display/COMDEVxSITE) Pages - GSoC edited by rgardler (10:27 PM) http://cwiki.apache.org/confluence/display/COMDEVxSITE/GSoC Apache Continuum (http://cwiki.apache.org/confluence/display/CONTINUUM) Pages - Continuum on JBoss edited by sfcoy (03:24 PM) http://cwiki.apache.org/confluence/display/CONTINUUM/Continuum+on+JBoss Apache Empire DB (http://cwiki.apache.org/confluence/display/empiredb) Pages - Release Process edited by francisdb (10:42 PM) http://cwiki.apache.org/confluence/display/empiredb/Release+Process MyFaces Extensions Validator (http://cwiki.apache.org/confluence/display/EXTVAL) Pages - Index created by Anonymous (09:14 PM) http://cwiki.apache.org/confluence/display/EXTVAL/Index MyFaces Extensions Validator Released created by gpetracek (10:00 PM) http://cwiki.apache.org/confluence/display/EXTVAL/2010/04/08/MyFaces+Extensions+Validator+Released Apache Geronimo v2.2 (http://cwiki.apache.org/confluence/display/GMOxDOC22) Pages - New features and enhancements edited by chirun...@gmail.com (02:22 AM) http://cwiki.apache.org/confluence/display/GMOxDOC22/New+features+and+enhancements Apache MyFaces (http://cwiki.apache.org/confluence/display/MYFACES) Pages - Index edited by gpetracek (11:46 PM) http://cwiki.apache.org/confluence/display/MYFACES/Index MyFaces Extensions Validator Released created by gpetracek (10:09 PM) http://cwiki.apache.org/confluence/display/MYFACES/2010/04/08/MyFaces+Extensions+Validator+Released Apache Qpid (http://cwiki.apache.org/confluence/display/qpid) Pages - Qpid Java Broker - Guidance for 64Bit VM created by mmccorma (02:03 PM) http://cwiki.apache.org/confluence/display/qpid/Qpid+Java+Broker+-+Guidance+for+64Bit+VM Qpid JMX Management Console Testing Guide edited by ritchiem (01:37 PM) http://cwiki.apache.org/confluence/display/qpid/Qpid+JMX+Management+Console+Testing+Guide Apache Sling (http://cwiki.apache.org/confluence/display/SLING) Pages - Using Scala with Sling edited by mdue...@day.com (02:19 PM) http://cwiki.apache.org/confluence/display/SLING/Using+Scala+with+Sling Apache Tuscany Wiki (http://cwiki.apache.org/confluence/display/TUSCANYWIKI) Pages - Florian Moga - Asynchronous Servlet integration with SCA callbacks edited by moga_florian (03:04 PM) http://cwiki.apache.org/confluence/display/TUSCANYWIKI/Florian+Moga+-+Asynchronous+Servlet+integration+with+SCA+callbacks Apache Wicket (http://cwiki.apache.org/confluence/display/WICKET) Pages - Websites based on Wicket edited by alex.objelean (09:38 PM) http://cwiki.apache.org/confluence/display/WICKET/Websites+based+on+Wicket Wicket's XHTML tags edited by tuukka.mustonen (02:13 PM) http://cwiki.apache.org/confluence/display/WICKET/Wicket%27s+XHTML+tags Change your notification preferences: http://cwiki.apache.org/confluence/users/viewnotifications.action