struts git commit: WW-4589 do not overwrite explicit method name
Repository: struts Updated Branches: refs/heads/master 3163d6c38 -> 1fb695a82 WW-4589 do not overwrite explicit method name Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/1fb695a8 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/1fb695a8 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/1fb695a8 Branch: refs/heads/master Commit: 1fb695a82b589cdd6e7b5bc2501dfec6b95c906e Parents: 3163d6c Author: petersr Authored: Tue Jan 19 14:02:57 2016 -0800 Committer: petersr Committed: Tue Jan 19 14:02:57 2016 -0800 -- .../apache/struts2/rest/RestActionMapper.java | 3 +- .../struts2/rest/RestActionMapperTest.java | 39 2 files changed, 41 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/1fb695a8/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java -- diff --git a/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java b/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java index d25b725..632842f 100644 --- a/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java +++ b/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java @@ -224,7 +224,8 @@ public class RestActionMapper extends DefaultActionMapper { // fun trickery to parse 'actionName/id/methodName' in the case of 'animals/dog/edit' int prevSlashPos = fullName.lastIndexOf('/', lastSlashPos - 1); -if (prevSlashPos > -1) { +//WW-4589 do not overwrite explicit method name +if (prevSlashPos > -1 && mapping.getMethod() == null) { mapping.setMethod(fullName.substring(lastSlashPos + 1)); fullName = fullName.substring(0, lastSlashPos); lastSlashPos = prevSlashPos; http://git-wip-us.apache.org/repos/asf/struts/blob/1fb695a8/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java -- diff --git a/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java b/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java index 9903265..f17a071 100644 --- a/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java +++ b/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java @@ -207,6 +207,45 @@ public class RestActionMapperTest extends TestCase { assertEquals("fido", ((String[]) mapping.getParams().get("id"))[0]); assertEquals("update", mapping.getMethod()); } + +public void testMappingWithMethodAndId() throws Exception { + req.setRequestURI("/myapp/animals/dog/fido/test/some-id!create;jsessionid=29fefpv23do1g"); +req.setServletPath("/animals/dog/fido/test/some-id"); +req.setMethod("GET"); +mapper.setAllowDynamicMethodCalls("true"); +ActionMapping mapping = mapper.getMapping(req, configManager); + +assertEquals("/animals", mapping.getNamespace()); +assertEquals("dog/fido/test", mapping.getName()); +assertEquals("some-id", ((String[]) mapping.getParams().get("id"))[0]); +assertEquals("create", mapping.getMethod()); +} + +public void testMappingForStaticFiles() throws Exception { + req.setRequestURI("/myApp/custom/menu/Yosemite/Vernal_Fall/Vernal_Fall_Image!iframe"); + req.setServletPath("/custom/menu/Yosemite/Vernal_Fall/Vernal_Fall_Image"); +req.setMethod("GET"); +mapper.setAllowDynamicMethodCalls("true"); +final ActionMapping mapping = mapper.getMapping(req, configManager); + +assertEquals("", mapping.getNamespace()); +assertEquals("custom/menu/Yosemite/Vernal_Fall", mapping.getName()); +assertEquals("Vernal_Fall_Image", ((String[]) mapping.getParams().get("id"))[0]); +assertEquals("iframe", mapping.getMethod()); +} + +public void testMappingForStaticFilesWithJsessionId() throws Exception { + req.setRequestURI("/myApp/custom/menu/Yosemite/Vernal_Fall/Vernal_Fall_Image!iframe;jsessionid=29fefpv23do1g"); + req.setServletPath("/custom/menu/Yosemite/Vernal_Fall/Vernal_Fall_Image"); +req.setMethod("GET"); +mapper.setAllowDynamicMethodCalls("true"); +final ActionMapping mapping = mapper.getMapping(req, configManager); + +assertEquals("", mapping.getNamespace()); +assertEquals("custom/menu/Yosemite/Vernal_Fall", mapping.getName()); +assertEquals("Vernal_Fall_Image", ((String[]) mapping.getParams().get("id"))[0]); +assertEquals("iframe", mapping.getMethod()); +
[2/2] struts git commit: Merge branch 'support-2-3' of https://git-wip-us.apache.org/repos/asf/struts into support-2-3
Merge branch 'support-2-3' of https://git-wip-us.apache.org/repos/asf/struts into support-2-3 Conflicts: plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/10a612c9 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/10a612c9 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/10a612c9 Branch: refs/heads/support-2-3 Commit: 10a612c9da84a77edef7a1394fd71b4024eee268 Parents: 1d160f4 a398793 Author: Lukasz Lenart Authored: Wed Jan 20 10:13:03 2016 +0100 Committer: Lukasz Lenart Committed: Wed Jan 20 10:13:03 2016 +0100 -- .../dispatcher/mapper/Restful2ActionMapper.java | 6 +- .../dispatcher/mapper/RestfulActionMapper.java | 6 +- .../org/apache/struts2/util/URLDecoderUtil.java | 22 + .../apache/struts2/util/tomcat/buf/Ascii.java | 255 + .../struts2/util/tomcat/buf/B2CConverter.java | 201 .../struts2/util/tomcat/buf/ByteChunk.java | 935 +++ .../struts2/util/tomcat/buf/CharChunk.java | 700 ++ .../struts2/util/tomcat/buf/HexUtils.java | 113 +++ .../struts2/util/tomcat/buf/MessageBytes.java | 546 +++ .../struts2/util/tomcat/buf/StringCache.java| 695 ++ .../struts2/util/tomcat/buf/UDecoder.java | 421 + .../struts2/util/tomcat/buf/Utf8Decoder.java| 293 ++ .../struts2/views/util/DefaultUrlHelper.java| 8 +- .../apache/struts2/util/URLDecoderUtilTest.java | 71 ++ .../apache/struts2/rest/RestActionMapper.java | 15 +- .../struts2/rest/DefaultHttpHeadersTest.java| 16 +- .../struts2/rest/RestActionMapperTest.java | 6 +- pom.xml | 19 + 18 files changed, 4309 insertions(+), 19 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/10a612c9/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java -- http://git-wip-us.apache.org/repos/asf/struts/blob/10a612c9/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java -- diff --cc plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java index d2e,9903265..3de37d4 --- a/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java +++ b/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java @@@ -183,7 -183,7 +183,7 @@@ public class RestActionMapperTest exten req.setRequestURI("/myapp/animals/dog/fido!update;jsessionid=29fefpv23do1g"); req.setServletPath("/animals/dog/fido"); req.setMethod("GET"); -- ++ ActionMapping mapping = mapper.getMapping(req, configManager); assertEquals("/animals", mapping.getNamespace()); @@@ -196,10 -196,10 +196,10 @@@ req.setRequestURI("/myapp/animals/dog/fido!update;jsessionid=29fefpv23do1g"); req.setServletPath("/animals/dog/fido"); req.setMethod("GET"); -- ++ // allow DMI mapper.setAllowDynamicMethodCalls("true"); -- ++ ActionMapping mapping = mapper.getMapping(req, configManager); assertEquals("/animals", mapping.getNamespace());
[1/2] struts git commit: WW-4589 do not overwrite explicit method name
Repository: struts Updated Branches: refs/heads/support-2-3 a39879317 -> 10a612c9d WW-4589 do not overwrite explicit method name Conflicts: plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/1d160f4d Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/1d160f4d Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/1d160f4d Branch: refs/heads/support-2-3 Commit: 1d160f4d5f166b4806b475562a8808ac1eeae4aa Parents: c6750c1 Author: petersr Authored: Tue Jan 19 14:02:57 2016 -0800 Committer: Lukasz Lenart Committed: Wed Jan 20 10:06:46 2016 +0100 -- .../apache/struts2/rest/RestActionMapper.java | 3 +- .../struts2/rest/RestActionMapperTest.java | 68 2 files changed, 70 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/1d160f4d/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java -- diff --git a/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java b/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java index c4fd827..07957de 100644 --- a/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java +++ b/plugins/rest/src/main/java/org/apache/struts2/rest/RestActionMapper.java @@ -215,7 +215,8 @@ public class RestActionMapper extends DefaultActionMapper { // fun trickery to parse 'actionName/id/methodName' in the case of 'animals/dog/edit' int prevSlashPos = fullName.lastIndexOf('/', lastSlashPos - 1); -if (prevSlashPos > -1) { +//WW-4589 do not overwrite explicit method name +if (prevSlashPos > -1 && mapping.getMethod() == null) { mapping.setMethod(fullName.substring(lastSlashPos + 1)); fullName = fullName.substring(0, lastSlashPos); lastSlashPos = prevSlashPos; http://git-wip-us.apache.org/repos/asf/struts/blob/1d160f4d/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java -- diff --git a/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java b/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java index 8d39cc1..d2e 100644 --- a/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java +++ b/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionMapperTest.java @@ -179,6 +179,74 @@ public class RestActionMapperTest extends TestCase { assertEquals("show", mapping.getMethod()); } +public void testGetJsessionIdSemicolonMappingWithMethod() throws Exception { + req.setRequestURI("/myapp/animals/dog/fido!update;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 testGetJsessionIdSemicolonMappingWithMethodAllowDMI() throws Exception { + req.setRequestURI("/myapp/animals/dog/fido!update;jsessionid=29fefpv23do1g"); +req.setServletPath("/animals/dog/fido"); +req.setMethod("GET"); + +// allow DMI +mapper.setAllowDynamicMethodCalls("true"); + +ActionMapping mapping = mapper.getMapping(req, configManager); + +assertEquals("/animals", mapping.getNamespace()); +assertEquals("dog", mapping.getName()); +assertEquals("fido", ((String[]) mapping.getParams().get("id"))[0]); +assertEquals("update", mapping.getMethod()); +} + +public void testMappingWithMethodAndId() throws Exception { + req.setRequestURI("/myapp/animals/dog/fido/test/some-id!create;jsessionid=29fefpv23do1g"); +req.setServletPath("/animals/dog/fido/test/some-id"); +req.setMethod("GET"); +mapper.setAllowDynamicMethodCalls("true"); +ActionMapping mapping = mapper.getMapping(req, configManager); + +assertEquals("/animals", mapping.getNamespace()); +assertEquals("dog/fido/test", mapping.getName()); +assertEquals("some-id", ((String[]) mapping.getParams().get("id"))[0]); +assertEquals("create", mapping.getMethod()); +} + +public void testMappingForStaticFiles() throws Exception { + req.setRequestURI("/myApp/custom/menu/Yosemite/Vernal_Fall/
[3/3] struts git commit: Merge branch 'WW-4456'
Merge branch 'WW-4456' Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/04f5813c Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/04f5813c Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/04f5813c Branch: refs/heads/master Commit: 04f5813c9055f9d438557e6e7d22460e7aaf062a Parents: 1fb695a bc8d374 Author: Lukasz Lenart Authored: Wed Jan 20 10:27:00 2016 +0100 Committer: Lukasz Lenart Committed: Wed Jan 20 10:27:00 2016 +0100 -- .../dispatcher/multipart/JakartaMultiPartRequest.java | 12 ++-- 1 file changed, 10 insertions(+), 2 deletions(-) --
[2/3] struts git commit: WW-4456 - Got NPE when File Upload Limitation exceeds in portal env.
WW-4456 - Got NPE when File Upload Limitation exceeds in portal env. Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/bc8d3746 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/bc8d3746 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/bc8d3746 Branch: refs/heads/master Commit: bc8d37464756bf821acae003c6a140af6dcbaf09 Parents: c167d6c Author: Victor Sosa Authored: Tue Jan 19 08:54:15 2016 -0400 Committer: Victor Sosa Committed: Tue Jan 19 08:54:15 2016 -0400 -- .../dispatcher/multipart/JakartaMultiPartRequest.java | 12 ++-- 1 file changed, 10 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/bc8d3746/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java -- diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java index e9ac67f..643d73d 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java @@ -83,9 +83,17 @@ public class JakartaMultiPartRequest implements MultiPartRequest { try { setLocale(request); processUpload(request, saveDir); -} catch (FileUploadBase.SizeLimitExceededException e) { +} catch (FileUploadException e) { LOG.warn("Request exceeded size limit!", e); -String errorMessage = buildErrorMessage(e, new Object[]{e.getPermittedSize(), e.getActualSize()}); +String errorMessage = null; + +if(e instanceof FileUploadBase.SizeLimitExceededException) { +FileUploadBase.SizeLimitExceededException ex = (FileUploadBase.SizeLimitExceededException) e; +errorMessage = buildErrorMessage(e, new Object[]{ex.getPermittedSize(), ex.getActualSize()}); +} else { +errorMessage = buildErrorMessage(e, new Object[]{}); +} + if (!errors.contains(errorMessage)) { errors.add(errorMessage); }
[1/3] struts git commit: Merge pull request #1 from apache/master
Repository: struts Updated Branches: refs/heads/master 1fb695a82 -> 04f5813c9 Merge pull request #1 from apache/master update pull Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/c167d6c8 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/c167d6c8 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/c167d6c8 Branch: refs/heads/master Commit: c167d6c855f9f3f5863d8fa20ab45aa28cb77486 Parents: d923c7c 3163d6c Author: victor sosa Authored: Tue Jan 19 08:25:29 2016 -0400 Committer: victor sosa Committed: Tue Jan 19 08:25:29 2016 -0400 -- .../validation/AjaxFormSubmitAction.java| 152 .../validation/AjaxFormSubmitSuccessAction.java | 7 + .../src/main/resources/struts-validation.xml| 13 ++ .../ajaxErrorContainers/actionerror.ftl | 46 + .../ajaxErrorContainers/controlfooter.ftl | 39 .../ajaxErrorContainers/controlheader-core.ftl | 80 + .../ajaxErrorContainers/theme.properties| 21 +++ .../src/main/webapp/WEB-INF/decorators/main.jsp | 2 + .../WEB-INF/validation/ajaxFormSubmit.jsp | 177 +++ .../validation/ajaxFormSubmitSuccess.jsp| 17 ++ .../struts2/json/JSONActionRedirectResult.java | 70 .../struts2/json/JSONValidationInterceptor.java | 10 +- .../json/src/main/resources/struts-plugin.xml | 1 + .../json/JSONActionRedirectResultTest.java | 105 +++ 14 files changed, 736 insertions(+), 4 deletions(-) --
[1/2] struts git commit: WW-4588: Improve the Struts2 Rest plugin to honor Accept header
Repository: struts Updated Branches: refs/heads/master 04f5813c9 -> cae57093b WW-4588: Improve the Struts2 Rest plugin to honor Accept header Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/7899f10d Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/7899f10d Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/7899f10d Branch: refs/heads/master Commit: 7899f10d800f0c48cb73d02c93500687717c745e Parents: 3163d6c Author: petersr Authored: Wed Jan 20 06:34:25 2016 -0800 Committer: petersr Committed: Wed Jan 20 06:34:25 2016 -0800 -- .../rest/DefaultContentTypeHandlerManager.java | 69 +--- .../DefaultContentTypeHandlerManagerTest.java | 42 2 files changed, 103 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/7899f10d/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java -- diff --git a/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java b/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java index 5f50bf9..dba7d13 100644 --- a/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java +++ b/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java @@ -42,9 +42,9 @@ import java.util.Set; public class DefaultContentTypeHandlerManager implements ContentTypeHandlerManager { /** ContentTypeHandlers keyed by the extension */ -Map handlersByExtension = new HashMap<>(); +Map handlersByExtension = new HashMap(); /** ContentTypeHandlers keyed by the content-type */ -Map handlersByContentType = new HashMap<>(); +Map handlersByContentType = new HashMap(); private String defaultExtension; @@ -61,7 +61,7 @@ public class DefaultContentTypeHandlerManager implements ContentTypeHandlerManag if (handler.getExtension() != null) { // Check for overriding handlers for the current extension -String overrideName = container.getInstance(String.class, STRUTS_REST_HANDLER_OVERRIDE_PREFIX +handler.getExtension()); +String overrideName = container.getInstance(String.class, STRUTS_REST_HANDLER_OVERRIDE_PREFIX + handler.getExtension()); if (overrideName != null) { if (!handlersByExtension.containsKey(handler.getExtension())) { handler = container.getInstance(ContentTypeHandler.class, overrideName); @@ -74,7 +74,15 @@ public class DefaultContentTypeHandlerManager implements ContentTypeHandlerManag } if (handler.getContentType() != null) { -this.handlersByContentType.put(handler.getContentType(), handler); +//dont store character encoding +String typeOnly = handler.getContentType() ; +int index = handler.getContentType().indexOf(';'); +if (index != -1) +{ +typeOnly = handler.getContentType().substring(0, index).trim(); +} + +this.handlersByContentType.put(typeOnly, handler); } } } @@ -109,12 +117,42 @@ public class DefaultContentTypeHandlerManager implements ContentTypeHandlerManag * Gets the handler for the response by looking at the extension of the request * @param req The request * @return The appropriate handler + * + * WW-4588: modified to get a handler for the response side and auto generate the response type + * from the Accept: header + * */ -public ContentTypeHandler getHandlerForResponse(HttpServletRequest req, HttpServletResponse res) { -String extension = findExtension(req.getRequestURI()); +public ContentTypeHandler getHandlerForResponse(HttpServletRequest request, HttpServletResponse res) { + +String extension = getExtensionIfPresent(request.getRequestURI()); +if (extension == null) { +extension = defaultExtension; +final String acceptHeader = request.getHeader("accept") ; +if (acceptHeader != null) { +final String[] types = acceptHeader.split(","); +for (final String type : types) { +final ContentTypeHandler handler = findHandler(type); +if (handler != null) { +return handler; +} +} +} +} return handlersByExtension.get(extension); } +private ContentTypeHandler findHandler(final String type) { +ContentTypeHandler handler = handlersByConten
[2/2] struts git commit: Merge branch 'WW-4588'
Merge branch 'WW-4588' Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/cae57093 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/cae57093 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/cae57093 Branch: refs/heads/master Commit: cae57093b555d553873dd4b3d15ab2d437f387e6 Parents: 04f5813 7899f10 Author: Lukasz Lenart Authored: Wed Jan 20 16:10:52 2016 +0100 Committer: Lukasz Lenart Committed: Wed Jan 20 16:10:52 2016 +0100 -- .../rest/DefaultContentTypeHandlerManager.java | 69 +--- .../DefaultContentTypeHandlerManagerTest.java | 42 2 files changed, 103 insertions(+), 8 deletions(-) --
struts git commit: WW-4588: Improve the Struts2 Rest plugin to honor Accept header
Repository: struts Updated Branches: refs/heads/support-2-3 10a612c9d -> 2ec3890dc WW-4588: Improve the Struts2 Rest plugin to honor Accept header Conflicts: plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/2ec3890d Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/2ec3890d Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/2ec3890d Branch: refs/heads/support-2-3 Commit: 2ec3890dc7d704d3098e1bd738bff9ae5ca4f989 Parents: 10a612c Author: petersr Authored: Wed Jan 20 06:34:25 2016 -0800 Committer: Lukasz Lenart Committed: Wed Jan 20 16:12:55 2016 +0100 -- .../rest/DefaultContentTypeHandlerManager.java | 69 +--- .../DefaultContentTypeHandlerManagerTest.java | 42 2 files changed, 103 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/2ec3890d/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java -- diff --git a/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java b/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java index c55f319..dba7d13 100644 --- a/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java +++ b/plugins/rest/src/main/java/org/apache/struts2/rest/DefaultContentTypeHandlerManager.java @@ -42,9 +42,9 @@ import java.util.Set; public class DefaultContentTypeHandlerManager implements ContentTypeHandlerManager { /** ContentTypeHandlers keyed by the extension */ -Map handlersByExtension = new HashMap(); +Map handlersByExtension = new HashMap(); /** ContentTypeHandlers keyed by the content-type */ -Map handlersByContentType = new HashMap(); +Map handlersByContentType = new HashMap(); private String defaultExtension; @@ -61,7 +61,7 @@ public class DefaultContentTypeHandlerManager implements ContentTypeHandlerManag if (handler.getExtension() != null) { // Check for overriding handlers for the current extension -String overrideName = container.getInstance(String.class, STRUTS_REST_HANDLER_OVERRIDE_PREFIX +handler.getExtension()); +String overrideName = container.getInstance(String.class, STRUTS_REST_HANDLER_OVERRIDE_PREFIX + handler.getExtension()); if (overrideName != null) { if (!handlersByExtension.containsKey(handler.getExtension())) { handler = container.getInstance(ContentTypeHandler.class, overrideName); @@ -74,7 +74,15 @@ public class DefaultContentTypeHandlerManager implements ContentTypeHandlerManag } if (handler.getContentType() != null) { -this.handlersByContentType.put(handler.getContentType(), handler); +//dont store character encoding +String typeOnly = handler.getContentType() ; +int index = handler.getContentType().indexOf(';'); +if (index != -1) +{ +typeOnly = handler.getContentType().substring(0, index).trim(); +} + +this.handlersByContentType.put(typeOnly, handler); } } } @@ -109,12 +117,42 @@ public class DefaultContentTypeHandlerManager implements ContentTypeHandlerManag * Gets the handler for the response by looking at the extension of the request * @param req The request * @return The appropriate handler + * + * WW-4588: modified to get a handler for the response side and auto generate the response type + * from the Accept: header + * */ -public ContentTypeHandler getHandlerForResponse(HttpServletRequest req, HttpServletResponse res) { -String extension = findExtension(req.getRequestURI()); +public ContentTypeHandler getHandlerForResponse(HttpServletRequest request, HttpServletResponse res) { + +String extension = getExtensionIfPresent(request.getRequestURI()); +if (extension == null) { +extension = defaultExtension; +final String acceptHeader = request.getHeader("accept") ; +if (acceptHeader != null) { +final String[] types = acceptHeader.split(","); +for (final String type : types) { +final ContentTypeHandler handler = findHandler(type); +if (handler != null) { +return handler; +} +} +} +} return handlersByExtension.get(extension);
[4/4] struts git commit: Merge branch 'WW-4590'
Merge branch 'WW-4590' Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/11561cb2 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/11561cb2 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/11561cb2 Branch: refs/heads/master Commit: 11561cb29998655c458b3f94cb7cf9431c4090a8 Parents: cae5709 2a46a65 Author: Lukasz Lenart Authored: Thu Jan 21 08:45:07 2016 +0100 Committer: Lukasz Lenart Committed: Thu Jan 21 08:45:07 2016 +0100 -- .../providers/XmlConfigurationProvider.java | 17 -- .../XmlConfigurationProviderResultsTest.java| 54 ++ .../providers/xwork-test-result-names.xml | 48 .../convention/DefaultResultMapBuilder.java | 20 --- .../struts2/convention/annotation/Result.java | 2 +- .../convention/DefaultResultMapBuilderTest.java | 58 .../PackageBasedActionConfigBuilderTest.java| 4 +- .../result/ActionLevelResultsNamesAction.java | 47 8 files changed, 235 insertions(+), 15 deletions(-) --
[3/4] struts git commit: Result annotation name attribute as an array, removed one of ResultInfo constructors
Result annotation name attribute as an array, removed one of ResultInfo constructors Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/2a46a658 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/2a46a658 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/2a46a658 Branch: refs/heads/master Commit: 2a46a6586ec22e174dedce56f93e5993f757a87b Parents: 930f6e4 Author: Aleksandr Mashchenko Authored: Wed Jan 20 18:03:57 2016 +0200 Committer: Aleksandr Mashchenko Committed: Wed Jan 20 18:03:57 2016 +0200 -- .../convention/DefaultResultMapBuilder.java | 17 +--- .../struts2/convention/annotation/Result.java | 2 +- .../convention/DefaultResultMapBuilderTest.java | 46 .../PackageBasedActionConfigBuilderTest.java| 2 - .../result/ActionLevelResultsNamesAction.java | 16 +-- 5 files changed, 3 insertions(+), 80 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/2a46a658/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java -- diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java b/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java index b7c5b51..40ea279 100644 --- a/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java +++ b/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java @@ -410,15 +410,7 @@ public class DefaultResultMapBuilder implements ResultMapBuilder { Class actionClass, Map resultsByExtension) { // Check for multiple results on the class for (Result result : results) { -Set names; -if (",".equals(result.name().trim())) { -names = new HashSet<>(1); -names.add(result.name()); -} else { -names = TextParseUtil.commaDelimitedStringToSet(result.name()); -} - -for (String name : names) { +for (String name : result.name()) { ResultConfig config = createResultConfig(actionClass, new ResultInfo( name, result, packageConfig, resultPath, actionClass, resultsByExtension), packageConfig, result); @@ -515,13 +507,6 @@ public class DefaultResultMapBuilder implements ResultMapBuilder { } } -public ResultInfo(Result result, PackageConfig packageConfig, -String resultPath, Class actionClass, -Map resultsByExtension) { -this(result.name(), result, packageConfig, resultPath, actionClass, -resultsByExtension); -} - String determineType(String location, PackageConfig packageConfig, Map resultsByExtension) { int indexOfDot = location.lastIndexOf("."); http://git-wip-us.apache.org/repos/asf/struts/blob/2a46a658/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/Result.java -- diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/Result.java b/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/Result.java index f8e9ecd..f90e7b5 100644 --- a/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/Result.java +++ b/plugins/convention/src/main/java/org/apache/struts2/convention/annotation/Result.java @@ -69,7 +69,7 @@ public @interface Result { * @return The name of the result mapping. This is the value that is returned from the action * method and is used to associate a location with a return value. */ -String name() default com.opensymphony.xwork2.Action.SUCCESS; +String[] name() default com.opensymphony.xwork2.Action.SUCCESS; /** * @return The location of the result within the web application or anywhere on disk. This location http://git-wip-us.apache.org/repos/asf/struts/blob/2a46a658/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java -- diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java b/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java index b73667a..8a4325b 100644 --- a/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java +++ b/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java @@ -522,52
[2/4] struts git commit: Cleaner result name parsing
Cleaner result name parsing Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/930f6e4c Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/930f6e4c Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/930f6e4c Branch: refs/heads/master Commit: 930f6e4cf7df951fee03159ad891e4e606f36aef Parents: 087cf61 Author: Aleksandr Mashchenko Authored: Wed Jan 20 17:52:56 2016 +0200 Committer: Aleksandr Mashchenko Committed: Wed Jan 20 17:52:56 2016 +0200 -- .../xwork2/config/providers/XmlConfigurationProvider.java | 7 ++- 1 file changed, 2 insertions(+), 5 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/930f6e4c/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java -- diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java index e3b0c19..b04cffb 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java @@ -777,12 +777,9 @@ public class XmlConfigurationProvider implements ConfigurationProvider { } params.putAll(resultParams); -Set resultNamesSet; -if (",".equals(resultName.trim())) { -resultNamesSet = new HashSet<>(1); +Set resultNamesSet = TextParseUtil.commaDelimitedStringToSet(resultName); +if (resultNamesSet.isEmpty()) { resultNamesSet.add(resultName); -} else { -resultNamesSet = TextParseUtil.commaDelimitedStringToSet(resultName); } for (String name : resultNamesSet) {
[1/4] struts git commit: WW-4590 - Allow to use multiple names in result
Repository: struts Updated Branches: refs/heads/master cae57093b -> 11561cb29 WW-4590 - Allow to use multiple names in result Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/087cf610 Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/087cf610 Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/087cf610 Branch: refs/heads/master Commit: 087cf610abcd262980a41c30a2f9360aa3f416e1 Parents: d923c7c Author: Aleksandr Mashchenko Authored: Mon Jan 18 21:23:46 2016 +0200 Committer: Aleksandr Mashchenko Committed: Mon Jan 18 21:23:46 2016 +0200 -- .../providers/XmlConfigurationProvider.java | 20 +++- .../XmlConfigurationProviderResultsTest.java| 54 ++ .../providers/xwork-test-result-names.xml | 48 + .../convention/DefaultResultMapBuilder.java | 35 +-- .../convention/DefaultResultMapBuilderTest.java | 104 +++ .../PackageBasedActionConfigBuilderTest.java| 6 +- .../result/ActionLevelResultsNamesAction.java | 61 +++ 7 files changed, 314 insertions(+), 14 deletions(-) -- http://git-wip-us.apache.org/repos/asf/struts/blob/087cf610/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java -- diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java index 5846969..e3b0c19 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java @@ -777,11 +777,21 @@ public class XmlConfigurationProvider implements ConfigurationProvider { } params.putAll(resultParams); -ResultConfig resultConfig = new ResultConfig.Builder(resultName, resultClass) -.addParams(params) -.location(DomHelper.getLocationObject(element)) -.build(); -results.put(resultConfig.getName(), resultConfig); +Set resultNamesSet; +if (",".equals(resultName.trim())) { +resultNamesSet = new HashSet<>(1); +resultNamesSet.add(resultName); +} else { +resultNamesSet = TextParseUtil.commaDelimitedStringToSet(resultName); +} + +for (String name : resultNamesSet) { +ResultConfig resultConfig = new ResultConfig.Builder(name, resultClass) +.addParams(params) +.location(DomHelper.getLocationObject(element)) +.build(); +results.put(resultConfig.getName(), resultConfig); +} } } http://git-wip-us.apache.org/repos/asf/struts/blob/087cf610/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java -- diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java index caa9da0..468ea1a 100644 --- a/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProviderResultsTest.java @@ -15,6 +15,7 @@ */ package com.opensymphony.xwork2.config.providers; +import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionChainResult; import com.opensymphony.xwork2.SimpleAction; import com.opensymphony.xwork2.config.ConfigurationException; @@ -118,4 +119,57 @@ public class XmlConfigurationProviderResultsTest extends ConfigurationTestBase { assertEquals(chainResult, resultTypes.get("chain")); assertEquals(mockResult, resultTypes.get("mock")); } + +public void testResultNames() throws ConfigurationException { +final String filename = "com/opensymphony/xwork2/config/providers/xwork-test-result-names.xml"; +ConfigurationProvider provider = buildConfigurationProvider(filename); + +// execute the configuration +provider.init(configuration); +provider.loadPackages(); + +PackageConfig pkg = configuration.getPackageConfig("default"); +Map actionConfigs = pkg.getActionConfigs(); + +// assertions +assertNotNull(actionConfigs); + +Map resultConfigs = actionCo