Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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 пробелом) и усе заработало!  smile  smile 

Автор: ivg 23.1.2009, 13:48
Во многих случаях приведённый код не будет работать. ClassLoader#getResource() возвращает URL, и само содержимое этого ресурса может находиться чёрти-где(в JAR'е, на сервере и т.п.), а не только в файловой системе. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)