Author: pier Date: Wed Nov 3 16:46:08 2004 New Revision: 56541 Modified: cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Deployer.java cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Wiring.java Log: Set context classloader when switching from one block to another (helps resolutions of commons-logging, servlet-based stuff, ...)
Modified: cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Deployer.java ============================================================================== --- cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Deployer.java (original) +++ cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Deployer.java Wed Nov 3 16:46:08 2004 @@ -14,6 +14,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Proxy; +import java.net.URL; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -146,8 +147,8 @@ + "] " + descriptor.toString()); } this.logger.log("Shared libraries:"); - iterator = this.loader.getURLs(this); - while (iterator.hasNext()) this.logger.log(" - " + iterator.next()); + URL urls[] = this.loader.getURLs(); + for (int x = 0; x < urls.length; x ++) this.logger.log(" - " + urls[x]); /* Configure all instances and be done with it */ Factory.configure(this, instances); Modified: cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Wiring.java ============================================================================== --- cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Wiring.java (original) +++ cocoon/whiteboard/kernel/sources/runtime/org/apache/cocoon/kernel/deployment/Wiring.java Wed Nov 3 16:46:08 2004 @@ -27,12 +27,15 @@ /** <p>The instance of the proxied object.</p> */ private Object instance = null; + /** <p>The instance of the proxied object.</p> */ + private ClassLoader context = null; /** * <p>Create a new [EMAIL PROTECTED] Wiring} instance.</p> */ public Wiring(Object instance) { if (instance == null) throw new NullPointerException("Null proxy instance"); + this.context = instance.getClass().getClassLoader(); this.instance = instance; } @@ -41,12 +44,18 @@ */ public Object invoke(Object proxy, Method method, Object[] parameters) throws Throwable { + Thread thread = Thread.currentThread(); + ClassLoader previous = thread.getContextClassLoader(); + thread.setContextClassLoader(this.context); + try { return(method.invoke(this.instance, parameters)); } catch (InvocationTargetException e) { Throwable cause = e.getCause(); if (cause != null) throw cause; throw e; + } finally { + thread.setContextClassLoader(previous); } } }