You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by jc...@apache.org on 2005/11/11 18:17:46 UTC
svn commit: r332607 -
/jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistUtils.java
Author: jcarman
Date: Fri Nov 11 09:17:43 2005
New Revision: 332607
URL: http://svn.apache.org/viewcvs?rev=332607&view=rev
Log:
Bug fix for multiple classloader environments.
Modified:
jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistUtils.java
Modified: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistUtils.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistUtils.java?rev=332607&r1=332606&r2=332607&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistUtils.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistUtils.java Fri Nov 11 09:17:43 2005
@@ -20,9 +20,13 @@
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtField;
+import javassist.LoaderClassPath;
import javassist.NotFoundException;
-import org.apache.commons.proxy.exception.ObjectProviderException;
import org.apache.commons.proxy.ProxyUtils;
+import org.apache.commons.proxy.exception.ObjectProviderException;
+
+import java.util.HashSet;
+import java.util.Set;
/**
* @author James Carman
@@ -33,31 +37,42 @@
//----------------------------------------------------------------------------------------------------------------------
// Fields
//----------------------------------------------------------------------------------------------------------------------
-
public static final String DEFAULT_BASE_NAME = "JavassistUtilsGenerated";
private static int classNumber = 0;
- private static final ClassPool classPool = ClassPool.getDefault();
-
+ private static final ClassPool classPool = new ClassPool();
+ static
+ {
+ classPool.appendClassPath( new LoaderClassPath( ClassLoader.getSystemClassLoader() ) );
+ }
+ private static final Set classLoaders = new HashSet();
//----------------------------------------------------------------------------------------------------------------------
// Static Methods
//----------------------------------------------------------------------------------------------------------------------
- public static void addField( Class fieldType, String fieldName, CtClass enclosingClass ) throws
- CannotCompileException
+ public static void addField( Class fieldType, String fieldName, CtClass enclosingClass ) throws CannotCompileException
{
enclosingClass.addField( new CtField( resolve( fieldType ), fieldName, enclosingClass ) );
}
public static CtClass resolve( Class clazz )
{
- try
+ synchronized( classLoaders )
{
- return classPool.get( ProxyUtils.getJavaClassName( clazz ) );
- }
- catch( NotFoundException e )
- {
- throw new ObjectProviderException(
- "Unable to find class " + clazz.getName() + " in default Javassist class pool.", e );
+ try
+ {
+ final ClassLoader loader = clazz.getClassLoader();
+ if( loader != null && !classLoaders.contains( loader ) )
+ {
+ classLoaders.add( loader );
+ classPool.appendClassPath( new LoaderClassPath( loader ) );
+ }
+ return classPool.get( ProxyUtils.getJavaClassName( clazz ) );
+ }
+ catch( NotFoundException e )
+ {
+ throw new ObjectProviderException(
+ "Unable to find class " + clazz.getName() + " in default Javassist class pool.", e );
+ }
}
}
@@ -69,7 +84,7 @@
ctClass.addInterface( resolve( proxyInterface ) );
}
}
-
+
public static CtClass createClass( Class superclass )
{
return createClass( DEFAULT_BASE_NAME, superclass );
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org