2014-08-28 3 views
1

У меня есть веб-приложение Java, которое работает с библиотекой jFuzzyLogic, которая использует файл rules.fcl, который находится по адресу WEB-INF/rules/rules.fcl.Правильно загружать файл, упакованный в файл .war

На моем локальном сервере все, кажется, работает, но когда я развернуть войну Heroku, я получаю эту ошибку:

java.lang.NullPointerException 
java.io.FileInputStream.<init>(FileInputStream.java:133) 
java.io.FileInputStream.<init>(FileInputStream.java:96) 
java.io.FileReader.<init>(FileReader.java:58) 
net.sourceforge.jFuzzyLogic.FIS.load(FIS.java:143) 
net.sourceforge.jFuzzyLogic.FIS.load(FIS.java:130) 
com.vukstankovic.professionalorientation.Results.calculation(Results.java:119) 

В моей Results на линии 119 Я пытаюсь загрузить rules.fcl вроде этого:

FIS fis = FIS.load(ctx.getRealPath("WEB-INF/rules/rules.fcl")); 

в начале этого метода у меня есть эта аннотацию:

@Context ServletContext ctx; 

Что я делаю неправильно?

ответ

1

Вы должны использовать ServletContext#getResourceAsStream, который будет загружать файлы с проектной траектории в зависимости от уровня корневой войны пакета:

InputStream inputStream = ctx.getResourceAsStream("/WEB-INF/rules/rules.fcl"); 

Тогда это до вас, чтобы использовать этот поток и приковать его для загрузки файла содержание. Это должно быть что-то вроде follwoing если на есть FIS#load метод, который принимает InputStream в качестве параметра Я:

boolean verbose = true; //Just choose your suitable value (verbose mode or not) 
FIS fis = FIS.load(inputStream, verbose); 

Просто поймал метод подписи из этого svn repo.

+0

Проблема в том, что 'FIS.load' ожидает' String' в качестве аргумента –

+0

Большое спасибо за это. Он работал так, как должен –

+0

Рад это слышать :) – tmarwen

0

Путь передается ServletContext.getRealPath() должен начинаться с '/' характера:

FIS fis = FIS.load(ctx.getRealPath("/WEB-INF/rules/rules.fcl")); 

а также в соответствии с javadoc:

This method returns null if the servlet container cannot translate the virtual path to a real path for any reason (such as when the content is being made available from a .war archive).

Так что, если ваш архив .war не извлекается, этот метод не будет Работа. Убедитесь, что ваш развернутый файл .war распакован.

Смежные вопросы