diff --git a/modules/core/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/SimpleDocumentModel.java b/modules/core/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/SimpleDocumentModel.java index b7e5a8722098..774e1e0b793f 100644 --- a/modules/core/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/SimpleDocumentModel.java +++ b/modules/core/nuxeo-core-api/src/main/java/org/nuxeo/ecm/core/api/impl/SimpleDocumentModel.java @@ -20,6 +20,7 @@ */ package org.nuxeo.ecm.core.api.impl; +import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; import static org.nuxeo.ecm.core.schema.types.ComplexTypeImpl.canonicalXPath; import java.io.Serializable; @@ -41,6 +42,7 @@ import org.nuxeo.ecm.core.api.DocumentRef; import org.nuxeo.ecm.core.api.LifeCycleConstants; import org.nuxeo.ecm.core.api.Lock; +import org.nuxeo.ecm.core.api.NuxeoException; import org.nuxeo.ecm.core.api.NuxeoPrincipal; import org.nuxeo.ecm.core.api.PathRef; import org.nuxeo.ecm.core.api.PropertyException; @@ -115,6 +117,9 @@ protected SimpleDocumentModel(DocumentType documentType) { public static SimpleDocumentModel ofType(String type) { SchemaManager service = Framework.getService(SchemaManager.class); DocumentType dType = service.getDocumentType(type); + if (dType == null) { + throw new NuxeoException("Type: " + type + " does not exist", SC_BAD_REQUEST); + } return new SimpleDocumentModel(dType); } diff --git a/modules/core/nuxeo-core-test/src/test/java/org/nuxeo/ecm/core/api/TestSimpleDocumentModel.java b/modules/core/nuxeo-core-test/src/test/java/org/nuxeo/ecm/core/api/TestSimpleDocumentModel.java index 8272359375fa..edca2c41546f 100644 --- a/modules/core/nuxeo-core-test/src/test/java/org/nuxeo/ecm/core/api/TestSimpleDocumentModel.java +++ b/modules/core/nuxeo-core-test/src/test/java/org/nuxeo/ecm/core/api/TestSimpleDocumentModel.java @@ -18,8 +18,10 @@ */ package org.nuxeo.ecm.core.api; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.util.HashMap; import java.util.Map; @@ -115,4 +117,17 @@ public void testPropertyUpdatedWithSameValueAreDirty7() throws Exception { assertTrue(doc.getProperty("dc:title").isDirty()); } + // NXP-30052 + @Test + public void testNonExistingType() { + try { + SimpleDocumentModel.ofType("Foo"); + fail("Should have raised a NuxeoException"); + } catch (NuxeoException e) { + assertEquals(400, e.getStatusCode()); + assertEquals("Type: Foo does not exist", e.getMessage()); + } + + } + } diff --git a/modules/platform/rest-api/nuxeo-rest-api-test/src/test/java/org/nuxeo/ecm/restapi/test/DocumentBrowsingTest.java b/modules/platform/rest-api/nuxeo-rest-api-test/src/test/java/org/nuxeo/ecm/restapi/test/DocumentBrowsingTest.java index 44f0db2d9f80..aa33ad79d20c 100644 --- a/modules/platform/rest-api/nuxeo-rest-api-test/src/test/java/org/nuxeo/ecm/restapi/test/DocumentBrowsingTest.java +++ b/modules/platform/rest-api/nuxeo-rest-api-test/src/test/java/org/nuxeo/ecm/restapi/test/DocumentBrowsingTest.java @@ -628,6 +628,22 @@ public void iCanCreateADocumentWithNonExistingField() { } } + // NXP-30052 + @Test + public void iCantCreateADocumentWithNonExistingType() throws IOException { + DocumentModel folder = RestServerInit.getFolder(0, session); + + String data = "{\"entity-type\": \"document\",\"type\": \"Foo\",\"name\":\"newName\",\"properties\": {\"dc:title\":\"Foo\"}}"; + + try (CloseableClientResponse response = getResponse(RequestType.POST, "path" + folder.getPathAsString(), + data)) { + assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + JsonNode node = mapper.readTree(response.getEntityInputStream()); + assertEquals(400, node.get("status").longValue()); + assertEquals("Type: Foo does not exist", node.get("message").textValue()); + } + } + @Test public void iCanDeleteADocument() { // Given a document