From 4561b3563f5a213c8cfd6806e9f7c0b10c1f296f Mon Sep 17 00:00:00 2001 From: bdaniel Date: Wed, 16 Sep 2009 17:15:41 +0000 Subject: TUSCANY-3278 Create a classloader with access to both cglib and application classes for use by the cglib enhancer git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@815893 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/core/invocation/CglibProxyFactory.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'branches/sca-java-1.5.1/modules/core/src/main') diff --git a/branches/sca-java-1.5.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java b/branches/sca-java-1.5.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java index 0fa1d27d2a..0b3c043340 100644 --- a/branches/sca-java-1.5.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java +++ b/branches/sca-java-1.5.1/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/CglibProxyFactory.java @@ -56,6 +56,25 @@ public class CglibProxyFactory implements ProxyFactory { return createProxy(serviceReference); } + private class CglibClassLoader extends ClassLoader { + private ClassLoader appLoader; + private ClassLoader bundleLoader; + + @Override + public Class loadClass(String className) + throws ClassNotFoundException { + try { + return appLoader.loadClass(className); + } catch (ClassNotFoundException ex ) { + return bundleLoader.loadClass(className); + } + } + + CglibClassLoader(ClassLoader app, ClassLoader bundle) { + this.appLoader = app; + this.bundleLoader = bundle; + } + } /** * create the proxy with cglib. use the same JDKInvocationHandler as * JDKProxyService. @@ -63,6 +82,8 @@ public class CglibProxyFactory implements ProxyFactory { public T createProxy(CallableReference callableReference) throws ProxyCreationException { Enhancer enhancer = new Enhancer(); Class interfaze = callableReference.getBusinessInterface(); + ClassLoader cl = new CglibClassLoader(interfaze.getClassLoader(), getClass().getClassLoader()); + enhancer.setClassLoader(cl); enhancer.setSuperclass(interfaze); enhancer.setCallback(new CglibMethodInterceptor(callableReference)); Object proxy = enhancer.create(); -- cgit v1.2.3