[ 
https://issues.apache.org/jira/browse/WW-5029?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yasser Zamani resolved WW-5029.
-------------------------------
    Resolution: Fixed

PR got merged and cherry picked, thanks a lot!

> The content allowed-methods tag of the XML configuration is sometimes 
> truncated
> -------------------------------------------------------------------------------
>
>                 Key: WW-5029
>                 URL: https://issues.apache.org/jira/browse/WW-5029
>             Project: Struts 2
>          Issue Type: Bug
>          Components: XML Configuration
>    Affects Versions: 2.5.18
>            Reporter: Maxime Clement
>            Priority: Major
>             Fix For: 2.5.21, 2.6
>
>
> Under WebSphere 8.5, the SAX parser sometimes create multiple text elements 
> to represent the value of the "allowed-methods" tag found in the struts.xml 
> configuration file. This happens when the text is read in chunks as stated 
> here: 
> [https://docs.oracle.com/javase/8/docs/api/org/xml/sax/ContentHandler.html#characters-char:A-int-int-].
> This case is not handled in class XmlConfigurationProvider, which only reads 
> the first child of the org.w3c.dom.Node returned by the parser (see 
> [https://github.com/apache/struts/blob/struts-2-5-x/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java#L879]).
>  
> This means that with this configuration:
> {code:java}
> <allowed-methods>method1,method2</allowed-methods>
> {code}
> The node instance almost always contains a single child [ "method1,method2" 
> ], but randomly the node instance can contain two children: [ "method1,me", 
> "thod2" ]. As only the first child is considered, the retrieved text is 
> truncated and the configuration doesn't work.
>  
> It happens randomly and cannot be reproduced easily, but we can see in the 
> XmlConfigurationProvider class that this case has been taken into account for 
> the "result" tag:
> {code:java}
> <result>something</result>
> {code}
>  See: 
> [https://github.com/apache/struts/blob/struts-2-5-x/core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java#L767]
>  where all node children of type Node.TEXT_NODE are concatenated to retrieve 
> the text value, so even if the SAX parser returns multiple chunks, the word 
> is correctly reconstructed.
>  
> As a workaround I created a custom configuration provider that overrides 
> StrutsXmlConfigurationProvider and redefines the method "buildAllowedMethods" 
> in order to parse all children of the node object, as done in method 
> "buildResults". Note that the same problem applies for 
> "global-allowed-methods" as the XmlConfigurationProvider also considers the 
> first child only.
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to