2012-06-18 28 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。 –

相關問題