5

如何使用SimpleTemplateEngineGS​​tringTemplateEngine处理大于 65535 个字符的模板?

我收到以下错误:

groovy.lang.GroovyRuntimeException:无法解析模板脚本(您的模板可能包含错误或尝试使用当前不支持的表达式):启动失败:SimpleTemplateScript1.groovy:5614:字符串太长。给定的字符串长度为 198495 个 Unicode 代码单元,但最多允许 65535 个。

我正在使用以下代码构建模板:

def templateEngine = new SimpleTemplateEngine()
def binding = [:]
templateEngine
    .createTemplate(new FileReader("input.txt))
    .make(binding)
    .writeTo(new FileWriter(new File("output.txt")))

我发现JIRA 3487与此问题相关:GStringTemplateEngine failed to work with >64K strings

我曾考虑过对输入进行分块,但这会带来其自身的复杂性,例如确保不会在表达式中间中断。

我将不胜感激任何其他建议。

4

2 回答 2

3

GStringTemplateEngine找到了一些可以处理大字符串的替代品。

https://github.com/mbjarland/groovy-streaming-template-engine

https://github.com/mbknor/gt-engine

于 2014-01-07T01:54:09.100 回答
1

尝试使用 aGStringTemplateEngine代替。从javadoc:

处理模板源文件,将变量和表达式替换为模板源文本中的占位符,以使用流方法生成所需的输出。该引擎具有与 SimpleTemplateEngine 等效的功能,但使用可写闭包创建模板,使其在大型模板或流式场景中可能更具可扩展性。

您可能会简单地替换new SimpleTemplateEngine()new GStringTemplateEngine(),但当然应该对其进行测试。

于 2013-10-29T09:48:35.030 回答