Menu

#575 Support XPath 2.0 from ant and the command line

open
nobody
1
2013-09-25
2013-09-25
No

Currently, it appears that XPath 2.0 is only supported through the net.sourceforge.pmd.util.designer.Designer class.

This is actually a major hindrance for users that write custom xpath rules for XML files. There currently doesn't seem to be a way to force the ant and command line tools to run custom xpath rules using xpath 2.0.

When running pmd from ant on an xpath 2.0 rule, I get the following message:
[pmd] Error while processing file
[pmd] java.lang.RuntimeException: org.jaxen.UnresolvableException: No Such Function string-join
[pmd] at net.sourceforge.pmd.lang.rule.xpath.JaxenXPathRuleQuery.evaluate(JaxenXPathRuleQuery.java:80)
[pmd] at net.sourceforge.pmd.lang.rule.XPathRule.evaluate(XPathRule.java:74)
[pmd] at net.sourceforge.pmd.lang.xml.rule.XmlRuleChainVisitor.visit(XmlRuleChainVisitor.java:36)
[pmd] at net.sourceforge.pmd.lang.rule.AbstractRuleChainVisitor.visitAll(AbstractRuleChainVisitor.java:82)
[pmd] at net.sourceforge.pmd.RuleChain.apply(RuleChain.java:63)
[pmd] at net.sourceforge.pmd.RuleSets.apply(RuleSets.java:119)
[pmd] at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:144)
[pmd] at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:75)
[pmd] at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:42)
[pmd] at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:75)
[pmd] at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:22)
[pmd] at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
[pmd] at java.util.concurrent.FutureTask.run(FutureTask.java:166)
[pmd] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
[pmd] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[pmd] at java.lang.Thread.run(Thread.java:679)
[pmd] Caused by: org.jaxen.UnresolvableException: No Such Function string-join
[pmd] at org.jaxen.SimpleFunctionContext.getFunction(SimpleFunctionContext.java:127)
[pmd] at org.jaxen.ContextSupport.getFunction(ContextSupport.java:242)
[pmd] at org.jaxen.Context.getFunction(Context.java:216)
[pmd] at org.jaxen.expr.DefaultFunctionCallExpr.evaluate(DefaultFunctionCallExpr.java:172)
[pmd] at org.jaxen.expr.DefaultFunctionCallExpr.evaluateParams(DefaultFunctionCallExpr.java:191)
[pmd] at org.jaxen.expr.DefaultFunctionCallExpr.evaluate(DefaultFunctionCallExpr.java:175)
[pmd] at org.jaxen.expr.DefaultFunctionCallExpr.evaluateParams(DefaultFunctionCallExpr.java:191)
[pmd] at org.jaxen.expr.DefaultFunctionCallExpr.evaluate(DefaultFunctionCallExpr.java:175)
[pmd] at org.jaxen.expr.DefaultEqualityExpr.evaluate(DefaultEqualityExpr.java:75)
[pmd] at org.jaxen.expr.DefaultPredicate.evaluate(DefaultPredicate.java:95)
[pmd] at org.jaxen.expr.PredicateSet.applyPredicate(PredicateSet.java:269)
[pmd] at org.jaxen.expr.PredicateSet.evaluatePredicates(PredicateSet.java:244)
[pmd] at org.jaxen.expr.DefaultStep.evaluate(DefaultStep.java:164)
[pmd] at org.jaxen.expr.DefaultLocationPath.evaluate(DefaultLocationPath.java:140)
[pmd] at org.jaxen.expr.DefaultXPathExpr.asList(DefaultXPathExpr.java:102)
[pmd] at org.jaxen.BaseXPath.selectNodesForContext(BaseXPath.java:674)
[pmd] at org.jaxen.BaseXPath.selectNodes(BaseXPath.java:213)
[pmd] at net.sourceforge.pmd.lang.rule.xpath.JaxenXPathRuleQuery.evaluate(JaxenXPathRuleQuery.java:76)
[pmd] ... 15 more

Discussion


Log in to post a comment.