Closed lzimd closed 6 years ago
Dubbo can fix it by Null checking.
But after navigating the spring code, actually the beanName should be assert Null as spring design, so you'd better update the version of Quartz.
java.lang.IllegalArgumentException: Bean name must not be empty at org.springframework.util.Assert.hasText(Assert.java:169) at org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(DefaultListableBeanFactory.java:310) at org.springframework.beans.factory.support.PropertiesBeanDefinitionReader.registerBeanDefinition(PropertiesBeanDefinitionReader.java:468) at org.springframework.beans.factory.support.PropertiesBeanDefinitionReader.registerBeanDefinitions(PropertiesBeanDefinitionReader.java:373) at org.springframework.beans.factory.support.PropertiesBeanDefinitionReader.loadBeanDefinitions(PropertiesBeanDefinitionReader.java:257) at org.springframework.beans.factory.support.PropertiesBeanDefinitionReader.loadBeanDefinitions(PropertiesBeanDefinitionReader.java:221) at sandbox.service.ReportService.getParameters(ReportService.java:89) at sandbox.web.ConfigureReportFormController.formBackingObject(ConfigureReportFormController.java:43) at org.springframework.web.servlet.mvc.AbstractFormController.getErrorsForNewForm(AbstractFormController.java:341) at org.springframework.web.servlet.mvc.AbstractFormController.showNewForm(AbstractFormController.java:322) at org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:262) at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:723) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:663) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:394) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:348) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107
@Jeff-Lv I don't think updating quartz version can fix this NPE problem, because spring-boot-quartz-autoconfiguration pass the null value to beanName! below is the code:
org.springframework.boot.autoconfigure.quartz.AutowireCapableBeanJobFactory
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object jobInstance = super.createJobInstance(bundle);
this.beanFactory.autowireBean(jobInstance);
this.beanFactory.initializeBean(jobInstance, null); // beanName is null!
return jobInstance;
}
The spring-boot-starter-quartz is belong to spring project, why they break themself's design principle that you mentioned above? Util the latest version '2.1.6.RELEASE', the beanName is still null.
@Jeff-Lv, We also encounter this BUG. And I think dubbo should execute null checking for defensive programming.
@beiwei30 @chickenlj How do you think?
Environment
Actual Result