[jboss-cvs] JBossAS SVN: r70819 - projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Mar 13 09:45:00 EDT 2008


Author: adrian at jboss.org
Date: 2008-03-13 09:45:00 -0400 (Thu, 13 Mar 2008)
New Revision: 70819

Added:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/SecurityActions.java
Modified:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java
Log:
convertValue() needs the TCL set otherwise some property editors don't work

Added: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/SecurityActions.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/SecurityActions.java	                        (rev 0)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/SecurityActions.java	2008-03-13 13:45:00 UTC (rev 70819)
@@ -0,0 +1,101 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2007, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.beans.metadata.plugins;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+
+/**
+ * SecurityActions.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+class SecurityActions
+{
+   static ClassLoader setContextClassLoader(final ClassLoader cl) throws Throwable
+   {
+      if (System.getSecurityManager() == null)
+      {
+         ClassLoader result = Thread.currentThread().getContextClassLoader();
+         if (cl != null)
+            Thread.currentThread().setContextClassLoader(cl);
+         return result;
+      }
+      else
+      {
+         try
+         {
+            return AccessController.doPrivileged(new PrivilegedExceptionAction<ClassLoader>()
+            {
+                public ClassLoader run() throws Exception
+                {
+                   try
+                   {
+                      ClassLoader result = Thread.currentThread().getContextClassLoader();
+                      if (cl != null)
+                          Thread.currentThread().setContextClassLoader(cl);
+                      return result;
+                   }
+                   catch (Exception e)
+                   {
+                      throw e;
+                   }
+                   catch (Error e)
+                   {
+                      throw e;
+                   }
+                   catch (Throwable e)
+                   {
+                      throw new RuntimeException("Error setting context classloader", e);
+                   }
+                }
+            });
+         }
+         catch (PrivilegedActionException e)
+         {
+            throw e.getCause();
+         }
+      }
+   }
+
+   static void resetContextClassLoader(final ClassLoader classLoader)
+   {
+      if (System.getSecurityManager() == null)
+      {
+         Thread.currentThread().setContextClassLoader(classLoader);
+      }
+      else
+      {
+         AccessController.doPrivileged(new PrivilegedAction<Object>()
+         {
+             public Object run()
+             {
+                Thread.currentThread().setContextClassLoader(classLoader);
+                return null;
+             }
+         });
+      }
+   }
+}

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java	2008-03-13 13:36:33 UTC (rev 70818)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java	2008-03-13 13:45:00 UTC (rev 70819)
@@ -110,14 +110,24 @@
       if (typeInfo == null)
          throw new IllegalArgumentException("Unable to determine type for value: " + getUnderlyingValue());
 
-      // we convert it with more precise type
-      // and then check for progression, ...
-      if (typeInfo != info && info != null)
+      // We need to set the context classloader
+      // because some property editors use the context classloader
+      ClassLoader oldCl = SecurityActions.setContextClassLoader(cl);
+      try
       {
-         Object typeValue = typeInfo.convertValue(getUnderlyingValue());
-         return info.convertValue(typeValue, replace, trim);
+         // we convert it with more precise type
+         // and then check for progression, ...
+         if (typeInfo != info && info != null)
+         {
+            Object typeValue = typeInfo.convertValue(getUnderlyingValue());
+            return info.convertValue(typeValue, replace, trim);
+         }
+         return typeInfo.convertValue(getUnderlyingValue(), replace, trim);
       }
-      return typeInfo.convertValue(getUnderlyingValue(), replace, trim);
+      finally
+      {
+         SecurityActions.resetContextClassLoader(oldCl);
+      }
    }
 
    protected Object getDefaultInstance()




More information about the jboss-cvs-commits mailing list