So to run the tests I could reverse the changes of the commit and then update to javax.xml.* and run tests?

I am still struggling a bit to understand exactly what is happening wrt VariableStack and how I can change over to XPathVariableResolver.  And also don't see a way to replace XBoolean, XNumber, XString etc...

I will keep trying things.   Can I come back to you with specific queries?

On 26/11/2017 17:33, Jeremy Boynes wrote:
On Nov 26, 2017, at 6:32 AM, Matthew Broadhead <> 
I am currently evaluating whether the Xalan dependency can be dropped from 
taglibs and replaced with javax.xml.*.

The reason for this is a conflict which occurs when I have Apache Fop as a 
java.lang.ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault cannot 
be cast to org.apache.xml.dtm.DTMManager
     at org.apache.xml.dtm.DTMManager.newInstance(
     at org.apache.xpath.XPathContext.<init>(
     at org.apache.xpath.XPathContext.<init>(
     at org.apache.xpath.XPathContext.<init>(

In org.apache.taglibs.standard.tag.common.xml it seems like 
org.apache.xpath.XPath could be replaced with javax.xml.xpath.XPathExpression.

But the thing I don't understand is the method getContext in 
org.apache.taglibs.standard.tag.common.xml.XalanUtil uses a VariableStack and 
returns an XPathContext.  I am not sure how they fit into the SAX (?) model.

Can anyone shed some light on the inner workings of this function?
This was added <> in 1.2.x to fix a 
performance problem (bug #27717 <>) with 
x:forEach. At the time, the default XPath implementation in javax.xml had the same n^2 behaviour as the 
previous implementation. There are some micro-benchmarks 
 still in the test class if you want to see if that’s still true.

Memory is a little fuzzy, but IIRC the JSTLVariableStack is used to make the 
JSP implicit variables (e.g. ${request.something}) resolvable in the transform. 
It’s the low-level equivalent of a custom XPathVariableResolver.

If you’re not using the XML tags, you may be able to simply drop the Xalan 
dependency from your application to avoid the conflict.

To unsubscribe, e-mail:
For additional commands, e-mail:

Reply via email to