Author: mrdon
Date: Thu Nov 16 00:31:12 2006
New Revision: 475636
URL: http://svn.apache.org/viewvc?view=rev&rev=475636
Log:
Added better handling of unloaded 'struts' classes (treat as optional),
added better logging of loading problems
WW-1506
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java?view=diff&rev=475636&r1=475635&r2=475636
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/config/BeanSelectionProvider.java
Thu Nov 16 00:31:12 2006
@@ -180,17 +180,23 @@
try {
Class cls = ClassLoaderUtil.loadClass(foundName,
this.getClass());
if (LOG.isDebugEnabled()) {
- LOG.info("Choosing bean ("+cls+") for "+type);
+ LOG.debug("Choosing bean ("+cls+") for "+type);
}
builder.factory(type, cls, scope);
} catch (ClassNotFoundException ex) {
// Perhaps a spring bean id, so we'll delegate to the
object factory at runtime
if (LOG.isDebugEnabled()) {
- LOG.info("Choosing bean ("+foundName+") for "+type+"
to be loaded from the ObjectFactory");
+ LOG.debug("Choosing bean ("+foundName+") for "+type+"
to be loaded from the ObjectFactory");
+ }
+ if (DEFAULT_BEAN_NAME.equals(foundName)) {
+ // Probably an optional bean, will ignore
+ } else {
+ if (ObjectFactory.class != type) {
+ builder.factory(type, new
ObjectFactoryDelegateFactory(foundName, type), scope);
+ } else {
+ throw new ConfigurationException("Cannot locate
the chosen ObjectFactory implementation: "+foundName);
+ }
}
- if (ObjectFactory.class != type) {
- builder.factory(type, new
ObjectFactoryDelegateFactory(foundName), scope);
- }
}
}
} else {
@@ -200,13 +206,19 @@
class ObjectFactoryDelegateFactory implements Factory {
String name;
- ObjectFactoryDelegateFactory(String name) {
+ Class type;
+ ObjectFactoryDelegateFactory(String name, Class type) {
this.name = name;
+ this.type = type;
}
public Object create(Context context) throws Exception {
ObjectFactory objFactory =
context.getContainer().getInstance(ObjectFactory.class);
- return objFactory.buildBean(name, null, false);
+ try {
+ return objFactory.buildBean(name, null, false);
+ } catch (ClassNotFoundException ex) {
+ throw new ConfigurationException("Unable to load bean
"+type.getName()+" ("+name+")");
+ }
}
}
}