Actions
Bug #4357
closedXSLT using accumulator passes streamability analysis but crashed with java.lang.UnsupportedOperationException: net.sf.saxon.trans.XPathException: Navigation using preceding-sibling axis is not supported from a streamed input node
Status:
Closed
Priority:
Normal
Assignee:
-
Category:
Streaming
Sprint/Milestone:
-
Start date:
2019-10-22
Due date:
% Done:
0%
Estimated time:
Legacy ID:
Applies to branch:
9.8, 9.9, trunk
Fix Committed on Branch:
9.9, trunk
Fixed in Maintenance Release:
Platforms:
Description
I tried to solve a problem from the XSL list using streaming and an accumulator but both Saxon 9.9 EE and Saxon 9.8 EE crash running it.
The code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:mode on-no-match="shallow-copy" streamable="yes" use-accumulators="rev-change"/>
<xsl:accumulator name="rev-change" as="xs:boolean" initial-value="false()" streamable="yes">
<xsl:accumulator-rule match="topic" select="false()"/>
<xsl:accumulator-rule match="topic/revst" select="true()"/>
<xsl:accumulator-rule match="topic/revend" select="false()"/>
</xsl:accumulator>
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="topic/*[accumulator-before('rev-change')]">
<xsl:copy>
<xsl:attribute name="rev">changed</xsl:attribute>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="revst | revend" priority="2"/>
</xsl:stylesheet>
Example input:
<root>
<topic id="idm140322603719792">
<chgdesc revnbr="42">Content</chgdesc>
<title line-break="0">Content</title>
<revst/>
<para>Content</para>
<revend/>
<para>Content</para>
<revst/>
<note>
<para>Content</para>
</note>
<revend/>
<para>Content</para>
<revst/>
<para>Content</para>
<para>Content</para>
<revend/>
</topic>
</root>
Stack trace of Saxon 9.9.1.5 EE Java:
java.lang.UnsupportedOperationException: net.sf.saxon.trans.XPathException: Navigation using preceding-sibling axis is not supported from a streamed input node
at com.saxonica.ee.stream.om.FleetingNode.iterateAxis(FleetingNode.java:512)
at com.saxonica.ee.stream.om.FleetingElementNode.iterateAxis(FleetingElementNode.java:98)
at net.sf.saxon.tree.util.Navigator.getSiblingPosition(Navigator.java:1136)
at net.sf.saxon.pattern.GeneralPositionalPattern.getActualPosition(GeneralPositionalPattern.java:273)
at net.sf.saxon.pattern.GeneralPositionalPattern.internalMatches(GeneralPositionalPattern.java:242)
at net.sf.saxon.pattern.GeneralPositionalPattern.matchesBeneathAnchor(GeneralPositionalPattern.java:222)
at net.sf.saxon.pattern.AncestorQualifiedPattern.matchesBeneathAnchor(AncestorQualifiedPattern.java:211)
at net.sf.saxon.pattern.AncestorQualifiedPattern.matches(AncestorQualifiedPattern.java:193)
at net.sf.saxon.trans.rules.Rule.matches(Rule.java:255)
at com.saxonica.ee.trans.ModeEE.ruleMatches(ModeEE.java:133)
at net.sf.saxon.trans.SimpleMode.searchRuleChain(SimpleMode.java:661)
at net.sf.saxon.trans.SimpleMode.getRule(SimpleMode.java:547)
at com.saxonica.ee.stream.watch.ApplyTemplatesAction.getRule(ApplyTemplatesAction.java:260)
at com.saxonica.ee.stream.watch.ApplyTemplatesAction.startSelectedParentNode(ApplyTemplatesAction.java:144)
at com.saxonica.ee.stream.watch.Trigger.startSelectedParentNode(Trigger.java:85)
at com.saxonica.ee.stream.watch.WatchManager.startElement(WatchManager.java:274)
at net.sf.saxon.event.StartTagBuffer.startContent(StartTagBuffer.java:246)
at com.saxonica.ee.stream.ContentDetector.flush(ContentDetector.java:97)
at com.saxonica.ee.stream.ContentDetector.startElement(ContentDetector.java:33)
at net.sf.saxon.event.Stripper.startElement(Stripper.java:115)
at net.sf.saxon.event.ReceivingContentHandler.startElement(ReceivingContentHandler.java:367)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at net.sf.saxon.event.Sender.sendSAXSource(Sender.java:435)
at net.sf.saxon.event.Sender.send(Sender.java:167)
at net.sf.saxon.trans.XsltController.applyStreamingTemplates(XsltController.java:1050)
at net.sf.saxon.s9api.AbstractXsltTransformer.applyTemplatesToSource(AbstractXsltTransformer.java:339)
at net.sf.saxon.s9api.Xslt30Transformer.applyTemplates(Xslt30Transformer.java:311)
at net.sf.saxon.Transform.processFile(Transform.java:1283)
at net.sf.saxon.Transform.doTransform(Transform.java:815)
at net.sf.saxon.Transform.main(Transform.java:80)
Caused by: net.sf.saxon.trans.XPathException: Navigation using preceding-sibling axis is not supported from a streamed input node
at com.saxonica.ee.stream.om.FleetingNode.iterateAxis(FleetingNode.java:509)
... 39 more
Fatal error during transformation: java.lang.UnsupportedOperationException: net.sf.saxon.trans.XPathException: Navigation using preceding-sibling axis is not supported from a streamed input node
The code works fine with Saxon 9.9.1.5 HE, i.e. not using streaming.
Related issues
Please register to edit this issue
Actions