Author: cziegeler
Date: Fri Feb 12 17:03:03 2010
New Revision: 909501
URL: http://svn.apache.org/viewvc?rev=909501&view=rev
Log:
SLING-1366 : NamespaceMapper is never called - fix impersonate call and
resulting class cast exception.
Modified:
sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/SessionProxyHandler.java
Modified:
sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/SessionProxyHandler.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/SessionProxyHandler.java?rev=909501&r1=909500&r2=909501&view=diff
==============================================================================
---
sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/SessionProxyHandler.java
(original)
+++
sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/SessionProxyHandler.java
Fri Feb 12 17:03:03 2010
@@ -71,20 +71,25 @@
*/
public Session createProxy(final Session session) {
final Class<?> sessionClass = session.getClass();
+ final Class<?>[] interfaces = getInterfaces(sessionClass);
return (Session)Proxy.newProxyInstance(sessionClass.getClassLoader(),
- getInterfaces(sessionClass),
- new SessionProxy(session, this.repository));
+ interfaces,
+ new SessionProxyInvocationHandler(session, this.repository,
interfaces));
}
- public static final class SessionProxy implements InvocationHandler {
+ public static final class SessionProxyInvocationHandler implements
InvocationHandler {
private final Session delegatee;
private final AbstractSlingRepository repository;
+ private final Class<?>[] interfaces;
- public SessionProxy(final Session delegatee, final
AbstractSlingRepository repo) {
+ public SessionProxyInvocationHandler(final Session delegatee,
+ final AbstractSlingRepository repo,
+ final Class<?>[] interfaces) {
this.delegatee = delegatee;
this.repository = repo;
+ this.interfaces = interfaces;
}
/**
@@ -95,7 +100,10 @@
if ( method.getName().equals("impersonate") && args != null &&
args.length == 1) {
final Session session =
this.delegatee.impersonate((Credentials)args[0]);
this.repository.defineNamespacePrefixes(session);
- return new SessionProxy(session, this.repository);
+ final Class<?> sessionClass = session.getClass();
+ return Proxy.newProxyInstance(sessionClass.getClassLoader(),
+ interfaces,
+ new SessionProxyInvocationHandler(session,
this.repository, interfaces));
}
try {
return method.invoke(this.delegatee, args);