Fix for SLING-8913 - fixing an issue on publish if the node has no jcr:content child
diff --git a/core/src/main/java/org/apache/sling/cms/core/publication/StandalonePublicationManager.java b/core/src/main/java/org/apache/sling/cms/core/publication/StandalonePublicationManager.java
index 6c64499..a1e195a 100644
--- a/core/src/main/java/org/apache/sling/cms/core/publication/StandalonePublicationManager.java
+++ b/core/src/main/java/org/apache/sling/cms/core/publication/StandalonePublicationManager.java
@@ -17,10 +17,14 @@
package org.apache.sling.cms.core.publication;
import java.util.Calendar;
+import java.util.Collections;
import java.util.Optional;
+import org.apache.jackrabbit.JcrConstants;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.PersistenceException;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.cms.CMSConstants;
import org.apache.sling.cms.PublishableResource;
import org.apache.sling.cms.publication.PUBLICATION_MODE;
@@ -44,8 +48,13 @@
@Override
public void publish(PublishableResource resource) throws PublicationException {
try {
- ModifiableValueMap properties = Optional
- .ofNullable(resource.getContentResource().adaptTo(ModifiableValueMap.class))
+ Resource contentResource = resource.getContentResource();
+ if (contentResource == null) {
+ contentResource = resource.getResource().getResourceResolver().create(resource.getResource(),
+ JcrConstants.JCR_CONTENT,
+ Collections.singletonMap(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED));
+ }
+ ModifiableValueMap properties = Optional.ofNullable(contentResource.adaptTo(ModifiableValueMap.class))
.orElseThrow(() -> new PublicationException("Cannot modify resource"));
properties.put(CMSConstants.PN_PUBLISHED, true);
properties.put(CMSConstants.PN_LAST_PUBLICATION, Calendar.getInstance());
@@ -61,8 +70,13 @@
@Override
public void unpublish(PublishableResource resource) throws PublicationException {
try {
- ModifiableValueMap properties = Optional
- .ofNullable(resource.getContentResource().adaptTo(ModifiableValueMap.class))
+ Resource contentResource = resource.getContentResource();
+ if (contentResource == null) {
+ contentResource = resource.getResource().getResourceResolver().create(resource.getResource(),
+ JcrConstants.JCR_CONTENT,
+ Collections.singletonMap(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED));
+ }
+ ModifiableValueMap properties = Optional.ofNullable(contentResource.adaptTo(ModifiableValueMap.class))
.orElseThrow(() -> new PublicationException("Cannot modify resource"));
properties.put(CMSConstants.PN_PUBLISHED, false);
properties.put(CMSConstants.PN_LAST_PUBLICATION, Calendar.getInstance());