You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by jv...@apache.org on 2009/02/23 14:17:26 UTC

svn commit: r747006 - /incubator/sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/util/AccessControlUtil.java

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.
      */