Author: mrdon Date: Tue Jul 29 05:53:18 2008 New Revision: 680686 URL: http://svn.apache.org/viewvc?rev=680686&view=rev Log: Better handle ;jsessionid in rest plugin WW-2328
Modified: struts/struts2/trunk/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java struts/struts2/trunk/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java Modified: struts/struts2/trunk/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java?rev=680686&r1=680685&r2=680686&view=diff ============================================================================== --- struts/struts2/trunk/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java (original) +++ struts/struts2/trunk/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java Tue Jul 29 05:53:18 2008 @@ -183,6 +183,13 @@ String fullName = mapping.getName(); // Only try something if the action name is specified if (fullName != null && fullName.length() > 0) { + + // cut off any ;jsessionid= type appendix but allow the rails-like ;edit + int scPos = fullName.indexOf(';'); + if (scPos > -1 && !"edit".equals(fullName.substring(scPos+1))) { + fullName = fullName.substring(0, scPos); + } + int lastSlashPos = fullName.lastIndexOf('/'); String id = null; if (lastSlashPos > -1) { @@ -240,7 +247,7 @@ } } } - + // cut off the id parameter, even if a method is specified if (id != null) { if (!"new".equals(id)) { Modified: struts/struts2/trunk/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java?rev=680686&r1=680685&r2=680686&view=diff ============================================================================== --- struts/struts2/trunk/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java (original) +++ struts/struts2/trunk/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java Tue Jul 29 05:53:18 2008 @@ -156,6 +156,19 @@ assertEquals("edit", mapping.getMethod()); } + public void testGetJsessionIdSemicolonMapping() throws Exception { + req.setRequestURI("/myapp/animals/dog/fido;jsessionid=29fefpv23do1g"); + req.setServletPath("/animals/dog/fido"); + req.setMethod("GET"); + + ActionMapping mapping = mapper.getMapping(req, configManager); + + assertEquals("/animals", mapping.getNamespace()); + assertEquals("dog", mapping.getName()); + assertEquals("fido", ((String[])mapping.getParams().get("id"))[0]); + assertEquals("show", mapping.getMethod()); + } + public void testParseNameAndNamespace() { tryUri("/foo/23", "", "foo/23"); tryUri("/foo/", "", "foo/");