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