diff --git a/source/java/org/alfresco/repo/content/AbstractContentWriter.java b/source/java/org/alfresco/repo/content/AbstractContentWriter.java
index 59fa0c7596..1ac28b67d4 100644
--- a/source/java/org/alfresco/repo/content/AbstractContentWriter.java
+++ b/source/java/org/alfresco/repo/content/AbstractContentWriter.java
@@ -43,6 +43,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentStreamListener;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.MimetypeService;
+import org.alfresco.service.cmr.repository.MimetypeServiceAware;
import org.alfresco.util.TempFileProvider;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -58,7 +59,7 @@ import org.springframework.aop.framework.ProxyFactory;
*
* @author Derek Hulley
*/
-public abstract class AbstractContentWriter extends AbstractContentAccessor implements ContentWriter
+public abstract class AbstractContentWriter extends AbstractContentAccessor implements ContentWriter, MimetypeServiceAware
{
private static final Log logger = LogFactory.getLog(AbstractContentWriter.class);
diff --git a/source/java/org/alfresco/repo/content/ContentServiceImpl.java b/source/java/org/alfresco/repo/content/ContentServiceImpl.java
index 30bf8efe16..5fb63ec3c4 100644
--- a/source/java/org/alfresco/repo/content/ContentServiceImpl.java
+++ b/source/java/org/alfresco/repo/content/ContentServiceImpl.java
@@ -57,6 +57,7 @@ import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.MimetypeService;
+import org.alfresco.service.cmr.repository.MimetypeServiceAware;
import org.alfresco.service.cmr.repository.NoTransformerException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
@@ -540,9 +541,9 @@ public class ContentServiceImpl implements ContentService, ApplicationContextAwa
}
// supply the writer with a copy of the mimetype service if needed
- if (writer instanceof AbstractContentWriter)
+ if (writer instanceof MimetypeServiceAware)
{
- ((AbstractContentWriter)writer).setMimetypeService(mimetypeService);
+ ((MimetypeServiceAware)writer).setMimetypeService(mimetypeService);
}
// give back to the client
diff --git a/source/java/org/alfresco/repo/content/caching/BackingStoreAwareCacheWriter.java b/source/java/org/alfresco/repo/content/caching/BackingStoreAwareCacheWriter.java
index 153be5a745..14983d5eaa 100644
--- a/source/java/org/alfresco/repo/content/caching/BackingStoreAwareCacheWriter.java
+++ b/source/java/org/alfresco/repo/content/caching/BackingStoreAwareCacheWriter.java
@@ -30,6 +30,8 @@ import org.alfresco.service.cmr.repository.ContentIOException;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentStreamListener;
import org.alfresco.service.cmr.repository.ContentWriter;
+import org.alfresco.service.cmr.repository.MimetypeService;
+import org.alfresco.service.cmr.repository.MimetypeServiceAware;
/**
* Wrapper for cache writer that is aware of backing store
@@ -41,7 +43,7 @@ import org.alfresco.service.cmr.repository.ContentWriter;
* @author Viachaslau Tsikhanovich
*
*/
-public class BackingStoreAwareCacheWriter implements ContentWriter
+public class BackingStoreAwareCacheWriter implements ContentWriter, MimetypeServiceAware
{
/** Cache writer **/
private ContentWriter cacheWriter;
@@ -195,4 +197,9 @@ public class BackingStoreAwareCacheWriter implements ContentWriter
this.cacheWriter.guessEncoding();
}
+ @Override
+ public void setMimetypeService(MimetypeService mimetypeService)
+ {
+ ((MimetypeServiceAware) cacheWriter).setMimetypeService(mimetypeService);
+ }
}
diff --git a/source/test-java/org/alfresco/repo/content/caching/FullTest.java b/source/test-java/org/alfresco/repo/content/caching/FullTest.java
index b40a0d9e57..6c8f650bdf 100644
--- a/source/test-java/org/alfresco/repo/content/caching/FullTest.java
+++ b/source/test-java/org/alfresco/repo/content/caching/FullTest.java
@@ -20,11 +20,22 @@ package org.alfresco.repo.content.caching;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import java.util.UUID;
+
+import org.alfresco.model.ContentModel;
import org.alfresco.repo.content.ContentContext;
import org.alfresco.repo.content.filestore.FileContentStore;
+import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.cmr.repository.ContentReader;
+import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.cmr.repository.StoreRef;
+import org.alfresco.service.namespace.NamespaceService;
+import org.alfresco.service.namespace.QName;
import org.alfresco.util.ApplicationContextHelper;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -108,6 +119,33 @@ public class FullTest
assertEquals("Reader should get correct content", content, reader.getContentString());
}
+ // CLOUD-2214: Mime type is removed during uploading file via WebDav
+ @Test
+ public void canGuessMimeType()
+ {
+ AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser();
+
+ ContentService contentService = (ContentService) ctx.getBean("ContentService");
+ NodeService nodeService = (NodeService) ctx.getBean("NodeService");
+ StoreRef storeRef = nodeService.createStore("workspace", getClass().getName()+UUID.randomUUID());
+ NodeRef rootNodeRef = nodeService.getRootNode(storeRef);
+ NodeRef nodeRef = nodeService.createNode(
+ rootNodeRef,
+ ContentModel.ASSOC_CHILDREN,
+ QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, getClass().getSimpleName()),
+ ContentModel.TYPE_CONTENT).getChildRef();
+
+ ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true);
+ // Pre-condition of test is that we're testing with a potentially problematic BackingStoreAwareCacheWriter
+ // rather than a FileContentWriter, which we would expect to work.
+ assertTrue(writer instanceof BackingStoreAwareCacheWriter);
+
+ String content = "This is some content";
+ writer.putContent(content);
+ writer.guessMimetype("myfile.txt");
+
+ assertEquals("text/plain", writer.getMimetype());
+ }
private String makeContent()
{
diff --git a/source/test-resources/cachingstore/test-context.xml b/source/test-resources/cachingstore/test-context.xml
index 017f14f380..715e316d24 100644
--- a/source/test-resources/cachingstore/test-context.xml
+++ b/source/test-resources/cachingstore/test-context.xml
@@ -25,4 +25,7 @@
+
+
+