Browse Source

DATADOC-5 - Provide detailed mapping of Mongo errors onto Spring DAO exception

pull/1/head
Mark Pollack 15 years ago
parent
commit
5359af9745
  1. 10
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoExceptionTranslator.java

10
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoExceptionTranslator.java

@ -23,6 +23,8 @@ import com.mongodb.MongoInternalException; @@ -23,6 +23,8 @@ import com.mongodb.MongoInternalException;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.dao.InvalidDataAccessResourceUsageException;
import org.springframework.dao.support.PersistenceExceptionTranslator;
import org.springframework.data.document.UncategorizedDocumentStoreException;
@ -56,6 +58,14 @@ public class MongoExceptionTranslator implements PersistenceExceptionTranslator @@ -56,6 +58,14 @@ public class MongoExceptionTranslator implements PersistenceExceptionTranslator
return new DataAccessResourceFailureException(ex.getMessage(), ex);
}
if (ex instanceof MongoException) {
int code = ((MongoException)ex).getCode();
if (code == 11000 || code == 11001) {
throw new DuplicateKeyException(ex.getMessage(), ex);
} else if (code == 12000 || code == 13440) {
throw new DataAccessResourceFailureException(ex.getMessage(), ex);
} else if (code == 10003 || code == 12001 || code == 12010 || code == 12011 || code == 12012 ) {
throw new InvalidDataAccessApiUsageException(ex.getMessage(), ex);
}
return new UncategorizedDocumentStoreException(ex.getMessage(), ex);
}
if (ex instanceof MongoInternalException) {

Loading…
Cancel
Save