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