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