无法解析模板加载器路径Freemarker

时间:2012-09-14 17:13:46

标签: classpath freemarker

我在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)

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

您的信息:我没有使用爆炸部署。

1 个答案:

答案 0 :(得分:5)

这无需担心。请注意,日志级别是DEBUG,而不是ERROR或WARNING。

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