You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2010/07/28 21:01:30 UTC
svn commit: r980159 - in
/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src:
main/java/org/apache/chemistry/opencmis/inmemory/
main/java/org/apache/chemistry/opencmis/inmemory/server/
main/java/org/apac...
Author: jens
Date: Wed Jul 28 19:01:30 2010
New Revision: 980159
URL: http://svn.apache.org/viewvc?rev=980159&view=rev
Log:
InMemory: Fix bug with insufficent name validation on create... calls in ObjectService, improve exception handling, add tests
Modified:
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/NameValidator.java
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTst.java
incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/NameValidator.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/NameValidator.java?rev=980159&r1=980158&r2=980159&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/NameValidator.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/NameValidator.java Wed Jul 28 19:01:30 2010
@@ -32,6 +32,9 @@ public class NameValidator {
* string to verify
*/
static public boolean isValidId(String s) {
+ if (null == s || s.length() == 0)
+ return false;
+
if (s.startsWith("cmis:"))
s = s.substring(5);
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java?rev=980159&r1=980158&r2=980159&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java Wed Jul 28 19:01:30 2010
@@ -825,20 +825,17 @@ public class InMemoryObjectServiceImpl e
else
throw new CmisInvalidArgumentException("Can't create folder, folderId does not refer to a folder: "
+ folderId);
- try {
- ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
- Folder newFolder = objStore.createFolder(folderName);
- // set default system attributes
- if (user == null)
- user = "unknown";
- newFolder.createSystemBasePropertiesWhenCreated(properties.getProperties(), user);
- newFolder.setCustomProperties(properties.getProperties());
- parent.addChildFolder(newFolder);
- LOG.debug("stop createFolder()");
- return newFolder;
- } catch (Exception e) {
- throw new CmisInvalidArgumentException("Failed to create child folder.", e);
- }
+
+ ObjectStore objStore = fStoreManager.getObjectStore(repositoryId);
+ Folder newFolder = objStore.createFolder(folderName);
+ // set default system attributes
+ if (user == null)
+ user = "unknown";
+ newFolder.createSystemBasePropertiesWhenCreated(properties.getProperties(), user);
+ newFolder.setCustomProperties(properties.getProperties());
+ parent.addChildFolder(newFolder);
+ LOG.debug("stop createFolder()");
+ return newFolder;
}
private StoredObject createPolicyIntern(String repositoryId, Properties properties, String folderId,
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java?rev=980159&r1=980158&r2=980159&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java Wed Jul 28 19:01:30 2010
@@ -30,6 +30,7 @@ import java.util.Map;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.data.PropertyData;
import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
import org.apache.chemistry.opencmis.inmemory.FilterParser;
import org.apache.chemistry.opencmis.inmemory.NameValidator;
@@ -63,7 +64,7 @@ public class FolderImpl extends Abstract
String name = folder.getName();
hasChild = hasChild(name);
if (hasChild)
- throw new RuntimeException("Cannot create folder " + name + ". Name already exists in parent folder");
+ throw new CmisNameConstraintViolationException("Cannot create folder " + name + ". Name already exists in parent folder");
folder.setParent(this);
folder.persist();
} finally {
@@ -96,14 +97,14 @@ public class FolderImpl extends Abstract
boolean hasChild;
hasChild = hasChild(name);
if (hasChild)
- throw new RuntimeException("Cannot create document " + name + ". Name already exists in parent folder");
+ throw new CmisNameConstraintViolationException("Cannot create object: " + name + ". Name already exists in parent folder");
if (so instanceof SingleFiling)
((SingleFiling) so).setParent(this);
else if (so instanceof MultiFiling)
((MultiFiling) so).addParent(this);
else
- throw new RuntimeException("Cannot create document, object is not fileable.");
+ throw new CmisInvalidArgumentException("Cannot create document, object is not fileable.");
so.persist();
} finally {
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTst.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTst.java?rev=980159&r1=980158&r2=980159&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTst.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/AbstractServiceTst.java Wed Jul 28 19:01:30 2010
@@ -147,10 +147,9 @@ public class AbstractServiceTst /* exten
}
protected String createFolder(String folderName, String parentFolderId, String typeId) {
- Properties props = createFolderProperties(folderName, typeId);
String id = null;
try {
- id = fObjSvc.createFolder(fRepositoryId, props, parentFolderId, null, null, null, null);
+ id = createFolderNoCatch(folderName, parentFolderId, typeId);
if (null == id)
fail("createFolder failed.");
} catch (Exception e) {
@@ -159,7 +158,13 @@ public class AbstractServiceTst /* exten
return id;
}
- protected String createDocument(String name, String folderId, String typeId, VersioningState versioningState,
+ protected String createFolderNoCatch(String folderName, String parentFolderId, String typeId) {
+ Properties props = createFolderProperties(folderName, typeId);
+ String id = fObjSvc.createFolder(fRepositoryId, props, parentFolderId, null, null, null, null);
+ return id;
+ }
+
+ protected String createDocumentNoCatch(String name, String folderId, String typeId, VersioningState versioningState,
boolean withContent) {
ContentStream contentStream = null;
List<String> policies = null;
@@ -172,17 +177,22 @@ public class AbstractServiceTst /* exten
if (withContent)
contentStream = createContent();
+ String id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState, policies,
+ addACEs, removeACEs, extension);
+ return id;
+ }
+
+ protected String createDocument(String name, String folderId, String typeId, VersioningState versioningState,
+ boolean withContent) {
String id = null;
try {
- id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState, policies,
- addACEs, removeACEs, extension);
+ id = createDocumentNoCatch(name , folderId, typeId, versioningState, withContent);
if (null == id)
fail("createDocument failed.");
} catch (Exception e) {
fail("createDocument() failed with exception: " + e);
}
return id;
-
}
protected String createDocument(String name, String folderId, String typeId, boolean withContent) {
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java?rev=980159&r1=980158&r2=980159&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/ObjectServiceTest.java Wed Jul 28 19:01:30 2010
@@ -50,8 +50,8 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisContentAlreadyExistsException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
@@ -145,6 +145,70 @@ public class ObjectServiceTest extends A
}
@Test
+ public void testCreateDocumentInvalidNames() {
+ try {
+ createDocumentNoCatch(null, fRootFolderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false);
+ fail("Document creation with null name should fail.");
+ } catch (Exception e) {
+ assertTrue(e instanceof CmisInvalidArgumentException);
+ }
+
+ try {
+ createDocumentNoCatch("", fRootFolderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false);
+ fail("Document creation with empty name should fail.");
+ } catch (Exception e) {
+ assertTrue(e instanceof CmisInvalidArgumentException);
+ }
+
+ try {
+ createDocumentNoCatch("/(%#$§", fRootFolderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false);
+ fail("Document creation with ilegal name should fail.");
+ } catch (Exception e) {
+ assertTrue(e instanceof CmisInvalidArgumentException);
+ }
+
+ try {
+ createDocumentNoCatch("DuplicatedName", fRootFolderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false);
+ createDocumentNoCatch("DuplicatedName", fRootFolderId, DOCUMENT_TYPE_ID, VersioningState.NONE, false);
+ fail("Document creation with existing name should fail.");
+ } catch (Exception e) {
+ assertTrue(e instanceof CmisNameConstraintViolationException);
+ }
+ }
+
+ @Test
+ public void testCreateFolderInvalidNames() {
+ try {
+ createFolderNoCatch(null, fRootFolderId, FOLDER_TYPE_ID);
+ fail("Folder creation with null name should fail.");
+ } catch (Exception e) {
+ assertTrue(e instanceof CmisInvalidArgumentException);
+ }
+
+ try {
+ createFolderNoCatch("", fRootFolderId, FOLDER_TYPE_ID);
+ fail("Folder creation with empty name should fail.");
+ } catch (Exception e) {
+ assertTrue(e instanceof CmisInvalidArgumentException);
+ }
+
+ try {
+ createFolderNoCatch("/(%#$§", fRootFolderId, FOLDER_TYPE_ID);
+ fail("Folder creation with ilegal name should fail.");
+ } catch (Exception e) {
+ assertTrue(e instanceof CmisInvalidArgumentException);
+ }
+
+ try {
+ createFolderNoCatch("DuplicatedName", fRootFolderId, FOLDER_TYPE_ID);
+ createFolderNoCatch("DuplicatedName", fRootFolderId, FOLDER_TYPE_ID);
+ fail("Folder creation with existing name should fail.");
+ } catch (Exception e) {
+ assertTrue(e instanceof CmisNameConstraintViolationException);
+ }
+ }
+
+ @Test
public void testGetObject() {
log.info("starting testGetObject() ...");
log.info(" creating object");