Mega Code Archive

 
Categories / Java / Security
 

Execution of reflection

/*  * Copyright 2008-2009 the T2 Project ant the Others.  *  * Licensed under the Apache License, Version 2.0 (the "License");  * you may not use this file except in compliance with the License.  * You may obtain a copy of the License at  *  *      http://www.apache.org/licenses/LICENSE-2.0  *  * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License.  */ //package org.t2framework.commons.util; import java.lang.reflect.InvocationTargetException; import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; //import org.t2framework.commons.exception.ReflectionRuntimeException; /**  *   * @author shot  *   */ public class ReflectionExecutor {   /**    * Execution of reflection with {@link ReflectionAction}.    *     * @param <T>    * @param action    * @return    */   public static <T> T doSafeAction(final ReflectionAction<T> action) {     final SecurityManager securityManager = System.getSecurityManager();     if (securityManager == null) {       try {         return action.run();       } catch (Exception e) {         throw new RuntimeException(e);       }     }     try {       return AccessController           .doPrivileged(new PrivilegedExceptionAction<T>() {             @Override             public T run() throws Exception {               return action.run();             }           });     } catch (PrivilegedActionException e) {       Throwable cause = e.getCause();       if (InvocationTargetException.class.isInstance(cause)) {         InvocationTargetException e1 = (InvocationTargetException) cause;         throw new Exception(e1.getTargetException());       }       throw new Exception(cause);     }   }   /**    * {@link ReflectionAction} interface is an executor for reflection.    *     * @author shot    *     * @param <T>    */   public static interface ReflectionAction<T> {     T run() throws Exception;   } }