You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rd...@apache.org on 2007/01/07 19:30:57 UTC
svn commit: r493795 - in /jakarta/commons/proper/betwixt/trunk:
src/java/org/apache/commons/betwixt/
src/java/org/apache/commons/betwixt/digester/ xdocs/
Author: rdonkin
Date: Sun Jan 7 10:30:56 2007
New Revision: 493795
URL: http://svn.apache.org/viewvc?view=rev&rev=493795
Log:
Added switch to force introspector to use context classloader. Fix for BETWIXT-57.
Modified:
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/IntrospectionConfiguration.java
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/XMLIntrospector.java
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/ClassRule.java
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/ElementRule.java
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/MappedPropertyRule.java
jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/RuleSupport.java
jakarta/commons/proper/betwixt/trunk/xdocs/tasks.xml
Modified: jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/IntrospectionConfiguration.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/IntrospectionConfiguration.java?view=diff&rev=493795&r1=493794&r2=493795
==============================================================================
--- jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/IntrospectionConfiguration.java (original)
+++ jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/IntrospectionConfiguration.java Sun Jan 7 10:30:56 2007
@@ -111,6 +111,11 @@
*/
private PropertySuppressionStrategy propertySuppressionStrategy = PropertySuppressionStrategy.DEFAULT;
+ /**
+ * Should the introspector use the context classloader.
+ */
+ private boolean useContextClassLoader = false;
+
/**
* Gets the <code>ClassNormalizer</code> strategy.
* This is used to determine the Class to be introspected
@@ -491,5 +496,24 @@
public void setElementSuppressionStrategy(
ElementSuppressionStrategy elementSuppressionStrategy) {
this.elementSuppressionStrategy = elementSuppressionStrategy;
+ }
+
+ /**
+ * Should be context classloader be used when loading classes?
+ * @return <code>true</code> if the context classloader is to be used during introspection,
+ * <code>false</code> otherwise
+ */
+ public boolean isUseContextClassLoader() {
+ return useContextClassLoader;
+ }
+
+ /**
+ * Sets whether the context classloader should be used to load classes during introspection.
+ * For containers with well behaved context classloaders,
+ * this should typically be set to true.
+ * @param useContextClassLoader
+ */
+ public void setUseContextClassLoader(boolean useContextClassLoader) {
+ this.useContextClassLoader = useContextClassLoader;
}
}
Modified: jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/XMLIntrospector.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/XMLIntrospector.java?view=diff&rev=493795&r1=493794&r2=493795
==============================================================================
--- jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/XMLIntrospector.java (original)
+++ jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/XMLIntrospector.java Sun Jan 7 10:30:56 2007
@@ -1244,6 +1244,7 @@
digester = new XMLBeanInfoDigester();
digester.setXMLIntrospector( this );
}
+ digester.setUseContextClassLoader(configuration.isUseContextClassLoader());
digester.setBeanClass( aClass );
}
Modified: jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/ClassRule.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/ClassRule.java?view=diff&rev=493795&r1=493794&r2=493795
==============================================================================
--- jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/ClassRule.java (original)
+++ jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/ClassRule.java Sun Jan 7 10:30:56 2007
@@ -54,7 +54,7 @@
try {
- Class beanClass = Class.forName(className);
+ Class beanClass = loadClass(className);
XMLBeanInfo xmlBeanInfo = new XMLBeanInfo(beanClass);
XMLBeanInfoDigester xmlBeanInfoDigester = (XMLBeanInfoDigester) getDigester();
xmlBeanInfoDigester.setBeanClass(beanClass);
Modified: jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/ElementRule.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/ElementRule.java?view=diff&rev=493795&r1=493794&r2=493795
==============================================================================
--- jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/ElementRule.java (original)
+++ jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/ElementRule.java Sun Jan 7 10:30:56 2007
@@ -21,7 +21,6 @@
import java.lang.reflect.Modifier;
import java.util.Map;
-import org.apache.commons.betwixt.AttributeDescriptor;
import org.apache.commons.betwixt.ElementDescriptor;
import org.apache.commons.betwixt.XMLBeanInfo;
import org.apache.commons.betwixt.XMLUtils;
@@ -146,7 +145,7 @@
if (implementationClass != null) {
try {
- Class clazz = Class.forName(implementationClass);
+ Class clazz = loadClass(implementationClass);
descriptor.setImplementationClass(clazz);
} catch (Exception e) {
Modified: jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/MappedPropertyRule.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/MappedPropertyRule.java?view=diff&rev=493795&r1=493794&r2=493795
==============================================================================
--- jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/MappedPropertyRule.java (original)
+++ jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/MappedPropertyRule.java Sun Jan 7 10:30:56 2007
@@ -33,11 +33,8 @@
/** Logger */
private static final Log log = LogFactory.getLog( MappedPropertyRule.class );
- /** Classloader used to load classes by name */
- private ClassLoader classLoader;
/** Base constructor */
public MappedPropertyRule() {
- this.classLoader = getClass().getClassLoader();
}
@@ -118,7 +115,7 @@
// complex class loading situations
if ( propertyClassName != null ) {
try {
- Class answer = classLoader.loadClass(propertyClassName);
+ Class answer = loadClass(propertyClassName);
if (answer != null) {
if (log.isTraceEnabled()) {
log.trace("Used specified type " + answer);
Modified: jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/RuleSupport.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/RuleSupport.java?view=diff&rev=493795&r1=493794&r2=493795
==============================================================================
--- jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/RuleSupport.java (original)
+++ jakarta/commons/proper/betwixt/trunk/src/java/org/apache/commons/betwixt/digester/RuleSupport.java Sun Jan 7 10:30:56 2007
@@ -76,4 +76,24 @@
protected Set getProcessedPropertyNameSet() {
return getXMLInfoDigester().getProcessedPropertyNameSet();
}
+
+
+
+ /**
+ * Loads the given class using an appropriate <code>ClassLoader</code>.
+ * Uses {@link org.apache.commons.digester.Digester#getClassLoader()}.
+ * @param className names the class to be loaded
+ * @return <code>Class</code> loaded, not null
+ * @throws ClassNotFoundException
+ */
+ protected Class loadClass(String className) throws ClassNotFoundException {
+ ClassLoader classloader = digester.getClassLoader();
+ Class clazz = null;
+ if (classloader == null) {
+ clazz = Class.forName(className);
+ } else {
+ clazz = classloader.loadClass(className);
+ }
+ return clazz;
+ }
}
Modified: jakarta/commons/proper/betwixt/trunk/xdocs/tasks.xml
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/betwixt/trunk/xdocs/tasks.xml?view=diff&rev=493795&r1=493794&r2=493795
==============================================================================
--- jakarta/commons/proper/betwixt/trunk/xdocs/tasks.xml (original)
+++ jakarta/commons/proper/betwixt/trunk/xdocs/tasks.xml Sun Jan 7 10:30:56 2007
@@ -200,6 +200,13 @@
<section name='Completed'>
<subsection name='Since 0.8'>
<ul>
+ <li>
+Added <code>useContextClassLoader</code> property to <code>IntrospectionConfiguration</code>.
+When this is set to <code>true</code>, the introspector will use the context classloader
+when loading classes. It is recommended that containers (such as JBoss) with well behaved
+context classloaders set this property to true.
+See <a href='https://issues.apache.org/jira/browse/BETWIXT-57'>BETWIXT-57</a>.
+ </li>
</ul>
</subsection>
<subsection name='0.8'>
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org