Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » Struts 2 »

Re: Strange parser bug...

Laurie Harper

2006-12-29

Replies:

Hmm, I'm not sure how struts.xml gets parsed, but that sounds like a
buggy SAX handler. At any rate, file it in JIRA with sample works and
doesn't-work config files and as much detail as possible of your test
environment. This is something that might be very sensitive to the exact
version of JDK or some other library. In fact, if you can, create a
minimal WAR file that reproduces the problem and attach that to the JIRA
issue.

L.

Dale Newfield wrote:
> I'm developing an app against the struts2 svn trunk, but I don't think
> that's the source of this problem.
>
> The only difference between:
> http://newfieldenterprises.com/struts2ParserIssue/broken-struts.xml
> and:
> http://newfieldenterprises.com/struts2ParserIssue/working-struts.xml
> are the addition of a bunch of blank lines before the "param" line of
> this snippet:
>
>         <interceptor-stack name="photoUploadStack">
>           <interceptor-ref name="fileUpload">
>             <param name="allowedTypes">image/jpeg</param>
>           </interceptor-ref>
>           <interceptor-ref name="defaultStack"/>
>         </interceptor-stack>
>
>
> In the file that does not parse correctly the parser splits "image/jpeg"
> into two chunks of text "image/jpe" and "g", which results in the
> interceptor's allowedTypes getting set to just "image/jpe" which causes
> me all sorts of problems down the line. It didn't matter what was
> there, the parser always cut off the string after the same number of
> characters (see below for some debugger output[1]). That spot is (by my
> count) 2051 characters into the file. Not exactly 2048, but
> interestingly close enough that it suggested to me that I should try
> moving my string away from this boundary (thus the extra lines), which
> worked! I'm a bit concerned that this bug unfixed could cause
> practically any xml configuration file to break...
> ....I'll create a JIRA issue in the morning, but I'm not even sure what
> package this issue is against. Should Struts2 or XWork2 be more careful
> when pulling data out of the DOM when there may be multiple text pieces
> that it should be stringing together? Is Xerces simply failing in it's
> contract (seems more likely a lexer problem than related to the DOM)? A
> call stack when the Interceptor attribute is set is below[2] as well as
> one where the configuration file is actually parsed[3]. All of the
> packages are represented, as well as tomcat, ognl, ...
>
> ....any advice would be appreciated...
>
> (Oh, this is all tomcat5.5.20 under java5 on os x.)
>
> Thanks,
> -Dale Newfield
> Dale@(protected)
>
> Appendix [1]:
> interceptorRefElement.getChildNodes().item(1).getChildNodes().item(0).getNodeValue()
> = "${'image/"
> interceptorRefElement.getChildNodes().item(1).getChildNodes().item(1).getNodeValue()
> = "jpeg','image/jpeg','image/jpg'}"
>
> (Yeah, I was trying all sorts of stuff)
>
> Appendix [2]: (via logged exception)
> [seenabout] DEBUG [main] FileUploadInterceptor.setAllowedTypes(183) |
> FileUploadInterceptor: allowedTypesSet = getDelimitedValues(image/jpe)
> => [image/jpe]
> [seenabout] DEBUG [main] FileUploadInterceptor.setAllowedTypes(187) |
> Where is this string getting shortened?
> java.lang.Exception: How do I get called?
>      at
> org.apache.struts2.interceptor.FileUploadInterceptor.setAllowedTypes (FileUploadInterceptor.java:185)
>
>      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>      at
> sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)
>
>      at
> sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
>
>      at java.lang.reflect.Method.invoke (Method.java:585)
>      at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:532)
>      at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:826)
>      at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:978)
>      at
> ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:75)
>
>      at
> ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:131)
>      at
> com.opensymphony.xwork2.util.OgnlValueStack$ObjectAccessor.setProperty(OgnlValueStack.java:68)
>
>      at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1670)
>      at ognl.ASTProperty.setValueBody(ASTProperty.java:101)
>      at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)
>      at ognl.SimpleNode.setValue(SimpleNode.java:246)
>      at ognl.Ognl.setValue(Ognl.java:476)
>      at
> com.opensymphony.xwork2.util.OgnlUtil.setValue(OgnlUtil.java:186)
>      at
> com.opensymphony.xwork2.util.OgnlUtil.internalSetProperty(OgnlUtil.java:360)
>
>      at
> com.opensymphony.xwork2.util.OgnlUtil.setProperties(OgnlUtil.java:76)
>      at
> com.opensymphony.xwork2.util.OgnlUtil.setProperties(OgnlUtil.java:103)
>      at
> com.opensymphony.xwork2.util.OgnlUtil.setProperties(OgnlUtil.java:90)
>      at
> com.opensymphony.xwork2.ObjectFactory.buildInterceptor (ObjectFactory.java:182)
>
>      at
> com.opensymphony.xwork2.config.providers.InterceptorBuilder.constructInterceptorReference (InterceptorBuilder.java:57)
>
>      at
> com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.lookupInterceptorReference (XmlConfigurationProvider.java:858)
>
>      at
> com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadInterceptorStack (XmlConfigurationProvider.java:693)
>
>      at
> com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadInterceptorStacks (XmlConfigurationProvider.java:706)
>
>      at
> com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadInterceptors (XmlConfigurationProvider.java:727)
>
>      at
> com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage (XmlConfigurationProvider.java:359)
>
>      at
> com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages (XmlConfigurationProvider.java:242)
>
>      at
> org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages (StrutsXmlConfigurationProvider.java:111)
>
>      at
> com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload (DefaultConfiguration.java:146)
>
>      at
> com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration (ConfigurationManager.java:52)
>
>      at
> org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration (Dispatcher.java:394)
>
>      at
> org.apache.struts2.dispatcher.Dispatcher.init (Dispatcher.java:450)
>      at
> org.apache.struts2.dispatcher.FilterDispatcher.init (FilterDispatcher.java:213)
>
>      at
> org.apache.catalina.core.ApplicationFilterConfig.getFilter (ApplicationFilterConfig.java:223)
>
>      at
> org.apache.catalina.core.ApplicationFilterConfig.setFilterDef (ApplicationFilterConfig.java:304)
>
>      at
> org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:77)
>
>      at
> org.apache.catalina.core.StandardContext.filterStart (StandardContext.java:3634)
>
>      at
> org.apache.catalina.core.StandardContext.start (StandardContext.java:4217)
>      at
> org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:759)
>
>      at
> org.apache.catalina.core.ContainerBase.addChild (ContainerBase.java:739)
>      at
> org.apache.catalina.core.StandardHost.addChild (StandardHost.java:524)
>      at
> org.apache.catalina.startup.HostConfig.deployDescriptor (HostConfig.java:608)
>
>      at
> org.apache.catalina.startup.HostConfig.deployDescriptors (HostConfig.java:535)
>
>      at
> org.apache.catalina.startup.HostConfig.deployApps (HostConfig.java:470)
>      at
> org.apache.catalina.startup.HostConfig.start (HostConfig.java:1122)
>      at
> org.apache.catalina.startup.HostConfig.lifecycleEvent (HostConfig.java:310)
>      at
> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent (LifecycleSupport.java:119)
>
>      at
> org.apache.catalina.core.ContainerBase.start (ContainerBase.java:1021)
>      at
> org.apache.catalina.core.StandardHost.start (StandardHost.java:718)
>      at
> org.apache.catalina.core.ContainerBase.start (ContainerBase.java:1013)
>      at
> org.apache.catalina.core.StandardEngine.start (StandardEngine.java:442)
>      at
> org.apache.catalina.core.StandardService.start (StandardService.java:450)
>      at
> org.apache.catalina.core.StandardServer.start (StandardServer.java:709)
>      at org.apache.catalina.startup.Catalina.start (Catalina.java:551)
>      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>      at
> sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)
>
>      at
> sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
>
>      at java.lang.reflect.Method.invoke (Method.java:585)
>      at org.apache.catalina.startup.Bootstrap.start (Bootstrap.java:294)
>      at org.apache.catalina.startup.Bootstrap.main (Bootstrap.java:432)
>
> Appendix [3]: (where output from debugger)
>  [1] org.apache.xerces.parsers.XML11Configuration.parse (null)
>  [2] org.apache.xerces.parsers.XMLParser.parse (null)
>  [3] org.apache.xerces.parsers.AbstractSAXParser.parse (null)
>  [4] org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse (null)
>  [5] org.apache.xerces.jaxp.SAXParserImpl.parse (null)
>  [6] com.opensymphony.xwork2.util.DomHelper.parse (DomHelper.java:121)
>  [7]
> com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles
> (XmlConfigurationProvider.java:780)
>  [8]
> com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments
> (XmlConfigurationProvider.java:135)
>  [9]
> com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init
> (XmlConfigurationProvider.java:103)
>  [10] com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload
> (DefaultConfiguration.java:129)
>  [11]
> com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration
> (ConfigurationManager.java:52)
>  [12]
> org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration
> (Dispatcher.java:394)
>  [13] org.apache.struts2.dispatcher.Dispatcher.init (Dispatcher.java:450)
>  [14] org.apache.struts2.dispatcher.FilterDispatcher.init
> (FilterDispatcher.java:213)
>  [15] org.apache.catalina.core.ApplicationFilterConfig.getFilter
> (ApplicationFilterConfig.java:223)
>  [16] org.apache.catalina.core.ApplicationFilterConfig.setFilterDef
> (ApplicationFilterConfig.java:304)
>  [17] org.apache.catalina.core.ApplicationFilterConfig.<init>
> (ApplicationFilterConfig.java:77)
>  [18] org.apache.catalina.core.StandardContext.filterStart
> (StandardContext.java:3,634)
>  [19] org.apache.catalina.core.StandardContext.start
> (StandardContext.java:4,217)
>  [20] org.apache.catalina.core.ContainerBase.addChildInternal
> (ContainerBase.java:759)
>  [21] org.apache.catalina.core.ContainerBase.addChild
> (ContainerBase.java:739)
>  [22] org.apache.catalina.core.StandardHost.addChild
> (StandardHost.java:524)
>  [23] org.apache.catalina.startup.HostConfig.deployDescriptor
> (HostConfig.java:608)
>  [24] org.apache.catalina.startup.HostConfig.deployDescriptors
> (HostConfig.java:535)
>  [25] org.apache.catalina.startup.HostConfig.deployApps
> (HostConfig.java:470)
>  [26] org.apache.catalina.startup.HostConfig.start (HostConfig.java:1,122)
>  [27] org.apache.catalina.startup.HostConfig.lifecycleEvent
> (HostConfig.java:310)
>  [28] org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent
> (LifecycleSupport.java:119)
>  [29] org.apache.catalina.core.ContainerBase.start
> (ContainerBase.java:1,021)
>  [30] org.apache.catalina.core.StandardHost.start (StandardHost.java:718)
>  [31] org.apache.catalina.core.ContainerBase.start
> (ContainerBase.java:1,013)
>  [32] org.apache.catalina.core.StandardEngine.start
> (StandardEngine.java:442)
>  [33] org.apache.catalina.core.StandardService.start
> (StandardService.java:450)
>  [34] org.apache.catalina.core.StandardServer.start
> (StandardServer.java:709)
>  [35] org.apache.catalina.startup.Catalina.start (Catalina.java:551)
>  [36] sun.reflect.NativeMethodAccessorImpl.invoke0 (native method)
>  [37] sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
>  [38] sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
>  [39] java.lang.reflect.Method.invoke (Method.java:585)
>  [40] org.apache.catalina.startup.Bootstrap.start (Bootstrap.java:294)
>  [41] org.apache.catalina.startup.Bootstrap.main (Bootstrap.java:432)


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@(protected)
For additional commands, e-mail: user-help@(protected)

©2008 junlu.com - Jax Systems, LLC, U.S.A.