繁体   English   中英

Spring Boot + Kotlin AutoProxyRegistrar导致Nullpointer异常

[英]Spring Boot + Kotlin AutoProxyRegistrar causes Nullpointer Exception

大家好,我正在尝试将一个小的Spring Boot项目从Java 8迁移到kotlin。 我遇到了以下配置类的问题

@EnableCaching
@Configuration
open class CacheConfiguration : CachingConfigurer {

    @Bean
    override fun cacheManager(): CacheManager {
        return ConcurrentMapCacheManager()
    }

    @Bean
    override fun cacheResolver(): CacheResolver {
        return SimpleCacheResolver(cacheManager())
    }
    /**
     * Simple Key Generator

     * @return not null
     */
    @Bean
    override fun keyGenerator(): KeyGenerator {
        return SimpleKeyGenerator()
    }

    @Bean
    override fun errorHandler(): CacheErrorHandler {
        return SimpleCacheErrorHandler()
    }

}

这是实际的课程。 从字面上看,这是我项目中的第一个也是唯一的kotlin类。 立即使用gradle bootRun启动项目会导致Nullpointer异常出现在

AutoProxyRegistrar.java#L63

 AnnotationAttributes candidate = AnnotationConfigUtils.attributesFor(importingClassMetadata, annoType);
 Object mode = candidate.get("mode"); <-- candidate is null

它尝试检索Annotation Attributes,这对于我提供的2种Annotations效果很好

@EnableCaching
@Configuration

尽管kotlin似乎添加了一个名为kotlin.Metadata的新注释,该注释似乎无法处理。

build.gradle

buildscript {
    ext {
        ext.kotlin_version = '1.0.5-2'
        springBootVersion = '1.4.3.RELEASE'
        asciiDoctorVersion = '1.5.2'
        snippetsDir = file('build/generated-snippets')
    }
    repositories {
        jcenter()
        mavenCentral()
        maven { url "https://repo.spring.io/snapshot" }
        maven { url "https://repo.spring.io/milestone" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("org.asciidoctor:asciidoctor-gradle-plugin:${asciiDoctorVersion}")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlin_version}")
    }
}

apply plugin: 'java'
apply plugin: 'spring-boot'
apply plugin: 'kotlin'
apply plugin: 'org.asciidoctor.convert'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    jcenter()
    mavenCentral()
    maven { url "https://repo.spring.io/snapshot" }
    maven { url "https://repo.spring.io/milestone" }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.14'
}

test {
    outputs.dir snippetsDir
    testLogging {
        events "passed", "skipped", "failed", "standardError"
    }
}

task stage {
    dependsOn build
}

asciidoctor {
    attributes 'snippets': snippetsDir
    inputs.dir snippetsDir
    dependsOn test
}

// Force ./gradlew cleanTest
allprojects {
    tasks.matching { task -> task.name == "test" }.all {
        outputs.upToDateWhen { false }
    }
}

dependencies {
    compile(group: 'org.springframework.boot', name: 'spring-boot-starter')
    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-web')
    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa')
    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-actuator')
    compile(group: 'org.springframework.boot', name: 'spring-boot-starter-security')
    compile(group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: '2.0.10.RELEASE')
    compile(group: 'org.springframework.security', name: 'spring-security-jwt', version: '1.0.4.RELEASE')
    compile(group: 'org.postgresql', name: 'postgresql', version: '9.4.1209.jre7')


    testCompile(group: 'com.jayway.restassured', name: 'rest-assured', version: '2.9.0')
    testCompile(group: 'org.springframework.boot', name: 'spring-boot-starter-test')
}

可重现的样品

我创建了一个小型存储库来重现此问题。 https://github.com/spring-projects/spring-framework-issues/pull/145这是https://jira.spring.io/browse/SPR-15055

这是一个实际的错误,已在此处修复:https://jira.spring.io/browse/SPR-15055

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM