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