Unconfirmed bug: NPE using cached transformer

Saturday, 25 April 2020 · 4 messages · last reply 29 Apr 2020
AS
Andrew Sales25 Apr 2020 17:18 #
Hello, I'd like to run a transform on multiple documents using a cached transformer, accumulating any errors that occur. This minimal example -
for $doc in (<a/>,<b/>, <c/>)
return
try{
xslt:transform(
  $doc,
  <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version='2.0'>
    <xsl:template match='/'><xsl:sequence select='error()'/></xsl:template>
  </xsl:transform>,
  map{},
  map{'cache':'true'}
)
}
catch * {$err:description}
- results in: Error in xsl:sequence/@select on line 1 column 135 of [...]: FOER0000: Error signalled by application call on error()Improper use? Potentia l bug? Your feedback is welcome: Contact: basex-talk at mailman.uni-konstanz.de Version: BaseX 9.3.2 Java: Oracle Corporation, 1.8.0_241 OS: Windows 7, amd64 Stack Trace: java.lang.NullPointerException at org.basex.io.out.ArrayOutput.write(ArrayOutput.java:32) at java.io.OutputStream.write(Unknown Source) at java.io.PrintStream.write(Unknown Source) at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source) at sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source) at sun.nio.cs.StreamEncoder.flushBuffer(Unknown Source) at java.io.OutputStreamWriter.flushBuffer(Unknown Source) at java.io.PrintStream.write(Unknown Source) at java.io.PrintStream.print(Unknown Source) at java.io.PrintStream.println(Unknown Source) at net.sf.saxon.lib.StandardLogger.println(StandardLogger.java:121) at net.sf.saxon.lib.Logger.error(Logger.java:45) at net.sf.saxon.lib.StandardErrorListener.fatalError(StandardErrorListen er.java:305) at net.sf.saxon.Controller.reportFatalError(Controller.java:958) at net.sf.saxon.Controller.transform(Controller.java:1914) at net.sf.saxon.s9api.XsltTransformer.transform(XsltTransformer.java:579 ) at net.sf.saxon.jaxp.TransformerImpl.transform(TransformerImpl.java:185)
        at
org.basex.query.func.xslt.XsltTransform.transform(XsltTransform.java:
135)
        at
org.basex.query.func.xslt.XsltTransform.transform(XsltTransform.java:
62)
        at
org.basex.query.func.xslt.XsltTransform.item(XsltTransform.java:40)
        at org.basex.query.expr.ParseExpr.value(ParseExpr.java:51)
        at org.basex.query.expr.Try.value(Try.java:94)
        at org.basex.query.expr.ParseExpr.iter(ParseExpr.java:46)
        at org.basex.query.expr.gflwor.GFLWOR$1.next(GFLWOR.java:72)
        at org.basex.query.QueryContext.next(QueryContext.java:353)
        at org.basex.query.scope.MainModule$1.next(MainModule.java:104)
        at org.basex.core.cmd.AQuery.query(AQuery.java:109)
        at org.basex.core.cmd.XQuery.run(XQuery.java:22)
        at org.basex.core.Command.run(Command.java:257)
        at org.basex.core.Command.execute(Command.java:93)
        at org.basex.api.client.LocalSession.execute(LocalSession.java:132)
        at org.basex.api.client.Session.execute(Session.java:36)
        at org.basex.core.CLI.execute(CLI.java:92)
        at org.basex.BaseX.<init>(BaseX.java:107)
        at org.basex.BaseX.main(BaseX.java:43)
The exception does not occur if 'cache' is set to 'false'. Relatedly, if I amend the query to this:
for $doc in (<a/>,<b/>,<c/>)
return
try{
xslt:transform(
  $doc,
  <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema" version='2.0'>
    <xsl:template match='/'>
      <xsl:sequence select='if(a) then error(xs:QName("err"), "oops") else
.'/>
    </xsl:template>
  </xsl:transform>,
  map{},
  map{'cache':'true'}
)
}
catch * {<err>{$err:description}</err>}
the error message is passed through for the first item in the sequence (<a/>), but is lost, resulting in <err/> when adjusted to error on subsequent items (<b/> or <c/>). Again, this works as expected if the transformer is not cached. Thanks and regards, Andrew <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> Virus-free. www.avast.com <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
BD
Bridger Dyson-Smith25 Apr 2020 20:30 #
Hi Andrew and list, I ran into a similar error with 9.3.3-beta this last week but haven't had a chance to work up a SSCCE. Your report makes me think I need to do so! Best, Bridger
Quoted text · Andrew Sales · 119 lines
On Sat, Apr 25, 2020, 11:19 AM Andrew Sales <andrew at andrewsales.com> wrote: > Hello, > > I'd like to run a transform on multiple documents using a cached > transformer, accumulating any errors that occur. > > This minimal example - > > for $doc in (<a/>,<b/>, <c/>) > return > try{ > xslt:transform( > $doc, > <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version='2.0'> > <xsl:template match='/'><xsl:sequence select='error()'/></xsl:template> > </xsl:transform>, > map{}, > map{'cache':'true'} > ) > } > catch * {$err:description} > > - results in: > > Error in xsl:sequence/@select on line 1 column 135 of [...]: > FOER0000: Error signalled by application call on error()Improper use? > Potentia > l bug? Your feedback is welcome: > Contact: basex-talk at mailman.uni-konstanz.de > Version: BaseX 9.3.2 > Java: Oracle Corporation, 1.8.0_241 > OS: Windows 7, amd64 > Stack Trace: > java.lang.NullPointerException > at org.basex.io.out.ArrayOutput.write(ArrayOutput.java:32) > at java.io.OutputStream.write(Unknown Source) > at java.io.PrintStream.write(Unknown Source) > at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source) > at sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source) > at sun.nio.cs.StreamEncoder.flushBuffer(Unknown Source) > at java.io.OutputStreamWriter.flushBuffer(Unknown Source) > at java.io.PrintStream.write(Unknown Source) > at java.io.PrintStream.print(Unknown Source) > at java.io.PrintStream.println(Unknown Source) > at net.sf.saxon.lib.StandardLogger.println(StandardLogger.java:121) > at net.sf.saxon.lib.Logger.error(Logger.java:45) > at > net.sf.saxon.lib.StandardErrorListener.fatalError(StandardErrorListen > er.java:305) > at net.sf.saxon.Controller.reportFatalError(Controller.java:958) > at net.sf.saxon.Controller.transform(Controller.java:1914) > at > net.sf.saxon.s9api.XsltTransformer.transform(XsltTransformer.java:579 > ) > at > net.sf.saxon.jaxp.TransformerImpl.transform(TransformerImpl.java:185) > > at > org.basex.query.func.xslt.XsltTransform.transform(XsltTransform.java: > 135) > at > org.basex.query.func.xslt.XsltTransform.transform(XsltTransform.java: > 62) > at > org.basex.query.func.xslt.XsltTransform.item(XsltTransform.java:40) > at org.basex.query.expr.ParseExpr.value(ParseExpr.java:51) > at org.basex.query.expr.Try.value(Try.java:94) > at org.basex.query.expr.ParseExpr.iter(ParseExpr.java:46) > at org.basex.query.expr.gflwor.GFLWOR$1.next(GFLWOR.java:72) > at org.basex.query.QueryContext.next(QueryContext.java:353) > at org.basex.query.scope.MainModule$1.next(MainModule.java:104) > at org.basex.core.cmd.AQuery.query(AQuery.java:109) > at org.basex.core.cmd.XQuery.run(XQuery.java:22) > at org.basex.core.Command.run(Command.java:257) > at org.basex.core.Command.execute(Command.java:93) > at org.basex.api.client.LocalSession.execute(LocalSession.java:132) > at org.basex.api.client.Session.execute(Session.java:36) > at org.basex.core.CLI.execute(CLI.java:92) > at org.basex.BaseX.<init>(BaseX.java:107) > at org.basex.BaseX.main(BaseX.java:43) > > The exception does not occur if 'cache' is set to 'false'. > > Relatedly, if I amend the query to this: > > for $doc in (<a/>,<b/>,<c/>) > return > try{ > xslt:transform( > $doc, > <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xs="http://www.w3.org/2001/XMLSchema" version='2.0'> > <xsl:template match='/'> > <xsl:sequence select='if(a) then error(xs:QName("err"), "oops") else > .'/> > </xsl:template> > </xsl:transform>, > map{}, > map{'cache':'true'} > ) > } > catch * {<err>{$err:description}</err>} > > the error message is passed through for the first item in the sequence > (<a/>), but is lost, resulting in <err/> when adjusted to error on > subsequent items (<b/> or <c/>). > > Again, this works as expected if the transformer is not cached. > > Thanks and regards, > Andrew > > > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> Virus-free. > www.avast.com > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> > <#m_-7045194468050368418_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >
CG
Christian Grünin reply to Andrew Sales, 25 Apr 2020, 17:1826 Apr 2020 12:14 #
Hi Andrew,
Quoted text · Andrew Sales · 3 lines
> Error in xsl:sequence/@select on line 1 column 135 of [...]: > FOER0000: Error signalled by application call on error()Improper use? Potentia > l bug? Your feedback is welcome:
…fixed in the latest snapshot [1].
Quoted text · Andrew Sales · 1 line
> the error message is passed through for the first item in the sequence (<a/>), but is lost, resulting in <err/> when adjusted to error on subsequent items (<b/> or <c/>).
I guess this only happens with Saxon and (as you already indicated) if the transformer is cached, so I’m not sure if we can fix this so easily. I’ll have some more thought. Best, Christian [1] http://files.basex.org/releases/latest/
AS
Andrew Sales29 Apr 2020 15:52 #
Many thanks, Christian. - Andrew
Quoted text · Christian Grün · 24 lines
On Sun, 26 Apr 2020 at 11:15, Christian Grün <christian.gruen at gmail.com> wrote: > Hi Andrew, > > > Error in xsl:sequence/@select on line 1 column 135 of [...]: > > FOER0000: Error signalled by application call on error()Improper use? > Potentia > > l bug? Your feedback is welcome: > > …fixed in the latest snapshot [1]. > > > the error message is passed through for the first item in the sequence > (<a/>), but is lost, resulting in <err/> when adjusted to error on > subsequent items (<b/> or <c/>). > > I guess this only happens with Saxon and (as you already indicated) if > the transformer is cached, so I’m not sure if we can fix this so > easily. I’ll have some more thought. > > Best, > Christian > > [1] http://files.basex.org/releases/latest/ >

⚡Generated with XQuery