我在使用Saxon-HE 9.8.0-8的Fuse 7.4上使用Apache Camel的XPath函数来计算表达式normalize-space(in:header('myheader')) castable as xs:dateTime
。
由于参数net.sf.saxon.xpath.XPathExpressionImpl.evaluate(Object node,QName qname)
之一为空,因此node
函数出现nullpointerexception失败。
java.lang.NullPointerException
at net.sf.saxon.xpath.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:172)
at org.apache.camel.builder.xml.XPathBuilder.doInEvaluateAs(XPathBuilder.java:977)
at org.apache.camel.builder.xml.XPathBuilder.evaluateAs(XPathBuilder.java:850)
at org.apache.camel.builder.xml.XPathBuilder.matches(XPathBuilder.java:172)
我从Saxon-HE的源代码中看到,在9.5版之前,方法XPathExpressionImpl.evaluate
检查node
是否为null并以不同的方式处理。从Saxon-HE 9.6开始,该支票已被删除,导致当node
为null
时抛出NPE。
任何原因,为什么要在Saxon上完成,以及对此是否有任何修复或解决方法?
我可以想到的一种解决方法是在Camel上调用xpath表达式之前设置一个虚拟主体,但是我只是对Saxon-HE的更改感到好奇,以消除空检查。