Skip to content

PropertyEditorRegistrySupport throws ExceptionInInitializerError when on endorsed classpath [SPR-11780] #16402

Closed
@spring-projects-issues

Description

@spring-projects-issues

Christoph Leuzinger opened SPR-11780 and commented

We encounter a java.lang.ExceptionInInitializerError when running our application with the Spring libraries on the JVM endorsed classpath:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor': Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1076)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1021)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:88)
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:609)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
...

This is due to the following piece of code in PropertyEditorRegistrySupport (line 92):

zoneIdClass = PropertyEditorRegistrySupport.class.getClassLoader().loadClass("java.time.ZoneId");

The class loader is null, because PropertyEditorRegistrySupport has been loaded by the bootstrap class loader. The resolution is to either remove the Spring libraries from the endorsed classpath, or to work around the problem by using the system class loader to obtain the zoneId:

ClassLoader classLoader = PropertyEditorRegistrySupport.class.getClassLoader();
if (classLoader == null)
{
  classLoader = ClassLoader.getSystemClassLoader();
}
zoneIdClass = classLoader.loadClass("java.time.ZoneId");

Affects: 4.0.4

Issue Links:

Metadata

Metadata

Assignees

Labels

in: coreIssues in core modules (aop, beans, core, context, expression)type: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions