Skip to content

Commit a244892

Browse files
committed
Limit exception mapper to driver exceptions.
We now only map DriverException's and such that are in the com.datastax.oss package to avoid a catch-all to CassandraUncategorizedException. Closes: #1155
1 parent b511c1d commit a244892

File tree

2 files changed

+18
-20
lines changed

2 files changed

+18
-20
lines changed

spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/cql/CassandraExceptionTranslator.java

+13-8
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,6 @@
2121
import java.util.Map;
2222
import java.util.Set;
2323

24-
import com.datastax.oss.driver.api.core.AllNodesFailedException;
25-
import com.datastax.oss.driver.api.core.DriverException;
26-
import com.datastax.oss.driver.api.core.auth.AuthenticationException;
27-
import com.datastax.oss.driver.api.core.metadata.Node;
28-
import com.datastax.oss.driver.api.core.servererrors.*;
29-
3024
import org.springframework.dao.DataAccessException;
3125
import org.springframework.dao.DataAccessResourceFailureException;
3226
import org.springframework.dao.TransientDataAccessResourceException;
@@ -36,6 +30,12 @@
3630
import org.springframework.util.ClassUtils;
3731
import org.springframework.util.StringUtils;
3832

33+
import com.datastax.oss.driver.api.core.AllNodesFailedException;
34+
import com.datastax.oss.driver.api.core.DriverException;
35+
import com.datastax.oss.driver.api.core.auth.AuthenticationException;
36+
import com.datastax.oss.driver.api.core.metadata.Node;
37+
import com.datastax.oss.driver.api.core.servererrors.*;
38+
3939
/**
4040
* Simple {@link PersistenceExceptionTranslator} for Cassandra.
4141
* <p>
@@ -156,8 +156,13 @@ public DataAccessException translate(@Nullable String task, @Nullable String cql
156156
return new DataAccessResourceFailureException(message, exception);
157157
}
158158

159-
// unknown or unhandled exception
160-
return new CassandraUncategorizedException(message, exception);
159+
if (exception instanceof DriverException
160+
|| (exception.getClass().getName().startsWith("com.datastax.oss.driver"))) {
161+
// unknown or unhandled exception
162+
return new CassandraUncategorizedException(message, exception);
163+
}
164+
165+
return null;
161166
}
162167

163168
/**

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/cql/CassandraExceptionTranslatorUnitTests.java

+5-12
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import static org.assertj.core.api.Assertions.*;
1919
import static org.mockito.Mockito.*;
2020

21-
import java.lang.reflect.Constructor;
2221
import java.net.InetSocketAddress;
2322
import java.util.Arrays;
2423
import java.util.Collections;
@@ -29,7 +28,6 @@
2928
import org.springframework.dao.DataAccessResourceFailureException;
3029
import org.springframework.dao.TransientDataAccessResourceException;
3130
import org.springframework.data.cassandra.*;
32-
import org.springframework.util.ClassUtils;
3331

3432
import com.datastax.oss.driver.api.core.DefaultConsistencyLevel;
3533
import com.datastax.oss.driver.api.core.NoNodeAvailableException;
@@ -232,6 +230,11 @@ void shouldTranslateToUncategorized() {
232230
Arrays.asList(ProtocolVersion.V3, ProtocolVersion.V4)))).isInstanceOf(CassandraUncategorizedException.class);
233231
}
234232

233+
@Test // GH-1155
234+
void shouldNotTranslateUnknownExceptions() {
235+
assertThat(sut.translateExceptionIfPossible(new UnsupportedOperationException())).isNull();
236+
}
237+
235238
@Test // DATACASS-335
236239
void shouldTranslateWithCqlMessage() {
237240

@@ -241,14 +244,4 @@ void shouldTranslateWithCqlMessage() {
241244
assertThat(dax).hasRootCauseInstanceOf(InvalidConfigurationInQueryException.class).hasMessage(
242245
"Query; CQL [SELECT * FROM person]; err; nested exception is com.datastax.oss.driver.api.core.servererrors.InvalidConfigurationInQueryException: err");
243246
}
244-
245-
@SuppressWarnings("unchecked")
246-
<T> T createInstance(String className, Class<?> argTypes[], Object... args)
247-
throws ReflectiveOperationException {
248-
249-
Class<T> exceptionClass = (Class) ClassUtils.forName(className, getClass().getClassLoader());
250-
Constructor<T> constructor = exceptionClass.getDeclaredConstructor(argTypes);
251-
252-
return constructor.newInstance(args);
253-
}
254247
}

0 commit comments

Comments
 (0)