@PostContruct дает NullPointerException во время запуска сервера - PullRequest
0 голосов
/ 03 июля 2018

Я получаю Исключение нулевого указателя при запуске сервера в первой строке.

public class DefaultAreaPostalCodeService extends AbstractBusinessService implements AreaPostalCodeService {

        private Map<String,List<PostalCodeData>> suburbMap;

        @PostConstruct
        @Transactional
        public void initialize() {
            List<AreaPostalCodeModel> postalCodes = areaPostalCodeDao.getAllAreaPostalCodes();
            populateSuburbMap(postalCodes);
        }
    }

<bean id="areaPostalCodeService"
          class="za.co.testro.core.address.impl.DefaultAreaPostalCodeService" parent="abstractBusinessService">
        <property name="areaPostalCodeDao" ref="areaPostalCodeDao" />
    </bean>

Я просто хочу заполнить suburbMap при запуске сервера, чтобы я мог использовать его позже.

Журналы ошибок-

Ошибка создания бина с именем 'areaPostalCodeService': вызов сбой метода init; вложенным исключением является java.lang.NullPointerException WARN [localhost-startStop-1] [CloseAwareApplicationContext] Исключение встречается во время инициализации контекста - отмена обновления попытка: org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'areaPostalCodeService': вызов сбой метода init; вложенным исключением является java.lang.NullPointerException Пинг JVM занял 10 секунд, чтобы ответить. ОШИБКА [localhost-startStop-1] [HybrisContextFactory] Ошибка инициализации глобальный контекст приложения! org.springframework.beans.factory.BeanCreationException: ошибка создание бина с именем 'areaPostalCodeService': вызов init метод не удался; вложенным исключением является java.lang.NullPointerException в org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization (InitDestroyAnnotationBeanPostProcessor.java:136) ~ [весна-бобы-4.3.3.REL

РЕДАКТИРОВАТЬ 1 :

Я все еще получаю исключение нулевого указателя после добавления моего кода в afterProperties () .

INFO [localhost-startStop-1] [ListMergeDirectiveBeanPostProcessor] Постобработка ListMergeDirective [PromotionActionResultRaoExtractorListMergeDirective] на Бобе [cartRAOProviderExtractors] WARN [localhost-startStop-1] [CloseAwareApplicationContext] Исключение Promjava.lang.NullPointerException WARN [localhost-startStop-1] [CloseAwareApplicationContext] Исключительная ситуация в контексте инициализация - отмена попытки обновления: org.springframework.beans.factory.BeanCreationException: ошибка создание бина с именем 'areaPostalCodeService', определенного в пути к классу ресурс [testcore-spring.xml]: сбой вызова метода init; Вложенное исключение - java.lang.NullPointerException ОШИБКА [localhost-startStop-1] [HybrisContextFactory] Ошибка инициализации глобальный контекст приложения! org.springframework.beans.factory.BeanCreationException: ошибка создание бина с именем 'areaPostalCodeService', определенного в пути к классу ресурс [testcore-spring.xml]: сбой вызова метода init; Небраска исключение sted является java.lang.NullPointerException в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1583) ~ [весна-бобы-4.3.3.RELEASE.jar: 4.3.3.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:545) ~ [весна-бобы-4.3.3.RELEASE.jar: 4.3.3.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:482) ~ [spring-beans-4.3.3.RELEASE.jar: 4.3.3.RELEASE] ntered во время контекста инициализация - отмена попытки обновления: org.springframework.beans.factory.BeanCreationException: ошибка создание бина с именем 'areaPostalCodeService', определенного в пути к классу ресурс [testcore-spring.xml]: сбой вызова метода init; вложенное исключение

РЕДАКТИРОВАТЬ 2 :

Все еще получает исключение нулевого указателя после вызова компонента с контекстом приложения.

Registry.getApplicationContext().getBean("areaPostalCodeDao", AreaPostalCodeDao.class).getAllAreaPostalCodes()

Журналы ошибок-

INFO [localhost-startStop-1] [ListMergeDirectiveBeanPostProcessor] Постобработка ListMergeDirective [PromotionActionResultRaoExtractorListMergeDirective] на Бобе [cartRAOProviderExtractors] WARN [localhost-startStop-1] [CloseAwareApplicationContext] Исключительная ситуация в контекстеинициализация - отмена попытки обновления: org.springframework.beans.factory.BeanCreationException: ошибка создание бина с именем 'areaPostalCodeService', определенного в пути к классу ресурс [testcore-spring.xml]: сбой вызова метода init; вложенным исключением является java.lang.NullPointerException WARN [localhost-startStop-1] [CloseAwareApplicationContext] Исключение встречается во время инициализации контекста - отмена обновления попытка: org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'areaPostalCodeService', определенного в классе ресурс ресурса [testcore-spring.xml]: сбой вызова метода init; Вложенное исключение - java.lang.NullPointerException ОШИБКА [localhost-startStop-1] [HybrisContextFactory] Ошибка инициализации глобальный контекст приложения! org.springframework.beans.factory.BeanCreationException: ошибка создание бина с именем 'areaPostalCodeService', определенного в пути к классу ресурс [testcore-spring.xml]: сбой вызова метода init; Небраска исключение sted является java.lang.NullPointerException в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1583) ~ [весна-бобы-4.3.3.RELEASE.jar: 4.3.3.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:545) ~ [весна-бобы-4.3.3.RELEASE.jar: 4.3.3.RELEASE]

Вызывается: org.springframework.beans.FatalBeanException: Context Hybris Global Context Factory не удалось создать правильно из-за, Ошибка создания бина с именем 'areaPostalCodeService', определенного в классе ресурс ресурса [testcore-spring.xml]: сбой вызова метода init; вложенным исключением является java.lang.NullPointerException at de.hybris.platform.core.HybrisContextFactory.build (HybrisContextFactory.java:314)

1 Ответ

0 голосов
/ 04 июля 2018

такое поведение очень нормально, потому что метод @PostConstruct будет вызываться перед введением areaPostalCodeDao bean-компонента в свойство areaPostalCodeDao с нулевым значением (на данный момент).

Существует 4 способа запустить некоторый код при инициализации bean-компонента, но каждый из них завершается определенным шагом. Это следующие способы: добавление кода в конструктор , добавление метода @PostConstruct, реализация интерфейса afterPropertiesSet() из InitializingBean или добавление init-method.

После строительства будет вызван

@PostConstruct, затем afterPropertiesSet и затем init-method.

Так что в вашем случае вы должны сделать, как указано выше:

import org.springframework.beans.factory.InitializingBean;  

      public class DefaultAreaPostalCodeService extends AbstractBusinessService implements AreaPostalCodeService,InitializingBean {

           private Map<String,List<PostalCodeData>> suburbMap;

           @Override
           @Transactional
           public void afterPropertiesSet() {
               List<AreaPostalCodeModel> postalCodes = areaPostalCodeDao.getAllAreaPostalCodes();
               populateSuburbMap(postalCodes);
           }
       }
...