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);


Reply via email to