[CONF] Confluence Changes in the last 24 hours
- This is a daily summary of all recent changes in Confluence. - Updated Spaces: - Apache Directory Community & Resources (directory) http://cwiki.apache.org/confluence/display/directory | |-Pages Added or Edited in This Space |-- Apache Directory Studio, a new Open Source LDAP & Directory Tooling Platform was last edited by pamarcelot (02:17 AM). | http://cwiki.apache.org/confluence/pages/viewpage.action?pageId=62859 Apache Geronimo SandBox (GMOxSBOX) http://cwiki.apache.org/confluence/display/GMOxSBOX | |-Pages Added or Edited in This Space |-- Java EE 5.0 App Development on Geronimo simplified using Eclipse was created by shivakumar (09:57 AM). | http://cwiki.apache.org/confluence/display/GMOxSBOX/Java+EE+5.0+App+Development+on+Geronimo+simplified+using+Eclipse Apache Directory Server v1.5 (DIRxSRVx11) http://cwiki.apache.org/confluence/display/DIRxSRVx11 | |-Pages Added or Edited in This Space |-- Triggers was created by ersiner (08:20 AM). | http://cwiki.apache.org/confluence/display/DIRxSRVx11/Triggers Apache Geronimo Project Management (GMOxPMGT) http://cwiki.apache.org/confluence/display/GMOxPMGT | |-Pages Added or Edited in This Space |-- Release Eclipse Plugin Process was last edited by mcconne (07:15 AM). | http://cwiki.apache.org/confluence/display/GMOxPMGT/Release+Eclipse+Plugin+Process Apache Struts 2 Documentation (WW) http://cwiki.apache.org/confluence/display/WW | |-Pages Added or Edited in This Space |-- Creating and Signing a Struts 2.1.x Distribution was last edited by wsmoak (06:55 AM). | http://cwiki.apache.org/confluence/display/WW/Creating+and+Signing+a+Struts+2.1.x+Distribution | |-New Comments in This Space |-- http://cwiki.apache.org/confluence/display/WW/FAQs (1) |-- http://cwiki.apache.org/confluence/display/WW/Selecting+Results (1) Apache Wicket Website (WICKETxSITE) http://cwiki.apache.org/confluence/display/WICKETxSITE | |-Pages Added or Edited in This Space |-- QuickStart was last edited by gwynevans (06:29 AM). | http://cwiki.apache.org/confluence/display/WICKETxSITE/QuickStart |-- Index was last edited by gwynevans (01:14 AM). | http://cwiki.apache.org/confluence/display/WICKETxSITE/Index |-- Navigation was last edited by gwynevans (01:12 AM). | http://cwiki.apache.org/confluence/display/WICKETxSITE/Navigation Apache Directory Website (DIRxSITE) http://cwiki.apache.org/confluence/display/DIRxSITE | |-Pages Added or Edited in This Space |-- Apache Directory Studio 1.0 released was created by ccustine (06:10 PM). | http://cwiki.apache.org/confluence/display/DIRxSITE/2007/09/07/Apache+Directory+Studio+1.0+released Apache Tuscany (TUSCANY) http://cwiki.apache.org/confluence/display/TUSCANY | |-Pages Added or Edited in This Space |-- Get Involved Section was last edited by haleh (03:23 PM). | http://cwiki.apache.org/confluence/display/TUSCANY/Get+Involved+Section |-- Tuscany SCA Java - FAQ was last edited by slaws (08:29 AM). | http://cwiki.apache.org/confluence/display/TUSCANY/Tuscany+SCA+Java+-+FAQ Apache Wicket (WICKET) http://cwiki.apache.org/confluence/display/WICKET | |-Pages Added or Edited in This Space |-- How to redirect to an external non-Wicket page was last edited by almaw (08:44 AM). | http://cwiki.apache.org/confluence/display/WICKET/How+to+redirect+to+an+external+non-Wicket+page |-- Wicket Source Code Style was created by gwynevans (03:19 AM). | http://cwiki.apache.org/confluence/display/WICKET/Wicket+Source+Code+Style Apache Felix (FELIX) http://cwiki.apache.org/confluence/display/FELIX | |-Pages Added or Edited in This Space |-- Board Report (09-2007) was created by [EMAIL PROTECTED] (12:44 PM). | http://cwiki.apache.org/confluence/display/FELIX/Board+Report+%2809-2007%29 Apache Geronimo Documentation (geronimo) http://cwiki.apache.org/confluence/display/geronimo | |-Pages Added or Edited in This Space |-- Pluggable Administration Console was last edited by hcunico (02:48 PM). | http://cwiki.apache.org/confluence/display/geronimo/Pluggable+Administration+Console |-- Presentations was last edited by hcunico (10:50 AM). | http://cwiki.apache.org/confluence/display/geronimo/Presentations |-- Java EE 5.0 App Development on Geronimo simplified using Eclipse was created by hcunico (10:23 AM). | http://cwiki.apache.org/confluence/display/geronimo/Java+EE+5.0+App+Development+on+Geronimo+simplified+using+Eclipse |-- Index was last edited by hcunico (10:14 AM). | http://cwiki.apache.org/confluence/display/geronimo/Index Apache Geronimo (GMOxSITE) http://cwiki.apache.org/confluence/display/GMOxSITE | |-Pages Added or Edited in This Space |-- MEJB Security Alert was created by hcunico (08:12 AM). | http://cwiki.apache.org/confluence/display/GMOxSITE/2007/09/07
svn commit: r573790 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/dispatcher/mapper/ main/resources/org/apache/struts2/ test/java/org/apache/struts2/dispatcher/ test/java/org/apach
Author: mrdon Date: Sat Sep 8 00:07:48 2007 New Revision: 573790 URL: http://svn.apache.org/viewvc?rev=573790&view=rev Log: Make it possible to access actions without an extension WW-2163 Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java?rev=573790&r1=573789&r2=573790&view=diff == --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java Sat Sep 8 00:07:48 2007 @@ -22,11 +22,14 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Scanner; import java.util.Set; +import java.util.StringTokenizer; import javax.servlet.http.HttpServletRequest; @@ -178,7 +181,7 @@ protected PrefixTrie prefixTrie = null; -protected List extensions = new ArrayList() {{ add("action");}}; +protected List extensions = new ArrayList() {{ add("action"); add("");}}; protected Container container; @@ -270,7 +273,12 @@ @Inject(StrutsConstants.STRUTS_ACTION_EXTENSION) public void setExtensions(String extensions) { if (!"".equals(extensions)) { -this.extensions = Arrays.asList(extensions.split(",")); +List list = new ArrayList(); +Scanner scanner = new Scanner(extensions).useDelimiter(","); +while (scanner.hasNext()) { +list.add(scanner.next()); +} +this.extensions = Collections.unmodifiableList(list); } else { this.extensions = null; } @@ -414,13 +422,18 @@ if (extensions == null) { return name; } -Iterator it = extensions.iterator(); -while (it.hasNext()) { -String extension = "." + (String) it.next(); -if (name.endsWith(extension)) { -name = name.substring(0, name.length() - extension.length()); -return name; -} +for (String ext : extensions) { +if ("".equals(ext)) { +if (name.indexOf('.') == -1) { +return name; +} +} else { +String extension = "." + ext; +if (name.endsWith(extension)) { +name = name.substring(0, name.length() - extension.length()); +return name; +} +} } return null; } Modified: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties?rev=573790&r1=573789&r2=573790&view=diff == --- struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties (original) +++ struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties Sat Sep 8 00:07:48 2007 @@ -73,7 +73,9 @@ ### Used by the DefaultActionMapper ### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do -struts.action.extension=action +### The blank extension allows you to match directory listings as well as pure action names +### without interfering with static resources. +struts.action.extension=action,, ### Used by FilterDispatcher ### If true then Struts serves static content from inside its jar. Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java?rev=573790&r1=573789&r2=573790&view=diff == --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/FilterDispatcherTest.java Sat Sep 8 00:07:48 2007 @@ -132,8 +132,8 @@ return _dispatcher; } }; -
svn commit: r573805 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/dispatcher/ main/java/org/apache/struts2/dispatcher/mapper/ test/java/org/apache/struts2/dispatcher/mapper/
Author: mrdon Date: Sat Sep 8 02:16:43 2007 New Revision: 573805 URL: http://svn.apache.org/viewvc?rev=573805&view=rev Log: Fix handling of empty extension during url creation WW-2163 Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java?rev=573805&r1=573804&r2=573805&view=diff == --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java Sat Sep 8 02:16:43 2007 @@ -137,6 +137,13 @@ public void setLocation(String location) { this.location = location; } + +/** + * Gets the location it was created with, mainly for testing + */ +public String getLocation() { +return location; +} /** * Returns the last parsed and encoded location value Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java?rev=573805&r1=573804&r2=573805&view=diff == --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java Sat Sep 8 02:16:43 2007 @@ -228,7 +228,7 @@ ServletRedirectResult redirect = new ServletRedirectResult(); container.inject(redirect); String extension = getDefaultExtension(); -if (extension != null) { +if (extension != null && extension.length() > 0) { location += "." + extension; } redirect.setLocation(location); @@ -499,8 +499,11 @@ String extension = getDefaultExtension(); if (extension != null) { -if (uri.indexOf('.' + extension) == -1) { -uri.append(".").append(extension); + +if (extension.length() == 0 || (extension.length() > 0 && uri.indexOf('.' + extension) == -1)) { +if (extension.length() > 0) { +uri.append(".").append(extension); +} if (params.length() > 0) { uri.append(params); } Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java?rev=573805&r1=573804&r2=573805&view=diff == --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java Sat Sep 8 02:16:43 2007 @@ -27,6 +27,7 @@ import org.apache.struts2.StrutsTestCase; import org.apache.struts2.ServletActionContext; import org.apache.struts2.dispatcher.ServletRedirectResult; +import org.apache.struts2.dispatcher.StrutsResultSupport; import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest; import org.apache.struts2.views.jsp.StrutsMockHttpServletResponse; @@ -376,9 +377,34 @@ ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager); -Result result = actionMapping.getResult(); +StrutsResultSupport result = (StrutsResultSupport) actionMapping.getResult(); assertNotNull(result); assertTrue(result instanceof ServletRedirectResult); + +assertEquals("myAction.action", result.getLocation()); + +// TODO: need to test location but there's noaccess to the property/method, unless we use reflection +} + +public void testRedirectActionPrefixWithEmptyExtension() throws Exception { +Map parameterMap = new HashMap(); +parameterMap.put(DefaultActionMapper.REDIRECT_ACTION_PREFIX + "myAction", ""); + +StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest
svn commit: r573816 - in /struts/struts2/trunk/plugins/codebehind/src: main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java test/java/org/apache/struts2/codebehind/CodebehindUnknownHa
Author: mrdon Date: Sat Sep 8 03:56:10 2007 New Revision: 573816 URL: http://svn.apache.org/viewvc?rev=573816&view=rev Log: Adding ability to load templates from classpath, in addition to web context WW-2146 Modified: struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java Modified: struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java?rev=573816&r1=573815&r2=573816&view=diff == --- struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java (original) +++ struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java Sat Sep 8 03:56:10 2007 @@ -21,6 +21,7 @@ package org.apache.struts2.codebehind; import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -32,6 +33,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.struts2.util.ClassLoaderUtils; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; @@ -107,7 +109,7 @@ } String path = string(pathPrefix, actionName, "." , ext); try { -if (servletContext.getResource(path) != null) { +if (locateTemplate(path) != null) { actionConfig = buildActionConfig(path, namespace, actionName, resultsByExtension.get(ext)); break; } @@ -148,7 +150,7 @@ } String path = string(pathPrefix, actionName, "-", resultCode, "." , ext); try { -if (servletContext.getResource(path) != null) { +if (locateTemplate(path) != null) { result = buildResult(path, resultCode, resultsByExtension.get(ext), actionContext); break; } @@ -158,7 +160,7 @@ path = string(pathPrefix, actionName, "." , ext); try { -if (servletContext.getResource(path) != null) { +if (locateTemplate(path) != null) { result = buildResult(path, resultCode, resultsByExtension.get(ext), actionContext); break; } @@ -209,6 +211,22 @@ } return prefix + ns; } + +URL locateTemplate(String path) throws MalformedURLException { +URL template = servletContext.getResource(path); +if (template != null) { +if (LOG.isDebugEnabled()) { +LOG.debug("Loaded template '" + path + "' from servlet context."); +} +} else { +template = ClassLoaderUtils.getResource(path, getClass()); +if (template != null && LOG.isDebugEnabled()) { +LOG.debug("Loaded template '" + path + "' from class path."); +} +} +return template; +} + /** * Not used Modified: struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java?rev=573816&r1=573815&r2=573816&view=diff == --- struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java (original) +++ struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java Sat Sep 8 03:56:10 2007 @@ -20,6 +20,8 @@ */ package org.apache.struts2.codebehind; +import java.net.MalformedURLException; +import java.net.URL; import java.util.HashMap; import javax.servlet.ServletContext; @@ -28,6 +30,7 @@ import org.apache.struts2.config.NullResult; import org.apache.struts2.dispatcher.ServletDispatcherResult; +import com.mockobjects.dynamic.C; import com.mockobjects.dynamic.Mock; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; @@ -71,6 +74,22 @@ assertEquals("/foo/", handler.determinePath("/", "/foo")); assertEquals("/foo/", handler.determinePath("/", "/foo/")); assertEquals("/foo/", handler.determinePath("/", "foo")); +} + +public void testLocateTemplate() throws MalformedURLException { +URL