From 43d731f5ed586961327741089aa95427c17bb5cd Mon Sep 17 00:00:00 2001 From: Fabian Buch Date: Wed, 26 Feb 2014 14:21:24 +0100 Subject: [PATCH] DATACMNS-453 - Fix NPE in isPageableRepository() for Repositories without a findAll() method. Added additional null check to isPagingRepository() to handle repository definitions that do not have a findAll method. Original pull request: #69. --- .../support/AbstractRepositoryMetadata.java | 5 ++++ .../AbstractRepositoryMetadataUnitTests.java | 28 ++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/repository/core/support/AbstractRepositoryMetadata.java b/src/main/java/org/springframework/data/repository/core/support/AbstractRepositoryMetadata.java index 65d110d86..d2ba3bf1e 100644 --- a/src/main/java/org/springframework/data/repository/core/support/AbstractRepositoryMetadata.java +++ b/src/main/java/org/springframework/data/repository/core/support/AbstractRepositoryMetadata.java @@ -93,6 +93,11 @@ public abstract class AbstractRepositoryMetadata implements RepositoryMetadata { public boolean isPagingRepository() { Method findAllMethod = getCrudMethods().getFindAllMethod(); + + if (findAllMethod == null) { + return false; + } + return Arrays.asList(findAllMethod.getParameterTypes()).contains(Pageable.class); } } diff --git a/src/test/java/org/springframework/data/repository/core/support/AbstractRepositoryMetadataUnitTests.java b/src/test/java/org/springframework/data/repository/core/support/AbstractRepositoryMetadataUnitTests.java index 87e725704..e5d672bc0 100644 --- a/src/test/java/org/springframework/data/repository/core/support/AbstractRepositoryMetadataUnitTests.java +++ b/src/test/java/org/springframework/data/repository/core/support/AbstractRepositoryMetadataUnitTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2013 the original author or authors. + * Copyright 2011-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,6 +27,7 @@ import org.junit.Test; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.querydsl.User; +import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.Repository; import org.springframework.data.repository.core.RepositoryMetadata; @@ -35,6 +36,7 @@ import org.springframework.data.repository.core.RepositoryMetadata; * * @author Oliver Gierke * @author Thomas Darimont + * @author Fabian Buch */ public class AbstractRepositoryMetadataUnitTests { @@ -64,6 +66,26 @@ public class AbstractRepositoryMetadataUnitTests { assertThat(metadata.getReturnedDomainClass(method), is(typeCompatibleWith(User.class))); } + /** + * @see DATACMNS-453 + */ + @Test + public void nonPageableRepository() { + + RepositoryMetadata metadata = new DummyRepositoryMetadata(UserRepository.class); + assertThat(metadata.isPagingRepository(), is(false)); + } + + /** + * @see DATACMNS-453 + */ + @Test + public void pageableRepository() { + + RepositoryMetadata metadata = new DummyRepositoryMetadata(PagedRepository.class); + assertThat(metadata.isPagingRepository(), is(true)); + } + @Test public void determinesReturnTypeFromGenericType() throws Exception { RepositoryMetadata metadata = new DummyRepositoryMetadata(ExtendingRepository.class); @@ -102,6 +124,10 @@ public class AbstractRepositoryMetadataUnitTests { List> anotherMethod(); } + interface PagedRepository extends PagingAndSortingRepository { + + } + class GenericType { }