EXTCDI-298 only doPrivileged if SecurityManager is available


git-svn-id: https://svn.apache.org/repos/asf/myfaces/extensions/cdi/trunk@1360162 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/util/ClassUtils.java b/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/util/ClassUtils.java
index 8b9a764..735bb6b 100644
--- a/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/util/ClassUtils.java
+++ b/core/api/src/main/java/org/apache/myfaces/extensions/cdi/core/api/util/ClassUtils.java
@@ -45,7 +45,7 @@
      * <ol>

      * <li>ContextClassLoader of the current Thread</li>

      * <li>ClassLoader of the given Object 'o'</li>

-     * <li>ClassLoader of this very CodiUtils class</li>

+     * <li>ClassLoader of this very ClassUtils class</li>

      * </ol>

      *

      * @param o if not <code>null</code> it may get used to detect the classloader.

@@ -53,24 +53,41 @@
      */

     public static ClassLoader getClassLoader(Object o)

     {

-        ClassLoader loader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()

+        if (System.getSecurityManager() != null)

         {

-            /**

-             * {@inheritDoc}

-             */

-            public ClassLoader run()

+            return AccessController.doPrivileged(new GetClassLoaderAction(o));

+        }

+        else

+        {

+            return getClassLoaderInternal(o);

+        }

+    }

+

+    static class GetClassLoaderAction implements PrivilegedAction<ClassLoader>

+    {

+        private Object object;

+        GetClassLoaderAction(Object object)

+        {

+            this.object = object;

+        }

+

+        @Override

+        public ClassLoader run()

+        {

+            try

             {

-                try

-                {

-                    return Thread.currentThread().getContextClassLoader();

-                }

-                catch (Exception e)

-                {

-                    return null;

-                }

+                return getClassLoaderInternal(object);

+            }

+            catch (Exception e)

+            {

+                return null;

             }

         }

-        );

+    }

+

+    private static ClassLoader getClassLoaderInternal(Object o)

+    {

+        ClassLoader loader = Thread.currentThread().getContextClassLoader();

 

         if (loader == null && o != null)

         {