First, when I use Application Listener to bind events, if I use Application Context to get bean objects, no matter where I use feign, I prompt NullPointerException. Exceptions are as follows:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.fcbox.chain.fegin.TestFeginClient': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:178)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1674)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1249)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:257)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1474)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1431)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1171)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:593)
    ... 19 common frames omitted
Caused by: java.lang.NullPointerException: null
    at com.fcbox.chain.common.utils.SpringBeanLoader.getBeanOfType(SpringBeanLoader.java:54)
    at com.fcbox.chain.eventframework.InitRegisterHandlersProcessor.onApplicationEvent(InitRegisterHandlersProcessor.java:34)
    at com.fcbox.chain.eventframework.InitRegisterHandlersProcessor.onApplicationEvent(InitRegisterHandlersProcessor.java:17)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:402)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:408)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:359)
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:896)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:552)
    at org.springframework.cloud.context.named.NamedContextFactory.createContext(NamedContextFactory.java:136)

The code is as follows:

@Component
public class InitRegisterHandlersProcessor implements ApplicationListener<ContextRefreshedEvent> {
    @Autowired
    private EventDispatcher eventDispatcher;

    @Autowired
    private AutoCloseOrderCxcHandler autoCloseOrderCxcHandler;

    @Autowired
    private EventServiceExecutor eventServiceExecutor;


    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        /**
         * Register all processors
         */
        EventDispatcher eventDispatcher = SpringBeanLoader.getBeanOfType(EventDispatcher.class);
        eventDispatcher.registerHandler(EventType.CXC_SITE_CLOSE_REFUND,SpringBeanLoader.getBeanOfType(AutoCloseOrderCxcHandler.class));
        /**
         * Register, Start Task Execution
         */
        SpringBeanLoader.getBeanOfType(EventServiceExecutor.class).startExecute();
    }
}

Second, when I use Application Listener to bind events, if I inject binding events directly in @Autowired mode, if feign is used in events, I will also prompt the same error.

The code is as follows:

@Component
public class InitRegisterHandlersProcessor implements ApplicationListener<ContextRefreshedEvent> {
    @Autowired
    private EventDispatcher eventDispatcher;

    @Autowired
    private AutoCloseOrderCxcHandler autoCloseOrderCxcHandler;

    @Autowired
    private EventServiceExecutor eventServiceExecutor;


    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        eventDispatcher.registerHandler(EventType.CXC_SITE_CLOSE_REFUND,autoCloseOrderCxcHandler);
        eventServiceExecutor.startExecute();
    }
}

The code for the event is as follows:

@Slf4j
@Component
public class AutoCloseOrderCxcHandler implements Handler<ChainOvertimeEvent> {


    @Autowired
    @Qualifier(value = "overtimeProcessor")
    AfterHandlerProcessor processor;

    @Autowired
    TestFeginClient testFeginClient;

    @Override
    public void handleEvent(ChainOvertimeEvent event) {
        EventHandlerResult result;
        try {
            String s = testFeginClient.testApp();
            log.info("testApp:{}", JSONObject.toJSONString(s));          
        } catch (Exception e) {
            log.error("AutoCloseOrderCxcHandler fail execute:{}", event, e);
            result = EventHandlerResult.fail(e.getMessage());
        }
    }

}

Comment From: lipeng632930871

I'm using the latest version.that is Greenwich SR3

Comment From: ryanjbaxter

Can you provide a complete, minimal, verifiable sample that reproduces the problem? It should be available as a GitHub (or similar) project or attached to this issue as a zip file.

Comment From: lipeng632930871

spring-cloud-fegin-test This problem appears in the chain-job. You can start eureka-server, chain-app and chain-job respectively, and then access "test / testcollect". When I uncomment the comments in autocloseordercxchandler, restarting the chain-job will reproduce this problem

Comment From: lipeng632930871

Who can tell me how to solve this problem?

Comment From: spencergibb

feign clients can cause early initialization errors, which in your case it does. Injecting

    ObjectProvider<TestFeginClient> testFeginClient;

fixes the issue.