2016-01-21 2 views
1

Я пытаюсь перенести версию моего приложения из Hybris 4.8 в Hybris 5.6.0.5.HybrisContextFactory - Ошибка инициализации глобального контекста приложения

Когда сервер начинает меня это исключение:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'csTicketFacade' defined in class path resource [CoopAcceleratorFrontEndfacades-spring.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.accenture.hybris.facades.customerservice.impl.CoopCSTicketFacade]: Constructor threw exception; nested exception is java.lang.NullPointerException 

INFO | jvm 1 | main | 2016/01/20 11:41:54.777 | Caused by: java.lang.NullPointerException 
INFO | jvm 1 | main | 2016/01/20 11:41:54.790 |  at com.accenture.facades.common.FlexSelector.getPropertiesReader(FlexSelector.java:27) 
INFO | jvm 1 | main | 2016/01/20 11:41:54.797 |  at com.accenture.hybris.facades.customerservice.impl.CoopCSTicketFacade$TicketFlexSelector.getCsAgentGroupUID(CoopCSTicketFacade.java:68) 
INFO | jvm 1 | main | 2016/01/20 11:41:54.805 |  at com.accenture.hybris.facades.customerservice.impl.CoopCSTicketFacade$TicketFlexSelector.getCsAgentGroupModel(CoopCSTicketFacade.java:31) 
INFO | jvm 1 | main | 2016/01/20 11:41:54.809 |  at com.accenture.hybris.facades.customerservice.impl.CoopCSTicketFacade.<init>(CoopCSTicketFacade.java:80) 
INFO | jvm 1 | main | 2016/01/20 11:41:54.820 |  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
INFO | jvm 1 | main | 2016/01/20 11:41:54.823 |  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
INFO | jvm 1 | main | 2016/01/20 11:41:54.828 |  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
INFO | jvm 1 | main | 2016/01/20 11:41:54.834 |  at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
INFO | jvm 1 | main | 2016/01/20 11:41:54.838 |  at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) 
INFO | jvm 1 | main | 2016/01/20 11:41:54.843 |  ... 35 more 

Поскольку в классе FlexSelector:

protected static final ApplicationContext ctx = Registry.getApplicationContext(); 

Контекст применения пружины равна нулю. Если у кого-то есть идеи, пожалуйста, скажите мне.

+0

Не можете ли вы просто создать класс beanfactoryaware или applicationcontextaware? – thijsraets

+0

Можете ли вы разместить содержание класса CoopCSTicketFacade? Или, по крайней мере, основные его части? – Juan

ответ

1

Не стоит статически ссылаться на контекст приложения. Вместо этого, как предложил @thijsraets, вы должны сделать класс для компонента bean flexSelectorApplicationContextAware. например:

public class FlexSelector implements ApplicationContextAware { 
    ApplicationContext context; 
    public ApplicationContext getContext() { 
     return context; 
    } 
    @Override 
    public void setApplicationContext(ApplicationContext context) 
      throws BeansException { 
     this.context=context; 
    } 
    [...] 
} 

Это позволит убедиться, что контекст приложения получает набор, когда боб подключен вверх весной.

Если у вас есть статические методы в FlexSelector и требуется контекст приложения, вы всегда должны динамически искать его в своих статических методах с помощью вызова Registry.getApplicationContext() вместо сохранения его в статической переменной.

1

Вам действительно нужен только объект applicationContext? Если вам просто нужно извлечь компонент, вы можете сделать это, как показано ниже:

final ManagerFactoryBean managerFactoryBean = (ManagerFactoryBean) Registry.getApplicationContext(). GetBean ("managerFactoryBean");

Я тоже работаю в гибридах, и так я получаю ссылки на bean.