Author: jvazquez
Date: Mon Feb 23 13:17:25 2009
New Revision: 747006

URL: http://svn.apache.org/viewvc?rev=747006&view=rev
Log:
SLING-867: AccesControlUtil addEntry fails 
https://issues.apache.org/jira/browse/SLING-867

Modified:
    
incubator/sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/util/AccessControlUtil.java

Modified: 
incubator/sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/util/AccessControlUtil.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/util/AccessControlUtil.java?rev=747006&r1=747005&r2=747006&view=diff
==============================================================================
--- 
incubator/sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/util/AccessControlUtil.java
 (original)
+++ 
incubator/sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/util/AccessControlUtil.java
 Mon Feb 23 13:17:25 2009
@@ -179,9 +179,12 @@
      * Same as {...@link #addEntry(AccessControlList, Principal, Privilege[], 
boolean, Map)} using
      * some implementation specific restrictions.
      */
-    public static boolean addEntry(AccessControlList acl, Principal principal, 
Privilege privileges[], boolean isAllow)
+    @SuppressWarnings("unchecked")
+       public static boolean addEntry(AccessControlList acl, Principal 
principal, Privilege privileges[], boolean isAllow)
                                                                throws 
AccessControlException, RepositoryException {
-               return safeInvokeRepoMethod(acl, 
METHOD_JACKRABBIT_ACL_ADD_ENTRY, Boolean.class, principal, privileges, isAllow);
+       Object[] args = new Object[] {principal, privileges, isAllow};
+       Class[] types = new Class[] {Principal.class, Privilege[].class, 
boolean.class};
+               return safeInvokeRepoMethod(acl, 
METHOD_JACKRABBIT_ACL_ADD_ENTRY, Boolean.class, args, types);
     }
     
     /**
@@ -196,7 +199,9 @@
     @SuppressWarnings("unchecked")
        public static boolean addEntry(AccessControlList acl, Principal 
principal, Privilege privileges[], boolean isAllow, Map restrictions)
                                                                                
                                        throws 
UnsupportedRepositoryOperationException, RepositoryException {
-               return safeInvokeRepoMethod(acl, 
METHOD_JACKRABBIT_ACL_ADD_ENTRY, Boolean.class, principal, privileges, isAllow, 
restrictions);
+       Object[] args = new Object[] {principal, privileges, isAllow, 
restrictions};
+       Class[] types = new Class[] {Principal.class, Privilege[].class, 
boolean.class, Map.class};
+               return safeInvokeRepoMethod(acl, 
METHOD_JACKRABBIT_ACL_ADD_ENTRY, Boolean.class, args, types);
     }
 
     // ---------- internal 
-----------------------------------------------------
@@ -205,10 +210,13 @@
      * Use reflection to invoke a repository method.
      */
     @SuppressWarnings("unchecked")
-       private static <T> T safeInvokeRepoMethod(Object target, String 
methodName, Class<T> returnType, Object... args) 
+       private static <T> T safeInvokeRepoMethod(Object target, String 
methodName, Class<T> returnType, Object[] args, Class[] argsTypes) 
                                                                                
                        throws UnsupportedRepositoryOperationException, 
RepositoryException {
        try {
-                       Method m = target.getClass().getMethod(methodName);
+               Method m = target.getClass().getMethod(methodName, argsTypes);
+               if (!m.isAccessible()) {
+                       m.setAccessible(true);
+               }
                        return (T) m.invoke(target, args);
        } catch (InvocationTargetException ite) {
             // wraps the exception thrown by the method
@@ -233,7 +241,12 @@
             throw new RepositoryException(methodName, t);
         }
        }
-       
+    
+    private static <T> T safeInvokeRepoMethod(Object target, String 
methodName, Class<T> returnType, Object... args) 
+                                                                               
                                                                throws 
UnsupportedRepositoryOperationException, RepositoryException {
+       return safeInvokeRepoMethod(target, methodName, returnType, args, new 
Class[0]);
+    }
+    
     /**
      * Unwrap the jackrabbit session.
      */


Reply via email to