Saxonica EE Xslt 转换处理无限循环

问题描述

我在 java 应用程序中使用 saxonica EE(试用版)进行 xslt 转换,在使用 XSLT 转换有效负载时需要帮助处理无限循环。是否有任何我们可以为转换配置的超时,以便如果它进入无限循环,我们可以超时请求并且它不应该关闭应用程序?

我读到无限循环不会导致 saxonica 解析器中的堆栈溢出,因此超时是停止转换并抛出错误的更好选择。

解决方法

与其他编程语言一样,限制程序使用的资源是执行框架的问题,而不是语言处理器本身的问题。例如,您可以在这里找到一些想法:https://www.baeldung.com/java-stop-execution-after-certain-time

这里:How to properly stop the Thread in Java?

但是,如果线程处于紧密的 CPU 循环中,则中断线程可能会出现问题。

在 XSLT 中构建无限循环实际上相当困难,它需要一些独创性。但是编写需要很长时间有限时间的代码是很容易的,它只需要三四个嵌套的 xsl:for-each 语句和一个大的源文档。

我认为,实际的答案是不要让未经测试的代码在生产环境中运行。始终先在 IDE 中对其进行测试。例如,这就是为什么可以禁用 xsl:evaluate 的原因。