Author: cziegeler Date: Thu Apr 27 13:27:53 2017 New Revision: 1792883 URL: http://svn.apache.org/viewvc?rev=1792883&view=rev Log: SLING-6723 : Make dependency to javax.jcr, jcr.contentloader and jcr.api optional
Modified: sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/PostResponseWithErrorHandling.java sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/ImportOperation.java Modified: sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/PostResponseWithErrorHandling.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/PostResponseWithErrorHandling.java?rev=1792883&r1=1792882&r2=1792883&view=diff ============================================================================== --- sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/PostResponseWithErrorHandling.java (original) +++ sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/PostResponseWithErrorHandling.java Thu Apr 27 13:27:53 2017 @@ -29,7 +29,10 @@ import org.apache.sling.servlets.post.Po import org.apache.sling.servlets.post.SlingPostConstants; import org.osgi.service.component.annotations.Component; -@Component(service = PostResponseCreator.class) +@Component(service = PostResponseCreator.class, + property = { + "service.vendor=The Apache Software Foundation" + }) public class PostResponseWithErrorHandling implements PostResponseCreator { @Override Modified: sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java?rev=1792883&r1=1792882&r2=1792883&view=diff ============================================================================== --- sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java (original) +++ sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java Thu Apr 27 13:27:53 2017 @@ -49,6 +49,7 @@ import org.apache.sling.servlets.post.Sl import org.apache.sling.servlets.post.VersioningConfiguration; import org.apache.sling.servlets.post.impl.helper.DateParser; import org.apache.sling.servlets.post.impl.helper.DefaultNodeNameGenerator; +import org.apache.sling.servlets.post.impl.helper.JCRSupport; import org.apache.sling.servlets.post.impl.helper.MediaRangeList; import org.apache.sling.servlets.post.impl.operations.CheckinOperation; import org.apache.sling.servlets.post.impl.operations.CheckoutOperation; @@ -70,6 +71,7 @@ import org.osgi.service.component.annota 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.component.annotations.ReferencePolicyOption; import org.osgi.service.metatype.annotations.AttributeDefinition; import org.osgi.service.metatype.annotations.Designate; import org.osgi.service.metatype.annotations.ObjectClassDefinition; @@ -191,11 +193,6 @@ public class SlingPostServlet extends Sl private final ImportOperation importOperation = new ImportOperation(); - /** - * The content importer reference. - */ - private ContentImporter contentImporter; - private VersioningConfiguration baseVersioningConfiguration; @Override @@ -434,19 +431,17 @@ public class SlingPostServlet extends Sl SlingPostConstants.OPERATION_DELETE, new DeleteOperation())); providedServices.add(registerOperation(bundleContext, SlingPostConstants.OPERATION_NOP, new NopOperation())); - providedServices.add(registerOperation(bundleContext, - SlingPostConstants.OPERATION_IMPORT, importOperation)); // the following operations require JCR: - try { + if ( JCRSupport.INSTANCE.jcrEnabled()) { + providedServices.add(registerOperation(bundleContext, + SlingPostConstants.OPERATION_IMPORT, importOperation)); providedServices.add(registerOperation(bundleContext, SlingPostConstants.OPERATION_CHECKIN, new CheckinOperation())); providedServices.add(registerOperation(bundleContext, SlingPostConstants.OPERATION_CHECKOUT, new CheckoutOperation())); providedServices.add(registerOperation(bundleContext, SlingPostConstants.OPERATION_RESTORE, new RestoreOperation())); - } catch ( final Throwable t) { - // ignore as JCR is optional } internalOperations = providedServices.toArray(new ServiceRegistration[providedServices.size()]); } @@ -722,17 +717,16 @@ public class SlingPostServlet extends Sl this.cachedPostResponseCreators = localCache; } - @Reference(cardinality = ReferenceCardinality.OPTIONAL, policy = ReferencePolicy.DYNAMIC) - protected void bindContentImporter(final ContentImporter importer) { - this.contentImporter = importer; + @Reference(service = ContentImporter.class, + cardinality = ReferenceCardinality.OPTIONAL, + policy = ReferencePolicy.DYNAMIC, + policyOption = ReferencePolicyOption.GREEDY) + protected void bindContentImporter(final Object importer) { importOperation.setContentImporter(importer); } - protected void unbindContentImporter(final ContentImporter importer) { - if ( this.contentImporter == importer ) { - this.contentImporter = null; - importOperation.setContentImporter(null); - } + protected void unbindContentImporter(final Object importer) { + importOperation.unsetContentImporter(importer); } private VersioningConfiguration createBaseVersioningConfiguration(Config config) { Modified: sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java?rev=1792883&r1=1792882&r2=1792883&view=diff ============================================================================== --- sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java (original) +++ sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/helper/JCRSupport.java Thu Apr 27 13:27:53 2017 @@ -43,7 +43,7 @@ public class JCRSupport { try { impl = new JCRSupportImpl(); } catch ( final Throwable t) { - logger.warn("Support for JCR operations like checkin, checkout, ordering etc. is currently disabled " + + logger.warn("Support for JCR operations like checkin, checkout, import, ordering etc. is currently disabled " + "in the servlets post module. Check whether the JCR API is available."); } this.supportImpl = impl; @@ -215,4 +215,8 @@ public class JCRSupport { // the caller already got an item and a node, so supportImpl is available ((JCRSupportImpl)supportImpl).move(src, dstParent, name); } + + public boolean jcrEnabled() { + return this.supportImpl != null; + } } Modified: sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/ImportOperation.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/ImportOperation.java?rev=1792883&r1=1792882&r2=1792883&view=diff ============================================================================== --- sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/ImportOperation.java (original) +++ sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/ImportOperation.java Thu Apr 27 13:27:53 2017 @@ -49,12 +49,18 @@ public class ImportOperation extends Abs /** * Reference to the content importer service */ - private ContentImporter contentImporter; + private Object contentImporter; - public void setContentImporter(ContentImporter importer) { + public void setContentImporter(Object importer) { this.contentImporter = importer; } + public void unsetContentImporter(Object importer) { + if ( this.contentImporter == importer ) { + this.contentImporter = null; + } + } + private String getRequestParamAsString(SlingHttpServletRequest request, String key) { RequestParameter requestParameter = request.getRequestParameter(key); if (requestParameter == null) { @@ -67,7 +73,7 @@ public class ImportOperation extends Abs protected void doRun(SlingHttpServletRequest request, PostResponse response, final List<Modification> changes) throws PersistenceException { try { - ContentImporter importer = contentImporter; + Object importer = contentImporter; if (importer == null) { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Missing content importer for import"); @@ -166,7 +172,7 @@ public class ImportOperation extends Abs "Missing content for import"); return; } else { - importer.importContent(node, contentRootName, contentStream, + ((ContentImporter)importer).importContent(node, contentRootName, contentStream, new ImportOptions() { @Override