Author: dkulp
Date: Wed Sep 18 20:51:09 2013
New Revision: 1524564
URL: http://svn.apache.org/r1524564
Log:
Make sure we return the EXACT class object for the names classes, check system
classloader AFTER all the others.
Modified:
cxf/trunk/core/src/main/java/org/apache/cxf/common/util/ProxyClassLoader.java
cxf/trunk/core/src/main/java/org/apache/cxf/common/util/ProxyHelper.java
Modified:
cxf/trunk/core/src/main/java/org/apache/cxf/common/util/ProxyClassLoader.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/core/src/main/java/org/apache/cxf/common/util/ProxyClassLoader.java?rev=1524564&r1=1524563&r2=1524564&view=diff
==============================================================================
---
cxf/trunk/core/src/main/java/org/apache/cxf/common/util/ProxyClassLoader.java
(original)
+++
cxf/trunk/core/src/main/java/org/apache/cxf/common/util/ProxyClassLoader.java
Wed Sep 18 20:51:09 2013
@@ -28,16 +28,33 @@ import java.util.Set;
* service class.
*/
public class ProxyClassLoader extends ClassLoader {
- private Set<ClassLoader> loaders = new HashSet<ClassLoader>();
+ private final Class<?> classes[];
+ private final Set<ClassLoader> loaders = new HashSet<ClassLoader>();
+ private boolean checkSystem;
+
+ public ProxyClassLoader() {
+ classes = null;
+ }
+ public ProxyClassLoader(Class<?>[] cls) {
+ classes = cls;
+ }
public void addLoader(ClassLoader loader) {
if (loader == null) {
- loader = getSystemClassLoader();
+ checkSystem = true;
+ } else {
+ loaders.add(loader);
}
- loaders.add(loader);
}
public Class<?> findClass(String name) throws ClassNotFoundException {
+ if (classes != null) {
+ for (Class<?> c : classes) {
+ if (name.equals(c.getName())) {
+ return c;
+ }
+ }
+ }
for (ClassLoader loader : loaders) {
try {
return loader.loadClass(name);
@@ -47,6 +64,15 @@ public class ProxyClassLoader extends Cl
// Try next
}
}
+ if (checkSystem) {
+ try {
+ return getSystemClassLoader().loadClass(name);
+ } catch (ClassNotFoundException cnfe) {
+ // Try next
+ } catch (NoClassDefFoundError cnfe) {
+ // Try next
+ }
+ }
throw new ClassNotFoundException(name);
}
Modified:
cxf/trunk/core/src/main/java/org/apache/cxf/common/util/ProxyHelper.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/core/src/main/java/org/apache/cxf/common/util/ProxyHelper.java?rev=1524564&r1=1524563&r2=1524564&view=diff
==============================================================================
--- cxf/trunk/core/src/main/java/org/apache/cxf/common/util/ProxyHelper.java
(original)
+++ cxf/trunk/core/src/main/java/org/apache/cxf/common/util/ProxyHelper.java
Wed Sep 18 20:51:09 2013
@@ -58,7 +58,7 @@ public class ProxyHelper {
if (canSeeAllInterfaces(loader, interfaces)) {
return loader;
}
- ProxyClassLoader combined = new ProxyClassLoader();
+ ProxyClassLoader combined = new ProxyClassLoader(interfaces);
for (Class<?> currentInterface : interfaces) {
combined.addLoader(currentInterface.getClassLoader());
}