【问题标题】:Cannot resolve template loader path Freemarker无法解析模板加载器路径 Freemarker
【发布时间】:2012-09-07 21:20:59
【问题描述】:

我在 Spring 中使用 freemarker。

这是我配置 freemarker 的方式:

<bean id="freemarkerConfiguration" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">     
    <property name="templateLoaderPath" value="classpath:/META-INF/templates"/>    
</bean> 

此配置实际上运行良好,我可以使用模板等生成报告。

但是在 Weblogic 中,我总是得到这个异常:

15 Sep 2012 01:03:02,060 DEBUG DefaultListableBeanFactory.doCreateBean:504 - Eagerly caching bean 'freemarkerConfiguration' to allow for resolving potential circular references
15 Sep 2012 01:03:02,074 DEBUG DefaultListableBeanFactory.invokeInitMethods:1498 - Invoking afterPropertiesSet() on bean with name 'freemarkerConfiguration'
15 Sep 2012 01:03:02,228 DEBUG FreeMarkerConfigurationFactoryBean.getTemplateLoaderForPath:360 - Cannot resolve template loader path [classpath:/META-INF/templates] to [java.io.File]: using SpringTemplateLoader as fallback
java.io.FileNotFoundException: class path resource [META-INF/templates] cannot be resolved to absolute file path because it does not reside in the file system: zip:C:/Oracle/Middleware/user_projects/domains/gppuser/servers/GPPFilesBCSIS/tmp/_WL_user/GPPFilesBCSIS/phxni8/war/WEB-INF/lib/_wl_cls_gen.jar!/META-INF/templates
at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:204)
at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:52)
at org.springframework.ui.freemarker.FreeMarkerConfigurationFactory.getTemplateLoaderForPath(FreeMarkerConfigurationFactory.java:351)
at org.springframework.ui.freemarker.FreeMarkerConfigurationFactory.createConfiguration(FreeMarkerConfigurationFactory.java:304)
at org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean.afterPropertiesSet(FreeMarkerConfigurationFactoryBean.java:60)

这个错误实际上是在加载过程中发生的。任何人都知道如何解决和删除此异常?该文件实际上仍然是使用提供的模板生成的,所以我不太确定这个错误是什么。

供您参考:我没有使用爆炸部署。

【问题讨论】:

    标签: classpath freemarker


    【解决方案1】:

    这没什么好担心的。请注意,日志级别是 DEBUG,而不是 ERROR 或 WARNING。

    当模板目录可以通过java.io.File访问时(因为它不在jarwar等内部),Spring会将FreeMarker配置为直接使用java.io.File来加载模板,因为这样FreeMarker可以检查最后修改时间并自动重新加载模板。为了确定路径是否可以映射到普通目录,Spring 将调用Resource.getFile() 并查看它是否抛出IOException。如果是这样,Spring 会使用 DEBUG 级别记录,然后配置 FreeMarker 以通过 Spring 的资源抽象加载模板(当然不使用 Resource.getFile)。所以在你的情况下这是正常的程序流程。

    【讨论】:

    • 但是模板目录在我的war文件里面(也可以直接在war文件里面访问)
    • 是的。这就是为什么使用 Spring 的 Resource 机制而不是 File 的原因,正如我在上面解释的那样。再次,这很正常。这只是一条调试消息,而不是错误消息。 (除非您确实在调试,否则不应存储调试级别的消息。)或者这有什么问题?
    猜你喜欢
    • 2021-01-26
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 2013-03-18
    • 2013-01-09
    • 2011-05-11
    • 2018-02-25
    • 2018-04-16
    相关资源
    最近更新 更多