You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2010/02/12 18:03:04 UTC
svn commit: r909501 -
/sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/SessionProxyHandler.java
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);