2012-06-18 29 views
2

我们的程序正在发送邮件。为了发送邮件,它包含一个附件。在测试用例中使用Spring资源加载器运行maven的FileNotFoundException

该项目设置与maven。 JUnit测试用例首先加载弹簧配置。 Spring正在使用它的DefaultResourceLoader加载文件。当直接在工作区内运行它时,它运行良好,但是作为maven测试它会失败。

春天的配置资源加载器:

<property name="defaultResourceLoader"> 
    <bean class="org.springframework.core.io.DefaultResourceLoader" /> 
</property> 

ImplementingClass:

@Service 
public class SomeClassA { 

    @Autowired 
    private DefaultResourceLoader defaultResourceLoader; 

    @Value("${mailLogoPath}") 
    private String mailLogo; 

    public void someMethod(){ 
     String filePath = defaultResourceLoader.getResource(mailLogo).getFile().getAbsolutePath(); 
    } 
} 

的异常点实际问题和区别:

java.io.FileNotFoundException:类路径资源[templates/efmaillogo.jpg]无法解析为绝对文件路径,因为它不驻留在f中ILE系统中:jar:文件:/ C:/IBM/workspace/efMy10/ef-mvxsrv-reactor/ef-mvxsrv-service-resources/target/ef-mvxsrv-service-resources-1.5.23-SNAPSHOT.jar /模板/ efmaillogo.jpg 在org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:204) 在org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:52) 在SomeClassA.someMethod(SomeClassA .java:9)

Spring试图在jar中查找文件。在eclipse中将它作为junit测试运行时,一切正常,因为spring直接在工作区内找到文件。但是,当使用maven运行相同的单元测试时,它会失败,因为它找不到该文件,因为它位于不同模块中的jar中。其他模块中的文件是不同模块所需的,所以我不想移动它。在部署它的所有应用程序服务器上,它的工作原理也是如此,因为扩展了.ear文件。

我不知道是否有一种不同的方式来访问与Spring的文件,这样我就不必跳过这个测试案例使用Maven。

更新 尝试过做一个查找的文件有:

String filePath = defaultResourceLoader.getResource(mailLogo).getURL.getFile(); 

时实际上Transport.send(msg)发送邮件但是现在失败。

java.io.FileNotFoundException:文件:\ C:\用户\ uhe.m2 \库\ COM \ clavisit \ EF \ mvxsrv \ EF-mvxsrv服务资源\ 1.5.23-SNAPSHOT \ EF - mvxsrv服务资源-1.5.23-SNAPSHOT.jar!\模板\ efmaillogo.jpg(文件名,目录名或卷标语法不正确。) 在com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport .java:1141) at javax.mail.Transport.send0(Transport.java:195) at javax.mail.Transport.send(Transport.java:124) at com.clavisit.ef.ep.service.integration .handler.mail.SendMail.sendMessage(SendMail.java:153)

+1

即使EAR展开工作,想必罐子仍然是一个罐子?在这种情况下,图像在jar中的服务器上找到,但在使用Maven的jar内找不到图像? –

+0

刚刚发现了它在服务器上工作的原因。它被放置在WEB-INF /类中。 –

回答

2

String filePath = defaultResourceLoader.getResource(mailLogo)。 getURL()。的GetFile();

上面的代码更改必须按照讨论在此线程http://www.coderanch.com/t/474047/Spring/Spring-cannot-find-file-classpath

+0

这个部分工作。不幸的是,我现在得到FileNotFoundException,发送邮件时,而不是直接查找它时。将发布更新的问题。 –

+0

我在我的DataHandler中直接使用了URL和URLDataSource。 –

相关问题