From 3efcb0986bebb22aaf0e97ed14cde920d06caddd Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Wed, 13 Jul 2016 12:25:58 +0000
Subject: [PATCH] SSDM-3745: Jython27ClassLoader bug fixed: Also exclude
 com.sun. classes.

SVN: 36815
---
 .../shared/utils/Jython27ClassLoader.java       | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/Jython27ClassLoader.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/Jython27ClassLoader.java
index 6308592a8d6..e90254e2a42 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/Jython27ClassLoader.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/Jython27ClassLoader.java
@@ -22,8 +22,10 @@ import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.util.Arrays;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.io.IOUtils;
@@ -47,6 +49,7 @@ import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
  */
 public class Jython27ClassLoader extends ClassLoader
 {
+    private static final List<String> EXCLUDED_PACKAGES_STARTS = Arrays.asList("java", "sun.", "com.sun.");
     private final URLClassLoader jythonJarClassLoader;
     private final Map<String, Class<?>> cachedClasses = new HashMap<>();
 
@@ -75,7 +78,7 @@ public class Jython27ClassLoader extends ClassLoader
         Class<?> clazz = cachedClasses.get(name);
         if (clazz == null)
         {
-            if (name.startsWith("sun.") == false && name.startsWith("java") == false)
+            if (excludedPackageStart(name) == false)
             {
                 clazz = tryLoadClass(jythonJarClassLoader, name);
             }
@@ -103,6 +106,18 @@ public class Jython27ClassLoader extends ClassLoader
         return clazz;
     }
     
+    private boolean excludedPackageStart(String className)
+    {
+        for (String packageStart : EXCLUDED_PACKAGES_STARTS)
+        {
+            if (className.startsWith(packageStart))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+    
     private void definePackage(String className)
     {
         String packageName = getPackageName(className);
-- 
GitLab