Velocity引擎无法从远程共享文件夹加载模板

时间:2013-11-08 05:35:58

标签: java windows velocity

我有以下代码

File temlateFile = new File( "D:/config/emails/MailBody.vm" );
    temlateFile.exists();
    VelocityEngine velocityEngine = new VelocityEngine();
    velocityEngine.setProperty(RuntimeConstants.RESOURCE_LOADER, "file");
    velocityEngine.setProperty("file.resource.loader.class", FileResourceLoader.class.getName());
    velocityEngine.setProperty("file.resource.loader.path", temlateFile.getParentFile().getAbsolutePath());
    velocityEngine.init();
    template = velocityEngine.getTemplate( temlateFile.getName() );

这是因为它从本地文件系统加载文件。

一旦我将第一个更改为:

File temlateFile = new File( "//remote/config/emails/MailBody.vm" );

它不起作用。

org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'MailBody.vm'
    at org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:474)
    at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:352)
    at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1533)
    at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1514)
    at org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:373)
    at com.actuate.iserver.mail.VelocityContent.<init>(VelocityContent.java:33)
    at com.actuate.iserver.mail.VolumeCreationMail.<init>(VolumeCreationMail.java:40)
    at com.actuate.iserver.mail.VolumeCreationMail.main(VolumeCreationMail.java:67)

在这两种情况下,temlateFile.exists()始终返回true。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

发现问题。这看起来像速度错误。所以

文件temlateFile =新文件(“//remote/config/emails/MailBody.vm”);作品

文件temlateFile =新文件(“\\ remote \ config \ emails \ MailBody.vm”);不起作用

答案 1 :(得分:0)

罪魁祸首 - 文件路径开头的两个反斜杠。 VelocityEngine无法正确处理它们。解决方法是用双斜杠替换前导双反斜杠

velocityEngine.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, temlateFile.getParent().replace("\\\\", "//"));

或者只是替换所有

velocityEngine.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, temlateFile.getParent().replace("\\", "/"));

版本1.7中仍然存在问题

新文件(&#34; // remote / config / emails / MailBody.vm&#34;); - 可能无效,因为file.getParent()可能会将路径转换为反斜杠。