java - 解析 XSL 时 Saxon 中的 NullPointerException

标签 java xml xslt xslt-2.0 saxon

我使用的是 Saxon PE 9.4 版本。我在解析 XSL 时经常遇到问题,但问题并不一致。有时它来,有时它不来。以下是堆栈跟踪:

SEVERE: java.lang.NullPointerException
   at net.sf.saxon.expr.instruct.Bindery.getGlobalVariableValue(Bindery.java:264)
   at net.sf.saxon.expr.instruct.GlobalParam.evaluateVariable(GlobalParam.java:47)
   at net.sf.saxon.expr.VariableReference.evaluateVariable(VariableReference.java:488)
   at net.sf.saxon.expr.VariableReference.iterate(VariableReference.java:441)
   at net.sf.saxon.expr.Atomizer.iterate(Atomizer.java:230)
   at net.sf.saxon.expr.AtomicSequenceConverter.iterate(AtomicSequenceConverter.java:281)
   at net.sf.saxon.expr.CardinalityChecker.evaluateItem(CardinalityChecker.java:249)
   at net.sf.saxon.expr.ItemChecker.evaluateItem(ItemChecker.java:178)
   at net.sf.saxon.expr.parser.ExpressionTool.evaluate(ExpressionTool.java:320)
   at net.sf.saxon.expr.parser.ExpressionTool.lazyEvaluate(ExpressionTool.java:434)
   at com.saxonica.expr.JavaExtensionFunctionCall.iterate(JavaExtensionFunctionCall.java:275)
   at net.sf.saxon.expr.Expression.evaluateItem(Expression.java:411)
   at net.sf.saxon.expr.AtomicSequenceConverter.evaluateItem(AtomicSequenceConverter.java:325)
   at net.sf.saxon.expr.instruct.ValueOf.evaluateItem(ValueOf.java:273)
   at net.sf.saxon.expr.instruct.SimpleNodeConstructor.iterate(SimpleNodeConstructor.java:258)
   at net.sf.saxon.expr.instruct.DocumentInstr.evaluateItem(DocumentInstr.java:302)
   at net.sf.saxon.expr.Atomizer.evaluateItem(Atomizer.java:240)
   at net.sf.saxon.expr.CastExpression.evaluateItem(CastExpression.java:320)
   at net.sf.saxon.expr.ValueComparison.effectiveBooleanValue(ValueComparison.java:682)
   at net.sf.saxon.expr.instruct.Choose.processLeavingTail(Choose.java:789)
   at net.sf.saxon.expr.instruct.Template.applyLeavingTail(Template.java:212)
   at net.sf.saxon.trans.Mode.applyTemplates(Mode.java:1034)
   at net.sf.saxon.Controller.transformDocument(Controller.java:1959)
   at net.sf.saxon.Controller.transform(Controller.java:1805)
   at dyngrammar.transform.TransformXSL.parseXSLT(TransformXSL.java:320)

使用的XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:request="java:common.RequestSearchCommand" exclude-result-prefixes="request">
    <xsl:output omit-xml-declaration="yes" method="xml" indent="yes"/>
    <xsl:param name="decodeFlag"/>
    <xsl:param name="requestString"/>
    <xsl:variable name="segmentName">ABC</xsl:variable>
    <xsl:variable name="searchBlbContent">(CU0 ##)|(AMIS ##)</xsl:variable>
    <xsl:template match="/">
        <xsl:variable name="matchFlag">
            <xsl:value-of select="request:searchPattren($requestString, $segmentName, $searchBlbContent, $decodeFlag)" />
        </xsl:variable>
        <xsl:choose>
            <xsl:when test="$matchFlag = 'true'">
                <xsl:copy-of select="/*" />
            </xsl:when>
            <xsl:otherwise>
                <ABC></ABC>
            </xsl:otherwise>    
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

请建议我如何解决这个问题。

最佳答案

郑重声明,根据给出的信息,我认为导致此问题的原因很可能是使用 JAXP Transformer 对象在不同线程中同时执行多个转换,这是不允许的。

关于java - 解析 XSL 时 Saxon 中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27701124/

相关文章:

java - 如何将 stdin 和 stdout 重定向到 java 中的文本文件

Java:使用 Bouncy CaSTLe 进行 PGP 加密

xml - 识别 XSL 中每个元素的数据类型

xml - 使用 xslt 转换 xml

xml - 使用XSLT 1.0获得唯一值(不使用XSL:Key)

java - 使用 Java 8 流将 long[] 转换为 String

java - 在与 3d 中给定线同一平面上的垂直线上查找距离 t 的点

java - 找不到类 Android

c# - 读取 SOAP 消息响应 ASP.NET MVC4 C#

Python:如果在没有命名空间的情况下添加新元素,则 xpath.find() 将找不到新元素