From 77d48bae9e9b7bee9d634fbbfff3aff966181d87 Mon Sep 17 00:00:00 2001 From: Jamal Kaabi-Mofrad Date: Tue, 10 May 2016 11:27:49 +0000 Subject: [PATCH] Merged FILE-FOLDER-API (5.2.0) to HEAD (5.2) 124207 jvonka: RA-893: Fix "Multi-part update content appears to work but doesn't" - throw 415 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@126553 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/public-rest-context.xml | 1 + .../org/alfresco/rest/api/impl/NodesImpl.java | 6 +++++ .../UnsupportedMediaTypeException.java | 26 +++++++++++++++++++ .../alfresco/rest/api/tests/NodeApiTest.java | 4 +++ 4 files changed, 37 insertions(+) create mode 100644 source/java/org/alfresco/rest/framework/core/exceptions/UnsupportedMediaTypeException.java diff --git a/config/alfresco/public-rest-context.xml b/config/alfresco/public-rest-context.xml index 087344e713..4d2e997302 100644 --- a/config/alfresco/public-rest-context.xml +++ b/config/alfresco/public-rest-context.xml @@ -146,6 +146,7 @@ + diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java index a278e02bea..b46193eabe 100644 --- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java @@ -72,6 +72,7 @@ import org.alfresco.rest.framework.core.exceptions.InsufficientStorageException; import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException; import org.alfresco.rest.framework.core.exceptions.PermissionDeniedException; import org.alfresco.rest.framework.core.exceptions.RequestEntityTooLargeException; +import org.alfresco.rest.framework.core.exceptions.UnsupportedMediaTypeException; import org.alfresco.rest.framework.resource.content.BasicContentInfo; import org.alfresco.rest.framework.resource.content.BinaryResource; import org.alfresco.rest.framework.resource.content.ContentInfoImpl; @@ -1796,6 +1797,11 @@ public class NodesImpl implements Nodes @Override public Node updateContent(String fileNodeId, BasicContentInfo contentInfo, InputStream stream, Parameters parameters) { + if (contentInfo.getMimeType().toLowerCase().startsWith("multipart")) + { + throw new UnsupportedMediaTypeException("Cannot update using "+contentInfo.getMimeType()); + } + final NodeRef nodeRef = validateNode(fileNodeId); if (! nodeMatches(nodeRef, Collections.singleton(ContentModel.TYPE_CONTENT), null, false)) diff --git a/source/java/org/alfresco/rest/framework/core/exceptions/UnsupportedMediaTypeException.java b/source/java/org/alfresco/rest/framework/core/exceptions/UnsupportedMediaTypeException.java new file mode 100644 index 0000000000..b50429ca4f --- /dev/null +++ b/source/java/org/alfresco/rest/framework/core/exceptions/UnsupportedMediaTypeException.java @@ -0,0 +1,26 @@ +package org.alfresco.rest.framework.core.exceptions; + +/** + * The media type is unsupported. + * + * @author janv + */ +public class UnsupportedMediaTypeException extends ApiException +{ + public static String DEFAULT_MESSAGE_ID = "framework.exception.UnsupportedMediaType"; + + public UnsupportedMediaTypeException() + { + super(DEFAULT_MESSAGE_ID); + } + + public UnsupportedMediaTypeException(String msgId) + { + super(msgId); + } + + public UnsupportedMediaTypeException(String msgId, Object[] msgParams) + { + super(msgId, msgParams); + } +} diff --git a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java index 35f394d8ec..4a4dc15c01 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java @@ -2558,6 +2558,10 @@ public class NodeApiTest extends AbstractBaseApiTest // Download the file response = getSingle(url, user1, null, 200); assertNotNull(content, response.getResponse()); + + // -ve - try to update content using multi-part form data + payload = new BinaryPayload(txtFile, "multipart/form-data", null); + putBinary(url, user1, payload, null, null, 415); } /**