This is an automated email from the ASF dual-hosted git repository.

enorman pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-jackrabbit-usermanager.git


The following commit(s) were added to refs/heads/master by this push:
     new d63589f  SLING-7831 support injecting custom/alternate PostResponse 
implementations for the servlets in the usermanager and accessmanager bundles
d63589f is described below

commit d63589fa255b612aceba1ed4a43d6aceb9a3e58b
Author: Eric Norman <[email protected]>
AuthorDate: Sun Aug 19 13:39:05 2018 -0700

    SLING-7831 support injecting custom/alternate PostResponse
    implementations for the servlets in the usermanager and accessmanager
    bundles
---
 pom.xml                                            |   3 +-
 .../impl/AuthorizableAdapterFactory.java           |   2 -
 .../usermanager/impl/post/AbstractPostServlet.java | 164 ++++++++++++++++++++-
 .../impl/post/ChangeUserPasswordServlet.java       |  51 +++++--
 .../usermanager/impl/post/CreateGroupServlet.java  |  28 +++-
 .../usermanager/impl/post/CreateUserServlet.java   |  28 +++-
 .../impl/post/DeleteAuthorizableServlet.java       |  30 +++-
 .../usermanager/impl/post/UpdateGroupServlet.java  |  28 +++-
 .../usermanager/impl/post/UpdateUserServlet.java   |  29 +++-
 9 files changed, 330 insertions(+), 33 deletions(-)

diff --git a/pom.xml b/pom.xml
index 1bb2506..ebe1633 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,7 +66,8 @@
                         <Embed-Dependency>
                             
org.apache.sling.servlets.post;inline="org/apache/sling/servlets/post/impl/helper/RequestProperty*
                                 
|org/apache/sling/servlets/post/impl/helper/DateParser*
-                                
|org/apache/sling/servlets/post/impl/helper/JSONResponse*"
+                                
|org/apache/sling/servlets/post/impl/helper/JSONResponse*
+                                
|org/apache/sling/servlets/post/impl/helper/MediaRangeList*"
                         </Embed-Dependency>
                     </instructions>
                 </configuration>
diff --git 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/AuthorizableAdapterFactory.java
 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/AuthorizableAdapterFactory.java
index 64a918a..0458fe4 100644
--- 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/AuthorizableAdapterFactory.java
+++ 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/AuthorizableAdapterFactory.java
@@ -22,7 +22,6 @@ import javax.jcr.Session;
 
 import org.apache.jackrabbit.api.JackrabbitSession;
 import org.apache.jackrabbit.api.security.user.Authorizable;
-import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.sling.api.adapter.AdapterFactory;
 import org.apache.sling.api.resource.ResourceResolver;
@@ -42,7 +41,6 @@ public class AuthorizableAdapterFactory implements 
AdapterFactory {
     private final Logger log = LoggerFactory.getLogger(getClass());
 
     @Override
-    @SuppressWarnings("unchecked")
     public <AdapterType> AdapterType getAdapter(final Object adaptable, final 
Class<AdapterType> type) {
         Session session = ((ResourceResolver) 
adaptable).adaptTo(Session.class);
         if (session instanceof JackrabbitSession) {
diff --git 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractPostServlet.java
 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractPostServlet.java
index d1058ad..d1d85a2 100644
--- 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractPostServlet.java
+++ 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/AbstractPostServlet.java
@@ -18,7 +18,9 @@ package org.apache.sling.jackrabbit.usermanager.impl.post;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -30,13 +32,17 @@ import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.resource.ResourceNotFoundException;
 import org.apache.sling.api.resource.ResourceUtil;
-import org.apache.sling.servlets.post.HtmlResponse;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
 import org.apache.sling.api.wrappers.SlingRequestPaths;
 import org.apache.sling.servlets.post.AbstractPostResponse;
+import org.apache.sling.servlets.post.HtmlResponse;
+import org.apache.sling.servlets.post.JSONResponse;
 import org.apache.sling.servlets.post.Modification;
+import org.apache.sling.servlets.post.PostResponse;
+import org.apache.sling.servlets.post.PostResponseCreator;
 import org.apache.sling.servlets.post.SlingPostConstants;
-import org.apache.sling.servlets.post.JSONResponse;
+import org.apache.sling.servlets.post.impl.helper.MediaRangeList;
+import org.osgi.framework.Constants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,6 +59,12 @@ public abstract class AbstractPostServlet extends
      */
     private final Logger log = LoggerFactory.getLogger(getClass());
 
+    /** Sorted list of post response creator holders. */
+    private final List<PostResponseCreatorHolder> postResponseCreators = new 
ArrayList<>();
+
+    /** Cached array of post response creators used during request processing. 
*/
+    private PostResponseCreator[] cachedPostResponseCreators = new 
PostResponseCreator[0];
+
     /*
      * (non-Javadoc)
      * @see
@@ -65,7 +77,7 @@ public abstract class AbstractPostServlet extends
             SlingHttpServletResponse httpResponse) throws ServletException,
             IOException {
         // prepare the response
-       AbstractPostResponse response = createHtmlResponse(request);
+       PostResponse response = createPostResponse(request);
         response.setReferer(request.getHeader("referer"));
 
         // calculate the paths
@@ -114,6 +126,8 @@ public abstract class AbstractPostServlet extends
                         response.onChange("ordered", change.getSource(),
                             change.getDestination());
                         break;
+                    default:
+                        break;
                 }
             }
 
@@ -160,9 +174,50 @@ public abstract class AbstractPostServlet extends
      *   <li>the response content type is application/json
      * </ul>
      * or a {@link org.apache.sling.servlets.post.HtmlResponse} otherwise
+     * 
+     * @deprecated use {@link #createPostResponse(SlingHttpServletRequest)} 
instead.
      */
+    @Deprecated
     protected AbstractPostResponse createHtmlResponse(SlingHttpServletRequest 
req) {
-        if 
(JSONResponse.RESPONSE_CONTENT_TYPE.equals(req.getResponseContentType())) {
+       return (AbstractPostResponse)createPostResponse(req);
+    }
+    
+    /**
+     * Creates an instance of a PostResponse.
+     * @param req The request being serviced
+     * @return a {@link 
org.apache.sling.servlets.post.impl.helper.JSONResponse} if any of these 
conditions are true:
+     * <ul>
+     *   <li> the request has an <code>Accept</code> header of 
<code>application/json</code></li>
+     *   <li>the request is a JSON POST request (see SLING-1172)</li>
+     *   <li>the request has a request parameter 
<code>:accept=application/json</code></li>
+     * </ul>
+     * or a {@link org.apache.sling.api.servlets.PostResponse} otherwise
+     */
+    PostResponse createPostResponse(final SlingHttpServletRequest req) {
+        for (final PostResponseCreator creator : cachedPostResponseCreators) {
+            final PostResponse response = creator.createPostResponse(req);
+            if (response != null) {
+                return response;
+            }
+        }
+
+        //for backward compatibility, if no "accept" request param or header 
is supplied
+        // then prefer the SlingHttpServletRequest#getResponseContentType value
+        MediaRangeList mediaRangeList = null;
+        String queryParam = req.getParameter(MediaRangeList.PARAM_ACCEPT);
+        if (queryParam == null || queryParam.trim().length() == 0) {
+               String headerValue = 
req.getHeader(MediaRangeList.HEADER_ACCEPT);
+               if (headerValue == null || headerValue.trim().length() == 0) {
+                       //no param or header supplied, so try the response 
content type
+                       mediaRangeList = new 
MediaRangeList(req.getResponseContentType());
+               }
+        }
+
+        // Fall through to default behavior
+        if (mediaRangeList == null) {
+               mediaRangeList = new MediaRangeList(req);
+        }
+        if 
(JSONResponse.RESPONSE_CONTENT_TYPE.equals(mediaRangeList.prefer("text/html", 
JSONResponse.RESPONSE_CONTENT_TYPE))) {
             return new JSONResponse();
         } else {
             return new HtmlResponse();
@@ -176,9 +231,26 @@ public abstract class AbstractPostServlet extends
      * @param response the response
      * @param changes the changes to report
      * @throws RepositoryException in case of exceptions during the operation
+     * 
+     * @deprecated use {@link #handleOperation(SlingHttpServletRequest, 
PostResponse, List)} instead
      */
-    abstract protected void handleOperation(SlingHttpServletRequest request,
+    @Deprecated
+    protected void handleOperation(SlingHttpServletRequest request,
                AbstractPostResponse response, List<Modification> changes)
+            throws RepositoryException {
+       handleOperation(request, (PostResponse)response, changes);
+    }
+    
+    /**
+     * Extending Servlet should implement this operation to do the work
+     * 
+     * @param request the sling http request to process
+     * @param response the response
+     * @param changes the changes to report
+     * @throws RepositoryException in case of exceptions during the operation
+     */
+    abstract protected void handleOperation(SlingHttpServletRequest request,
+               PostResponse response, List<Modification> changes)
             throws RepositoryException;
 
     /**
@@ -186,8 +258,21 @@ public abstract class AbstractPostServlet extends
      * @param request the request
      * @param ctx the post processor
      * @return the redirect location or <code>null</code>
+     * 
+     * @deprecated use {@link #getRedirectUrl(HttpServletRequest, 
PostResponse)} instead
      */
+    @Deprecated
     protected String getRedirectUrl(HttpServletRequest request, 
AbstractPostResponse ctx) {
+       return getRedirectUrl(request, (PostResponse)ctx);
+    }
+    
+    /**
+     * compute redirect URL (SLING-126)
+     * @param request the request
+     * @param ctx the post processor
+     * @return the redirect location or <code>null</code>
+     */
+    protected String getRedirectUrl(HttpServletRequest request, PostResponse 
ctx) {
         // redirect param has priority (but see below, magic star)
         String result = 
request.getParameter(SlingPostConstants.RP_REDIRECT_TO);
         if (result != null && ctx.getPath() != null) {
@@ -295,4 +380,73 @@ public abstract class AbstractPostServlet extends
         return ret.toString();
     }
 
+
+    /**
+     * Bind a new post response creator
+     */
+       // NOTE: the @Reference annotation is not inherited, so subclasses will 
need to override the #bindPostResponseCreator 
+       // and #unbindPostResponseCreator methods to provide the @Reference 
annotation.     
+       //
+       // @Reference(service = PostResponseCreator.class,
+       //         cardinality = ReferenceCardinality.MULTIPLE,
+       //         policy = ReferencePolicy.DYNAMIC)
+    protected void bindPostResponseCreator(final PostResponseCreator creator, 
final Map<String, Object> properties) {
+        final PostResponseCreatorHolder nngh = new PostResponseCreatorHolder();
+        nngh.creator = creator;
+        nngh.ranking = getRanking(properties);
+
+        synchronized ( this.postResponseCreators ) {
+            int index = 0;
+            while ( index < this.postResponseCreators.size() &&
+                    nngh.ranking < 
this.postResponseCreators.get(index).ranking ) {
+                index++;
+            }
+            if ( index == this.postResponseCreators.size() ) {
+                this.postResponseCreators.add(nngh);
+            } else {
+                this.postResponseCreators.add(index, nngh);
+            }
+            this.updatePostResponseCreatorCache();
+        }
+    }
+
+    /**
+     * Unbind a post response creator
+     */
+    protected void unbindPostResponseCreator(final PostResponseCreator 
creator, final Map<String, Object> properties) {
+        synchronized ( this.postResponseCreators ) {
+            final Iterator<PostResponseCreatorHolder> i = 
this.postResponseCreators.iterator();
+            while ( i.hasNext() ) {
+                final PostResponseCreatorHolder current = i.next();
+                if ( current.creator == creator ) {
+                    i.remove();
+                }
+            }
+            this.updatePostResponseCreatorCache();
+        }
+    }
+
+    /**
+     * Update the post response creator cache
+     * This method is called by sync'ed methods, no need to add additional 
syncing.
+     */
+    private void updatePostResponseCreatorCache() {
+        final PostResponseCreator[] localCache = new 
PostResponseCreator[this.postResponseCreators.size()];
+        int index = 0;
+        for(final PostResponseCreatorHolder current : 
this.postResponseCreators) {
+            localCache[index] = current.creator;
+            index++;
+        }
+        this.cachedPostResponseCreators = localCache;
+    }
+    
+    private int getRanking(final Map<String, Object> properties) {
+        final Object val = properties.get(Constants.SERVICE_RANKING);
+        return val instanceof Integer ? (Integer)val : 0;
+    }
+    
+    private static final class PostResponseCreatorHolder {
+        public PostResponseCreator creator;
+        public int ranking;
+    }    
 }
diff --git 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/ChangeUserPasswordServlet.java
 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/ChangeUserPasswordServlet.java
index f2fd561..0e4b38b 100644
--- 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/ChangeUserPasswordServlet.java
+++ 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/ChangeUserPasswordServlet.java
@@ -34,11 +34,15 @@ import org.apache.sling.commons.osgi.OsgiUtil;
 import org.apache.sling.jackrabbit.usermanager.ChangeUserPassword;
 import 
org.apache.sling.jackrabbit.usermanager.impl.resource.AuthorizableResourceProvider;
 import org.apache.sling.jcr.base.util.AccessControlUtil;
-import org.apache.sling.servlets.post.AbstractPostResponse;
 import org.apache.sling.servlets.post.Modification;
+import org.apache.sling.servlets.post.PostResponse;
+import org.apache.sling.servlets.post.PostResponseCreator;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -140,7 +144,28 @@ public class ChangeUserPasswordServlet extends 
AbstractAuthorizablePostServlet i
         super.deactivate();
     }
 
-    /*
+    /**
+     * Overridden since the @Reference annotation is not inherited from the 
super method
+     *  
+        * @see 
org.apache.sling.jackrabbit.usermanager.impl.post.AbstractPostServlet#bindPostResponseCreator(org.apache.sling.servlets.post.PostResponseCreator,
 java.util.Map)
+        */
+       @Override
+    @Reference(service = PostResponseCreator.class,
+           cardinality = ReferenceCardinality.MULTIPLE,
+           policy = ReferencePolicy.DYNAMIC)
+       protected void bindPostResponseCreator(PostResponseCreator creator, 
Map<String, Object> properties) {
+               super.bindPostResponseCreator(creator, properties);
+       }
+       
+       /* (non-Javadoc)
+        * @see 
org.apache.sling.jackrabbit.usermanager.impl.post.AbstractPostServlet#unbindPostResponseCreator(org.apache.sling.servlets.post.PostResponseCreator,
 java.util.Map)
+        */
+       @Override
+       protected void unbindPostResponseCreator(PostResponseCreator creator, 
Map<String, Object> properties) {
+               super.unbindPostResponseCreator(creator, properties);
+       }
+
+       /*
      * (non-Javadoc)
      * @see
      * 
org.apache.sling.jackrabbit.usermanager.post.AbstractAuthorizablePostServlet
@@ -149,7 +174,7 @@ public class ChangeUserPasswordServlet extends 
AbstractAuthorizablePostServlet i
      */
     @Override
     protected void handleOperation(SlingHttpServletRequest request,
-               AbstractPostResponse response, List<Modification> changes)
+               PostResponse response, List<Modification> changes)
             throws RepositoryException {
 
         Resource resource = request.getResource();
@@ -226,20 +251,16 @@ public class ChangeUserPasswordServlet extends 
AbstractAuthorizablePostServlet i
                 "New Password does not match the confirmation password");
         }
 
-        try {
-            if (oldPassword != null && oldPassword.length() > 0) {
-                // verify old password
-                user.changePassword(newPassword, oldPassword);
-            } else {
-                user.changePassword(newPassword);
-            }
+        if (oldPassword != null && oldPassword.length() > 0) {
+            // verify old password
+            user.changePassword(newPassword, oldPassword);
+        } else {
+            user.changePassword(newPassword);
+        }
 
-            final String passwordPath = 
AuthorizableResourceProvider.SYSTEM_USER_MANAGER_USER_PREFIX + user.getID() + 
"/rep:password";
+        final String passwordPath = 
AuthorizableResourceProvider.SYSTEM_USER_MANAGER_USER_PREFIX + user.getID() + 
"/rep:password";
 
-            changes.add(Modification.onModified(passwordPath));
-        } catch (RepositoryException re) {
-            throw new RepositoryException("Failed to change user password.", 
re);
-        }
+        changes.add(Modification.onModified(passwordPath));
 
         return user;
     }
diff --git 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/CreateGroupServlet.java
 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/CreateGroupServlet.java
index 5ad9663..6c540cf 100644
--- 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/CreateGroupServlet.java
+++ 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/CreateGroupServlet.java
@@ -37,14 +37,17 @@ import 
org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.jackrabbit.usermanager.CreateGroup;
 import 
org.apache.sling.jackrabbit.usermanager.impl.resource.AuthorizableResourceProvider;
 import org.apache.sling.jcr.base.util.AccessControlUtil;
-import org.apache.sling.servlets.post.AbstractPostResponse;
 import org.apache.sling.servlets.post.Modification;
+import org.apache.sling.servlets.post.PostResponse;
+import org.apache.sling.servlets.post.PostResponseCreator;
 import org.apache.sling.servlets.post.SlingPostConstants;
 import org.apache.sling.servlets.post.impl.helper.RequestProperty;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
 
 /**
  * <p>
@@ -115,6 +118,27 @@ public class CreateGroupServlet extends 
AbstractGroupPostServlet implements Crea
         super.deactivate();
     }
 
+    /**
+     * Overridden since the @Reference annotation is not inherited from the 
super method
+     *  
+        * @see 
org.apache.sling.jackrabbit.usermanager.impl.post.AbstractPostServlet#bindPostResponseCreator(org.apache.sling.servlets.post.PostResponseCreator,
 java.util.Map)
+        */
+       @Override
+    @Reference(service = PostResponseCreator.class,
+           cardinality = ReferenceCardinality.MULTIPLE,
+           policy = ReferencePolicy.DYNAMIC)
+       protected void bindPostResponseCreator(PostResponseCreator creator, 
Map<String, Object> properties) {
+               super.bindPostResponseCreator(creator, properties);
+       }
+       
+       /* (non-Javadoc)
+        * @see 
org.apache.sling.jackrabbit.usermanager.impl.post.AbstractPostServlet#unbindPostResponseCreator(org.apache.sling.servlets.post.PostResponseCreator,
 java.util.Map)
+        */
+       @Override
+       protected void unbindPostResponseCreator(PostResponseCreator creator, 
Map<String, Object> properties) {
+               super.unbindPostResponseCreator(creator, properties);
+       }
+    
     /*
      * (non-Javadoc)
      * @see
@@ -124,7 +148,7 @@ public class CreateGroupServlet extends 
AbstractGroupPostServlet implements Crea
      */
     @Override
     protected void handleOperation(SlingHttpServletRequest request,
-               AbstractPostResponse response, List<Modification> changes)
+               PostResponse response, List<Modification> changes)
             throws RepositoryException {
 
         Session session = request.getResourceResolver().adaptTo(Session.class);
diff --git 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/CreateUserServlet.java
 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/CreateUserServlet.java
index 64d43fa..7fae917 100644
--- 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/CreateUserServlet.java
+++ 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/CreateUserServlet.java
@@ -34,15 +34,18 @@ import org.apache.sling.jackrabbit.usermanager.CreateUser;
 import 
org.apache.sling.jackrabbit.usermanager.impl.resource.AuthorizableResourceProvider;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.jcr.base.util.AccessControlUtil;
-import org.apache.sling.servlets.post.AbstractPostResponse;
 import org.apache.sling.servlets.post.Modification;
 import org.apache.sling.servlets.post.ModificationType;
+import org.apache.sling.servlets.post.PostResponse;
+import org.apache.sling.servlets.post.PostResponseCreator;
 import org.apache.sling.servlets.post.SlingPostConstants;
 import org.apache.sling.servlets.post.impl.helper.RequestProperty;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
 import org.osgi.service.metatype.annotations.Designate;
 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
@@ -167,6 +170,27 @@ public class CreateUserServlet extends 
AbstractAuthorizablePostServlet implement
         super.deactivate();
     }
 
+    /**
+     * Overridden since the @Reference annotation is not inherited from the 
super method
+     *  
+        * @see 
org.apache.sling.jackrabbit.usermanager.impl.post.AbstractPostServlet#bindPostResponseCreator(org.apache.sling.servlets.post.PostResponseCreator,
 java.util.Map)
+        */
+       @Override
+    @Reference(service = PostResponseCreator.class,
+           cardinality = ReferenceCardinality.MULTIPLE,
+           policy = ReferencePolicy.DYNAMIC)
+       protected void bindPostResponseCreator(PostResponseCreator creator, 
Map<String, Object> properties) {
+               super.bindPostResponseCreator(creator, properties);
+       }
+       
+       /* (non-Javadoc)
+        * @see 
org.apache.sling.jackrabbit.usermanager.impl.post.AbstractPostServlet#unbindPostResponseCreator(org.apache.sling.servlets.post.PostResponseCreator,
 java.util.Map)
+        */
+       @Override
+       protected void unbindPostResponseCreator(PostResponseCreator creator, 
Map<String, Object> properties) {
+               super.unbindPostResponseCreator(creator, properties);
+       }
+    
     /*
      * (non-Javadoc)
      * @see
@@ -176,7 +200,7 @@ public class CreateUserServlet extends 
AbstractAuthorizablePostServlet implement
      */
     @Override
     protected void handleOperation(SlingHttpServletRequest request,
-               AbstractPostResponse response, List<Modification> changes)
+               PostResponse response, List<Modification> changes)
             throws RepositoryException {
 
 
diff --git 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/DeleteAuthorizableServlet.java
 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/DeleteAuthorizableServlet.java
index 7676b59..75801af 100644
--- 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/DeleteAuthorizableServlet.java
+++ 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/DeleteAuthorizableServlet.java
@@ -18,6 +18,7 @@ package org.apache.sling.jackrabbit.usermanager.impl.post;
 
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.NoSuchElementException;
 
 import javax.jcr.RepositoryException;
@@ -38,10 +39,14 @@ import org.apache.sling.jackrabbit.usermanager.DeleteGroup;
 import org.apache.sling.jackrabbit.usermanager.DeleteUser;
 import 
org.apache.sling.jackrabbit.usermanager.impl.resource.AuthorizableResourceProvider;
 import org.apache.sling.jcr.base.util.AccessControlUtil;
-import org.apache.sling.servlets.post.AbstractPostResponse;
 import org.apache.sling.servlets.post.Modification;
+import org.apache.sling.servlets.post.PostResponse;
+import org.apache.sling.servlets.post.PostResponseCreator;
 import org.apache.sling.servlets.post.SlingPostConstants;
 import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
 
 /**
  * <h2>Rest Service Description</h2>
@@ -89,6 +94,27 @@ public class DeleteAuthorizableServlet extends 
AbstractPostServlet
         implements DeleteUser, DeleteGroup, DeleteAuthorizables {
     private static final long serialVersionUID = 5874621724096106496L;
 
+    /**
+     * Overridden since the @Reference annotation is not inherited from the 
super method
+     *  
+        * @see 
org.apache.sling.jackrabbit.usermanager.impl.post.AbstractPostServlet#bindPostResponseCreator(org.apache.sling.servlets.post.PostResponseCreator,
 java.util.Map)
+        */
+       @Override
+    @Reference(service = PostResponseCreator.class,
+           cardinality = ReferenceCardinality.MULTIPLE,
+           policy = ReferencePolicy.DYNAMIC)
+       protected void bindPostResponseCreator(PostResponseCreator creator, 
Map<String, Object> properties) {
+               super.bindPostResponseCreator(creator, properties);
+       }
+       
+       /* (non-Javadoc)
+        * @see 
org.apache.sling.jackrabbit.usermanager.impl.post.AbstractPostServlet#unbindPostResponseCreator(org.apache.sling.servlets.post.PostResponseCreator,
 java.util.Map)
+        */
+       @Override
+       protected void unbindPostResponseCreator(PostResponseCreator creator, 
Map<String, Object> properties) {
+               super.unbindPostResponseCreator(creator, properties);
+       }
+
     /*
      * (non-Javadoc)
      * @see
@@ -98,7 +124,7 @@ public class DeleteAuthorizableServlet extends 
AbstractPostServlet
      */
     @Override
     protected void handleOperation(SlingHttpServletRequest request,
-               AbstractPostResponse response, List<Modification> changes)
+               PostResponse response, List<Modification> changes)
             throws RepositoryException {
 
         Session session = request.getResourceResolver().adaptTo(Session.class);
diff --git 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/UpdateGroupServlet.java
 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/UpdateGroupServlet.java
index e1193d9..8f03748 100644
--- 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/UpdateGroupServlet.java
+++ 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/UpdateGroupServlet.java
@@ -37,13 +37,16 @@ import 
org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.jackrabbit.usermanager.UpdateGroup;
 import 
org.apache.sling.jackrabbit.usermanager.impl.resource.AuthorizableResourceProvider;
 import org.apache.sling.jcr.base.util.AccessControlUtil;
-import org.apache.sling.servlets.post.AbstractPostResponse;
 import org.apache.sling.servlets.post.Modification;
+import org.apache.sling.servlets.post.PostResponse;
+import org.apache.sling.servlets.post.PostResponseCreator;
 import org.apache.sling.servlets.post.impl.helper.RequestProperty;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
 
 /**
  * <p>
@@ -116,6 +119,27 @@ public class UpdateGroupServlet extends 
AbstractGroupPostServlet
         super.deactivate();
     }
 
+    /**
+     * Overridden since the @Reference annotation is not inherited from the 
super method
+     *  
+        * @see 
org.apache.sling.jackrabbit.usermanager.impl.post.AbstractPostServlet#bindPostResponseCreator(org.apache.sling.servlets.post.PostResponseCreator,
 java.util.Map)
+        */
+       @Override
+    @Reference(service = PostResponseCreator.class,
+           cardinality = ReferenceCardinality.MULTIPLE,
+           policy = ReferencePolicy.DYNAMIC)
+       protected void bindPostResponseCreator(PostResponseCreator creator, 
Map<String, Object> properties) {
+               super.bindPostResponseCreator(creator, properties);
+       }
+       
+       /* (non-Javadoc)
+        * @see 
org.apache.sling.jackrabbit.usermanager.impl.post.AbstractPostServlet#unbindPostResponseCreator(org.apache.sling.servlets.post.PostResponseCreator,
 java.util.Map)
+        */
+       @Override
+       protected void unbindPostResponseCreator(PostResponseCreator creator, 
Map<String, Object> properties) {
+               super.unbindPostResponseCreator(creator, properties);
+       }
+    
     /*
      * (non-Javadoc)
      * @see
@@ -125,7 +149,7 @@ public class UpdateGroupServlet extends 
AbstractGroupPostServlet
      */
     @Override
     protected void handleOperation(SlingHttpServletRequest request,
-               AbstractPostResponse response, List<Modification> changes)
+               PostResponse response, List<Modification> changes)
             throws RepositoryException {
         Resource resource = request.getResource();
         Session session = request.getResourceResolver().adaptTo(Session.class);
diff --git 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/UpdateUserServlet.java
 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/UpdateUserServlet.java
index 0eb4788..52c4dbd 100644
--- 
a/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/UpdateUserServlet.java
+++ 
b/src/main/java/org/apache/sling/jackrabbit/usermanager/impl/post/UpdateUserServlet.java
@@ -32,12 +32,16 @@ import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceNotFoundException;
 import org.apache.sling.jackrabbit.usermanager.UpdateUser;
 import org.apache.sling.jcr.base.util.AccessControlUtil;
-import org.apache.sling.servlets.post.AbstractPostResponse;
 import org.apache.sling.servlets.post.Modification;
+import org.apache.sling.servlets.post.PostResponse;
+import org.apache.sling.servlets.post.PostResponseCreator;
 import org.apache.sling.servlets.post.impl.helper.RequestProperty;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
 
 /**
  * <p>
@@ -107,6 +111,27 @@ public class UpdateUserServlet extends 
AbstractAuthorizablePostServlet
         super.deactivate();
     }
 
+    /**
+     * Overridden since the @Reference annotation is not inherited from the 
super method
+     *  
+        * @see 
org.apache.sling.jackrabbit.usermanager.impl.post.AbstractPostServlet#bindPostResponseCreator(org.apache.sling.servlets.post.PostResponseCreator,
 java.util.Map)
+        */
+       @Override
+    @Reference(service = PostResponseCreator.class,
+           cardinality = ReferenceCardinality.MULTIPLE,
+           policy = ReferencePolicy.DYNAMIC)
+       protected void bindPostResponseCreator(PostResponseCreator creator, 
Map<String, Object> properties) {
+               super.bindPostResponseCreator(creator, properties);
+       }
+       
+       /* (non-Javadoc)
+        * @see 
org.apache.sling.jackrabbit.usermanager.impl.post.AbstractPostServlet#unbindPostResponseCreator(org.apache.sling.servlets.post.PostResponseCreator,
 java.util.Map)
+        */
+       @Override
+       protected void unbindPostResponseCreator(PostResponseCreator creator, 
Map<String, Object> properties) {
+               super.unbindPostResponseCreator(creator, properties);
+       }
+
     /*
      * (non-Javadoc)
      * @see
@@ -116,7 +141,7 @@ public class UpdateUserServlet extends 
AbstractAuthorizablePostServlet
      */
     @Override
     protected void handleOperation(SlingHttpServletRequest request,
-               AbstractPostResponse response, List<Modification> changes)
+               PostResponse response, List<Modification> changes)
             throws RepositoryException {
         Resource resource = request.getResource();
         Session session = request.getResourceResolver().adaptTo(Session.class);

Reply via email to