1

我在 Spring 中使用 freemarker。

这是我配置 freemarker 的方式:

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

此配置实际上工作正常,我可以使用模板等生成报告。

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

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)

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

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

4

1 回答 1

8

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

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

于 2012-09-15T01:57:35.713 回答