[ https://issues.apache.org/jira/browse/DELTASPIKE-1397?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mark Struberg updated DELTASPIKE-1397: -------------------------------------- Fix Version/s: 1.9.4 > Detect the cycled variable references > ------------------------------------- > > Key: DELTASPIKE-1397 > URL: https://issues.apache.org/jira/browse/DELTASPIKE-1397 > Project: DeltaSpike > Issue Type: Wish > Security Level: public(Regular issues) > Components: Configuration > Affects Versions: 1.9.1 > Environment: JDK 1.8 > Reporter: Andrew Marinchuk > Assignee: Mark Struberg > Priority: Major > Fix For: 1.9.4 > > > Due to mistake in config file, we encountered the > java.lang.StackOverflowError. > {code:title=properties}fs.docs.path=/opt/docsFolder > fs.docs.path.IntegrationTest=/mnt/targetDocs > fs.docs.path.Staging=${fs.docs.path.IntegrationTest} > fs.docs.path.IntegrationTest=${fs.docs.path.IntegrationTest} <------- here is > invalid copy-pasted string > fs.docs.path.Production=${fs.docs.path.IntegrationTest}{code}{code:title=stack > trace}.... > at > org.apache.deltaspike.core.impl.config.TypedResolverImpl.getValue(TypedResolverImpl.java:253) > > at > org.apache.deltaspike.core.impl.config.TypedResolverImpl.resolveVariables(TypedResolverImpl.java:556) > > at > org.apache.deltaspike.core.impl.config.TypedResolverImpl.getPropertyValue(TypedResolverImpl.java:590) > > at > org.apache.deltaspike.core.impl.config.TypedResolverImpl.resolveStringValue(TypedResolverImpl.java:436) > > at > org.apache.deltaspike.core.impl.config.TypedResolverImpl.getValue(TypedResolverImpl.java:253) > > at > org.apache.deltaspike.core.impl.config.TypedResolverImpl.resolveVariables(TypedResolverImpl.java:556) > > at > org.apache.deltaspike.core.impl.config.TypedResolverImpl.getPropertyValue(TypedResolverImpl.java:590) > > at > org.apache.deltaspike.core.impl.config.TypedResolverImpl.resolveStringValue(TypedResolverImpl.java:436) > > at > org.apache.deltaspike.core.impl.config.TypedResolverImpl.getValue(TypedResolverImpl.java:253) > {code} > It's very hard to find the configuration variable with a self-referencing > problem because StackOverflowError's message does not contain information > about variable with problem. > Wrapping each TypedResolver.getValue()'s call into try-catch is not the best > practice in app code, but it's possible to detect the simplest > self-referencing issues in > org.apache.deltaspike.core.impl.config.TypedResolverImpl.resolveVariables(String). > The better (but much expensive) way is to track the reference chain during > resolving variables or catching the StackOverflowError in library's code > (it's not a good practice and will not help to find the core of reference > loop because try-catch should be done at the first TypedResolver.getValue()'s > call). -- This message was sent by Atlassian Jira (v8.3.4#803005)