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