Skip to content

NPE thrown when calling methods with an empty @Caching annotation [SPR-14162] #18734

@spring-projects-issues

Description

@spring-projects-issues

Lev Bornovalov opened SPR-14162 and commented

To reproduce:

Call the following proxied method:

@Caching
public void someMethod(final String argument) {
   ....
}

This will cause the following exception:

java.lang.NullPointerException: null
	at java.util.ArrayList.addAll(ArrayList.java:577) ~[na:1.8.0_20]
	at org.springframework.cache.annotation.SpringCacheAnnotationParser.parseCacheAnnotations(SpringCacheAnnotationParser.java:89) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
	at org.springframework.cache.annotation.SpringCacheAnnotationParser.parseCacheAnnotations(SpringCacheAnnotationParser.java:58) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
	at org.springframework.cache.annotation.AnnotationCacheOperationSource$2.getCacheOperations(AnnotationCacheOperationSource.java:124) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
	at org.springframework.cache.annotation.AnnotationCacheOperationSource.determineCacheOperations(AnnotationCacheOperationSource.java:142) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
	at org.springframework.cache.annotation.AnnotationCacheOperationSource.findCacheOperations(AnnotationCacheOperationSource.java:121) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
	at org.springframework.cache.interceptor.AbstractFallbackCacheOperationSource.computeCacheOperations(AbstractFallbackCacheOperationSource.java:136) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
	at org.springframework.cache.interceptor.AbstractFallbackCacheOperationSource.getCacheOperations(AbstractFallbackCacheOperationSource.java:97) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
	at org.springframework.cache.interceptor.CacheOperationSourcePointcut.matches(CacheOperationSourcePointcut.java:39) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
	at org.springframework.aop.support.MethodMatchers.matches(MethodMatchers.java:94) ~[spring-aop-4.2.3.RELEASE.jar:4.2.3.RELEASE]

Although you may be thinking that including an empty @Caching annotation is a corner-case, in our particular use-case, it's required, as we're calling a custom implementation of org.springframework.cache.interceptor.CacheInterceptor. We are doing this because the @CacheEvict funtionality does not allow use to easily purge individual keys based on method args, etc...


Affects: 3.2.16, 4.2.3

Issue Links:

Referenced from: commits 3d6b0ca, da11261, 33dcef3

Backported to: 3.2.17

Metadata

Metadata

Assignees

Labels

in: coreIssues in core modules (aop, beans, core, context, expression)status: backportedAn issue that has been backported to maintenance branchestype: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions