使用具有大(> 64k)模板的Groovy TemplateEngines

时间:2013-10-29 06:10:21

标签: groovy

如何使用 SimpleTemplateEngine GStringTemplateEngine 处理大于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 fails to work with >64K strings

我已经考虑过对输入进行分块,但这会带来一些自身的复杂性,例如确保不要在表达式中间打破。

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

尝试使用GStringTemplateEngine代替。来自javadoc:

  

处理替换变量和表达式的模板源文件   在模板源文本中的占位符,以产生所需的   使用流式方法输出。这个引擎有相同的   SimpleTemplateEngine的功能,但创建模板   使用可写闭包使其更具可扩展性   模板或流媒体方案。

您可能只需将new SimpleTemplateEngine()替换为new GStringTemplateEngine()即可,但当然应该对其进行测试。