【发布时间】:2020-01-07 07:17:39
【问题描述】:
从现在开始我使用SimpleTemplateEngine 来处理我的模板。我从JarFile 获取模板文件并使用这样的阅读器创建模板:
Reader reader = new InputStreamReader(jarFile.getInputStream(jarEntry), "UTF-8");
Template template = engine.createTemplate(reader);
String fileString = template.make(model).toString();
这工作正常,但现在我需要从一个更大的文件创建一个模板,因此 SimpleTemplateEngine 无法处理这个问题,因为它被限制为 ~64K。
groovy.lang.GroovyRuntimeException: 无法解析模板脚本 (您的模板可能包含错误或尝试使用表达式 当前不支持):启动失败: SimpleTemplateScript1.groovy:5614:字符串太长。给定的字符串 是 298596 个 Unicode 代码单元,但最多只有 65535 个 允许。
在documentation 中,它说SimpleTemplateEngine 和StreamingTemplateEngine 工作方式相同,但字符串> 64K。当我切换引擎时,我收到此错误:
编辑堆栈跟踪:
java.io.IOException: mark() not supported
at java.io.Reader.mark(Reader.java:232) ~[na:1.8.0_181]
at groovy.text.StreamingTemplateEngine$StreamingTemplate.handleEscaping(StreamingTemplateEngine.java:556) ~[groovy-templates-2.5.7.jar!/:2.5.7]
at groovy.text.StreamingTemplateEngine$StreamingTemplate.<init>(StreamingTemplateEngine.java:460) ~[groovy-templates-2.5.7.jar!/:2.5.7]
at groovy.text.StreamingTemplateEngine.createTemplate(StreamingTemplateEngine.java:215) ~[groovy-templates-2.5.7.jar!/:2.5.7]
我是否必须以不同的方式读取 jarFile 或如何摆脱此错误?
【问题讨论】:
-
GeneratorIntegrationTest.groovy:206中有什么内容? -
见:stackoverflow.com/questions/5529754/… - 也许你需要一个缓冲的方法来包装你的资源。
-
@cfrick 这是我触发模板创建的常规测试。我已经尝试过了,但没有成功
-
请向我们展示完整的堆栈跟踪。