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