Saxonica EE Xslt 转换处理无限循环

Posted

技术标签:

【中文标题】Saxonica EE Xslt 转换处理无限循环【英文标题】:Saxonica EE Xslt tranformation handling infinte loop 【发布时间】:2021-09-05 07:18:44 【问题描述】:

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

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

【问题讨论】:

究竟有哪些 XSLT 代码您认为是循环甚至无限循环?至于经过某些处理后的爆发,在 XSLT 3(即 Saxon 9.8 或更高版本)中最接近的是 xsl:iteratexsl:break 我无法控制 xslt 或有效负载,想检查在 saxonica xslt 转换中是否有处理无限循环的任何标准方法 【参考方案1】:

与其他编程语言一样,限制程序使用的资源是执行框架的问题,而不是语言处理器本身的问题。例如,您可以在这里找到一些想法: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 的原因。

【讨论】:

感谢 Michael,我们将研究选项,我们无法控制用户将上传到我们的应用程序的 xslt。 在这种情况下要非常小心安全。注意禁用扩展函数的使用以及任何使用 file: URI 和 document() 函数访问本地文件存储的尝试。未经验证在您的服务器上运行其他人的不受信任的代码是一件非常可怕的事情。

以上是关于Saxonica EE Xslt 转换处理无限循环的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XSLT saxonica 将 xml 转换为点? [复制]

Saxonica URIResolver 中的异常处理

[每日一学]apache camel|XSLT|SAXON

XML XSLT 使用 SAXON EE10.6 流式传输大型 xml 文件

XSLT 代码的优化

如何使用 saxonica 将 xml 转换为 graphviz