NullPointerException получение имени класса бина в методе @Produces

У меня есть это LoggerProducer класс, который вводится в @Stateless bean для создания записей журнала, как описано здесь.

Проблема в том, что когда CustomerBean вызывается (даже без вызова logger.info), @Produces метод (который получает имя класса компонента) завершается неудачно с NullPointerException, Что не так с этим кодом?

@Named
@Singleton
public class LoggerProducer {

    @Produces
    public Logger produceLogger(InjectionPoint injectionPoint) {
        return LoggerFactory.getLogger(
                   injectionPoint.getBean().getBeanClass()); // <- error here
    }   

}

Бин, который внедряет логгер:

import org.slf4j.Logger;

@Stateless
@LocalBean
@Named
public class CustomerBean  {

    @Inject
    private Logger logger;

    ......
      logger.info("some message");

1 ответ

Решение

При условии, что injectionPoint не является нулевым (в вашем методе продюсера), вы можете попробовать это:

@Produces 
Logger createLogger(InjectionPoint injectionPoint) { 
    return LoggerFactory.getLogger( injectionPoint.getMember().getDeclaringClass().getName() );
}
Другие вопросы по тегам