| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > java.io.File list() NullPointerException |
| Автор: RuselSt 23.1.2009, 09:49 |
| Всем привет. Срочно нужна помощь, может кто сталкивался с такой ошибкой. Есть веб приложение, которое нормально работает под XP, устанавливаю на windows 2003, вот в этом месте: public void initJbpm() { // ПОЛУЧАЕМ КАТАЛОГ File jbpmDir = new File( Thread.currentThread().getContextClassLoader().getResource(Constants.JBPM_DIR).getPath()); // ЭТО ЛОГИ log.info("jbpmDir ="+jbpmDir); log.info("Thread.currentThread().getContextClassLoader() ="+Thread.currentThread().getContextClassLoader()); log.info("Thread.currentThread().getContextClassLoader().getResource(Constants.JBPM_DIR) ="+Thread.currentThread().getContextClassLoader().getResource(Constants.JBPM_DIR)); log.info("Thread.currentThread().getContextClassLoader().getResource(Constants.JBPM_DIR).getPath() ="+Thread.currentThread().getContextClassLoader().getResource(Constants.JBPM_DIR).getPath()); CommandService cmd = new CommandServiceImpl(jbpmConfiguration); Boolean redeployAllProcesses = (Boolean)m2CommonFacade .getConvertedM2Property(Constants.StartupParams.PARAM_REDEPLOY_JBPM_PROCESSES.getName()); for (String fileName : jbpmDir.list()) // ОШИБКА ВЫБРАСЫВАЕТСЯ ЗДЕСЬ { if (redeployAllProcesses) { deployProcess(jbpmDir.getAbsolutePath() + "\\" + fileName); } else { String processName = ProcessDefinition.parseXmlInputStream( Thread.currentThread().getContextClassLoader().getResourceAsStream( Constants.JBPM_DIR + fileName)) .getName(); GetProcessDefinitionCommand getProccessDefinitonCommand = new GetProcessDefinitionCommand( processName); try { cmd.execute(getProccessDefinitonCommand); } catch (JbpmException e) { deployProcess(jbpmDir.getAbsolutePath() + "\\" + fileName); } } } } выбрасывается NullPointerException: java.lang.NullPointerException at ru.amfitel.m3000.ui.selfcare.core.blogic.m2000Impl.M2000ContextInitializer.initJbpm(M2000ContextInitializer.java:110) at ru.amfitel.m3000.ui.selfcare.core.mbean.InitializerServletContextListener.contextInitialized(InitializerServletContextListener.java:28) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4523) at org.apache.catalina.core.StandardContext.start(StandardContext.java:5184) at com.sun.enterprise.web.WebModule.start(WebModule.java:326) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:973) ... файл логов: 2009-01-22 15:08:04,703 INFO m2000Impl.M2000ContextInitializer - jbpmDir =C:\Program%20Files\Java\glassfish\domains\domain1\applications\j2ee-modules\amsc\WEB-INF\classes\jbpm 2009-01-22 15:08:04,703 INFO m2000Impl.M2000ContextInitializer - Thread.currentThread().getContextClassLoader() =WebappClassLoader delegate: true repositories: /WEB-INF/classes/ ----------> Parent Classloader: EJBClassLoader : urlSet = [] doneCalled = false Parent -> java.net.URLClassLoader@ed5d9d 2009-01-22 15:08:04,703 INFO m2000Impl.M2000ContextInitializer - Thread.currentThread().getContextClassLoader().getResource(Constants.JBPM_DIR) =file:/C:/Program%20Files/Java/glassfish/domains/domain1/applications/j2ee-modules/amsc/WEB-INF/classes/jbpm/ 2009-01-22 15:08:04,703 INFO m2000Impl.M2000ContextInitializer - Thread.currentThread().getContextClassLoader().getResource(Constants.JBPM_DIR).getPath() =/C:/Program%20Files/Java/glassfish/domains/domain1/applications/j2ee-modules/amsc/WEB-INF/classes/jbpm/ по файлам логов видно что jbpmDir не null. Может как-то связано с правами доступа? или это какой-то баг? |
| Автор: RuselSt 23.1.2009, 10:43 |
| уточнил по правам доступа - даны права администратора. не пойму в чем проблема? |
| Автор: RuselSt 23.1.2009, 13:14 |
| Уффф... нашел в чем причина! вся ошибка была в %20 в имени пути Program%20Files. Добавлено через 1 минуту и 37 секунд поменял на Program Files (c пробелом) и усе заработало! |
| Автор: ivg 23.1.2009, 13:48 |
| Во многих случаях приведённый код не будет работать. ClassLoader#getResource() возвращает URL, и само содержимое этого ресурса может находиться чёрти-где(в JAR'е, на сервере и т.п.), а не только в файловой системе. |