Updated Branches: refs/heads/wicket-1.5.x be9300fe2 -> 29844aa3f
WICKET-4663 LazyInitProxyFactory uses wrong ClassLoader in OSGi environment Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/29844aa3 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/29844aa3 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/29844aa3 Branch: refs/heads/wicket-1.5.x Commit: 29844aa3f3c29f4e58d7cf76b3975999d39ca739 Parents: be9300f Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Jul 23 11:13:26 2012 +0300 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Jul 23 11:13:26 2012 +0300 ---------------------------------------------------------------------- .../wicket/application/AbstractClassResolver.java | 2 +- .../wicket/application/DefaultClassResolver.java | 2 +- .../apache/wicket/proxy/LazyInitProxyFactory.java | 19 +++++++++++++- 3 files changed, 19 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/29844aa3/wicket-core/src/main/java/org/apache/wicket/application/AbstractClassResolver.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/application/AbstractClassResolver.java b/wicket-core/src/main/java/org/apache/wicket/application/AbstractClassResolver.java index 584d928..c9f7d5b 100644 --- a/wicket-core/src/main/java/org/apache/wicket/application/AbstractClassResolver.java +++ b/wicket-core/src/main/java/org/apache/wicket/application/AbstractClassResolver.java @@ -121,7 +121,7 @@ public abstract class AbstractClassResolver implements IClassResolver * * @return the {@link ClassLoader} to be used for resolving classes */ - protected abstract ClassLoader getClassLoader(); + public abstract ClassLoader getClassLoader(); public Iterator<URL> getResources(final String name) { http://git-wip-us.apache.org/repos/asf/wicket/blob/29844aa3/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java b/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java index e83e417..eb9fe7d 100644 --- a/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java +++ b/wicket-core/src/main/java/org/apache/wicket/application/DefaultClassResolver.java @@ -34,7 +34,7 @@ public final class DefaultClassResolver extends AbstractClassResolver * {@link ClassLoader} that was used to load this class. */ @Override - protected ClassLoader getClassLoader() + public ClassLoader getClassLoader() { ClassLoader loader = Thread.currentThread().getContextClassLoader(); if (loader == null) http://git-wip-us.apache.org/repos/asf/wicket/blob/29844aa3/wicket-ioc/src/main/java/org/apache/wicket/proxy/LazyInitProxyFactory.java ---------------------------------------------------------------------- diff --git a/wicket-ioc/src/main/java/org/apache/wicket/proxy/LazyInitProxyFactory.java b/wicket-ioc/src/main/java/org/apache/wicket/proxy/LazyInitProxyFactory.java index b442d14..e2a3290 100644 --- a/wicket-ioc/src/main/java/org/apache/wicket/proxy/LazyInitProxyFactory.java +++ b/wicket-ioc/src/main/java/org/apache/wicket/proxy/LazyInitProxyFactory.java @@ -30,9 +30,11 @@ import net.sf.cglib.core.Predicate; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; - +import org.apache.wicket.Application; import org.apache.wicket.IClusterable; import org.apache.wicket.WicketRuntimeException; +import org.apache.wicket.application.AbstractClassResolver; +import org.apache.wicket.application.IClassResolver; import org.apache.wicket.model.IModel; import org.apache.wicket.util.lang.WicketObjects; @@ -136,7 +138,20 @@ public class LazyInitProxyFactory try { - return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + if (Application.exists()) + { + IClassResolver classResolver = Application.get() + .getApplicationSettings() + .getClassResolver(); + + if (classResolver instanceof AbstractClassResolver) + { + classLoader = ((AbstractClassResolver) classResolver).getClassLoader(); + } + } + + return Proxy.newProxyInstance(classLoader, new Class[] { type, Serializable.class, ILazyInitProxy.class, IWriteReplace.class }, handler); }
