struts git commit: WW-4589 do not overwrite explicit method name

2016-01-20 Thread lukaszlenart
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

2016-01-20 Thread lukaszlenart
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

2016-01-20 Thread lukaszlenart
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'

2016-01-20 Thread lukaszlenart
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.

2016-01-20 Thread lukaszlenart
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

2016-01-20 Thread lukaszlenart
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

2016-01-20 Thread lukaszlenart
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'

2016-01-20 Thread lukaszlenart
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

2016-01-20 Thread lukaszlenart
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'

2016-01-20 Thread lukaszlenart
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

2016-01-20 Thread lukaszlenart
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

2016-01-20 Thread lukaszlenart
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

2016-01-20 Thread lukaszlenart
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