Hello,
we have a BaseX web application with RESTXQ services. I was doing
some load tests to see how it behaves in high load scenarios.
Some tests did throw IllegalStateExceptions somewhere in the Saxon
XSLT code (see stacktrace below).
We use a XSLT stylesheet to transform the XML response of our
services to an intermediate format that allows the transformation to
JSON.
(:~
: Transform XML to Json XML Schema (https://www.w3.org/TR/xslt-30/#schema-for-json).
: @param $xml XML node
: @return transformed XML
:)
declare function json:to-json-xml($xml as element())
{
xslt:transform($xml, 'xml-to-json.xslt', map {}, map {'cache' : true()})
};
Is there some concurrency problem with the xslt module?
Best regards
Johannes
Unexpected error: Improper use? Potential bug? Your feedback is
welcome:
Contact: basex-talk@mailman.uni-konstanz.de
Version: BaseX 9.1.2
Java: Oracle Corporation, 1.8.0_191
OS: Linux, amd64
Stack Trace:
java.lang.IllegalStateException: The Controller is being
used recursively or concurrently. This is not permitted.
at
net.sf.saxon.Controller.checkReadiness(Controller.java:1287)
at
net.sf.saxon.trans.XsltController.applyTemplates(XsltController.java:685)
at
net.sf.saxon.s9api.AbstractXsltTransformer.applyTemplatesToSource(AbstractXsltTransformer.java:347)
at
net.sf.saxon.s9api.XsltTransformer.transform(XsltTransformer.java:338)
at
net.sf.saxon.jaxp.TransformerImpl.transform(TransformerImpl.java:71)
at
org.basex.query.func.xslt.XsltTransform.transform(XsltTransform.java:109)
at
org.basex.query.func.xslt.XsltTransform.transform(XsltTransform.java:59)
at
org.basex.query.func.xslt.XsltTransform.item(XsltTransform.java:37)
at
org.basex.query.expr.ParseExpr.value(ParseExpr.java:71)
at org.basex.query.expr.List.value(List.java:155)
at
org.basex.query.expr.gflwor.GFLWOR.value(GFLWOR.java:73)
at org.basex.query.expr.If.value(If.java:131)
at
org.basex.query.expr.gflwor.GFLWOR.value(GFLWOR.java:73)
at org.basex.query.expr.If.value(If.java:131)
at org.basex.query.expr.If.value(If.java:131)
at
org.basex.query.func.StaticFunc.invValue(StaticFunc.java:181)
at
org.basex.query.func.FuncCall.invoke(FuncCall.java:89)
at
org.basex.query.func.FuncCall.value(FuncCall.java:62)
at org.basex.query.func.FuncCall.iter(FuncCall.java:67)
at
org.basex.query.scope.MainModule.iter(MainModule.java:118)
at
org.basex.query.QueryContext.iter(QueryContext.java:335)
at
org.basex.http.restxq.RestXqResponse.serialize(RestXqResponse.java:73)
at
org.basex.http.web.WebResponse.create(WebResponse.java:56)
at
org.basex.http.restxq.RestXqServlet.run(RestXqServlet.java:54)
at
org.basex.http.BaseXServlet.service(BaseXServlet.java:59)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at
org.content42.services.filter.LoggingFilter.doFilter(LoggingFilter.java:44)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
at
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)