如何使用 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 。
我已经考虑过对输入进行分块,但这会带来一些自身的复杂性,例如确保不要在表达式中间打破。
我将不胜感激任何其他建议。
答案 0 :(得分:3)
找到GStringTemplateEngine
的一些替代品。这些可以处理大字符串。
https://github.com/mbjarland/groovy-streaming-template-engine
答案 1 :(得分:1)
尝试使用GStringTemplateEngine
代替。来自javadoc:
处理替换变量和表达式的模板源文件 在模板源文本中的占位符,以产生所需的 使用流式方法输出。这个引擎有相同的 SimpleTemplateEngine的功能,但创建模板 使用可写闭包使其更具可扩展性 模板或流媒体方案。
您可能只需将new SimpleTemplateEngine()
替换为new GStringTemplateEngine()
即可,但当然应该对其进行测试。