Object ID Identicy conversion to long fails on old schema

This change fixed a bug which tried to convert non-string object as string

Fixes gh-7621
This commit is contained in:
Dávid Kovács 2020-05-16 14:33:53 +02:00 committed by Rob Winch
parent b6efd5ba76
commit 8399375a86
2 changed files with 12 additions and 1 deletions

View File

@ -118,7 +118,7 @@ class AclClassIdUtils {
*/ */
private Long convertToLong(Serializable identifier) { private Long convertToLong(Serializable identifier) {
Long idAsLong; Long idAsLong;
if (canConvertFromStringTo(Long.class)) { if (conversionService.canConvert(identifier.getClass(), Long.class)) {
idAsLong = conversionService.convert(identifier, Long.class); idAsLong = conversionService.convert(identifier, Long.class);
} else { } else {
idAsLong = Long.valueOf(identifier.toString()); idAsLong = Long.valueOf(identifier.toString());

View File

@ -24,6 +24,7 @@ import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.ConversionService;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigInteger;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.UUID; import java.util.UUID;
@ -39,6 +40,7 @@ import static org.mockito.BDDMockito.given;
public class AclClassIdUtilsTest { public class AclClassIdUtilsTest {
private static final Long DEFAULT_IDENTIFIER = 999L; private static final Long DEFAULT_IDENTIFIER = 999L;
private static final BigInteger BIGINT_IDENTIFIER = new BigInteger("999");
private static final String DEFAULT_IDENTIFIER_AS_STRING = DEFAULT_IDENTIFIER.toString(); private static final String DEFAULT_IDENTIFIER_AS_STRING = DEFAULT_IDENTIFIER.toString();
@Mock @Mock
@ -62,6 +64,15 @@ public class AclClassIdUtilsTest {
assertThat(newIdentifier).isEqualTo(DEFAULT_IDENTIFIER); assertThat(newIdentifier).isEqualTo(DEFAULT_IDENTIFIER);
} }
@Test
public void shouldReturnLongIfIdentifierIsBigInteger() throws SQLException {
// when
Serializable newIdentifier = aclClassIdUtils.identifierFrom(BIGINT_IDENTIFIER, resultSet);
// then
assertThat(newIdentifier).isEqualTo(DEFAULT_IDENTIFIER);
}
@Test @Test
public void shouldReturnLongIfClassIdTypeIsNull() throws SQLException { public void shouldReturnLongIfClassIdTypeIsNull() throws SQLException {
// given // given