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

Simon Raess updated JXPATH-76:
------------------------------

    Affects Version/s: 1.2 Final

> CompiledExpression not completely thread-safe
> ---------------------------------------------
>
>                 Key: JXPATH-76
>                 URL: https://issues.apache.org/jira/browse/JXPATH-76
>             Project: Commons JXPath
>          Issue Type: Bug
>    Affects Versions: 1.2 Final
>            Reporter: Simon Raess
>         Attachments: jxpath.patch
>
>
> Some classes in compiled expressions are not thread-safe, because they lazily 
> initialize some information that should be initialized at object 
> construction. The classes I've found are Path and ExpressionPath. I've 
> attached a path that fixes the problem. 
> When two threads tried to initialize such an object concurrently, it was 
> possible that the expression was evaluated as simple expression when it 
> should have been evaluated as complex expression. See the two stack traces 
> below (using xpath expression //ExternalData/Order/@id). The first stack 
> trace shows the bug in action, the second how it should look:
> caused by java.lang.UnsupportedOperationException: Not supported node test 
> for attributes: node()
>       at 
> org.apache.commons.jxpath.ri.axes.SimplePathInterpreter.getNodeIterator(SimplePathInterpreter.java(Compiled
>  Code))
>       at 
> org.apache.commons.jxpath.ri.axes.SimplePathInterpreter.doStepNoPredicatesStandard(SimplePathInterpreter.java(Compiled
>  Code))
>       at 
> org.apache.commons.jxpath.ri.axes.SimplePathInterpreter.doStep(SimplePathInterpreter.java(Compiled
>  Code))
>       at 
> org.apache.commons.jxpath.ri.axes.SimplePathInterpreter.interpretSimpleLocationPath(SimplePathInterpreter.java(Inlined
>  Compiled Code))
>       at 
> org.apache.commons.jxpath.ri.compiler.Path.getSingleNodePointerForSteps(Path.java(Inlined
>  Compiled Code))
>       at 
> org.apache.commons.jxpath.ri.compiler.LocationPath.computeValue(LocationPath.java(Compiled
>  Code))
>       at 
> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getPointer(JXPathContextReferenceImpl.java(Compiled
>  Code))
>       at 
> org.apache.commons.jxpath.ri.JXPathCompiledExpression.selectSingleNode(JXPathCompiledExpression.java(Inlined
>  Compiled Code))
> This replaces the lines starting at Path.getSingleNodePointerForSteps:
>         LocationPath(Path).searchForPath(EvalContext) line: 183       
>         LocationPath(Path).getSingleNodePointerForSteps(EvalContext) line: 
> 159        

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to