Consistently handle NoClassDefFoundError in BeanUtils and related places
Issue: SPR-16369
This commit is contained in:
@@ -107,9 +107,10 @@ public abstract class BeanUtils {
|
||||
* @return the new instance
|
||||
* @throws BeanInstantiationException if the bean cannot be instantiated.
|
||||
* The cause may notably indicate a {@link NoSuchMethodException} if no
|
||||
* primary/default constructor was found - or an exception thrown from
|
||||
* the constructor invocation attempt, including a runtime-generated
|
||||
* {@link NoClassDefFoundError} in case of an unresolvable dependency.
|
||||
* primary/default constructor was found, a {@link NoClassDefFoundError}
|
||||
* or other {@link LinkageError} in case of an unresolvable class definition
|
||||
* (e.g. due to a missing dependency at runtime), or an exception thrown
|
||||
* from the constructor invocation itself.
|
||||
* @see Constructor#newInstance
|
||||
*/
|
||||
public static <T> T instantiateClass(Class<T> clazz) throws BeanInstantiationException {
|
||||
@@ -125,6 +126,9 @@ public abstract class BeanUtils {
|
||||
catch (NoSuchMethodException ex) {
|
||||
throw new BeanInstantiationException(clazz, "No default constructor found", ex);
|
||||
}
|
||||
catch (LinkageError err) {
|
||||
throw new BeanInstantiationException(clazz, "Unresolvable class definition", err);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1379,8 +1379,8 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp
|
||||
catch (ClassNotFoundException ex) {
|
||||
throw new CannotLoadBeanClassException(mbd.getResourceDescription(), beanName, mbd.getBeanClassName(), ex);
|
||||
}
|
||||
catch (LinkageError ex) {
|
||||
throw new CannotLoadBeanClassException(mbd.getResourceDescription(), beanName, mbd.getBeanClassName(), ex);
|
||||
catch (LinkageError err) {
|
||||
throw new CannotLoadBeanClassException(mbd.getResourceDescription(), beanName, mbd.getBeanClassName(), err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -137,12 +137,12 @@ public class DefaultNamespaceHandlerResolver implements NamespaceHandlerResolver
|
||||
return namespaceHandler;
|
||||
}
|
||||
catch (ClassNotFoundException ex) {
|
||||
throw new FatalBeanException("NamespaceHandler class [" + className + "] for namespace [" +
|
||||
namespaceUri + "] not found", ex);
|
||||
throw new FatalBeanException("Could not find NamespaceHandler class [" + className +
|
||||
"] for namespace [" + namespaceUri + "]", ex);
|
||||
}
|
||||
catch (LinkageError err) {
|
||||
throw new FatalBeanException("Invalid NamespaceHandler class [" + className + "] for namespace [" +
|
||||
namespaceUri + "]: problem with handler class file or dependent class", err);
|
||||
throw new FatalBeanException("Unresolvable class definition for NamespaceHandler class [" +
|
||||
className + "] for namespace [" + namespaceUri + "]", err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user