FileNotFoundException в тестовом случае запускается с Maven с помощью загрузчика ресурсов Spring

Наша программа отправляет письма. Для отправки почты в него входит вложение.

Проект настроен с Maven. Контрольный пример JUnit сначала загружает конфигурацию пружины. Spring загружает файл с помощью DefaultResourceLoader. При запуске этого непосредственно в рабочей области он работает нормально, однако в качестве теста maven он не проходит.

Конфигурация Spring для загрузчика ресурсов:

<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] не может быть преобразован в абсолютный путь к файлу, поскольку он не находится в файловой системе: jar:file:/C:/IBM/workspace/efMy10/ef-mvxsrv-reactor/ef-mvxsrv-service-resources/target/ef-mvxsrv-service-resources-1.5.23-SNAPSHOT.jar!/templates/efmaillogo.jpg в org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:204) в org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:52) в SomeClassA.someMethod(SomeClassA.java:9)

Спринг пытается найти файл в банке. При запуске его в качестве теста junit в eclipse все работает, потому что Spring находит файл непосредственно в рабочей области. Однако при запуске того же модульного теста с maven он завершается неудачно, потому что не находит файл, потому что он находится в банке в другом модуле. Файл в другом модуле нужен другим модулям, поэтому я не хочу его перемещать. На сервере приложений, на котором все развернуто, он также работает, потому что файл.ear расширяется.

Мне интересно, есть ли другой способ получить доступ к файлу с помощью Spring, чтобы мне не пришлось пропустить этот тестовый пример с Maven.

Обновление Попытка поиска файла:

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

Однако теперь происходит сбой при отправке почты с Transport.send(msg),

java.io.FileNotFoundException: файл:\C:\Users\uhe.m2\ хранилище \com\clavisit\ef\mvxsrv\ef-mvxsrv-service-resources\1.5.23-SNAPSHOT\ef-mvxsrv-service-resources-1.5.23-SNAPSHOT.jar!\ Templates \ efmaillogo.jpg (неверный синтаксис имени файла, имени каталога или метки тома) в com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1141) в javax.mail.Transport.send0(Transport.java:195) на javax.mail.Transport.send(Transport.java:124) на com.clavisit.ef.ep.service.integration.handler.mail.SendMail.sendMessage(SendMail.java:153)

1 ответ

Решение

Строка filePath = defaultResourceLoader.getResource (mailLogo).getURL ().getFile ();

Вышеуказанное изменение кода должно работать в соответствии с обсуждением в этой теме http://www.coderanch.com/t/474047/Spring/Spring-cannot-find-file-classpath

Другие вопросы по тегам